Repository: IsoFrieze/DiztinGUIsh Branch: master Commit: 81b3eac97c4a Files: 242 Total size: 1.3 MB Directory structure: gitextract_mof0964c/ ├── .gitattributes ├── .github/ │ └── workflows/ │ └── dotnet.yml ├── .gitignore ├── .gitmodules ├── .idea/ │ └── .idea.DiztinGUIsh/ │ └── .idea/ │ ├── .gitignore │ ├── .name │ ├── encodings.xml │ ├── indexLayout.xml │ └── vcs.xml ├── .run/ │ ├── Diz.Ui.Eto (Experimental GUI, don't use).run.xml │ └── DiztinGUIsh - WinForms (USE THIS).run.xml ├── Directory.Build.targets ├── Diz.App.Common/ │ ├── Diz.App.Common.csproj │ ├── DizAppCompositionRoot.cs │ ├── Main.cs │ └── Properties/ │ └── AssemblyInfo.cs ├── Diz.App.Eto/ │ ├── Diz.App.Eto.csproj │ ├── DizAppEtoCompositionRoot.cs │ ├── DizEtoApp.cs │ ├── Program.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── RegisterWinformsServices.cs ├── Diz.App.PowerShell/ │ ├── Cmdlets.cs │ ├── Diz.App.PowerShell.csproj │ ├── DizPowerShellCompositionRoot.cs │ ├── DizPowershellLogger.cs │ ├── ProjectFileAssemblyExporter.cs │ ├── ProjectFileReader.cs │ ├── Properties/ │ │ ├── AssemblyInfo.cs │ │ └── launchSettings.json │ ├── PsInterfaces.cs │ ├── ServiceContainerCmdletBase.cs │ ├── packages.lock.json │ └── runner/ │ └── debug-startup.ps1 ├── Diz.App.Winforms/ │ ├── App.config │ ├── AppVersionInfo.cs │ ├── Diz.App.Winforms.csproj │ ├── Diz.App.Winforms.csproj.DotSettings │ ├── DizAppWinformsCompositionRoot.cs │ ├── Program.cs │ ├── Properties/ │ │ ├── Annotations.cs │ │ ├── AssemblyInfo.cs │ │ ├── PublishProfiles/ │ │ │ └── FolderProfile.pubxml │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── RegisterWinformsServices.cs │ ├── build/ │ │ └── TidyPublishDir.targets │ ├── dist/ │ │ └── docs/ │ │ ├── HELP.md │ │ ├── Library Licenses.txt │ │ └── hardware_registers.csv │ ├── licensing/ │ │ └── Library Licenses.xlsx │ └── packages.lock.json ├── Diz.Controllers/ │ ├── Diz.Controllers/ │ │ ├── Diz.Controllers.csproj │ │ ├── packages.lock.json │ │ └── src/ │ │ ├── AssemblyInfo.cs │ │ ├── controllers/ │ │ │ ├── IImportRomDialogController.cs │ │ │ ├── IProjectView.cs │ │ │ ├── ImportROMDialogController.cs │ │ │ ├── LogCreatorExportSettingsEditorController.cs │ │ │ ├── MarkManyController.cs │ │ │ ├── NavigationEntry.cs │ │ │ ├── ProgressBarWorker.cs │ │ │ ├── ProjectController.cs │ │ │ ├── ProjectOpenerGuiController.cs │ │ │ ├── ProjectsController.cs │ │ │ └── StartFormController.cs │ │ ├── interfaces/ │ │ │ ├── IControllers.cs │ │ │ ├── IViewers.cs │ │ │ └── Interfaces.cs │ │ ├── services/ │ │ │ └── Registration.cs │ │ └── util/ │ │ ├── DizDocument.cs │ │ ├── LargeFilesReader.cs │ │ └── RomByteRowBase.cs │ ├── Diz.Controllers.Test/ │ │ └── Diz.Controllers.Test/ │ │ ├── Diz.Controllers.Test.csproj │ │ └── src/ │ │ ├── ImportRomDialogontroller.cs │ │ └── LogCreatorSettingsEditorControllerTests.cs │ └── packages.lock.json ├── Diz.Core/ │ ├── Diz.Core.csproj │ ├── Interfaces.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── app.config │ ├── commands/ │ │ └── Commands.cs │ ├── datasubset/ │ │ ├── DataSubset.cs │ │ ├── DataSubsetSupport.cs │ │ └── DataSubsetWithSelection.cs │ ├── export/ │ │ ├── LogWriterSettings.cs │ │ └── LogWriterSettingsValidator.cs │ ├── model/ │ │ ├── Annotation.cs │ │ ├── ArchProvider.cs │ │ ├── Extensions.cs │ │ ├── LabelProvider.cs │ │ ├── Project.cs │ │ ├── ProjectFactory.cs │ │ ├── ProjectImportSettingsFactory.cs │ │ ├── ROMByte.cs │ │ ├── RomBytes.cs │ │ ├── project/ │ │ │ ├── DataUtils.cs │ │ │ ├── LinkedRomBytesFileSearchProvider.cs │ │ │ └── ProjectRomBytesInit.cs │ │ └── snes/ │ │ ├── Data.cs │ │ └── DataTags.cs │ ├── packages.lock.json │ ├── serialization/ │ │ ├── FileByteProviderMultipleFiles.cs │ │ ├── FileByteProviderSingleFile.cs │ │ ├── ImportSettings.cs │ │ ├── ProjectFileManager.cs │ │ ├── ProjectSerializer.cs │ │ ├── binary_serializer_old/ │ │ │ └── BinarySerializer.cs │ │ └── xml_serializer/ │ │ ├── MigrationRunner.cs │ │ ├── PostSerializeMigrations.cs │ │ ├── ProjectXMLSerializer.cs │ │ ├── RepeaterCompression.cs │ │ ├── RomByteEncoding.cs │ │ ├── RomBytesXMLSerializer.cs │ │ ├── SubstitutionCompression.cs │ │ ├── XMLSerializerSupport.cs │ │ └── XmlSerializerFactory.cs │ ├── services/ │ │ └── CoreServices.cs │ ├── util/ │ │ ├── ByteUtil.cs │ │ ├── ChecksumUtil.cs │ │ ├── CorrectingRange.cs │ │ ├── Fake64Encoding.cs │ │ ├── FsUtils.cs │ │ ├── LabelSearchTerms.cs │ │ ├── ParentAwareCollection.cs │ │ ├── Profiler.cs │ │ ├── RomUtil.cs │ │ ├── ServiceProvider.cs │ │ ├── Util.cs │ │ └── WorkerTaskManager.cs │ └── vendor/ │ └── LightInject.AutoFactory.cs ├── Diz.Core.Interfaces/ │ ├── AssemblyInfo.cs │ ├── CpuInterfaces.cs │ ├── Diz.Core.Interfaces.csproj │ ├── Enums.cs │ ├── LabelInterfaces.cs │ ├── ModelInterfaces.cs │ ├── OtherInterfaces.cs │ └── packages.lock.json ├── Diz.Cpu.65816/ │ ├── Diz.Cpu.65816.csproj │ ├── packages.lock.json │ └── src/ │ ├── AddRomDataCommand.cs │ ├── AddRomDataCommandValidator.cs │ ├── AssemblyInfo.cs │ ├── AutoStepper65816.cs │ ├── CPU65C816.cs │ ├── Cpu.cs │ ├── CpuDispatcher.cs │ ├── CpuUtils.cs │ ├── CpuVectorTable.cs │ ├── DataAddSnesApiDecorator.cs │ ├── SampleRomData.cs │ ├── ServiceRegistration.cs │ ├── SnesData.cs │ └── import/ │ ├── CachedVectorTableEntries.cs │ ├── ISnesRomImportSettingsBuilder.cs │ ├── ImportRomSettingsBuilder.cs │ ├── ImportUtils.cs │ ├── MigrationBugfix050JapaneseText.cs │ ├── MigrationNoOp.cs │ ├── SnesDefaultSettingsFactory.cs │ ├── SnesRomAnalyzer.cs │ └── SnesVectorNames.cs ├── Diz.Import/ │ ├── Diz.Import.csproj │ ├── packages.lock.json │ └── src/ │ ├── AssemblyInfo.cs │ ├── LabelImporter.cs │ ├── LabelImporterCsv.cs │ ├── ServiceRegistration.cs │ ├── bizhawk/ │ │ └── BizHawkCdlImporter.cs │ └── bsnes/ │ ├── BsnesSymbolLabelImporter.cs │ ├── tracelog/ │ │ ├── BSNESImportStreamProcessor.cs │ │ ├── BSNESTraceLogCapture.cs │ │ ├── BSNESTraceLogImporter.cs │ │ ├── BsnesTraceLogImporter.Caching.cs │ │ ├── BsnesTraceLogImporter.ModificationsList.cs │ │ ├── BsnesTraceLogImporter.Parsers.cs │ │ ├── BsnesTraceLogImporter.Stats.cs │ │ └── BsnesTraceLogImporter.Util.cs │ └── usagemap/ │ └── BSNESUsageMapImporter.cs ├── Diz.Test/ │ ├── Diz.Test.csproj │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── Resources/ │ │ ├── asartestrun.asm │ │ ├── emptyrom.asm │ │ ├── samplerom-a-few-lines.asm │ │ └── serialize-dictionary-test.xml │ ├── Tests/ │ │ ├── LogCreatorTests/ │ │ │ ├── AssemblyStrings.cs │ │ │ └── LogCreator.cs │ │ ├── PerformanceTests/ │ │ │ └── TraceLogPerformanceTests.cs │ │ ├── ProjectSessionTest.cs │ │ ├── RomInterfaceTests/ │ │ │ ├── AccessTests.cs │ │ │ ├── CartTitleTests.cs │ │ │ └── TestServiceInterfaces.cs │ │ ├── RomModeDetectionTests.cs │ │ ├── SerializationTests/ │ │ │ ├── CompressionTest.cs │ │ │ ├── LoadSavePerformanceTests.cs │ │ │ ├── MigrationTests.cs │ │ │ ├── ProjectLoadSaveTest.cs │ │ │ ├── ProjectServicesTests.cs │ │ │ └── RomByteTests.cs │ │ ├── TracelogTests/ │ │ │ └── TraceLogTests.cs │ │ └── UtilsTests/ │ │ ├── OptimizedHexConversionTests.cs │ │ └── SuperFamiCheckTests.cs │ ├── Utils/ │ │ ├── AppServicesForTests.cs │ │ ├── AsarRunner.cs │ │ ├── AssemblyPipelineTester.cs │ │ ├── BenchmarkXunitLogger.cs │ │ ├── CorrectingRangeTests.cs │ │ ├── DizTestCompositionRoot.cs │ │ ├── EmbeddedResourceDataAttribute.cs │ │ ├── EmptyRomTestData.cs │ │ ├── ExternalRunners.cs │ │ ├── ExternalToolRunner.cs │ │ ├── LogWriterHelper.cs │ │ ├── ServiceContainerFixture.cs │ │ ├── SuperFamiCheckUtil/ │ │ │ ├── DizSuperFamiCheckParse.cs │ │ │ └── SuperFamiCheck.cs │ │ ├── TestUtil.cs │ │ ├── XmlTestUtilBase.cs │ │ └── XmlTestUtils.cs │ ├── app.config │ ├── bugs/ │ │ ├── Bug050_JapaneseText.cs │ │ └── FileIoFixture.cs │ ├── external-tools/ │ │ └── distribution info.txt │ └── packages.lock.json ├── Diz.Ui.Eto/ │ ├── Diz.Ui.Eto.csproj │ ├── DizEtoAppSettingsProvider.cs │ ├── DizUiEtoCompositionRoot.cs │ ├── EtoCommonGui.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── ui/ │ ├── EtoMainGridForm.cs │ ├── EtoProgressForm.cs │ └── PlaceholderForm.cs ├── Diz.Ui.Views/ │ ├── Diz.Ui.Views.csproj │ └── ProjectViewer.cs ├── DiztinGUIsh.sln ├── DiztinGUIsh.sln.DotSettings ├── LICENSE.md ├── README.md ├── TRACE CAPTURE INSTRUCTIONS.md ├── contributing.md └── global.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto ================================================ FILE: .github/workflows/dotnet.yml ================================================ name: Build App on: [ push, pull_request ] jobs: build: runs-on: windows-latest steps: - name: Inject slug/short variables uses: rlespinasse/github-slug-action@v3.x - name: Get current date id: date run: echo "::set-output name=date::$(date +'%Y-%m-%d')" - name: Set version string id: ver run: echo "::set-output name=ver::DiztinGUIsh-${{ steps.date.outputs.date }}--${{ env.GITHUB_REF_SLUG }}-${{ env.GITHUB_SHA_SHORT }}-${{env.GITHUB_REPOSITORY_OWNER_PART_SLUG != 'isofrieze' && env.GITHUB_REPOSITORY_OWNER_PART_SLUG || 'official'}}" - name: Print version run: echo "version ${{ steps.ver.outputs.ver }}" - name: Checkout uses: actions/checkout@v2 with: submodules: 'recursive' fetch-depth: 0 # Fetch all history for all tags - name: Auto-bump version and create tag on release branch if: github.ref == 'refs/heads/release' && github.event_name == 'push' run: | # Get the latest tag $latestTag = git describe --tags --abbrev=0 2>$null if (-not $latestTag) { $latestTag = "v0.0.0.0" } Write-Host "Latest tag: $latestTag" # Extract version numbers (remove 'v' prefix) $version = $latestTag.Substring(1) $versionParts = $version.Split('.') # Ensure we have 4 parts (major.minor.patch.build) while ($versionParts.Length -lt 4) { $versionParts += "0" } # Bump the patch version (third number) and reset build to 0 $major = [int]$versionParts[0] $minor = [int]$versionParts[1] $patch = [int]$versionParts[2] + 1 $build = 0 $newVersion = "$major.$minor.$patch.$build" $newTag = "v$newVersion" Write-Host "New tag: $newTag" # Configure git git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" # Create and push the new tag git tag $newTag git push origin $newTag shell: powershell - name: Setup dotnet uses: actions/setup-dotnet@v1 with: dotnet-version: 9.0.x # not currently working consistently, don't cache # - name: Nuget (restore from cache) # uses: actions/cache@v1 # id: cache # with: # path: ~/.nuget/packages # key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} # # - name: NuGet (Restore from scratch if needed) # if: steps.cache.outputs.cache-hit != 'true' # run: dotnet restore --locked-mode - name: NuGet (Restore always from scratch) run: dotnet restore --locked-mode - name: Build run: dotnet build --no-restore --configuration Release - name: Test run: dotnet test --no-build --configuration Release # removed --no-restore on this for simplicity. it's a little more wasteful potentially though - name: Publish run: dotnet publish -c Release -r win-x64 --self-contained true /p:PublishProfile=FolderProfile /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true .\Diz.App.Winforms - uses: vimtor/action-zip@v1.2 with: files: Diz.App.Winforms\bin\Release\net9.0-windows\publish\ dest: ${{ steps.ver.outputs.ver }}.zip - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: ${{ steps.ver.outputs.ver }}.zip path: ${{ steps.ver.outputs.ver }}.zip - name: Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: ${{ steps.ver.outputs.ver }}.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ================================================ FILE: .gitignore ================================================ # CUSTOM STUFF DiztinGUIsh/test/ diztinguish.zip act.exe ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.rsuser *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # Visual Studio 2017 auto generated files Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ # .NET Core project.lock.json project.fragment.lock.json artifacts/ # StyleCop StyleCopReport.xml # Files built by Visual Studio *_i.c *_p.c *_h.h *.ilk *.meta *.obj *.iobj *.pch *.pdb *.ipdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *_wpftmp.csproj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # Visual Studio Trace Files *.e2e # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # AxoCover is a Code Coverage Tool .axoCover/* !.axoCover/settings.json # Visual Studio code coverage results *.coverage *.coveragexml # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted # *.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. !**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/[Pp]ackages/repositories.config # NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings orleans.codegen.cs # Including strong name files can present a security risk # (https://github.com/github/gitignore/pull/2483#issue-259490424) #*.snk # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm ServiceFabricBackup/ *.rptproj.bak # SQL Server files *.mdf *.ldf *.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings *.rptproj.rsuser # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat node_modules/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # JetBrains Rider #.idea/ #*.sln.iml # CodeRush personal settings .cr/personal # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc # Cake - Uncomment if you are using it # tools/** # !tools/packages.config # Tabs Studio *.tss # Telerik's JustMock configuration file *.jmconfig # BizTalk build output *.btp.cs *.btm.cs *.odx.cs *.xsd.cs # OpenCover UI analysis results OpenCover/ # Azure Stream Analytics local run output ASALocalRun/ # MSBuild Binary and Structured Log *.binlog # NVidia Nsight GPU debugger configuration file *.nvuser # MFractors (Xamarin productivity tool) working folder .mfractor/ # Local History for Visual Studio .localhistory/ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml .idea/**/usage.statistics.xml .idea/**/dictionaries .idea/**/shelf # AWS User-specific .idea/**/aws.xml # Generated files .idea/**/contentModel.xml # Sensitive or high-churn files .idea/**/dataSources/ .idea/**/dataSources.ids .idea/**/dataSources.local.xml .idea/**/sqlDataSources.xml .idea/**/dynamic.xml .idea/**/uiDesigner.xml .idea/**/dbnavigator.xml # Gradle .idea/**/gradle.xml .idea/**/libraries # Gradle and Maven with auto-import # When using Gradle or Maven with auto-import, you should exclude module files, # since they will be recreated, and may cause churn. Uncomment if using # auto-import. # .idea/artifacts # .idea/compiler.xml # .idea/jarRepositories.xml # .idea/modules.xml # .idea/*.iml # .idea/modules # *.iml # *.ipr # CMake cmake-build-*/ # Mongo Explorer plugin .idea/**/mongoSettings.xml # File-based project format *.iws # IntelliJ out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Cursive Clojure plugin .idea/replstate.xml # SonarLint plugin .idea/sonarlint/ # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties # Editor-based Rest Client .idea/httpRequests # Android studio 3.1+ serialized cache file .idea/caches/build_file_checksums.ser ================================================ FILE: .gitmodules ================================================ [submodule "Diz.LogWriter"] path = Diz.LogWriter url = https://github.com/DizTools/Diz.LogWriter [submodule "Diz.Ui.Winforms"] path = Diz.Ui.Winforms url = https://github.com/DizTools/Diz.Ui.Winforms ================================================ FILE: .idea/.idea.DiztinGUIsh/.idea/.gitignore ================================================ # Default ignored files /shelf/ /workspace.xml # Rider ignored files /modules.xml /contentModel.xml /.idea.DiztinGUIsh.iml /projectSettingsUpdater.xml # Editor-based HTTP Client requests /httpRequests/ # Datasource local storage ignored files /dataSources/ /dataSources.local.xml ================================================ FILE: .idea/.idea.DiztinGUIsh/.idea/.name ================================================ DiztinGUIsh ================================================ FILE: .idea/.idea.DiztinGUIsh/.idea/encodings.xml ================================================ ================================================ FILE: .idea/.idea.DiztinGUIsh/.idea/indexLayout.xml ================================================ ================================================ FILE: .idea/.idea.DiztinGUIsh/.idea/vcs.xml ================================================ ================================================ FILE: .run/Diz.Ui.Eto (Experimental GUI, don't use).run.xml ================================================  ================================================ FILE: .run/DiztinGUIsh - WinForms (USE THIS).run.xml ================================================  ================================================ FILE: Directory.Build.targets ================================================ $(DefineConstants) $(DefineConstants);DEBUG;TRACE ================================================ FILE: Diz.App.Common/Diz.App.Common.csproj ================================================  net9.0 enable enable 2023.3.0 6.6.4 ================================================ FILE: Diz.App.Common/DizAppCompositionRoot.cs ================================================ using Diz.Controllers.interfaces; using Diz.Controllers.services; using Diz.Core.services; using Diz.Cpu._65816; using Diz.Import; using Diz.LogWriter.services; using JetBrains.Annotations; using LightInject; namespace Diz.App.Common; [UsedImplicitly] public class DizAppCommonCompositionRoot : ICompositionRoot { public void Compose(IServiceRegistry serviceRegistry) { // no platform-specific stuff in here. // i.e. no winforms/QT/etc. // the (string) names of the views above will be mapped to the method names of the interface below. // i.e. calling IViewFactory.GetLabelEditorView() will look for somthing named "LabelEditorView" serviceRegistry.EnableAutoFactories(); serviceRegistry.RegisterFrom(); serviceRegistry.RegisterFrom(); serviceRegistry.RegisterFrom(); serviceRegistry.RegisterFrom(); serviceRegistry.RegisterFrom(); serviceRegistry.RegisterAutoFactory(); } } ================================================ FILE: Diz.App.Common/Main.cs ================================================ using Diz.Controllers.interfaces; using LightInject; namespace Diz.App.Common; public static class DizAppCommon { public static void StartApp(IServiceFactory serviceFactory, string[] args) { // platform-independent app startup var dizApp = serviceFactory.GetInstance(); var fileToOpen = ""; if (args.Length > 0) fileToOpen = args[0]; dizApp.Run(fileToOpen); } } ================================================ FILE: Diz.App.Common/Properties/AssemblyInfo.cs ================================================ using Diz.App.Common; using LightInject; [assembly: CompositionRootType(typeof(DizAppCommonCompositionRoot))] ================================================ FILE: Diz.App.Eto/Diz.App.Eto.csproj ================================================  WinExe net9.0-windows enable enable 2023.3.0 6.6.4 3.3.3 all runtime; build; native; contentfiles; analyzers; buildtransitive ================================================ FILE: Diz.App.Eto/DizAppEtoCompositionRoot.cs ================================================ using Diz.App.Common; using Diz.Controllers.interfaces; using Diz.Ui.Eto; using JetBrains.Annotations; using LightInject; namespace Diz.App.Eto; [UsedImplicitly] public class DizAppEtoCompositionRoot : ICompositionRoot { public void Compose(IServiceRegistry serviceRegistry) { serviceRegistry.RegisterFrom(); serviceRegistry.Register(); serviceRegistry.Register(); } } ================================================ FILE: Diz.App.Eto/DizEtoApp.cs ================================================ using System.Diagnostics; using Diz.Controllers.interfaces; using Diz.Ui.Eto.ui; using Eto.Forms; namespace Diz.App.Eto; public class DizEtoApp(IViewFactory viewFactory) : IDizApp { public void Run(string initialProjectFileToOpen = "") { var application = new Application(); var mainWindow = viewFactory.GetMainGridWindowView(); // janky casting // ReSharper disable once SuspiciousTypeConversion.Global var window = mainWindow as EtoMainGridForm; Debug.Assert(window != null); if (initialProjectFileToOpen != "") { window.ProjectController.OpenProject(initialProjectFileToOpen); } application.Run(window); } } ================================================ FILE: Diz.App.Eto/Program.cs ================================================ using Diz.App.Common; namespace Diz.App.Eto; internal static class Program { [STAThread] private static void Main(string[] args) { var serviceFactory = DizEtoRegisterServices.CreateServiceFactoryAndRegisterTypes(); DizAppCommon.StartApp(serviceFactory, args); } } ================================================ FILE: Diz.App.Eto/Properties/AssemblyInfo.cs ================================================ using Diz.App.Eto; using LightInject; [assembly: CompositionRootType(typeof(DizAppEtoCompositionRoot))] ================================================ FILE: Diz.App.Eto/RegisterWinformsServices.cs ================================================ using Diz.App.Common; using Diz.Core.util; using Diz.Ui.Eto; using LightInject; namespace Diz.App.Eto; public static class DizEtoRegisterServices { public static IServiceFactory CreateServiceFactoryAndRegisterTypes() { var serviceProvider = DizServiceProvider.CreateServiceContainer(); RegisterDizUiServices(serviceProvider); return serviceProvider; } public static void RegisterDizUiServices(IServiceRegistry serviceRegistry) { // option #1: we can simply register services in any Diz*dll's that are found in a scan. // this is easy but we have less control // DizCoreServicesDllRegistration.RegisterServicesInDizDlls(serviceRegistry); // option #2: register everything by hand (this is what we'll do). // pull in all common stuff (platform-independent) serviceRegistry.RegisterFrom(); // pull in winforms-specific UI stuff: serviceRegistry.RegisterFrom(); // finally, pull in OUR stuff, which is winforms-specific serviceRegistry.RegisterFrom(); } } ================================================ FILE: Diz.App.PowerShell/Cmdlets.cs ================================================ #nullable enable using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Management.Automation; using Diz.Core; using JetBrains.Annotations; using LightInject; namespace Diz.PowerShell; [UsedImplicitly] [Cmdlet(VerbsLifecycle.Build, "AssemblyFiles")] public class BuildAssemblyFilesCmdlet : ServiceContainerCmdletBase { [Parameter(Position = 0)] [ValidateNotNullOrEmpty] public string[]? ProjectNames { get; set; } = null; protected override void ProcessRecord() { if (ProjectNames == null) return; if (ProjectNames.Length <= 0) return; foreach (var projectName in ProjectNames) { BuildAssembly(projectName); } } [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Local")] private bool BuildAssembly(string projectFileName) { // this ONE TIME, this service locator anti-pattern is OK because we ARE the top-level class. var projectFileAssemblyExporter = ServiceContainer.GetInstance(); Debug.Assert(projectFileAssemblyExporter != null); return projectFileAssemblyExporter.ExportAssembly(projectFileName); } protected override void StopProcessing() {} protected override void EndProcessing() {} } ================================================ FILE: Diz.App.PowerShell/Diz.App.PowerShell.csproj ================================================ Library net9.0 true true true true enable Diz.PowerShell all runtime; build; native; contentfiles; analyzers; buildtransitive ================================================ FILE: Diz.App.PowerShell/DizPowerShellCompositionRoot.cs ================================================ using Diz.Core; using LightInject; namespace Diz.PowerShell; public class DizPowerShellCompositionRoot : ICompositionRoot { public void Compose(IServiceRegistry serviceRegistry) { // TODO serviceRegistry.Register() serviceRegistry.Register(); serviceRegistry.Register(); serviceRegistry.Register(); } } ================================================ FILE: Diz.App.PowerShell/DizPowershellLogger.cs ================================================ namespace Diz.PowerShell; public class DizPowershellLogger : IDizLogger { private readonly IPowershellLogger powershellLogger; public DizPowershellLogger(IPowershellLogger powershellLogger) { this.powershellLogger = powershellLogger; } public void Info(string msg) => powershellLogger.WriteObject(msg); public void Warn(string msg) => powershellLogger.WriteCommandDetail(msg); public void Error(string msg) => powershellLogger.WriteObject(msg); public void Debug(string msg) => powershellLogger.WriteDebug(msg); } ================================================ FILE: Diz.App.PowerShell/ProjectFileAssemblyExporter.cs ================================================ using Diz.Core; using Diz.Core.model; using Diz.Core.util; using Diz.LogWriter; using Diz.LogWriter.util; namespace Diz.PowerShell; public class ProjectFileAssemblyExporter : IProjectFileAssemblyExporter { private readonly IDizLogger logger; private readonly IFilesystemService fs; private readonly IProjectFileOpener projectFileSource; public ProjectFileAssemblyExporter(IDizLogger logger, IProjectFileOpener projectFileSource, IFilesystemService fs) { this.logger = logger; this.projectFileSource = projectFileSource; this.fs = fs; } private Project? OpenProjectFile(string projectFileName) { var project = projectFileSource.ReadProjectFromFile(projectFileName); if (project == null) return null; logger.Debug($"Loaded project, rom is: {project.AttachedRomFilename}"); return project; } public bool ExportAssembly(string projectFileName) { var project = OpenProjectFile(projectFileName); return project != null && ExportAssembly(project); } public bool ExportAssembly(Project project) { var failReason = project.LogWriterSettings.Validate(fs); if (failReason != null) { logger.Error($"invalid assembly build settings {failReason}"); return false; } var lc = new LogCreator { Settings = project.LogWriterSettings, Data = new LogCreatorByteSource(project.Data), }; logger.Debug("Building...."); var result = lc.CreateLog(); if (!result.Success) { logger.Error($"Failed to build, error was: {result.AssemblyOutputStr}"); return false; } logger.Info("Successfully exported assembly output."); return true; } } ================================================ FILE: Diz.App.PowerShell/ProjectFileReader.cs ================================================ using Diz.Core; using Diz.Core.model; using Diz.Core.serialization; namespace Diz.PowerShell; public class ProjectFileReader : IProjectFileOpener { private readonly IProjectFileManager projectFileManager; private string? filename; public ProjectFileReader(IProjectFileManager projectFileManager) => this.projectFileManager = projectFileManager; public void SetOpenFilename(string projectFilename) => filename = projectFilename; public Project? Read() { if (string.IsNullOrEmpty(filename)) return null; var openResult = projectFileManager.Open(filename); return openResult?.Root?.Project ?? null; } } ================================================ FILE: Diz.App.PowerShell/Properties/AssemblyInfo.cs ================================================ using Diz.PowerShell; using LightInject; [assembly: CompositionRootType(typeof(DizPowerShellCompositionRoot))] ================================================ FILE: Diz.App.PowerShell/Properties/launchSettings.json ================================================ { "profiles": { "DizPowerShell": { "commandName": "Executable", "executablePath": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", "commandLineArgs": "-NoProfile -NoExit -Command \"../../../runner/debug-startup.ps1\"" } } } ================================================ FILE: Diz.App.PowerShell/PsInterfaces.cs ================================================ #nullable enable namespace Diz.PowerShell; public interface IPowershellLogger { void WriteObject(object objectToSend); void WriteDebug(string text); void WriteCommandDetail(string text); } public interface IDizLogger { void Info(string msg); void Warn(string msg); void Error(string s); void Debug(string msg); } ================================================ FILE: Diz.App.PowerShell/ServiceContainerCmdletBase.cs ================================================ using System.Management.Automation; using Diz.Core.util; using LightInject; namespace Diz.PowerShell; public abstract class ServiceContainerCmdletBase : PSCmdlet { protected IServiceContainer? ServiceContainer { get; private set; } protected override void BeginProcessing() { ServiceContainer ??= DizServiceProvider.CreateServiceContainer(); } protected override void EndProcessing() { ServiceContainer?.Dispose(); ServiceContainer = null; } } ================================================ FILE: Diz.App.PowerShell/packages.lock.json ================================================ { "version": 1, "dependencies": { "net9.0": { "GitInfo": { "type": "Direct", "requested": "[3.3.3, )", "resolved": "3.3.3", "contentHash": "l7m4M/figjWz4B3eIL2Qy3UJiP2vvTOTeavlCT/GGH0khg0uxLanh/cwTZ27AZNhim56q1Mk0nbyRXtLqF4vmg==", "dependencies": { "ThisAssembly.Constants": "1.4.1" } }, "LightInject": { "type": "Direct", "requested": "[6.6.4, )", "resolved": "6.6.4", "contentHash": "xId1F9OpzVvyNu3wcdPR4EcNUihcT5U9wiUJOi0tetuDOia1uAiFJzqmYGdRPsqAsgDb6o8sfoQCx5yMFFDsVw==" }, "System.Management.Automation": { "type": "Direct", "requested": "[7.4.1, )", "resolved": "7.4.1", "contentHash": "EYUMyAoYAw4Zt+cxKRMjZxzoa6gI++O4sK+cSg8HUhC1HfrJoMhD1u1Fo5CvlGv1KX3OmoJSyukgkDmRHFLQiw==", "dependencies": { "Microsoft.ApplicationInsights": "2.21.0", "Microsoft.Management.Infrastructure": "3.0.0", "Microsoft.PowerShell.CoreCLR.Eventing": "7.4.1", "Microsoft.PowerShell.Native": "7.4.0", "Microsoft.Security.Extensions": "1.2.0", "Microsoft.Win32.Registry.AccessControl": "8.0.0", "Newtonsoft.Json": "13.0.3", "System.Configuration.ConfigurationManager": "8.0.0", "System.Diagnostics.DiagnosticSource": "8.0.0", "System.DirectoryServices": "8.0.0", "System.Management": "8.0.0", "System.Security.AccessControl": "6.0.0", "System.Security.Cryptography.Pkcs": "8.0.0", "System.Security.Permissions": "8.0.0", "System.Text.Encoding.CodePages": "8.0.0" } }, "CsvHelper": { "type": "Transitive", "resolved": "30.0.3", "contentHash": "OK4xEoPKFZYZ2Km+ZTGRxuLo33u+ipKVCC9ICCGn5JRiAmPLRsCPZ/shL3HKGPwS33MQSPcPHigI4HnX3Q47yg==" }, "ExtendedXmlSerializer": { "type": "Transitive", "resolved": "3.9.6", "contentHash": "kwnF5RjDwzle4cpUN4AWOCBAbntCkLQez5SIl2cY6hamWL33vEYu5Pp35BKkg/oklXnvaYobzJrFezRi9dl9tA==", "dependencies": { "LightInject": "6.6.1", "NReco.LambdaParser": "1.0.12", "Sprache": "2.3.1", "System.Collections.Immutable": "7.0.0" } }, "FluentValidation": { "type": "Transitive", "resolved": "11.9.0", "contentHash": "VneVlTvwYDkfHV5av3QrQ0amALgrLX6LV94wlYyEsh0B/klJBW7C8y2eAtj5tOZ3jH6CAVpr4s1ZGgew/QWyig==" }, "JetBrains.Annotations": { "type": "Transitive", "resolved": "2023.3.0", "contentHash": "PHfnvdBUdGaTVG9bR/GEfxgTwWM0Z97Y6X3710wiljELBISipSfF5okn/vz+C2gfO+ihoEyVPjaJwn8ZalVukA==" }, "JetBrains.FormatRipper": { "type": "Transitive", "resolved": "2.0.1", "contentHash": "9J+lWdztAczSqwgvOfMiTxEaaV6ONXY27Hq9VGbgzr9sUX8F5HCSvnd2/4J9xD1US4VL+ZPrREyRBl9NNbSGbw==", "dependencies": { "NETStandard.Library": "1.6.1" } }, "JetBrains.HabitatDetector": { "type": "Transitive", "resolved": "1.0.2", "contentHash": "WQfQekJ2+BxM6+5anNhYWLyd6F4CRHW7pj8YoRXe6M5MDfPsZdYP0epx1+cHJkJuf0aeTB2JRK4KeEPW4UM8AQ==", "dependencies": { "JetBrains.FormatRipper": "2.0.1" } }, "JetBrains.Profiler.Api": { "type": "Transitive", "resolved": "1.4.0", "contentHash": "r5xP8m9U6uHApcMyoL5yZL/Ltqz7auBo0MaboGdQoaawNpYnYr9PC3FFe+0mNT2pyOhuAfQC7WL/Gxb8M0v1Lw==", "dependencies": { "JetBrains.HabitatDetector": "1.0.2" } }, "JetBrains.Profiler.SelfApi": { "type": "Transitive", "resolved": "2.5.0", "contentHash": "8dX8vSarO04JCm4n/RhDx2w/9mzKO+KI4rXtrt8AurGrKlhTgswuLZeGw5PuYsAUsJmmJrPBxJx4pTt/SW42aQ==", "dependencies": { "JetBrains.HabitatDetector": "1.0.2", "JetBrains.Profiler.Api": "1.4.0" } }, "Microsoft.ApplicationInsights": { "type": "Transitive", "resolved": "2.21.0", "contentHash": "btZEDWAFNo9CoYliMCriSMTX3ruRGZTtYw4mo2XyyfLlowFicYVM2Xszi5evDG95QRYV7MbbH3D2RqVwfZlJHw==", "dependencies": { "System.Diagnostics.DiagnosticSource": "5.0.0" } }, "Microsoft.CSharp": { "type": "Transitive", "resolved": "4.7.0", "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" }, "Microsoft.Management.Infrastructure": { "type": "Transitive", "resolved": "3.0.0", "contentHash": "cGZi0q5IujCTVYKo9h22Pw+UwfZDV82HXO8HTxMG2HqntPlT3Ls8jY6punLp4YzCypJNpfCAu2kae3TIyuAiJw==", "dependencies": { "Microsoft.Management.Infrastructure.Runtime.Unix": "3.0.0", "Microsoft.Management.Infrastructure.Runtime.Win": "3.0.0" } }, "Microsoft.Management.Infrastructure.Runtime.Unix": { "type": "Transitive", "resolved": "3.0.0", "contentHash": "QZE3uEDvZ0m7LabQvcmNOYHp7v1QPBVMpB/ild0WEE8zqUVAP5y9rRI5we37ImI1bQmW5pZ+3HNC70POPm0jBQ==" }, "Microsoft.Management.Infrastructure.Runtime.Win": { "type": "Transitive", "resolved": "3.0.0", "contentHash": "uwMyWN33+iQ8Wm/n1yoPXgFoiYNd0HzJyoqSVhaQZyJfaQrJR3udgcIHjqa1qbc3lS6kvfuUMN4TrF4U4refCQ==" }, "Microsoft.NETCore.Platforms": { "type": "Transitive", "resolved": "1.1.1", "contentHash": "TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", "resolved": "1.1.3", "contentHash": "3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==" }, "Microsoft.PowerShell.CoreCLR.Eventing": { "type": "Transitive", "resolved": "7.4.1", "contentHash": "uyByMNZ3XVUrJAxdHrXM/75vcKdfbs04J5iIZfDA8m9z8TJDViRMjyHNcp8K/ZXyzpT2Lua2d7g+dP47E9wAcg==", "dependencies": { "System.Diagnostics.EventLog": "8.0.0" } }, "Microsoft.PowerShell.Native": { "type": "Transitive", "resolved": "7.4.0", "contentHash": "FlaJ3JBWhqFToYT0ycMb/Xxzoof7oTQbNyI4UikgubC7AMWt5ptBNKjIAMPvOcvEHr+ohaO9GvRWp3tiyS3sKw==" }, "Microsoft.Security.Extensions": { "type": "Transitive", "resolved": "1.2.0", "contentHash": "GjHZBE5PHKrxPRyGujWQKwbKNjPQYds6HcAWKeV49X3KPgBfF2B1vV5uJey5UluyGQlvAO/DezL7WzEx9HlPQA==" }, "Microsoft.Win32.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "Microsoft.Win32.Registry.AccessControl": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "u8PB9/v02C8mBXzl0vJ7bOyC020zOP+T1mRct+KA46DqZkB40XtsNn9pGD0QowTRsT6R4jPCghn+yAODn2UMMw==" }, "NETStandard.Library": { "type": "Transitive", "resolved": "1.6.1", "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.Win32.Primitives": "4.3.0", "System.AppContext": "4.3.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Console": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tools": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Calendars": "4.3.0", "System.IO": "4.3.0", "System.IO.Compression": "4.3.0", "System.IO.Compression.ZipFile": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Linq": "4.3.0", "System.Linq.Expressions": "4.3.0", "System.Net.Http": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Net.Sockets": "4.3.0", "System.ObjectModel": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Security.Cryptography.X509Certificates": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "System.Threading.Timer": "4.3.0", "System.Xml.ReaderWriter": "4.3.0", "System.Xml.XDocument": "4.3.0" } }, "Newtonsoft.Json": { "type": "Transitive", "resolved": "13.0.3", "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" }, "NReco.LambdaParser": { "type": "Transitive", "resolved": "1.0.12", "contentHash": "f1nye8fMJCYfJeR+Qb7qlcvC8et4Y4TLf2GLfaFoeISgI+yisaJkbNSGfKCpFBNeVF/iPDkyFmr4J28dv342/Q==" }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" }, "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" }, "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" }, "runtime.native.System": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.IO.Compression": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.Net.Http": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.Security.Cryptography.Apple": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", "dependencies": { "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" } }, "runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", "dependencies": { "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" }, "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" }, "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" }, "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" }, "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" }, "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" }, "SharpZipLib": { "type": "Transitive", "resolved": "1.4.2", "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A==" }, "Sprache": { "type": "Transitive", "resolved": "2.3.1", "contentHash": "Q+mXeiTxiUYG3lKYF6TS82/SyB4F2613Q1yXTMwg4jWGHEEVC3yrzHtNcI4B3qnDI0+eJsezGJ0V+cToUytHWw==", "dependencies": { "System.Globalization": "4.3.0", "System.Linq": "4.3.0", "System.Private.Uri": "4.3.2", "System.Runtime": "4.3.0", "System.Text.RegularExpressions": "4.3.0" } }, "System.AppContext": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Buffers": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", "dependencies": { "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.CodeDom": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==" }, "System.Collections": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Collections.Concurrent": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Collections.Immutable": { "type": "Transitive", "resolved": "7.0.0", "contentHash": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==" }, "System.Configuration.ConfigurationManager": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "JlYi9XVvIREURRUlGMr1F6vOFLk7YSY4p1vHo4kX3tQ0AGrjqlRWHDi66ImHhy6qwXBG3BJ6Y1QlYQ+Qz6Xgww==", "dependencies": { "System.Diagnostics.EventLog": "8.0.0", "System.Security.Cryptography.ProtectedData": "8.0.0" } }, "System.Console": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==" }, "System.Diagnostics.EventLog": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==" }, "System.Diagnostics.Tools": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.DirectoryServices": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "7nit//efUTy1OsAKco2f02PMrwsR2S234N0dVVp84udC77YcvpOQDz5znAWMtgMWBzY1aRJvUW61jo/7vQRfXg==" }, "System.Formats.Asn1": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "AJukBuLoe3QeAF+mfaRKQb2dgyrvt340iMBHYv+VdBzCUM06IxGlvl0o/uPOS7lHnXPN6u8fFRHSHudx5aTi8w==" }, "System.Globalization": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Calendars": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.InteropServices": "4.3.0" } }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.IO.Compression": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.IO.Compression": "4.3.0" } }, "System.IO.Compression.ZipFile": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", "dependencies": { "System.Buffers": "4.3.0", "System.IO": "4.3.0", "System.IO.Compression": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.IO.FileSystem.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Linq": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0" } }, "System.Linq.Expressions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Linq": "4.3.0", "System.ObjectModel": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Emit": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Emit.Lightweight": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Reflection.TypeExtensions": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Threading": "4.3.0" } }, "System.Management": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", "dependencies": { "System.CodeDom": "8.0.0" } }, "System.Net.Http": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.DiagnosticSource": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Extensions": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Security.Cryptography.X509Certificates": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Net.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" } }, "System.Net.Sockets": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.ObjectModel": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Private.Uri": { "type": "Transitive", "resolved": "4.3.2", "contentHash": "o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.1", "Microsoft.NETCore.Targets": "1.1.3" } }, "System.Reflection": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", "dependencies": { "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit.ILGeneration": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit.Lightweight": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Reflection.TypeExtensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", "dependencies": { "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Resources.Extensions": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==" }, "System.Resources.ResourceManager": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Runtime": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "System.Runtime.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Runtime.Handles": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Runtime.InteropServices": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" } }, "System.Runtime.InteropServices.RuntimeInformation": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0" } }, "System.Runtime.Numerics": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", "dependencies": { "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0" } }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.0", "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" }, "System.Security.Cryptography.Algorithms": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.Apple": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Cng": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Security.Cryptography.Csp": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0" } }, "System.Security.Cryptography.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Linq": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", "dependencies": { "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "ULmp3xoOwNYjOYp4JZ2NK/6NdTgiN1GQXzVVN1njQ7LOZ0d0B9vyMnhyqbIi9Qw4JXj1JgCsitkTShboHRx7Eg==", "dependencies": { "System.Formats.Asn1": "8.0.0" } }, "System.Security.Cryptography.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", "dependencies": { "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" }, "System.Security.Cryptography.X509Certificates": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Calendars": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Cng": "4.3.0", "System.Security.Cryptography.Csp": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Permissions": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "v/BBylw7XevuAsHXoX9dDUUfmBIcUf7Lkz8K3ZXIKz3YRKpw8YftpSir4n4e/jDTKFoaK37AsC3xnk+GNFI1Ow==", "dependencies": { "System.Windows.Extensions": "8.0.0" } }, "System.Text.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==" }, "System.Text.Encoding.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Text.RegularExpressions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Threading": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", "dependencies": { "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Threading.Tasks": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Threading.Tasks.Extensions": { "type": "Transitive", "resolved": "4.5.4", "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" }, "System.Threading.Timer": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Windows.Extensions": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "Obg3a90MkOw9mYKxrardLpY2u0axDMrSmy4JCdq2cYbelM2cUwmUir5Bomvd1yxmPL9h5LVHU1tuKBZpUjfASg==" }, "System.Xml.ReaderWriter": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading.Tasks": "4.3.0", "System.Threading.Tasks.Extensions": "4.3.0" } }, "System.Xml.XDocument": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tools": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Xml.ReaderWriter": "4.3.0" } }, "ThisAssembly.Constants": { "type": "Transitive", "resolved": "1.4.1", "contentHash": "sV0CDYlC6YSIkYbdwd4+jRinLb888Dac71pmNhF2Ll6UXY1J+1oVt3EfmX6euXEKz2RLdfV+4GyZctfEA0NSqA==", "dependencies": { "Microsoft.CSharp": "4.7.0", "System.Threading.Tasks.Extensions": "4.5.4" } }, "diz.core": { "type": "Project", "dependencies": { "Diz.Core.Interfaces": "[1.0.0, )", "ExtendedXmlSerializer": "[3.9.6, )", "FluentValidation": "[11.9.0, )", "JetBrains.Annotations": "[2023.3.0, )", "JetBrains.Profiler.SelfApi": "[2.5.0, )", "LightInject": "[6.6.4, )", "SharpZipLib": "[1.4.2, )", "System.Diagnostics.Tracing": "[4.3.0, )", "System.Resources.Extensions": "[8.0.0, )", "System.Text.Encoding.CodePages": "[8.0.0, )" } }, "diz.core.interfaces": { "type": "Project" }, "diz.cpu.65816": { "type": "Project", "dependencies": { "Diz.Core": "[1.0.0, )", "Diz.Core.Interfaces": "[1.0.0, )" } }, "diz.logwriter": { "type": "Project", "dependencies": { "CsvHelper": "[30.0.3, )", "Diz.Core": "[1.0.0, )", "Diz.Cpu.65816": "[1.0.0, )", "ExtendedXmlSerializer": "[3.9.6, )", "LightInject": "[6.6.4, )" } } } } } ================================================ FILE: Diz.App.PowerShell/runner/debug-startup.ps1 ================================================ $module = "Diz.PowerShell" $basepath = ".\" echo "Starting..." Import-Module "$($basepath)$($module).dll" WRite-Host "Current working dir---> $($pwd)'" if ((Get-Command -module $module).Count -eq 0) { Write-Host "WARNING: Couldn't find our module. (build issue?)" -ForegroundColor red } else { Write-Host "Ready!" -ForegroundColor green } $dizproject = "testproject.dizraw" $cmd_to_run = "Build-AssemblyFiles -ProjectNames (Resolve-Path '..\..\..\..\..\rom\$($dizproject)')" Write-Host "Press enter to run this command: '$($cmd_to_run)'" $null = Read-Host Invoke-Expression $cmd_to_run ================================================ FILE: Diz.App.Winforms/App.config ================================================  ================================================ FILE: Diz.App.Winforms/AppVersionInfo.cs ================================================ using System.Diagnostics.CodeAnalysis; using Diz.Core.Interfaces; using Diz.Core.serialization.xml_serializer; namespace Diz.App.Winforms; [SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")] public class AppVersionInfo : IAppVersionInfo { private readonly string versionStr; private readonly string fullBuildDescription; public AppVersionInfo() { // cache these, they won't change versionStr = ThisAssembly.Git.Tag; fullBuildDescription = $"Build info:\r\n------------\r\n" + $"Version: {versionStr}\r\n" + $"Git branch: {ThisAssembly.Git.Branch}\r\n" + $"Git commit: {ThisAssembly.Git.Commit}\r\n" + $"Git repo URL: {ThisAssembly.Git.RepositoryUrl}\r\n" + $"Git tag: {ThisAssembly.Git.Tag}\r\n" + $"Git last commit date: {ThisAssembly.Git.CommitDate}\r\n" + $"Git IsDirty: {ThisAssembly.Git.IsDirtyString}\r\n" + $"Git Commits on top of base: {ThisAssembly.Git.Commits}\r\n" + "\r\n\r\n" + $"Diz app savefile format ver: {ProjectXmlSerializer.LatestSaveFormatVersion}"; } [SuppressMessage("ReSharper", "HeuristicUnreachableCode")] public string GetVersionInfo(IAppVersionInfo.AppVersionInfoType type) { return type switch { IAppVersionInfo.AppVersionInfoType.FullDescription => fullBuildDescription, IAppVersionInfo.AppVersionInfoType.Version => versionStr, _ => "" }; } } ================================================ FILE: Diz.App.Winforms/Diz.App.Winforms.csproj ================================================  WinExe net9.0-windows true true Diz.App.Winforms Diz.App.Winforms resource/diz-icon2-magenta-med32x32.ico latest true true true win-x64;win-x86 2023.3.0 3.3.3 all runtime; build; native; contentfiles; analyzers; buildtransitive 6.6.4 BankLegend.cs BankLegendItem.cs RomBankVisualizer.cs RomFullVisualizer.cs RomImage.cs DataGridEditorForm.cs Designer diztinguish\.github\workflows\dotnet.yml ================================================ FILE: Diz.App.Winforms/Diz.App.Winforms.csproj.DotSettings ================================================  No ================================================ FILE: Diz.App.Winforms/DizAppWinformsCompositionRoot.cs ================================================ using Diz.App.Common; using Diz.Controllers.interfaces; using Diz.Core.Interfaces; using Diz.Ui.Winforms; using Diz.Ui.Winforms.dialogs; using JetBrains.Annotations; using LightInject; namespace Diz.App.Winforms; [UsedImplicitly] public class DizAppWinformsCompositionRoot : ICompositionRoot { public void Compose(IServiceRegistry serviceRegistry) { serviceRegistry.RegisterFrom(); serviceRegistry.Register(); serviceRegistry.Register(); serviceRegistry.Register(); } } ================================================ FILE: Diz.App.Winforms/Program.cs ================================================ #nullable enable // #define DEBUG_EXTRA_CRASH_HANDLING // for catching really stubborn crashes, like in databinding using System; #if DEBUG_EXTRA_CRASH_HANDLING using System.IO; using System.Windows.Forms; #endif using Diz.App.Common; namespace Diz.App.Winforms; internal static class Program { [STAThread] private static void Main(string[] args) { #if DEBUG_EXTRA_CRASH_HANDLING Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); // dangerous Application.ThreadException += (sender, e) => { File.WriteAllText("crash_log.txt", $"Thread Exception: {e.Exception}"); MessageBox.Show($"Thread Exception: {e.Exception}"); }; AppDomain.CurrentDomain.UnhandledException += (sender, e) => { File.WriteAllText("crash_log.txt", $"Unhandled Exception: {e.ExceptionObject}"); MessageBox.Show($"Unhandled Exception: {e.ExceptionObject}"); }; #endif var serviceFactory = DizWinformsRegisterServices.CreateServiceFactoryAndRegisterTypes(); DizAppCommon.StartApp(serviceFactory, args); } } ================================================ FILE: Diz.App.Winforms/Properties/Annotations.cs ================================================ // Note from Dom/Diztinguish: Jetbrains added this. Not sure we really need it, // remove if you feel like it. probably won't hurt anything, just editor functionality. /* MIT License Copyright (c) 2016 JetBrains http://www.jetbrains.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; // ReSharper disable InheritdocConsiderUsage #pragma warning disable 1591 // ReSharper disable UnusedMember.Global // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedAutoPropertyAccessor.Global // ReSharper disable IntroduceOptionalParameters.Global // ReSharper disable MemberCanBeProtected.Global // ReSharper disable InconsistentNaming namespace Diz.App.Winforms.Properties { /// /// Indicates that the value of the marked element could be null sometimes, /// so checking for null is required before its usage. /// /// /// [CanBeNull] object Test() => null; /// /// void UseTest() { /// var p = Test(); /// var s = p.ToString(); // Warning: Possible 'System.NullReferenceException' /// } /// [AttributeUsage( AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Delegate | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.GenericParameter)] public sealed class CanBeNullAttribute : Attribute { } /// /// Indicates that the value of the marked element can never be null. /// /// /// [NotNull] object Foo() { /// return null; // Warning: Possible 'null' assignment /// } /// [AttributeUsage( AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Delegate | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.GenericParameter)] public sealed class NotNullAttribute : Attribute { } /// /// Can be applied to symbols of types derived from IEnumerable as well as to symbols of Task /// and Lazy classes to indicate that the value of a collection item, of the Task.Result property /// or of the Lazy.Value property can never be null. /// /// /// public void Foo([ItemNotNull]List<string> books) /// { /// foreach (var book in books) { /// if (book != null) // Warning: Expression is always true /// Console.WriteLine(book.ToUpper()); /// } /// } /// [AttributeUsage( AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Delegate | AttributeTargets.Field)] public sealed class ItemNotNullAttribute : Attribute { } /// /// Can be applied to symbols of types derived from IEnumerable as well as to symbols of Task /// and Lazy classes to indicate that the value of a collection item, of the Task.Result property /// or of the Lazy.Value property can be null. /// /// /// public void Foo([ItemCanBeNull]List<string> books) /// { /// foreach (var book in books) /// { /// // Warning: Possible 'System.NullReferenceException' /// Console.WriteLine(book.ToUpper()); /// } /// } /// [AttributeUsage( AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Delegate | AttributeTargets.Field)] public sealed class ItemCanBeNullAttribute : Attribute { } /// /// Indicates that the marked method builds string by the format pattern and (optional) arguments. /// The parameter, which contains the format string, should be given in constructor. The format string /// should be in -like form. /// /// /// [StringFormatMethod("message")] /// void ShowError(string message, params object[] args) { /* do something */ } /// /// void Foo() { /// ShowError("Failed: {0}"); // Warning: Non-existing argument in format string /// } /// [AttributeUsage( AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Delegate)] public sealed class StringFormatMethodAttribute : Attribute { /// /// Specifies which parameter of an annotated method should be treated as the format string /// public StringFormatMethodAttribute([NotNull] string formatParameterName) { FormatParameterName = formatParameterName; } [NotNull] public string FormatParameterName { get; } } /// /// Use this annotation to specify a type that contains static or const fields /// with values for the annotated property/field/parameter. /// The specified type will be used to improve completion suggestions. /// /// /// namespace TestNamespace /// { /// public class Constants /// { /// public static int INT_CONST = 1; /// public const string STRING_CONST = "1"; /// } /// /// public class Class1 /// { /// [ValueProvider("TestNamespace.Constants")] public int myField; /// public void Foo([ValueProvider("TestNamespace.Constants")] string str) { } /// /// public void Test() /// { /// Foo(/*try completion here*/);// /// myField = /*try completion here*/ /// } /// } /// } /// [AttributeUsage( AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true)] public sealed class ValueProviderAttribute : Attribute { public ValueProviderAttribute([NotNull] string name) { Name = name; } [NotNull] public string Name { get; } } /// /// Indicates that the integral value falls into the specified interval. /// It's allowed to specify multiple non-intersecting intervals. /// Values of interval boundaries are inclusive. /// /// /// void Foo([ValueRange(0, 100)] int value) { /// if (value == -1) { // Warning: Expression is always 'false' /// ... /// } /// } /// [AttributeUsage( AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.Delegate, AllowMultiple = true)] public sealed class ValueRangeAttribute : Attribute { public object From { get; } public object To { get; } public ValueRangeAttribute(long from, long to) { From = from; To = to; } public ValueRangeAttribute(ulong from, ulong to) { From = from; To = to; } public ValueRangeAttribute(long value) { From = To = value; } public ValueRangeAttribute(ulong value) { From = To = value; } } /// /// Indicates that the integral value never falls below zero. /// /// /// void Foo([NonNegativeValue] int value) { /// if (value == -1) { // Warning: Expression is always 'false' /// ... /// } /// } /// [AttributeUsage( AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.Delegate)] public sealed class NonNegativeValueAttribute : Attribute { } /// /// Indicates that the function argument should be a string literal and match one /// of the parameters of the caller function. For example, ReSharper annotates /// the parameter of . /// /// /// void Foo(string param) { /// if (param == null) /// throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol /// } /// [AttributeUsage(AttributeTargets.Parameter)] public sealed class InvokerParameterNameAttribute : Attribute { } /// /// Indicates that the method is contained in a type that implements /// System.ComponentModel.INotifyPropertyChanged interface and this method /// is used to notify that some property value changed. /// /// /// The method should be non-static and conform to one of the supported signatures: /// /// NotifyChanged(string) /// NotifyChanged(params string[]) /// NotifyChanged{T}(Expression{Func{T}}) /// NotifyChanged{T,U}(Expression{Func{T,U}}) /// SetProperty{T}(ref T, T, string) /// /// /// /// public class Foo : INotifyPropertyChanged { /// public event PropertyChangedEventHandler PropertyChanged; /// /// [NotifyPropertyChangedInvocator] /// protected virtual void NotifyChanged(string propertyName) { ... } /// /// string _name; /// /// public string Name { /// get { return _name; } /// set { _name = value; NotifyChanged("LastName"); /* Warning */ } /// } /// } /// /// Examples of generated notifications: /// /// NotifyChanged("Property") /// NotifyChanged(() => Property) /// NotifyChanged((VM x) => x.Property) /// SetProperty(ref myField, value, "Property") /// /// [AttributeUsage(AttributeTargets.Method)] public sealed class NotifyPropertyChangedInvocatorAttribute : Attribute { public NotifyPropertyChangedInvocatorAttribute() { } public NotifyPropertyChangedInvocatorAttribute([NotNull] string parameterName) { ParameterName = parameterName; } [CanBeNull] public string ParameterName { get; } } /// /// Describes dependency between method input and output. /// /// ///

Function Definition Table syntax:

/// /// FDT ::= FDTRow [;FDTRow]* /// FDTRow ::= Input => Output | Output <= Input /// Input ::= ParameterName: Value [, Input]* /// Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value} /// Value ::= true | false | null | notnull | canbenull /// /// If the method has a single input parameter, its name could be omitted.
/// Using halt (or void/nothing, which is the same) for the method output /// means that the method doesn't return normally (throws or terminates the process).
/// Value canbenull is only applicable for output parameters.
/// You can use multiple [ContractAnnotation] for each FDT row, or use single attribute /// with rows separated by semicolon. There is no notion of order rows, all rows are checked /// for applicability and applied per each program state tracked by the analysis engine.
///
/// /// /// [ContractAnnotation("=> halt")] /// public void TerminationMethod() /// /// /// [ContractAnnotation("null <= param:null")] // reverse condition syntax /// public string GetName(string surname) /// /// /// [ContractAnnotation("s:null => true")] /// public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty() /// /// /// // A method that returns null if the parameter is null, /// // and not null if the parameter is not null /// [ContractAnnotation("null => null; notnull => notnull")] /// public object Transform(object data) /// /// /// [ContractAnnotation("=> true, result: notnull; => false, result: null")] /// public bool TryParse(string s, out Person result) /// /// [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] public sealed class ContractAnnotationAttribute : Attribute { public ContractAnnotationAttribute([NotNull] string contract) : this(contract, false) { } public ContractAnnotationAttribute([NotNull] string contract, bool forceFullStates) { Contract = contract; ForceFullStates = forceFullStates; } [NotNull] public string Contract { get; } public bool ForceFullStates { get; } } /// /// Indicates whether the marked element should be localized. /// /// /// [LocalizationRequiredAttribute(true)] /// class Foo { /// string str = "my string"; // Warning: Localizable string /// } /// [AttributeUsage(AttributeTargets.All)] public sealed class LocalizationRequiredAttribute : Attribute { public LocalizationRequiredAttribute() : this(true) { } public LocalizationRequiredAttribute(bool required) { Required = required; } public bool Required { get; } } /// /// Indicates that the value of the marked type (or its derivatives) /// cannot be compared using '==' or '!=' operators and Equals() /// should be used instead. However, using '==' or '!=' for comparison /// with null is always permitted. /// /// /// [CannotApplyEqualityOperator] /// class NoEquality { } /// /// class UsesNoEquality { /// void Test() { /// var ca1 = new NoEquality(); /// var ca2 = new NoEquality(); /// if (ca1 != null) { // OK /// bool condition = ca1 == ca2; // Warning /// } /// } /// } /// [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Struct)] public sealed class CannotApplyEqualityOperatorAttribute : Attribute { } /// /// When applied to a target attribute, specifies a requirement for any type marked /// with the target attribute to implement or inherit specific type or types. /// /// /// [BaseTypeRequired(typeof(IComponent)] // Specify requirement /// class ComponentAttribute : Attribute { } /// /// [Component] // ComponentAttribute requires implementing IComponent interface /// class MyComponent : IComponent { } /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [BaseTypeRequired(typeof(Attribute))] public sealed class BaseTypeRequiredAttribute : Attribute { public BaseTypeRequiredAttribute([NotNull] Type baseType) { BaseType = baseType; } [NotNull] public Type BaseType { get; } } /// /// Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), /// so this symbol will not be reported as unused (as well as by other usage inspections). /// [AttributeUsage(AttributeTargets.All)] public sealed class UsedImplicitlyAttribute : Attribute { public UsedImplicitlyAttribute() : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags) : this(useKindFlags, ImplicitUseTargetFlags.Default) { } public UsedImplicitlyAttribute(ImplicitUseTargetFlags targetFlags) : this(ImplicitUseKindFlags.Default, targetFlags) { } public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) { UseKindFlags = useKindFlags; TargetFlags = targetFlags; } public ImplicitUseKindFlags UseKindFlags { get; } public ImplicitUseTargetFlags TargetFlags { get; } } /// /// Can be applied to attributes, type parameters, and parameters of a type assignable from . /// When applied to an attribute, the decorated attribute behaves the same as . /// When applied to a type parameter or to a parameter of type , indicates that the corresponding type /// is used implicitly. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.GenericParameter | AttributeTargets.Parameter)] public sealed class MeansImplicitUseAttribute : Attribute { public MeansImplicitUseAttribute() : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } public MeansImplicitUseAttribute(ImplicitUseKindFlags useKindFlags) : this(useKindFlags, ImplicitUseTargetFlags.Default) { } public MeansImplicitUseAttribute(ImplicitUseTargetFlags targetFlags) : this(ImplicitUseKindFlags.Default, targetFlags) { } public MeansImplicitUseAttribute(ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) { UseKindFlags = useKindFlags; TargetFlags = targetFlags; } [UsedImplicitly] public ImplicitUseKindFlags UseKindFlags { get; } [UsedImplicitly] public ImplicitUseTargetFlags TargetFlags { get; } } /// /// Specify the details of implicitly used symbol when it is marked /// with or . /// [Flags] public enum ImplicitUseKindFlags { Default = Access | Assign | InstantiatedWithFixedConstructorSignature, /// Only entity marked with attribute considered used. Access = 1, /// Indicates implicit assignment to a member. Assign = 2, /// /// Indicates implicit instantiation of a type with fixed constructor signature. /// That means any unused constructor parameters won't be reported as such. /// InstantiatedWithFixedConstructorSignature = 4, /// Indicates implicit instantiation of a type. InstantiatedNoFixedConstructorSignature = 8, } /// /// Specify what is considered to be used implicitly when marked /// with or . /// [Flags] public enum ImplicitUseTargetFlags { Default = Itself, Itself = 1, /// Members of entity marked with attribute are considered used. Members = 2, /// Inherited entities are considered used. WithInheritors = 4, /// Entity marked with attribute and all its members considered used. WithMembers = Itself | Members } /// /// This attribute is intended to mark publicly available API /// which should not be removed and so is treated as used. /// [MeansImplicitUse(ImplicitUseTargetFlags.WithMembers)] [AttributeUsage(AttributeTargets.All, Inherited = false)] public sealed class PublicAPIAttribute : Attribute { public PublicAPIAttribute() { } public PublicAPIAttribute([NotNull] string comment) { Comment = comment; } [CanBeNull] public string Comment { get; } } /// /// Tells code analysis engine if the parameter is completely handled when the invoked method is on stack. /// If the parameter is a delegate, indicates that delegate is executed while the method is executed. /// If the parameter is an enumerable, indicates that it is enumerated while the method is executed. /// [AttributeUsage(AttributeTargets.Parameter)] public sealed class InstantHandleAttribute : Attribute { } /// /// Indicates that a method does not make any observable state changes. /// The same as System.Diagnostics.Contracts.PureAttribute. /// /// /// [Pure] int Multiply(int x, int y) => x * y; /// /// void M() { /// Multiply(123, 42); // Warning: Return value of pure method is not used /// } /// [AttributeUsage(AttributeTargets.Method)] public sealed class PureAttribute : Attribute { } /// /// Indicates that the return value of the method invocation must be used. /// /// /// Methods decorated with this attribute (in contrast to pure methods) might change state, /// but make no sense without using their return value.
/// Similarly to , this attribute /// will help detecting usages of the method when the return value in not used. /// Additionally, you can optionally specify a custom message, which will be used when showing warnings, e.g. /// [MustUseReturnValue("Use the return value to...")]. ///
[AttributeUsage(AttributeTargets.Method)] public sealed class MustUseReturnValueAttribute : Attribute { public MustUseReturnValueAttribute() { } public MustUseReturnValueAttribute([NotNull] string justification) { Justification = justification; } [CanBeNull] public string Justification { get; } } /// /// Indicates the type member or parameter of some type, that should be used instead of all other ways /// to get the value of that type. This annotation is useful when you have some "context" value evaluated /// and stored somewhere, meaning that all other ways to get this value must be consolidated with existing one. /// /// /// class Foo { /// [ProvidesContext] IBarService _barService = ...; /// /// void ProcessNode(INode node) { /// DoSomething(node, node.GetGlobalServices().Bar); /// // ^ Warning: use value of '_barService' field /// } /// } /// [AttributeUsage( AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Struct | AttributeTargets.GenericParameter)] public sealed class ProvidesContextAttribute : Attribute { } /// /// Indicates that a parameter is a path to a file or a folder within a web project. /// Path can be relative or absolute, starting from web root (~). /// [AttributeUsage(AttributeTargets.Parameter)] public sealed class PathReferenceAttribute : Attribute { public PathReferenceAttribute() { } public PathReferenceAttribute([NotNull, PathReference] string basePath) { BasePath = basePath; } [CanBeNull] public string BasePath { get; } } /// /// An extension method marked with this attribute is processed by code completion /// as a 'Source Template'. When the extension method is completed over some expression, its source code /// is automatically expanded like a template at call site. /// /// /// Template method body can contain valid source code and/or special comments starting with '$'. /// Text inside these comments is added as source code when the template is applied. Template parameters /// can be used either as additional method parameters or as identifiers wrapped in two '$' signs. /// Use the attribute to specify macros for parameters. /// /// /// In this example, the 'forEach' method is a source template available over all values /// of enumerable types, producing ordinary C# 'foreach' statement and placing caret inside block: /// /// [SourceTemplate] /// public static void forEach<T>(this IEnumerable<T> xs) { /// foreach (var x in xs) { /// //$ $END$ /// } /// } /// /// [AttributeUsage(AttributeTargets.Method)] public sealed class SourceTemplateAttribute : Attribute { } /// /// Allows specifying a macro for a parameter of a source template. /// /// /// You can apply the attribute on the whole method or on any of its additional parameters. The macro expression /// is defined in the property. When applied on a method, the target /// template parameter is defined in the property. To apply the macro silently /// for the parameter, set the property value = -1. /// /// /// Applying the attribute on a source template method: /// /// [SourceTemplate, Macro(Target = "item", Expression = "suggestVariableName()")] /// public static void forEach<T>(this IEnumerable<T> collection) { /// foreach (var item in collection) { /// //$ $END$ /// } /// } /// /// Applying the attribute on a template method parameter: /// /// [SourceTemplate] /// public static void something(this Entity x, [Macro(Expression = "guid()", Editable = -1)] string newguid) { /// /*$ var $x$Id = "$newguid$" + x.ToString(); /// x.DoSomething($x$Id); */ /// } /// /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method, AllowMultiple = true)] public sealed class MacroAttribute : Attribute { /// /// Allows specifying a macro that will be executed for a source template /// parameter when the template is expanded. /// [CanBeNull] public string Expression { get; set; } /// /// Allows specifying which occurrence of the target parameter becomes editable when the template is deployed. /// /// /// If the target parameter is used several times in the template, only one occurrence becomes editable; /// other occurrences are changed synchronously. To specify the zero-based index of the editable occurrence, /// use values >= 0. To make the parameter non-editable when the template is expanded, use -1. /// public int Editable { get; set; } /// /// Identifies the target parameter of a source template if the /// is applied on a template method. /// [CanBeNull] public string Target { get; set; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] public sealed class AspMvcAreaMasterLocationFormatAttribute : Attribute { public AspMvcAreaMasterLocationFormatAttribute([NotNull] string format) { Format = format; } [NotNull] public string Format { get; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] public sealed class AspMvcAreaPartialViewLocationFormatAttribute : Attribute { public AspMvcAreaPartialViewLocationFormatAttribute([NotNull] string format) { Format = format; } [NotNull] public string Format { get; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] public sealed class AspMvcAreaViewLocationFormatAttribute : Attribute { public AspMvcAreaViewLocationFormatAttribute([NotNull] string format) { Format = format; } [NotNull] public string Format { get; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] public sealed class AspMvcMasterLocationFormatAttribute : Attribute { public AspMvcMasterLocationFormatAttribute([NotNull] string format) { Format = format; } [NotNull] public string Format { get; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] public sealed class AspMvcPartialViewLocationFormatAttribute : Attribute { public AspMvcPartialViewLocationFormatAttribute([NotNull] string format) { Format = format; } [NotNull] public string Format { get; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] public sealed class AspMvcViewLocationFormatAttribute : Attribute { public AspMvcViewLocationFormatAttribute([NotNull] string format) { Format = format; } [NotNull] public string Format { get; } } /// /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter /// is an MVC action. If applied to a method, the MVC action name is calculated /// implicitly from the context. Use this attribute for custom wrappers similar to /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcActionAttribute : Attribute { public AspMvcActionAttribute() { } public AspMvcActionAttribute([NotNull] string anonymousProperty) { AnonymousProperty = anonymousProperty; } [CanBeNull] public string AnonymousProperty { get; } } /// /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC area. /// Use this attribute for custom wrappers similar to /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcAreaAttribute : Attribute { public AspMvcAreaAttribute() { } public AspMvcAreaAttribute([NotNull] string anonymousProperty) { AnonymousProperty = anonymousProperty; } [CanBeNull] public string AnonymousProperty { get; } } /// /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is /// an MVC controller. If applied to a method, the MVC controller name is calculated /// implicitly from the context. Use this attribute for custom wrappers similar to /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String, String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcControllerAttribute : Attribute { public AspMvcControllerAttribute() { } public AspMvcControllerAttribute([NotNull] string anonymousProperty) { AnonymousProperty = anonymousProperty; } [CanBeNull] public string AnonymousProperty { get; } } /// /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC Master. Use this attribute /// for custom wrappers similar to System.Web.Mvc.Controller.View(String, String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcMasterAttribute : Attribute { } /// /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC model type. Use this attribute /// for custom wrappers similar to System.Web.Mvc.Controller.View(String, Object). /// [AttributeUsage(AttributeTargets.Parameter)] public sealed class AspMvcModelTypeAttribute : Attribute { } /// /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC /// partial view. If applied to a method, the MVC partial view name is calculated implicitly /// from the context. Use this attribute for custom wrappers similar to /// System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper, String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcPartialViewAttribute : Attribute { } /// /// ASP.NET MVC attribute. Allows disabling inspections for MVC views within a class or a method. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public sealed class AspMvcSuppressViewErrorAttribute : Attribute { } /// /// ASP.NET MVC attribute. Indicates that a parameter is an MVC display template. /// Use this attribute for custom wrappers similar to /// System.Web.Mvc.Html.DisplayExtensions.DisplayForModel(HtmlHelper, String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcDisplayTemplateAttribute : Attribute { } /// /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC editor template. /// Use this attribute for custom wrappers similar to /// System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcEditorTemplateAttribute : Attribute { } /// /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC template. /// Use this attribute for custom wrappers similar to /// System.ComponentModel.DataAnnotations.UIHintAttribute(System.String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcTemplateAttribute : Attribute { } /// /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter /// is an MVC view component. If applied to a method, the MVC view name is calculated implicitly /// from the context. Use this attribute for custom wrappers similar to /// System.Web.Mvc.Controller.View(Object). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcViewAttribute : Attribute { } /// /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter /// is an MVC view component name. /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcViewComponentAttribute : Attribute { } /// /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter /// is an MVC view component view. If applied to a method, the MVC view component view name is default. /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] public sealed class AspMvcViewComponentViewAttribute : Attribute { } /// /// ASP.NET MVC attribute. When applied to a parameter of an attribute, /// indicates that this parameter is an MVC action name. /// /// /// [ActionName("Foo")] /// public ActionResult Login(string returnUrl) { /// ViewBag.ReturnUrl = Url.Action("Foo"); // OK /// return RedirectToAction("Bar"); // Error: Cannot resolve action /// } /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property)] public sealed class AspMvcActionSelectorAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Field)] public sealed class HtmlElementAttributesAttribute : Attribute { public HtmlElementAttributesAttribute() { } public HtmlElementAttributesAttribute([NotNull] string name) { Name = name; } [CanBeNull] public string Name { get; } } [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] public sealed class HtmlAttributeValueAttribute : Attribute { public HtmlAttributeValueAttribute([NotNull] string name) { Name = name; } [NotNull] public string Name { get; } } /// /// Razor attribute. Indicates that the marked parameter or method is a Razor section. /// Use this attribute for custom wrappers similar to /// System.Web.WebPages.WebPageBase.RenderSection(String). /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] public sealed class RazorSectionAttribute : Attribute { } /// /// Indicates how method, constructor invocation, or property access /// over collection type affects the contents of the collection. /// Use to specify the access type. /// /// /// Using this attribute only makes sense if all collection methods are marked with this attribute. /// /// /// public class MyStringCollection : List<string> /// { /// [CollectionAccess(CollectionAccessType.Read)] /// public string GetFirstString() /// { /// return this.ElementAt(0); /// } /// } /// class Test /// { /// public void Foo() /// { /// // Warning: Contents of the collection is never updated /// var col = new MyStringCollection(); /// string x = col.GetFirstString(); /// } /// } /// [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property)] public sealed class CollectionAccessAttribute : Attribute { public CollectionAccessAttribute(CollectionAccessType collectionAccessType) { CollectionAccessType = collectionAccessType; } public CollectionAccessType CollectionAccessType { get; } } /// /// Provides a value for the to define /// how the collection method invocation affects the contents of the collection. /// [Flags] public enum CollectionAccessType { /// Method does not use or modify content of the collection. None = 0, /// Method only reads content of the collection but does not modify it. Read = 1, /// Method can change content of the collection but does not add new elements. ModifyExistingContent = 2, /// Method can add new elements to the collection. UpdatedContent = ModifyExistingContent | 4 } /// /// Indicates that the marked method is assertion method, i.e. it halts the control flow if /// one of the conditions is satisfied. To set the condition, mark one of the parameters with /// attribute. /// [AttributeUsage(AttributeTargets.Method)] public sealed class AssertionMethodAttribute : Attribute { } /// /// Indicates the condition parameter of the assertion method. The method itself should be /// marked by attribute. The mandatory argument of /// the attribute is the assertion type. /// [AttributeUsage(AttributeTargets.Parameter)] public sealed class AssertionConditionAttribute : Attribute { public AssertionConditionAttribute(AssertionConditionType conditionType) { ConditionType = conditionType; } public AssertionConditionType ConditionType { get; } } /// /// Specifies assertion type. If the assertion method argument satisfies the condition, /// then the execution continues. Otherwise, execution is assumed to be halted. /// public enum AssertionConditionType { /// Marked parameter should be evaluated to true. IS_TRUE = 0, /// Marked parameter should be evaluated to false. IS_FALSE = 1, /// Marked parameter should be evaluated to null value. IS_NULL = 2, /// Marked parameter should be evaluated to not null value. IS_NOT_NULL = 3, } /// /// Indicates that the marked method unconditionally terminates control flow execution. /// For example, it could unconditionally throw exception. /// [Obsolete("Use [ContractAnnotation('=> halt')] instead")] [AttributeUsage(AttributeTargets.Method)] public sealed class TerminatesProgramAttribute : Attribute { } /// /// Indicates that method is pure LINQ method, with postponed enumeration (like Enumerable.Select, /// .Where). This annotation allows inference of [InstantHandle] annotation for parameters /// of delegate type by analyzing LINQ method chains. /// [AttributeUsage(AttributeTargets.Method)] public sealed class LinqTunnelAttribute : Attribute { } /// /// Indicates that IEnumerable passed as a parameter is not enumerated. /// Use this annotation to suppress the 'Possible multiple enumeration of IEnumerable' inspection. /// /// /// static void ThrowIfNull<T>([NoEnumeration] T v, string n) where T : class /// { /// // custom check for null but no enumeration /// } /// /// void Foo(IEnumerable<string> values) /// { /// ThrowIfNull(values, nameof(values)); /// var x = values.ToList(); // No warnings about multiple enumeration /// } /// [AttributeUsage(AttributeTargets.Parameter)] public sealed class NoEnumerationAttribute : Attribute { } /// /// Indicates that the marked parameter is a regular expression pattern. /// [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] public sealed class RegexPatternAttribute : Attribute { } /// /// Prevents the Member Reordering feature from tossing members of the marked class. /// /// /// The attribute must be mentioned in your member reordering patterns. /// [AttributeUsage( AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Struct | AttributeTargets.Enum)] public sealed class NoReorderAttribute : Attribute { } /// /// XAML attribute. Indicates the type that has ItemsSource property and should be treated /// as ItemsControl-derived type, to enable inner items DataContext type resolve. /// [AttributeUsage(AttributeTargets.Class)] public sealed class XamlItemsControlAttribute : Attribute { } /// /// XAML attribute. Indicates the property of some BindingBase-derived type, that /// is used to bind some item of ItemsControl-derived type. This annotation will /// enable the DataContext type resolve for XAML bindings for such properties. /// /// /// Property should have the tree ancestor of the ItemsControl type or /// marked with the attribute. /// [AttributeUsage(AttributeTargets.Property)] public sealed class XamlItemBindingOfItemsControlAttribute : Attribute { } /// /// XAML attribute. Indicates the property of some Style-derived type, that /// is used to style items of ItemsControl-derived type. This annotation will /// enable the DataContext type resolve for XAML bindings for such properties. /// /// /// Property should have the tree ancestor of the ItemsControl type or /// marked with the attribute. /// [AttributeUsage(AttributeTargets.Property)] public sealed class XamlItemStyleOfItemsControlAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public sealed class AspChildControlTypeAttribute : Attribute { public AspChildControlTypeAttribute([NotNull] string tagName, [NotNull] Type controlType) { TagName = tagName; ControlType = controlType; } [NotNull] public string TagName { get; } [NotNull] public Type ControlType { get; } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method)] public sealed class AspDataFieldAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method)] public sealed class AspDataFieldsAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property)] public sealed class AspMethodPropertyAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public sealed class AspRequiredAttributeAttribute : Attribute { public AspRequiredAttributeAttribute([NotNull] string attribute) { Attribute = attribute; } [NotNull] public string Attribute { get; } } [AttributeUsage(AttributeTargets.Property)] public sealed class AspTypePropertyAttribute : Attribute { public bool CreateConstructorReferences { get; } public AspTypePropertyAttribute(bool createConstructorReferences) { CreateConstructorReferences = createConstructorReferences; } } [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] public sealed class RazorImportNamespaceAttribute : Attribute { public RazorImportNamespaceAttribute([NotNull] string name) { Name = name; } [NotNull] public string Name { get; } } [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] public sealed class RazorInjectionAttribute : Attribute { public RazorInjectionAttribute([NotNull] string type, [NotNull] string fieldName) { Type = type; FieldName = fieldName; } [NotNull] public string Type { get; } [NotNull] public string FieldName { get; } } [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] public sealed class RazorDirectiveAttribute : Attribute { public RazorDirectiveAttribute([NotNull] string directive) { Directive = directive; } [NotNull] public string Directive { get; } } [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] public sealed class RazorPageBaseTypeAttribute : Attribute { public RazorPageBaseTypeAttribute([NotNull] string baseType) { BaseType = baseType; } public RazorPageBaseTypeAttribute([NotNull] string baseType, string pageName) { BaseType = baseType; PageName = pageName; } [NotNull] public string BaseType { get; } [CanBeNull] public string PageName { get; } } [AttributeUsage(AttributeTargets.Method)] public sealed class RazorHelperCommonAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property)] public sealed class RazorLayoutAttribute : Attribute { } [AttributeUsage(AttributeTargets.Method)] public sealed class RazorWriteLiteralMethodAttribute : Attribute { } [AttributeUsage(AttributeTargets.Method)] public sealed class RazorWriteMethodAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter)] public sealed class RazorWriteMethodParameterAttribute : Attribute { } } ================================================ FILE: Diz.App.Winforms/Properties/AssemblyInfo.cs ================================================ using Diz.App.Winforms; using LightInject; [assembly: CompositionRootType(typeof(DizAppWinformsCompositionRoot))] ================================================ FILE: Diz.App.Winforms/Properties/PublishProfiles/FolderProfile.pubxml ================================================  Release Any CPU bin\Release\net9.0-windows\publish\ FileSystem net9.0-windows false True ================================================ FILE: Diz.App.Winforms/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace Diz.App.Winforms.Properties { /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DiztinGUIsh.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: Diz.App.Winforms/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Diz.App.Winforms/RegisterWinformsServices.cs ================================================ using Diz.App.Common; using Diz.Core.util; using Diz.Ui.Winforms; using LightInject; namespace Diz.App.Winforms; public static class DizWinformsRegisterServices { public static IServiceFactory CreateServiceFactoryAndRegisterTypes() { var serviceProvider = DizServiceProvider.CreateServiceContainer(); RegisterDizUiServices(serviceProvider); return serviceProvider; } public static void RegisterDizUiServices(IServiceRegistry serviceRegistry) { // option #1: we can simply register services in any Diz*dll's that are found in a scan. // this is easy but we have less control // DizCoreServicesDllRegistration.RegisterServicesInDizDlls(serviceRegistry); // option #2: register everything by hand (this is what we'll do). // pull in all common stuff (platform-independent) serviceRegistry.RegisterFrom(); // pull in winforms-specific UI stuff: serviceRegistry.RegisterFrom(); // finally, pull in OUR stuff, which is winforms-specific serviceRegistry.RegisterFrom(); } } ================================================ FILE: Diz.App.Winforms/build/TidyPublishDir.targets ================================================ $(PublishDir)lib\ $(PublishDir)docs\ DIZ.exe $([System.IO.Directory]::GetFiles("%(Directories.Identity)", "*", System.IO.SearchOption.AllDirectories).get_Length()) ================================================ FILE: Diz.App.Winforms/dist/docs/HELP.md ================================================ DiztinGUIsh Introduction ------------------------ DiztinGUIsh is a Super NES ROM disassembler. Open a ROM file, flag each byte as code or data, add some extra info like labels and comments, and disassemble. The output will be one or more .asm files that are (idealy) equivalent to the original source code of the game. The assembly files can then be re-assembled with [Asar](https://github.com/RPGHacker/asar/releases) to check for integrity, and/or to make simple changes to the code. As you may guess, tagging every single byte as data or code is a tedious process, so DiztinGUIsh has many tools built in to make the process more bearable. Disassembling 65C816 code can be quite tricky, so some human input is still required to get a 100% accurate disassembly, but most of the job will be done automatically. Diz works GREAT with Tracelog tools, like BSNES+. We modified a version of BSNES to also support live capture from a running BSNES, which means you can run the game at full framerate and grab all the juicy data coming off the CPU. This will mark millions of instructions correct with the right flags for you, and is a fantastic way to crack a ROM's secrets wide open. Be sure to also check out BSNES's usage map importing features to fill in sections of data vs code. * * * DiztinGUIsh Main Window ----------------------- This is the window where most of the work is done. It consists of one very large table, some text at the bottom, and some options at the top. #### File Create new projects, open & save [projects](#projectfiles), [export a disassembly](#disassembly), and exit from this menu. #### Tools This menu will bring up additional tools to help you with managing data. * **Visual Map**: This window lets you see a visual map of the entire ROM, including what each byte is flagged as. * **Constants**: This changes what base the "raw byte" column is shown in. You can pick from decimal, hexadecimal, and binary. * **Options** * **Move With Step**: When enabled, the currently selected cell in the table will jump to the byte after the last modified byte after a auto step or mark many operation. * * * ### Project Files All of the flags, labels, comments, and other data you make to help with disassembling will be put into a single [Project File](#fileformat) (\*.diz). This file contains a _link_ to the ROM you are currently working on, but doesn't contain the ROM itself. This is for copyright reasons, and so you can easily share project files without worry of sharing ROM files as well. Because of this, if the ROM file you are working on is deleted or is relocated on your computer, DiztinGUIsh will ask to relocate the file. The ROM's internal name and checksum are stored to make sure you relink the same ROM you started with, but it is technically possible to relink a different ROM. Not sure what would happen then, but it wouldn't be anything you'd want. When you start DiztinGUIsh, you can start a new project or open an existing one. Opening an existing project is simple, though you may have to relink your ROM if it moved, or if you received this project file from a friend. When you start a new project, DiztinGUIsh will first prompt you to select a ROM file you want to work on. #### Starting a Project DiztinGUIsh currently supports seven types of _ROM Mapping Modes_: LoROM, HiROM, two SA-1 modes, SuperFX, ExHiROM, & ExLoROM. The program will try its best to detect what mode the ROM you selected uses. There is a chance it won't be able to figure it out, or it will guess wrong. After you select a ROM file, DiztinGUIsh will show the ROM's internal name. If this doesn't look correct, try changing the ROM Map mode. _Note: Some Japanese titles will display as gibberish, so it is possible that the correct ROM Mapping Mode will result in a garbage looking title._ _Note: Although mapping mode 2, Super MMC, is an option, it currently functions identically to HiROM._ DiztinGUIsh also provides a few extra jumpstart options on the New Project window. The table of numbers on the bottom half of the window show the ROM's _vectors_, which are special pointers that locate code that runs under special circumstances (interrupts, bootup, etc.). By default, DiztinGUIsh will check off the vectors it thinks are important. Checking off a vector will automatically generate a label at the location of the pointer (e.g. "Native\_NMI"). If the final checkbox is checked, DiztinGUIsh will automatically mark flags for the entire internal header. This includes the internal name, ROM meta info & mapping settings, developer codes, & the vectors. * * * ### Table Grid View In DiztinGUIsh, _one byte equals one row in the table_. Instructions will be one or more rows depending on how many operands there are. Pointers will be more than one row. Each byte has many pieces of data associated with it--these are stored in each of the table's columns. #### Label Here you can create a custom label for this location in the ROM. Labels are useful to identify what things are in the ROM. You can label code, data, or anything really. Labels will be automatically used in the disassembly when available. #### PC This column shows the "program counter" for the current byte. This is effectively the location in the SNES's address space where this byte will be found. #### @ This column shows an ASCII representation of the current byte. Mainly useful for locating text within the ROM. #### # This column shows the raw byte. You can change what base this value is displayed in via the View -> Constants menu. #### <\*> This column shows _in points, out points, end points, & read points_. * In points are locations in ROM where execution can jump to from somewhere other than the instruction directly before it. These are denoted by a ">" symbol. In points are usually the result of a branch, jump, or call instruction. * Out points are locations where execution can jump elsewhere other than the instruction directly after it. These are denoted by a "<" symbol. Out points are usually the result of a branch, jump, call, or return instruction. * End points are special out points where execution cannot directly flow from this instruction to the next directly after. These are denoted by a "X" symbol. End points are usually the result of a jump or return instruction. * Finally, read points are locations in ROM that are the intermediate address of some other load/store/math instruction in the ROM. These are denoted by a "\*" symbol. Read points are often the start of a table of data. #### Instruction This column shows what instruction this byte would be disassembled to if it were treated as an opcode. The instruction may be highlighted in yellow if DiztinGUIsh thinks the instruction is risky. That is, a rarely used instruction that more likely than not means that the code is desynched. #### IA This column shows the intermediate address of the instruction or pointer located at this byte. The intermediate address is basically the "address of importance" of an instruction--what address is actually being read/stored/jumped to, etc. Often, the instruction operands only specify a small chunk of the intermediate address, and the rest of it has to be inferred by other registers such as the program counter, data bank register, or direct page register. This column does all the math for you and spits out the intermediate address of the instruction. Note that this is not to be confused with the _effective address_, which is the "final result" address after locating indirect operands and/or adding index registers. The intermediate address will be calculated assuming this byte is marked as an opcode--UNLESS it is marked as some sort of pointer. Then, the intermediate address will just be the value of the pointer. _Note: If the byte is marked as a 16-bit pointer, the bank of the intermediate address will be derived from the Data Bank register (B)._ #### Flag This column displays what kind of data this byte will be treated as. Your primary job with Diz is to correctly mark the ROM with these flags * **Unreached**: This is the default flag. Basically means unknown. Your goal in Diz is clear all (or enough) unreached sections * **Opcode**: This byte is the opcode of an instruction. Zero or more Operands may follow it. * **Operand**: This byte is an operand of an instruction. Which instruction? The one marked as an Opcode a byte or more before it. * **Data (8-bit)**: Generic 8-bit (1-byte) long data. * **Graphics**: Special 8-bit data specifically used as graphics. Isn't treated any differently than plain 8-bit data (_yet_). * **Music**: Special 8-bit data specifically used as music. Isn't treated any differently than plain 8-bit data (_yet_). * **Empty**: Special 8-bit data specifically used as empty filler. Isn't treated any differently than plain 8-bit data (_yet_). * **Data (16-bit)**: Generic 16-bit (2-byte) long data. * **Pointer (16-bit)**: The lower 16-bits of a pointer. The bank of the intermediate address is derived from the Data Bank register (B). * **Data (24-bit)**: Generic 24-bit (3-byte) long data. * **Pointer (24-bit)**: A full 24-bit pointer. * **Data (32-bit)**: Generic 32-bit (4-byte) long data. * **Pointer (32-bit)**: A full 24-bit pointer, followed by a filler byte. This is common so that pointers are separated by 4 bytes (a power of 2). * **Text**: Special 8-bit data specifically used as ASCII text. This will be disassembled into a human-readable string. #### B The value of the _Data Bank register_ during execution of this code. Some instructions derive their intermediate address using the value of the data bank register. The data bank register is also used as the bank byte of a 16-bit pointer. The value will be highlighted in yellow if the instruction at this location stores the data bank register (PHB). It will be highlighted in red if the instruction writes to the data bank register (PLB : MVP : MVN). This way you can be on a lookout for changes to this register. #### D The value of the _Direct Page register_ during execution of this code. Some instructions derive their intermediate address using the value of the direct page register. The value will be highlighted in yellow if the instruction at this location stores the direct page register (PHD : TDC). It will be highlighted in red if the instruction writes to the direct page register (PLD : TCD). This way you can be on a lookout for changes to this register. #### M The current state of the M flag in the program status register (P). When the flag is cleared (m = 0), the accumulator A is 16 bits wide. When it is set (M = 1), the accumulator A is 8 bits wide. Some instructions interpret their operands differently according to the state of the M flag. If some code is desynched or doesn't make since, try toggling the M flag. The value will be highlighted in yellow if the instruction at this location stores the program status register (PHP). It will be highlighted in red if the instruction writes to the program status register and potentially modifies the M flag (PLP : REP : SEP). This way you can be on a lookout for changes to this flag. #### X The current state of the X flag in the program status register (P). When the flag is cleared (x = 0), the index registers X and Y are 16 bits wide. When it is set (X = 1), the index registers X and Y are 8 bits wide. Some instructions interpret their operands differently according to the state of the X flag. If some code is desynched or doesn't make since, try toggling the X flag. The value will be highlighted in yellow if the instruction at this location stores the program status register (PHP). It will be highlighted in red if the instruction writes to the program status register and potentially modifies the X flag (PLP : REP : SEP). This way you can be on a lookout for changes to this flag. #### Comment Here you can write notes about the project. These comments will be output into the disassembly, but _only on bytes that start a line_. For example, a comment on a byte that is marked as an opcode will be written, but a comment on an operand byte will not be written. #### Status Bar The status bar at the bottom of the window will show the number of bytes reached, and the currently selected marking flag. #### Navigation Use the arrow keys to move to different cells. Page Up & Page Down will move 16 rows at a time, and Home & End will move 256 rows at a time. Cells you can type in are highlighted in green. Intermediate addresses of the currently selected cell will be highlighted in pink. So will instructions whose intermediate addresses are the currently selected cell. * * * ### Stepping **Hotkey: S, I** Stepping is the method of marking bytes as code. Instead of marking each byte as opcode and operand separately, you can step through the instruction, and DiztinGUIsh will automatically assign opcode and operand flags as necessary. Stepping an instruction will automatically copy the D, B, M, & X values from the previous instruction. If a REP or SEP instruction is stepped, the M and X values will be modified as necessary. _Note: Most trace logs will reflect changes to the D, B, M, & X values on the instruction after the one that modifies the register. However, DiztinGUIsh likes to show the updated values on the same row as the instruction that updates the values._ There are two stepping commands: step, and step in. Step will advance the selector to the instruction directly following this instruction. Step in will advance to the intermediate address of this instruction. This is useful for taking a branch or jumping into a routine call. Note that plain step will still step in if the instruction is a jump instruction. * * * ### Auto Stepping **Hotkey: A, Ctrl + A** There is a lot of code in a ROM, so stepping through each instruction can be time consuming. Therefore, this option will let you step through instructions automatically until something happens. #### Auto Step (Safe) This is the recommended way of auto stepping. When auto step hits a branch, it will not take it. When it hits a jump, it will jump. When it hits a function call, it will save the program counter and jump to the routine. When it hits a return, it will try to restore the program counter to what it was before the call. It also saves and restores the value of the program status register and the M and X flags. Basically, it pretends to execute code until it hits something it can't do. Some jump instructions refer to values in RAM, which are not kept track of. At this point, the auto step will pause and wait for you to continue it at a point that makes sense. Auto Step will also stop if it hits a branch or jump that it has already seen in one go. This is to prevent it getting stuck on infinite loops. It will also stop if it hits a risky instruction--that is, a rare instruction that more likely than not means that the code is desynched. It will also stop if it hits an instruction that is already marked as something other than code. #### Auto Step (Harsh) This auto step will rush through bytes like a freight train and disassemble them one directly after the other. It doesn't care about jumps, branches, or anything. The only smart thing it does is updates the M and X flags upon stepping through REP and SEP instructions. Because of how hardy it is, it will never stop if it hits something risky. You have to specify how many bytes to disassemble. It will also clobber over stuff that is already marked as something other than code. * * * ### Goto **Hotkey: Ctrl + G, T, U, H, N, F3** This is an easy way to hop around the ROM without having to scroll all the way to where you want. Hitting Ctrl + G will bring up the [Goto window](#gotowindow). You can type in a SNES address or ROM file offset in decimal or hex to go directly to that location. You can press T to jump to the intermediate address of the currently selected instruction. Only if the intermediate address refers to ROM of course. You can press U, H, or N to jump to the first unreached byte of the project, the nearest unreached block behind the selected address, or the nearest unreached block ahead of the selected address. These are useful just to get somewhere you haven't been yet. The History window is a record of your recent activity in the project. You probably want to be best friends with ALT+LEFT and ALT+RIGHT while stepping, since branches can jump you all over the codebase and you can lose your train of thought Press F3 to go to the "Next Unreached In Point". Handy when working with tracelog imports, which fill in a LOT of opcodes but leave small branches unmarked that are rarely taken by normal gameplay. Example: ![image](https://github.com/IsoFrieze/DiztinGUIsh/assets/5413064/5910ca30-4d54-4d19-8dc8-5c8d292a2e65) * * * ### Marking **Hotkey: K, Ctrl + K, B, D, M, X** For anything that isn't code, you will have to mark manually. You can select which flag type to mark with under the Edit -> Select Marker menu. The currently selected flag type is shown in the status bar at the bottom of the window. Pressing K will mark a single instance of that flag type. That is, 8-bit data will mark 1 byte at a time, 16-bit data 2 bytes at a time, etc. You can press Ctrl + K to bring up a window that lets you mark an entire range at once. You can specify SNES address or ROM file offset, in hex or decimal, and you can specify the range via start & end points, or just the number of bytes to mark. Pressing B, D, M, or X will jump the selected cell to the data bank, direct page, M flag, or X flag cell respectively. You can hold Ctrl while pressing one of these keys to bring up the same window as Ctrl + K with default options to mark that value. * * * ### Labels and Comments **Hotkey: L, C** Pressing L will jump the selected cell to the label cell automatically so you can add a label to this byte. Pressing C will do the same for the comment column. #### Valid Labels Asar has a limitation on what characters can make up a label, and DiztinGUIsh follows the same format. Currently, labels must only contain the following characters: a-z A-Z 0-9 \_ Characters within a label that don't fit this description will be converted to \_s. DiztinGUIsh currently does not support sublabels (starting with a .), or +/- labels (made of \+ - characters). DiztinGUIsh also currently does not check for duplicate labels; that is, two more more addresses with the same label. For now, please use the [Label List](#labellist) to check for any duplicate labels. * * * ### Misalignments & Desynching **Hotkey: Ctrl + F** _Desynching_ refers to incorrect instructions being disassembled due to opcodes being marked as operands and vice versa. Some instructions have a different amount of operand bytes associated with them depending on the state of the M and X flags. If these flags are assumed incorrectly, the size of the instruction will be assumed incorrectly, causing a byte that should be an operand being treated as an opcode or vice versa. Sometimes desynched instructions are hard to catch. In fact, they can be disassembled and reassembled, and you wouldn't even notice. The SNES CPU would just execute the code as it would normally; it just wouldn't match what the disassembly says. For example, take the following bytecode: A9 00 8D 85 00. This could be LDA #$00 : STA $0085 or it could be LDA #$8D00 : STA $00. Both are perfectly legitimate, but only one is correct. A common cause of desynched code in DiztinGUIsh has to do with stepping through code while the X and M flags are incorrect. Sometimes, bytes can be marked as opcodes and operands incorrectly that accidentally overwrite already marked bytes. In DiztinGUIsh, _misalignment_ refers to bytes that are marked incorrectly, due to the length of the instruction or data not matching the flags. For example, the TAX instruction has no operands. But if the byte following this instruction is marked as an operand, this is a misalignment. Misalignments can also occur with data and pointers. If there is a block of 9 bytes marked as 16-bit data, there is a misalignment somewhere since the number of bytes is odd. The Misaligned Flags checker window will look for misalignments. You can just scan the ROM without actually modifying anything. Misalignments will be identified and output into the text box so you can correct them manually. You can also just have DiztinGUIsh attempt to fix all misalignments automatically. It uses a pretty brute force method, so it may not produce correct results, but at least it will get rid of all misalignments. It is recommended to scan for misalignments before outputting a disassembly. * * * ### In/Out/End/Read Points **Hotkey: Ctrl + P** As DiztinGUIsh steps through instructions, it will mark [in points, out points, end points, and read points](#tablegrid). However, marking bytes as opcode and operand manually will not produce these points. Importing CDLs will also not generate points. Also, once a byte is marked with a point, you can't unmark it. The Rescan for In/Out Points window will clear all points and readd them using the current flags. It is recommended to rescan for in/out/end/read points before outputting a disassembly. * * * ### Keyboard Hotkeys Pretty much everything has a hotkey associated with it, so you can use the entire program with the keyboard. Note that hotkeys won't work when the selected cell is editable, as typing anything will just put it into the box. * * * Goto Window ----------- Using this window you can select any byte in the ROM without having to scroll all the way to it. * * * ### SNES Address vs ROM file Offset The SNES address is the location in the SNES's address space where the byte is located. The ROM File Offset (also called the PC offset) is the raw offset of the byte in the ROM file. The first byte has an offset of 0. The ROM is always treated as unheadered, even if the ROM linked to the project has an SMC header. * * * ### Hexadecimal vs Decimal Hexadecimal is a base 16 counting system. It is what most hex editors use for displaying offsets, since 16 is a power of 2. Decimal is a base 10 counting system. _Note: Using decimal to specify the SNES address is silly, I've found._ * * * Mark Many Window ---------------- This window lets you set flags and registers for more than one byte at a time. * * * ### Property & Value You can choose which property to modify, and what value to give for the entire specified range. The property field will default to a different setting depending on what hotkey you used to open the window. * * * ### Address Range See the [Goto Window](#gotowindow) for info on ROM vs PC and Hex vs Dec. Changing the bounds of the range will automatically update the number of bytes and vice versa. If the values you input go past the end of the ROM, they will snap to the end of the ROM. * * * Fix Misaligned Flags Window --------------------------- See [Misalignments & Desynching](#desynching). * * * Rescan for In/Out Points Window ------------------------------- See [In/Out/End/Read Points](#inoutpoints). * * * Label List Window ----------------- This window shows every single label that has been created, and the address it is associated with. Labels in this list will automatically be updated, added, or removed when they are modified via the Main Window. You can also add, remove, or edit them from this window. The labels can be sorted by address or name by clicking on the table header. #### Jump to Clicking on this button will jump to the location of this label in the Main Window. #### Import... Use this to import a \*.csv file with a list of labels in the format described below. This is useful if you have an external program that generates labels for you. We also support importing from BSNES's symbol file format. #### Export... This will export a \*.csv file with all of the current labels. The format is quite simple; each label is one line in the CSV file, formatted as such: snes\_address,label\_name Note: Since neither the address nor the label should contain spaces or quotation marks, DiztinGUIsh will expect no quotation marks surrounding either field. #### Label Table Pretty self-explanitory--the first column is the SNES address that the label name in the second column corresponds to. You can modify labels by double-clicking on them. Hitting the del key will delete a label. You can even select more than one at once to delete. To add a label, just add the address and label name to the empty row at the end of the table. Make sure the address is a valid 24-bit address in hexadecimal, that the address you enter isn't already in the list, and that the label name contains only valid characters. See [here](labelcomment) for what makes a valid label name. Since DiztinGUIsh currently does not prevent you from reusing a label name more than once, it will warn you of duplicates by highlighting the rows that contain duplicate label names in yellow. * * * Export Disassembly Window ------------------------- This window lets you set the options for outputting a disassembly that can reassembled by Asar. * * * ### Output Format This box lets you choose how each line of the disassembly will be formatted. There are several types of arguments you can specify. Arguments are put inbetween percent signs (%). Some arguments can be followed by a length parameter, which is defined by a colon (:) and then a number. A positive number will align the argument to the left; negative will align to the right. * **\***: Anything that isn't an argument will be output directly into the line. * **%%**: Output a percent sign. * **%label:length%**: Output the label for this line. Default length of -22. * **%code:length%**: Output the instruction, data, pointer, etc. for this line. This is where assembler directives will appear as well. Default length of 37. * **%ia%**: Output the intermediate address of this instruction or pointer if applicable. Forced length of 6. * **%pc%**: Output the SNES address of this code. Forced length of 6. * **%offset%**: Output the ROM file offset of this code. Forced length of -6. * **%bytes%**: Output the bytecode of this instruction. Forced length of 8. * **%comment:length%**: Output the comment for this line. * **%b%**: Output the Data Bank register for this line. Forced length of 2. * **%d%**: Output the Direct Page register for this line. Forced length of 4. * **%m:length%**: Output the M flag for this line. Default length of 1. If length is 1, it will output "M" when set and "m" when cleared. Otherwise, it will output "08" or "16". * **%x:length%**: Output the X flag for this line. Default length of 1. If length is 1, it will output "X" when set and "x" when cleared. Otherwise, it will output "08" or "16". You can also check the box for generating all labels. This will print a labels.csv and all-labels.txt which will show all labels regardless of whether they are used in the final assembly (handy if your labels are for memory addresses that are not directly referenced in the code) * * * ### Unlabeled Instructions This controls how DiztinGUIsh will output lines that have no labels. * **Create All**: Temporary labels will be added to every line. * **In Points Only**: Temporary labels will only be added to in points and read points. * **None**: No extra labels will be added. * * * ### Bank Structure This controls the structure of the output disassembly. * **All in one file**: The disassembly will be contained within one, potentially large file. * **One bank per file**: Each bank will be put in a separate bank\_\*.asm file. A file called main.asm will be created as the root file, and a file called labels.asm will be created to store all label assignments (e.g. RAM addresses). * * * ### Max Data Bytes Per Line This controls the maximum number of bytes output per line on bytes marked as data. This is actually not the max, but the "min-max"--a maximum of 5 bytes will still allow two 32-bit data elements (total of 8 bytes) per line. A maximum of 4 bytes will limit this to one 32-bit data element (4 bytes). In other words, a data element will not be split over two lines. * * * ### Reassembly with Asar If DiztinGUIsh outputs a disassembly without any warnings, it should _always_ be assemblable with Asar. The code may be desynched or flagged incorrectly, but it should still assemble at least. You can assemble a disassembly via the command asar.exe \[name\].asm \[output\].sfc, where \[name\] is the disassembly file (or main.asm if output to multiple files). In theory if the world were perfect, the reassembled ROM should match the original ROM. Sometimes it will, and sometimes it won't. It depends on the code itself. The output should always _run_ similarly (unless the ROM has built-in modification or checksum detection). The reason this may not be the case is due to mirroring, and the way DiztinGUIsh deals with labels. Take the following two code snippets: JML $C00054 : JML $400054. One has an intermediate address of $C00054 and the other has intermediate address $400054. These two addresses refer to the same byte in the ROM due to memory mapping mirroring. That is, they both refer to PC offset 0x54. DiztinGUIsh stores labels according to SNES addresses. * * * Project File Format ------------------- The default file format is .diz, which is XML compressed with gzip. (you can rename the file to .xml.gz) You can also save with a .dizraw extension, which is the same thing but without the gzip the compression. It still has a little bit of run-length and other compression. Choose this option if you want to easily modify project files in an external program, or for use with git where you want to see the diffs. The underlying format is XML. In short, what files really are: *.diz files are really .xml.gz files *.dizraw files are really just .xml files * * * 16Bit Pointers and Banks --------------------------------- By default, data marked as 16bit pointers will use the current bank as the bank for the IA. If you set the bank on these 16bit pointer rows to a non-zero value, Diz will use that as the override (Experimental) Comment Special Directives --------------------------------- Special directives can be added to comments to alter label generation. All commands start with "!!". You can still put a semicolon in to make a comment. USE AT YOUR OWN RISK. THESE HAVE MINIMAL CHECKING OR VALIDATION ``` !!n ``` - Don't generate labels for this line or the destination IA - This is great if Diz is making up labels that aren't appropriate for this line (like PEA addresses, or for sections of code that modify the D register to load parts of the game dynamically) Example: override the current label for this line and paste the following text in: ``` !!o [whatever you want to show up there] ; [optional comment] ``` You can use structs, labels, math, constants, anything you want. Example: Say you have a line like: ```asm LDA.W #$0B,X ``` type in: ``` !!o !num_in_party ``` and the new line will be: ```asm LDA.W #!num_in_party,X ``` If you use this with an string that looks like an asar define (i.e. starts with an exclamation point, like "!num_players", "!max_health", "!max_height", etc), then Diz will also automatically create a label for you in defines.asm and assign it to $0B and create a define for you in defines.asm. ----- or let's say you have: ```asm LDA.W some_label,X ``` then you can override with: ``` !!o some_address+some_other_address ``` ```asm LDA.W some_address+some_other_address,X ``` This lets you annotate constants as you go and re-use them through the project. ---- ```!!is``` and - ```!!ie``` "include start" and "include end". define a label on a line and use the !!is directive to dynamically-defined a region that will generate an "incsrc" directive. further down, use the !!ir directive to mark the end of a dynamic region. example: ```asm STZ $00 ; whatever here, then some_graphics: !!is ... ... ... !!ie STZ $00 ; whatever after ``` this will generate output like this, with the contents between start and end being in a new file that's included: ```asm STZ $00 incsrc "some_graphics.asm" STZ $00 ``` ================================================ FILE: Diz.App.Winforms/dist/docs/Library Licenses.txt ================================================ Castle.Core http://www.apache.org/licenses/LICENSE-2.0.html Apache 2.0 xunit https://raw.githubusercontent.com/xunit/xunit/master/license.txt Apache 2.0 xunit.abstractions https://raw.githubusercontent.com/xunit/xunit/master/license.txt Apache 2.0 xunit.analyzers https://raw.githubusercontent.com/xunit/xunit.analyzers/master/LICENSE Apache 2.0 xunit.assert https://raw.githubusercontent.com/xunit/xunit/master/license.txt Apache 2.0 xunit.core https://raw.githubusercontent.com/xunit/xunit/master/license.txt Apache 2.0 xunit.extensibility.core https://raw.githubusercontent.com/xunit/xunit/master/license.txt Apache 2.0 xunit.extensibility.execution https://raw.githubusercontent.com/xunit/xunit/master/license.txt Apache 2.0 xunit.runner.console https://raw.githubusercontent.com/xunit/xunit/master/license.txt Apache 2.0 Moq https://raw.githubusercontent.com/moq/moq4/master/License.txt BSD 3clause ByteSize https://github.com/omar/ByteSize/blob/master/LICENSE MIT ExtendedXmlSerializer https://github.com/ExtendedXmlSerializer/home/blob/master/LICENSE MIT FastBitmapLib https://licenses.nuget.org/MIT MIT GitInfo https://licenses.nuget.org/MIT MIT IX.Abstractions https://licenses.nuget.org/MIT MIT IX.Abstractions.Collections https://licenses.nuget.org/MIT MIT IX.Abstractions.Threading https://licenses.nuget.org/MIT MIT IX.Observable https://licenses.nuget.org/MIT MIT IX.StandardExtensions https://licenses.nuget.org/MIT MIT IX.StandardExtensions.ComponentModel https://licenses.nuget.org/MIT MIT IX.StandardExtensions.Threading https://licenses.nuget.org/MIT MIT IX.Undoable https://licenses.nuget.org/MIT MIT JetBrains.Annotations https://licenses.nuget.org/MIT MIT LightInject https://licenses.nuget.org/MIT MIT LiveCharts https://github.com/beto-rodriguez/Live-Charts/blob/master/LICENSE.TXT MIT NReco.LambdaParser https://raw.githubusercontent.com/nreco/lambdaparser/master/LICENSE MIT SharpZipLib https://licenses.nuget.org/MIT MIT Sprache https://github.com/sprache/Sprache/blob/master/licence.txt MIT xunit.runner.visualstudio https://licenses.nuget.org/MIT MIT -------------------------------------------------- "MOQ BSD 3-Clause License Copyright (c) 2007, Clarius Consulting, Manas Technology Solutions, InSTEDD, and Contributors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the names of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -------------------------------------------------- ================================================ FILE: Diz.App.Winforms/dist/docs/hardware_registers.csv ================================================ 002100,SNES_INIDISP 002101,SNES_OBJSEL 002102,SNES_OAMADDL 002103,SNES_OAMADDH 002104,SNES_OAMDATA 002105,SNES_BGMODE 002106,SNES_MOSAIC 002107,SNES_BG1SC 002108,SNES_BG2SC 002109,SNES_BG3SC 00210A,SNES_BG4SC 00210B,SNES_BG12NBA 00210C,SNES_BG34NBA 00210D,SNES_BG1HOFS 00210E,SNES_BG1VOFS 00210F,SNES_BG2HOFS 002110,SNES_BG2VOFS 002111,SNES_BG3HOFS 002112,SNES_BG3VOFS 002113,SNES_BG4HOFS 002114,SNES_BG4VOFS 002115,SNES_VMAINC 002116,SNES_VMADDL 002117,SNES_VMADDH 002118,SNES_VMDATAL 002119,SNES_VMDATAH 00211A,SNES_M7SEL 00211B,SNES_M7A 00211C,SNES_M7B 00211D,SNES_M7C 00211E,SNES_M7D 00211F,SNES_M7X 002120,SNES_M7Y 002121,SNES_CGADD 002122,SNES_CGDATA 002123,SNES_W12SEL 002124,SNES_W34SEL 002125,SNES_WOBJSEL 002126,SNES_WH0 002127,SNES_WH1 002128,SNES_WH2 002129,SNES_WH3 00212A,SNES_WBGLOG 00212B,SNES_WOBJLOG 00212C,SNES_TM 00212D,SNES_TS 00212E,SNES_TMW 00212F,SNES_TSW 002130,SNES_CGSWSEL 002131,SNES_CGADSUB 002132,SNES_COLDATA 002133,SNES_SETINI 002134,SNES_MPYL 002135,SNES_MPYM 002136,SNES_MPYH 002137,SNES_SLHV 002138,SNES_ROAMDATA 002139,SNES_RVMDATAL 00213A,SNES_RVMDATAH 00213B,SNES_RCGDATA 00213C,SNES_OPHCT 00213D,SNES_OPVCT 00213E,SNES_STAT77 00213F,SNES_STAT78 002140,SNES_APUIO0 002141,SNES_APUIO1 002142,SNES_APUIO2 002143,SNES_APUIO3 002180,SNES_WMDATA 002181,SNES_WMADDL 002182,SNES_WMADDM 002183,SNES_WMADDH 004016,SNES_JOY1 004017,SNES_JOY2 004200,SNES_NMITIMEN 004201,SNES_WRIO 004202,SNES_WRMPYA 004203,SNES_WRMPYB 004204,SNES_WRDIVL 004205,SNES_WRDIVH 004206,SNES_WRDIVB 004207,SNES_HTIMEL 004208,SNES_HTIMEH 004209,SNES_VTIMEL 00420A,SNES_VTIMEH 00420B,SNES_MDMAEN 00420C,SNES_HDMAEN 00420D,SNES_MEMSEL 004210,SNES_RDNMI 004211,SNES_TIMEUP 004212,SNES_HVBJOY 004213,SNES_RDIO 004214,SNES_RDDIVL 004215,SNES_RDDIVH 004216,SNES_RDMPYL 004217,SNES_RDMPYH 004218,SNES_CNTRL1L 004219,SNES_CNTRL1H 00421A,SNES_CNTRL2L 00421B,SNES_CNTRL2H 00421C,SNES_CNTRL3L 00421D,SNES_CNTRL3H 00421E,SNES_CNTRL4L 00421F,SNES_CNTRL4H 004300,SNES_DMA0PARAM 004301,SNES_DMA0REG 004302,SNES_DMA0ADDRL 004303,SNES_DMA0ADDRM 004304,SNES_DMA0ADDRH 004305,SNES_DMA0CNTL 004306,SNES_DMA0CNTH 004307,SNES_HDMA0BANK 004308,SNES_DMA0IDXL 004309,SNES_DMA0IDXH 00430A,SNES_HDMA0LINES 004310,SNES_DMA1PARAM 004311,SNES_DMA1REG 004312,SNES_DMA1ADDRL 004313,SNES_DMA1ADDRM 004314,SNES_DMA1ADDRH 004315,SNES_DMA1CNTL 004316,SNES_DMA1CNTH 004317,SNES_HDMA1BANK 004318,SNES_DMA1IDXL 004319,SNES_DMA1IDXH 00431A,SNES_HDMA1LINES 004320,SNES_DMA2PARAM 004321,SNES_DMA2REG 004322,SNES_DMA2ADDRL 004323,SNES_DMA2ADDRM 004324,SNES_DMA2ADDRH 004325,SNES_DMA2CNTL 004326,SNES_DMA2CNTH 004327,SNES_HDMA2BANK 004328,SNES_DMA2IDXL 004329,SNES_DMA2IDXH 00432A,SNES_HDMA2LINES 004330,SNES_DMA3PARAM 004331,SNES_DMA3REG 004332,SNES_DMA3ADDRL 004333,SNES_DMA3ADDRM 004334,SNES_DMA3ADDRH 004335,SNES_DMA3CNTL 004336,SNES_DMA3CNTH 004337,SNES_HDMA3BANK 004338,SNES_DMA3IDXL 004339,SNES_DMA3IDXH 00433A,SNES_HDMA3LINES 004340,SNES_DMA4PARAM 004341,SNES_DMA4REG 004342,SNES_DMA4ADDRL 004343,SNES_DMA4ADDRM 004344,SNES_DMA4ADDRH 004345,SNES_DMA4CNTL 004346,SNES_DMA4CNTH 004347,SNES_HDMA4BANK 004348,SNES_DMA4IDXL 004349,SNES_DMA4IDXH 00434A,SNES_HDMA4LINES 004350,SNES_DMA5PARAM 004351,SNES_DMA5REG 004352,SNES_DMA5ADDRL 004353,SNES_DMA5ADDRM 004354,SNES_DMA5ADDRH 004355,SNES_DMA5CNTL 004356,SNES_DMA5CNTH 004357,SNES_HDMA5BANK 004358,SNES_DMA5IDXL 004359,SNES_DMA5IDXH 00435A,SNES_HDMA5LINES 004360,SNES_DMA6PARAM 004361,SNES_DMA6REG 004362,SNES_DMA6ADDRL 004363,SNES_DMA6ADDRM 004364,SNES_DMA6ADDRH 004365,SNES_DMA6CNTL 004366,SNES_DMA6CNTH 004367,SNES_HDMA6BANK 004368,SNES_DMA6IDXL 004369,SNES_DMA6IDXH 00436A,SNES_HDMA6LINES 004370,SNES_DMA7PARAM 004371,SNES_DMA7REG 004372,SNES_DMA7ADDRL 004373,SNES_DMA7ADDRM 004374,SNES_DMA7ADDRH 004375,SNES_DMA7CNTL 004376,SNES_DMA7CNTH 004377,SNES_HDMA7BANK 004378,SNES_DMA7IDXL 004379,SNES_DMA7IDXH 00437A,SNES_HDMA7LINES ================================================ FILE: Diz.App.Winforms/packages.lock.json ================================================ { "version": 1, "dependencies": { "net9.0-windows7.0": { "GitInfo": { "type": "Direct", "requested": "[3.3.3, )", "resolved": "3.3.3", "contentHash": "l7m4M/figjWz4B3eIL2Qy3UJiP2vvTOTeavlCT/GGH0khg0uxLanh/cwTZ27AZNhim56q1Mk0nbyRXtLqF4vmg==", "dependencies": { "ThisAssembly.Constants": "1.4.1" } }, "JetBrains.Annotations": { "type": "Direct", "requested": "[2023.3.0, )", "resolved": "2023.3.0", "contentHash": "PHfnvdBUdGaTVG9bR/GEfxgTwWM0Z97Y6X3710wiljELBISipSfF5okn/vz+C2gfO+ihoEyVPjaJwn8ZalVukA==" }, "LightInject": { "type": "Direct", "requested": "[6.6.4, )", "resolved": "6.6.4", "contentHash": "xId1F9OpzVvyNu3wcdPR4EcNUihcT5U9wiUJOi0tetuDOia1uAiFJzqmYGdRPsqAsgDb6o8sfoQCx5yMFFDsVw==" }, "System.Resources.Extensions": { "type": "Direct", "requested": "[8.0.0, )", "resolved": "8.0.0", "contentHash": "psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==" }, "ByteSize": { "type": "Transitive", "resolved": "2.1.2", "contentHash": "dSiH9B0apNU5abV3OVUs3eTfHiidEAa8IMOLGW0eEl5tB8Ba1ngkGC7RT/RGy61ifGcPzCe7DMP78KB8pA5kNg==" }, "CsvHelper": { "type": "Transitive", "resolved": "30.0.3", "contentHash": "OK4xEoPKFZYZ2Km+ZTGRxuLo33u+ipKVCC9ICCGn5JRiAmPLRsCPZ/shL3HKGPwS33MQSPcPHigI4HnX3Q47yg==" }, "ExtendedXmlSerializer": { "type": "Transitive", "resolved": "3.9.6", "contentHash": "kwnF5RjDwzle4cpUN4AWOCBAbntCkLQez5SIl2cY6hamWL33vEYu5Pp35BKkg/oklXnvaYobzJrFezRi9dl9tA==", "dependencies": { "LightInject": "6.6.1", "NReco.LambdaParser": "1.0.12", "Sprache": "2.3.1", "System.Collections.Immutable": "7.0.0" } }, "FastBitmapLib": { "type": "Transitive", "resolved": "2.1.0", "contentHash": "FOk+mBCg8nenI3V4kJXK/QeHKKjbPTZdebx8CGoMHX9bO4wzlnTSasYCHtl29FYByn+AInl9Dj1ICt29wWaL0w==", "dependencies": { "System.Drawing.Common": "4.5.1", "System.Runtime.CompilerServices.Unsafe": "4.5.2" } }, "FluentValidation": { "type": "Transitive", "resolved": "11.9.0", "contentHash": "VneVlTvwYDkfHV5av3QrQ0amALgrLX6LV94wlYyEsh0B/klJBW7C8y2eAtj5tOZ3jH6CAVpr4s1ZGgew/QWyig==" }, "JetBrains.FormatRipper": { "type": "Transitive", "resolved": "2.0.1", "contentHash": "9J+lWdztAczSqwgvOfMiTxEaaV6ONXY27Hq9VGbgzr9sUX8F5HCSvnd2/4J9xD1US4VL+ZPrREyRBl9NNbSGbw==", "dependencies": { "NETStandard.Library": "1.6.1" } }, "JetBrains.HabitatDetector": { "type": "Transitive", "resolved": "1.0.2", "contentHash": "WQfQekJ2+BxM6+5anNhYWLyd6F4CRHW7pj8YoRXe6M5MDfPsZdYP0epx1+cHJkJuf0aeTB2JRK4KeEPW4UM8AQ==", "dependencies": { "JetBrains.FormatRipper": "2.0.1" } }, "JetBrains.Profiler.Api": { "type": "Transitive", "resolved": "1.4.0", "contentHash": "r5xP8m9U6uHApcMyoL5yZL/Ltqz7auBo0MaboGdQoaawNpYnYr9PC3FFe+0mNT2pyOhuAfQC7WL/Gxb8M0v1Lw==", "dependencies": { "JetBrains.HabitatDetector": "1.0.2" } }, "JetBrains.Profiler.SelfApi": { "type": "Transitive", "resolved": "2.5.0", "contentHash": "8dX8vSarO04JCm4n/RhDx2w/9mzKO+KI4rXtrt8AurGrKlhTgswuLZeGw5PuYsAUsJmmJrPBxJx4pTt/SW42aQ==", "dependencies": { "JetBrains.HabitatDetector": "1.0.2", "JetBrains.Profiler.Api": "1.4.0" } }, "Microsoft.CSharp": { "type": "Transitive", "resolved": "4.7.0", "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" }, "Microsoft.NETCore.Platforms": { "type": "Transitive", "resolved": "2.0.0", "contentHash": "VdLJOCXhZaEMY7Hm2GKiULmn7IEPFE4XC5LPSfBVCUIA8YLZVh846gtfBJalsPQF2PlzdD7ecX7DZEulJ402ZQ==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", "resolved": "1.1.3", "contentHash": "3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==" }, "Microsoft.Win32.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", "resolved": "4.5.0", "contentHash": "LuI1oG+24TUj1ZRQQjM5Ew73BKnZE5NZ/7eAdh1o8ST5dPhUnJvIkiIn2re3MwnkRy6ELRnvEbBxHP8uALKhJw==", "dependencies": { "Microsoft.NETCore.Platforms": "2.0.0" } }, "NETStandard.Library": { "type": "Transitive", "resolved": "1.6.1", "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.Win32.Primitives": "4.3.0", "System.AppContext": "4.3.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Console": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tools": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Calendars": "4.3.0", "System.IO": "4.3.0", "System.IO.Compression": "4.3.0", "System.IO.Compression.ZipFile": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Linq": "4.3.0", "System.Linq.Expressions": "4.3.0", "System.Net.Http": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Net.Sockets": "4.3.0", "System.ObjectModel": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Security.Cryptography.X509Certificates": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "System.Threading.Timer": "4.3.0", "System.Xml.ReaderWriter": "4.3.0", "System.Xml.XDocument": "4.3.0" } }, "NReco.LambdaParser": { "type": "Transitive", "resolved": "1.0.12", "contentHash": "f1nye8fMJCYfJeR+Qb7qlcvC8et4Y4TLf2GLfaFoeISgI+yisaJkbNSGfKCpFBNeVF/iPDkyFmr4J28dv342/Q==" }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" }, "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" }, "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" }, "runtime.native.System": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.IO.Compression": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.Net.Http": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.Security.Cryptography.Apple": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", "dependencies": { "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" } }, "runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", "dependencies": { "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" }, "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" }, "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" }, "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" }, "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" }, "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" }, "SharpZipLib": { "type": "Transitive", "resolved": "1.4.2", "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A==" }, "Sprache": { "type": "Transitive", "resolved": "2.3.1", "contentHash": "Q+mXeiTxiUYG3lKYF6TS82/SyB4F2613Q1yXTMwg4jWGHEEVC3yrzHtNcI4B3qnDI0+eJsezGJ0V+cToUytHWw==", "dependencies": { "System.Globalization": "4.3.0", "System.Linq": "4.3.0", "System.Private.Uri": "4.3.2", "System.Runtime": "4.3.0", "System.Text.RegularExpressions": "4.3.0" } }, "System.AppContext": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Buffers": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", "dependencies": { "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Collections": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Collections.Concurrent": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Collections.Immutable": { "type": "Transitive", "resolved": "7.0.0", "contentHash": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==" }, "System.Console": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Diagnostics.Tools": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Drawing.Common": { "type": "Transitive", "resolved": "4.5.1", "contentHash": "GiyeGi/v4xYDz1vCNFwFvhz9k1XddOG7VD3jxRqzRBCbTHji+s3HxxbxtoymuK4OadEpgotI8zQ5+GEEH9sUEQ==", "dependencies": { "Microsoft.NETCore.Platforms": "2.0.0", "Microsoft.Win32.SystemEvents": "4.5.0" } }, "System.Globalization": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Calendars": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.InteropServices": "4.3.0" } }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.IO.Compression": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.IO.Compression": "4.3.0" } }, "System.IO.Compression.ZipFile": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", "dependencies": { "System.Buffers": "4.3.0", "System.IO": "4.3.0", "System.IO.Compression": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.IO.FileSystem.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Linq": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0" } }, "System.Linq.Expressions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Linq": "4.3.0", "System.ObjectModel": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Emit": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Emit.Lightweight": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Reflection.TypeExtensions": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Threading": "4.3.0" } }, "System.Net.Http": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.DiagnosticSource": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Extensions": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Security.Cryptography.X509Certificates": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Net.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" } }, "System.Net.Sockets": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.ObjectModel": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Private.Uri": { "type": "Transitive", "resolved": "4.3.2", "contentHash": "o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.1", "Microsoft.NETCore.Targets": "1.1.3" } }, "System.Reflection": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", "dependencies": { "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit.ILGeneration": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit.Lightweight": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Reflection.TypeExtensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", "dependencies": { "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Resources.ResourceManager": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Runtime": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", "resolved": "4.5.2", "contentHash": "wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ==" }, "System.Runtime.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Runtime.Handles": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Runtime.InteropServices": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" } }, "System.Runtime.InteropServices.RuntimeInformation": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0" } }, "System.Runtime.Numerics": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", "dependencies": { "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0" } }, "System.Security.Cryptography.Algorithms": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.Apple": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Cng": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Security.Cryptography.Csp": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0" } }, "System.Security.Cryptography.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Linq": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", "dependencies": { "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", "dependencies": { "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Security.Cryptography.X509Certificates": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Calendars": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Cng": "4.3.0", "System.Security.Cryptography.Csp": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Text.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==" }, "System.Text.Encoding.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Text.RegularExpressions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Threading": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", "dependencies": { "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Threading.Tasks": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Threading.Tasks.Extensions": { "type": "Transitive", "resolved": "4.5.4", "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" }, "System.Threading.Timer": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Xml.ReaderWriter": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading.Tasks": "4.3.0", "System.Threading.Tasks.Extensions": "4.3.0" } }, "System.Xml.XDocument": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tools": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Xml.ReaderWriter": "4.3.0" } }, "ThisAssembly.Constants": { "type": "Transitive", "resolved": "1.4.1", "contentHash": "sV0CDYlC6YSIkYbdwd4+jRinLb888Dac71pmNhF2Ll6UXY1J+1oVt3EfmX6euXEKz2RLdfV+4GyZctfEA0NSqA==", "dependencies": { "Microsoft.CSharp": "4.7.0", "System.Threading.Tasks.Extensions": "4.5.4" } }, "diz.app.common": { "type": "Project", "dependencies": { "Diz.Controllers": "[1.0.0, )", "JetBrains.Annotations": "[2023.3.0, )", "LightInject": "[6.6.4, )" } }, "diz.controllers": { "type": "Project", "dependencies": { "Diz.Core": "[1.0.0, )", "Diz.Import": "[1.0.0, )", "Diz.LogWriter": "[1.0.0, )", "LightInject": "[6.6.4, )" } }, "diz.core": { "type": "Project", "dependencies": { "Diz.Core.Interfaces": "[1.0.0, )", "ExtendedXmlSerializer": "[3.9.6, )", "FluentValidation": "[11.9.0, )", "JetBrains.Annotations": "[2023.3.0, )", "JetBrains.Profiler.SelfApi": "[2.5.0, )", "LightInject": "[6.6.4, )", "SharpZipLib": "[1.4.2, )", "System.Diagnostics.Tracing": "[4.3.0, )", "System.Resources.Extensions": "[8.0.0, )", "System.Text.Encoding.CodePages": "[8.0.0, )" } }, "diz.core.interfaces": { "type": "Project" }, "diz.cpu.65816": { "type": "Project", "dependencies": { "Diz.Core": "[1.0.0, )", "Diz.Core.Interfaces": "[1.0.0, )" } }, "diz.import": { "type": "Project", "dependencies": { "Diz.Core": "[1.0.0, )", "Diz.Cpu.65816": "[1.0.0, )" } }, "diz.logwriter": { "type": "Project", "dependencies": { "CsvHelper": "[30.0.3, )", "Diz.Core": "[1.0.0, )", "Diz.Cpu.65816": "[1.0.0, )", "ExtendedXmlSerializer": "[3.9.6, )", "LightInject": "[6.6.4, )" } }, "diz.ui.winforms": { "type": "Project", "dependencies": { "ByteSize": "[2.1.2, )", "Diz.Controllers": "[1.0.0, )", "Diz.Core": "[1.0.0, )", "FastBitmapLib": "[2.1.0, )", "JetBrains.Annotations": "[2023.3.0, )", "LightInject": "[6.6.4, )" } } }, "net9.0-windows7.0/win-x64": { "Microsoft.Win32.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.win.Microsoft.Win32.Primitives": "4.3.0" } }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", "resolved": "4.5.0", "contentHash": "LuI1oG+24TUj1ZRQQjM5Ew73BKnZE5NZ/7eAdh1o8ST5dPhUnJvIkiIn2re3MwnkRy6ELRnvEbBxHP8uALKhJw==", "dependencies": { "Microsoft.NETCore.Platforms": "2.0.0" } }, "runtime.any.System.Collections": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==", "dependencies": { "System.Runtime": "4.3.0" } }, "runtime.any.System.Diagnostics.Tools": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "S/GPBmfPBB48ZghLxdDR7kDAJVAqgAuThyDJho3OLP5OS4tWD2ydyL8LKm8lhiBxce10OKe9X2zZ6DUjAqEbPg==" }, "runtime.any.System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ==" }, "runtime.any.System.Globalization": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "sMDBnad4rp4t7GY442Jux0MCUuKL4otn5BK6Ni0ARTXTSpRNBzZ7hpMfKSvnVSED5kYJm96YOWsqV0JH0d2uuw==" }, "runtime.any.System.Globalization.Calendars": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w==" }, "runtime.any.System.IO": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ==" }, "runtime.any.System.Reflection": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "hLC3A3rI8jipR5d9k7+f0MgRCW6texsAp0MWkN/ci18FMtQ9KH7E2vDn/DH2LkxsszlpJpOn9qy6Z6/69rH6eQ==" }, "runtime.any.System.Reflection.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "cPhT+Vqu52+cQQrDai/V91gubXUnDKNRvlBnH+hOgtGyHdC17aQIU64EaehwAQymd7kJA5rSrVRNfDYrbhnzyA==" }, "runtime.any.System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Nrm1p3armp6TTf2xuvaa+jGTTmncALWFq22CpmwRvhDf6dE9ZmH40EbOswD4GnFLrMRS0Ki6Kx5aUPmKK/hZBg==" }, "runtime.any.System.Resources.ResourceManager": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ==" }, "runtime.any.System.Runtime": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==", "dependencies": { "System.Private.Uri": "4.3.0" } }, "runtime.any.System.Runtime.Handles": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GG84X6vufoEzqx8PbeBKheE4srOhimv+yLtGb/JkR3Y2FmoqmueLNFU4Xx8Y67plFpltQSdK74x0qlEhIpv/CQ==" }, "runtime.any.System.Runtime.InteropServices": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "lBoFeQfxe/4eqjPi46E0LU/YaCMdNkQ8B4MZu/mkzdIAZh8RQ1NYZSj0egrQKdgdvlPFtP4STtob40r4o2DBAw==" }, "runtime.any.System.Text.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "+ihI5VaXFCMVPJNstG4O4eo1CfbrByLxRrQQTqOTp1ttK0kUKDqOdBSTaCB2IBk/QtjDrs6+x4xuezyMXdm0HQ==" }, "runtime.any.System.Text.Encoding.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "NLrxmLsfRrOuVqPWG+2lrQZnE53MLVeo+w9c54EV+TUo4c8rILpsDXfY8pPiOy9kHpUHHP07ugKmtsU3vVW5Jg==" }, "runtime.any.System.Threading.Tasks": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w==" }, "runtime.any.System.Threading.Timer": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "w4ehZJ+AwXYmGwYu+rMvym6RvMaRiUEQR1u6dwcyuKHxz8Heu/mO9AG1MquEgTyucnhv3M43X0iKpDOoN17C0w==" }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" }, "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" }, "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" }, "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" }, "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" }, "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" }, "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" }, "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" }, "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" }, "runtime.win.Microsoft.Win32.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==", "dependencies": { "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0" } }, "runtime.win.System.Console": { "type": "Transitive", "resolved": "4.3.1", "contentHash": "vHPXC3B18dxhyipVce8xQT1MQv1o5srYZqBlCNu9p9MNjhgGOntdQh/Xh2X4o7M2F839YUcQiGwu8Q498FyDjg==", "dependencies": { "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "runtime.win.System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g==" }, "runtime.win.System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==", "dependencies": { "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Overlapped": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "runtime.win.System.Net.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "lkXXykakvXUU+Zq2j0pC6EO20lEhijjqMc01XXpp1CJN+DeCwl3nsj4t5Xbpz3kA7yQyTqw6d9SyIzsyLsV3zA==", "dependencies": { "Microsoft.Win32.Primitives": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Threading": "4.3.0" } }, "runtime.win.System.Net.Sockets": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Net.NameResolution": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Principal.Windows": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Overlapped": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "runtime.win.System.Runtime.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==", "dependencies": { "System.Private.Uri": "4.3.0" } }, "System.Buffers": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", "dependencies": { "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Collections": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Collections": "4.3.0" } }, "System.Console": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.win.System.Console": "4.3.1" } }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.win.System.Diagnostics.Debug": "4.3.0" } }, "System.Diagnostics.Tools": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Diagnostics.Tools": "4.3.0" } }, "System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Diagnostics.Tracing": "4.3.0" } }, "System.Drawing.Common": { "type": "Transitive", "resolved": "4.5.1", "contentHash": "GiyeGi/v4xYDz1vCNFwFvhz9k1XddOG7VD3jxRqzRBCbTHji+s3HxxbxtoymuK4OadEpgotI8zQ5+GEEH9sUEQ==", "dependencies": { "Microsoft.NETCore.Platforms": "2.0.0", "Microsoft.Win32.SystemEvents": "4.5.0" } }, "System.Globalization": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Globalization": "4.3.0" } }, "System.Globalization.Calendars": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Runtime": "4.3.0", "runtime.any.System.Globalization.Calendars": "4.3.0" } }, "System.Globalization.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.InteropServices": "4.3.0" } }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.any.System.IO": "4.3.0" } }, "System.IO.Compression": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.IO.Compression": "4.3.0" } }, "System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.win.System.IO.FileSystem": "4.3.0" } }, "System.Net.Http": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.DiagnosticSource": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Extensions": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Security.Cryptography.X509Certificates": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Net.NameResolution": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "AFYl08R7MrsrEjqpQWTZWBadqXyTzNDaWpMqyxhb0d6sGhV6xMDKueuBXlLL30gz+DIRY6MpdgnHWlCh5wmq9w==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Principal.Windows": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0" } }, "System.Net.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "runtime.win.System.Net.Primitives": "4.3.0" } }, "System.Net.Sockets": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.win.System.Net.Sockets": "4.3.0" } }, "System.Reflection": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0", "runtime.any.System.Reflection": "4.3.0" } }, "System.Reflection.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0", "runtime.any.System.Reflection.Extensions": "4.3.0" } }, "System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Reflection.Primitives": "4.3.0" } }, "System.Resources.ResourceManager": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0", "runtime.any.System.Resources.ResourceManager": "4.3.0" } }, "System.Runtime": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "runtime.any.System.Runtime": "4.3.0" } }, "System.Runtime.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.win.System.Runtime.Extensions": "4.3.0" } }, "System.Runtime.Handles": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Runtime.Handles": "4.3.0" } }, "System.Runtime.InteropServices": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "runtime.any.System.Runtime.InteropServices": "4.3.0" } }, "System.Runtime.InteropServices.RuntimeInformation": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0" } }, "System.Security.Claims": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", "dependencies": { "System.Collections": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Security.Principal": "4.3.0" } }, "System.Security.Cryptography.Algorithms": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.Apple": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Cng": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Security.Cryptography.Csp": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0" } }, "System.Security.Cryptography.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Linq": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", "dependencies": { "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.X509Certificates": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Calendars": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Cng": "4.3.0", "System.Security.Cryptography.Csp": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Principal": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Security.Principal.Windows": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "HVL1rvqYtnRCxFsYag/2le/ZfKLK4yMw79+s6FmKXbSCNN0JeAhrYxnRAHFoWRa0dEojsDcbBSpH3l22QxAVyw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.Win32.Primitives": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Claims": "4.3.0", "System.Security.Principal": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0" } }, "System.Text.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Text.Encoding": "4.3.0" } }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==" }, "System.Text.Encoding.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.any.System.Text.Encoding.Extensions": "4.3.0" } }, "System.Threading.Overlapped": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "m3HQ2dPiX/DSTpf+yJt8B0c+SRvzfqAJKx+QDWi+VLhz8svLT23MVjEOHPF/KiSLeArKU/iHescrbLd3yVgyNg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" } }, "System.Threading.Tasks": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Threading.Tasks": "4.3.0" } }, "System.Threading.Timer": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Threading.Timer": "4.3.0" } } }, "net9.0-windows7.0/win-x86": { "Microsoft.Win32.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.win.Microsoft.Win32.Primitives": "4.3.0" } }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", "resolved": "4.5.0", "contentHash": "LuI1oG+24TUj1ZRQQjM5Ew73BKnZE5NZ/7eAdh1o8ST5dPhUnJvIkiIn2re3MwnkRy6ELRnvEbBxHP8uALKhJw==", "dependencies": { "Microsoft.NETCore.Platforms": "2.0.0" } }, "runtime.any.System.Collections": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==", "dependencies": { "System.Runtime": "4.3.0" } }, "runtime.any.System.Diagnostics.Tools": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "S/GPBmfPBB48ZghLxdDR7kDAJVAqgAuThyDJho3OLP5OS4tWD2ydyL8LKm8lhiBxce10OKe9X2zZ6DUjAqEbPg==" }, "runtime.any.System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ==" }, "runtime.any.System.Globalization": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "sMDBnad4rp4t7GY442Jux0MCUuKL4otn5BK6Ni0ARTXTSpRNBzZ7hpMfKSvnVSED5kYJm96YOWsqV0JH0d2uuw==" }, "runtime.any.System.Globalization.Calendars": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w==" }, "runtime.any.System.IO": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ==" }, "runtime.any.System.Reflection": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "hLC3A3rI8jipR5d9k7+f0MgRCW6texsAp0MWkN/ci18FMtQ9KH7E2vDn/DH2LkxsszlpJpOn9qy6Z6/69rH6eQ==" }, "runtime.any.System.Reflection.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "cPhT+Vqu52+cQQrDai/V91gubXUnDKNRvlBnH+hOgtGyHdC17aQIU64EaehwAQymd7kJA5rSrVRNfDYrbhnzyA==" }, "runtime.any.System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Nrm1p3armp6TTf2xuvaa+jGTTmncALWFq22CpmwRvhDf6dE9ZmH40EbOswD4GnFLrMRS0Ki6Kx5aUPmKK/hZBg==" }, "runtime.any.System.Resources.ResourceManager": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ==" }, "runtime.any.System.Runtime": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==", "dependencies": { "System.Private.Uri": "4.3.0" } }, "runtime.any.System.Runtime.Handles": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GG84X6vufoEzqx8PbeBKheE4srOhimv+yLtGb/JkR3Y2FmoqmueLNFU4Xx8Y67plFpltQSdK74x0qlEhIpv/CQ==" }, "runtime.any.System.Runtime.InteropServices": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "lBoFeQfxe/4eqjPi46E0LU/YaCMdNkQ8B4MZu/mkzdIAZh8RQ1NYZSj0egrQKdgdvlPFtP4STtob40r4o2DBAw==" }, "runtime.any.System.Text.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "+ihI5VaXFCMVPJNstG4O4eo1CfbrByLxRrQQTqOTp1ttK0kUKDqOdBSTaCB2IBk/QtjDrs6+x4xuezyMXdm0HQ==" }, "runtime.any.System.Text.Encoding.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "NLrxmLsfRrOuVqPWG+2lrQZnE53MLVeo+w9c54EV+TUo4c8rILpsDXfY8pPiOy9kHpUHHP07ugKmtsU3vVW5Jg==" }, "runtime.any.System.Threading.Tasks": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w==" }, "runtime.any.System.Threading.Timer": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "w4ehZJ+AwXYmGwYu+rMvym6RvMaRiUEQR1u6dwcyuKHxz8Heu/mO9AG1MquEgTyucnhv3M43X0iKpDOoN17C0w==" }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" }, "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" }, "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" }, "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" }, "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" }, "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" }, "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" }, "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" }, "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" }, "runtime.win.Microsoft.Win32.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==", "dependencies": { "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0" } }, "runtime.win.System.Console": { "type": "Transitive", "resolved": "4.3.1", "contentHash": "vHPXC3B18dxhyipVce8xQT1MQv1o5srYZqBlCNu9p9MNjhgGOntdQh/Xh2X4o7M2F839YUcQiGwu8Q498FyDjg==", "dependencies": { "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "runtime.win.System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g==" }, "runtime.win.System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==", "dependencies": { "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Overlapped": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "runtime.win.System.Net.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "lkXXykakvXUU+Zq2j0pC6EO20lEhijjqMc01XXpp1CJN+DeCwl3nsj4t5Xbpz3kA7yQyTqw6d9SyIzsyLsV3zA==", "dependencies": { "Microsoft.Win32.Primitives": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Threading": "4.3.0" } }, "runtime.win.System.Net.Sockets": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Net.NameResolution": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Principal.Windows": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Overlapped": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "runtime.win.System.Runtime.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==", "dependencies": { "System.Private.Uri": "4.3.0" } }, "System.Buffers": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", "dependencies": { "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Collections": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Collections": "4.3.0" } }, "System.Console": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.win.System.Console": "4.3.1" } }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.win.System.Diagnostics.Debug": "4.3.0" } }, "System.Diagnostics.Tools": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Diagnostics.Tools": "4.3.0" } }, "System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Diagnostics.Tracing": "4.3.0" } }, "System.Drawing.Common": { "type": "Transitive", "resolved": "4.5.1", "contentHash": "GiyeGi/v4xYDz1vCNFwFvhz9k1XddOG7VD3jxRqzRBCbTHji+s3HxxbxtoymuK4OadEpgotI8zQ5+GEEH9sUEQ==", "dependencies": { "Microsoft.NETCore.Platforms": "2.0.0", "Microsoft.Win32.SystemEvents": "4.5.0" } }, "System.Globalization": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Globalization": "4.3.0" } }, "System.Globalization.Calendars": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Runtime": "4.3.0", "runtime.any.System.Globalization.Calendars": "4.3.0" } }, "System.Globalization.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.InteropServices": "4.3.0" } }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.any.System.IO": "4.3.0" } }, "System.IO.Compression": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.IO.Compression": "4.3.0" } }, "System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.win.System.IO.FileSystem": "4.3.0" } }, "System.Net.Http": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.DiagnosticSource": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Extensions": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Security.Cryptography.X509Certificates": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Net.NameResolution": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "AFYl08R7MrsrEjqpQWTZWBadqXyTzNDaWpMqyxhb0d6sGhV6xMDKueuBXlLL30gz+DIRY6MpdgnHWlCh5wmq9w==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Principal.Windows": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0" } }, "System.Net.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "runtime.win.System.Net.Primitives": "4.3.0" } }, "System.Net.Sockets": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.win.System.Net.Sockets": "4.3.0" } }, "System.Reflection": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0", "runtime.any.System.Reflection": "4.3.0" } }, "System.Reflection.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0", "runtime.any.System.Reflection.Extensions": "4.3.0" } }, "System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Reflection.Primitives": "4.3.0" } }, "System.Resources.ResourceManager": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0", "runtime.any.System.Resources.ResourceManager": "4.3.0" } }, "System.Runtime": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "runtime.any.System.Runtime": "4.3.0" } }, "System.Runtime.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.win.System.Runtime.Extensions": "4.3.0" } }, "System.Runtime.Handles": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Runtime.Handles": "4.3.0" } }, "System.Runtime.InteropServices": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "runtime.any.System.Runtime.InteropServices": "4.3.0" } }, "System.Runtime.InteropServices.RuntimeInformation": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0" } }, "System.Security.Claims": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", "dependencies": { "System.Collections": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Security.Principal": "4.3.0" } }, "System.Security.Cryptography.Algorithms": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.Apple": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Cng": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Security.Cryptography.Csp": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0" } }, "System.Security.Cryptography.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Linq": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", "dependencies": { "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.X509Certificates": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Calendars": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Cng": "4.3.0", "System.Security.Cryptography.Csp": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Principal": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Security.Principal.Windows": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "HVL1rvqYtnRCxFsYag/2le/ZfKLK4yMw79+s6FmKXbSCNN0JeAhrYxnRAHFoWRa0dEojsDcbBSpH3l22QxAVyw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.Win32.Primitives": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Claims": "4.3.0", "System.Security.Principal": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0" } }, "System.Text.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Text.Encoding": "4.3.0" } }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==" }, "System.Text.Encoding.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.any.System.Text.Encoding.Extensions": "4.3.0" } }, "System.Threading.Overlapped": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "m3HQ2dPiX/DSTpf+yJt8B0c+SRvzfqAJKx+QDWi+VLhz8svLT23MVjEOHPF/KiSLeArKU/iHescrbLd3yVgyNg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" } }, "System.Threading.Tasks": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Threading.Tasks": "4.3.0" } }, "System.Threading.Timer": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "runtime.any.System.Threading.Timer": "4.3.0" } } } } } ================================================ FILE: Diz.Controllers/Diz.Controllers/Diz.Controllers.csproj ================================================ net9.0 true true true 6.6.4 ================================================ FILE: Diz.Controllers/Diz.Controllers/packages.lock.json ================================================ { "version": 1, "dependencies": { "net9.0": { "LightInject": { "type": "Direct", "requested": "[6.6.4, )", "resolved": "6.6.4", "contentHash": "xId1F9OpzVvyNu3wcdPR4EcNUihcT5U9wiUJOi0tetuDOia1uAiFJzqmYGdRPsqAsgDb6o8sfoQCx5yMFFDsVw==" }, "CsvHelper": { "type": "Transitive", "resolved": "30.0.3", "contentHash": "OK4xEoPKFZYZ2Km+ZTGRxuLo33u+ipKVCC9ICCGn5JRiAmPLRsCPZ/shL3HKGPwS33MQSPcPHigI4HnX3Q47yg==" }, "ExtendedXmlSerializer": { "type": "Transitive", "resolved": "3.9.6", "contentHash": "kwnF5RjDwzle4cpUN4AWOCBAbntCkLQez5SIl2cY6hamWL33vEYu5Pp35BKkg/oklXnvaYobzJrFezRi9dl9tA==", "dependencies": { "LightInject": "6.6.1", "NReco.LambdaParser": "1.0.12", "Sprache": "2.3.1", "System.Collections.Immutable": "7.0.0" } }, "FluentValidation": { "type": "Transitive", "resolved": "11.9.0", "contentHash": "VneVlTvwYDkfHV5av3QrQ0amALgrLX6LV94wlYyEsh0B/klJBW7C8y2eAtj5tOZ3jH6CAVpr4s1ZGgew/QWyig==" }, "JetBrains.Annotations": { "type": "Transitive", "resolved": "2023.3.0", "contentHash": "PHfnvdBUdGaTVG9bR/GEfxgTwWM0Z97Y6X3710wiljELBISipSfF5okn/vz+C2gfO+ihoEyVPjaJwn8ZalVukA==" }, "JetBrains.FormatRipper": { "type": "Transitive", "resolved": "2.0.1", "contentHash": "9J+lWdztAczSqwgvOfMiTxEaaV6ONXY27Hq9VGbgzr9sUX8F5HCSvnd2/4J9xD1US4VL+ZPrREyRBl9NNbSGbw==", "dependencies": { "NETStandard.Library": "1.6.1" } }, "JetBrains.HabitatDetector": { "type": "Transitive", "resolved": "1.0.2", "contentHash": "WQfQekJ2+BxM6+5anNhYWLyd6F4CRHW7pj8YoRXe6M5MDfPsZdYP0epx1+cHJkJuf0aeTB2JRK4KeEPW4UM8AQ==", "dependencies": { "JetBrains.FormatRipper": "2.0.1" } }, "JetBrains.Profiler.Api": { "type": "Transitive", "resolved": "1.4.0", "contentHash": "r5xP8m9U6uHApcMyoL5yZL/Ltqz7auBo0MaboGdQoaawNpYnYr9PC3FFe+0mNT2pyOhuAfQC7WL/Gxb8M0v1Lw==", "dependencies": { "JetBrains.HabitatDetector": "1.0.2" } }, "JetBrains.Profiler.SelfApi": { "type": "Transitive", "resolved": "2.5.0", "contentHash": "8dX8vSarO04JCm4n/RhDx2w/9mzKO+KI4rXtrt8AurGrKlhTgswuLZeGw5PuYsAUsJmmJrPBxJx4pTt/SW42aQ==", "dependencies": { "JetBrains.HabitatDetector": "1.0.2", "JetBrains.Profiler.Api": "1.4.0" } }, "Microsoft.NETCore.Platforms": { "type": "Transitive", "resolved": "1.1.1", "contentHash": "TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", "resolved": "1.1.3", "contentHash": "3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==" }, "Microsoft.Win32.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "NETStandard.Library": { "type": "Transitive", "resolved": "1.6.1", "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.Win32.Primitives": "4.3.0", "System.AppContext": "4.3.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Console": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tools": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Calendars": "4.3.0", "System.IO": "4.3.0", "System.IO.Compression": "4.3.0", "System.IO.Compression.ZipFile": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Linq": "4.3.0", "System.Linq.Expressions": "4.3.0", "System.Net.Http": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Net.Sockets": "4.3.0", "System.ObjectModel": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Security.Cryptography.X509Certificates": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "System.Threading.Timer": "4.3.0", "System.Xml.ReaderWriter": "4.3.0", "System.Xml.XDocument": "4.3.0" } }, "NReco.LambdaParser": { "type": "Transitive", "resolved": "1.0.12", "contentHash": "f1nye8fMJCYfJeR+Qb7qlcvC8et4Y4TLf2GLfaFoeISgI+yisaJkbNSGfKCpFBNeVF/iPDkyFmr4J28dv342/Q==" }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" }, "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" }, "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" }, "runtime.native.System": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.IO.Compression": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.Net.Http": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "runtime.native.System.Security.Cryptography.Apple": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", "dependencies": { "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" } }, "runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", "dependencies": { "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" }, "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" }, "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" }, "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" }, "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" }, "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" }, "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" }, "SharpZipLib": { "type": "Transitive", "resolved": "1.4.2", "contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A==" }, "Sprache": { "type": "Transitive", "resolved": "2.3.1", "contentHash": "Q+mXeiTxiUYG3lKYF6TS82/SyB4F2613Q1yXTMwg4jWGHEEVC3yrzHtNcI4B3qnDI0+eJsezGJ0V+cToUytHWw==", "dependencies": { "System.Globalization": "4.3.0", "System.Linq": "4.3.0", "System.Private.Uri": "4.3.2", "System.Runtime": "4.3.0", "System.Text.RegularExpressions": "4.3.0" } }, "System.AppContext": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Buffers": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", "dependencies": { "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Collections": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Collections.Concurrent": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Collections.Immutable": { "type": "Transitive", "resolved": "7.0.0", "contentHash": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==" }, "System.Console": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Diagnostics.Tools": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Globalization": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Calendars": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Globalization.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.InteropServices": "4.3.0" } }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.IO.Compression": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Buffers": "4.3.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.IO.Compression": "4.3.0" } }, "System.IO.Compression.ZipFile": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", "dependencies": { "System.Buffers": "4.3.0", "System.IO": "4.3.0", "System.IO.Compression": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.IO.FileSystem.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Linq": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0" } }, "System.Linq.Expressions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Linq": "4.3.0", "System.ObjectModel": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Emit": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Emit.Lightweight": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Reflection.TypeExtensions": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Threading": "4.3.0" } }, "System.Net.Http": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.DiagnosticSource": "4.3.0", "System.Diagnostics.Tracing": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Extensions": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Security.Cryptography.X509Certificates": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Net.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" } }, "System.Net.Sockets": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Net.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.ObjectModel": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0" } }, "System.Private.Uri": { "type": "Transitive", "resolved": "4.3.2", "contentHash": "o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.1", "Microsoft.NETCore.Targets": "1.1.3" } }, "System.Reflection": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", "dependencies": { "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit.ILGeneration": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Emit.Lightweight": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Emit.ILGeneration": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Reflection.TypeExtensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", "dependencies": { "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Resources.Extensions": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==" }, "System.Resources.ResourceManager": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Runtime": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "System.Runtime.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Runtime.Handles": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Runtime.InteropServices": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Reflection": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Handles": "4.3.0" } }, "System.Runtime.InteropServices.RuntimeInformation": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", "dependencies": { "System.Reflection": "4.3.0", "System.Reflection.Extensions": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0" } }, "System.Runtime.Numerics": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", "dependencies": { "System.Globalization": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0" } }, "System.Security.Cryptography.Algorithms": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.Apple": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Cng": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Security.Cryptography.Csp": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0" } }, "System.Security.Cryptography.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Linq": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.OpenSsl": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", "dependencies": { "System.Collections": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", "dependencies": { "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Security.Cryptography.X509Certificates": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.Globalization.Calendars": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.Handles": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Runtime.Numerics": "4.3.0", "System.Security.Cryptography.Algorithms": "4.3.0", "System.Security.Cryptography.Cng": "4.3.0", "System.Security.Cryptography.Csp": "4.3.0", "System.Security.Cryptography.Encoding": "4.3.0", "System.Security.Cryptography.OpenSsl": "4.3.0", "System.Security.Cryptography.Primitives": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "runtime.native.System": "4.3.0", "runtime.native.System.Net.Http": "4.3.0", "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Text.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "8.0.0", "contentHash": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==" }, "System.Text.Encoding.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0" } }, "System.Text.RegularExpressions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Threading": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", "dependencies": { "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Threading.Tasks": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Threading.Tasks.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", "dependencies": { "System.Collections": "4.3.0", "System.Runtime": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Threading.Timer": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Xml.ReaderWriter": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.IO.FileSystem": "4.3.0", "System.IO.FileSystem.Primitives": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Runtime.InteropServices": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading.Tasks": "4.3.0", "System.Threading.Tasks.Extensions": "4.3.0" } }, "System.Xml.XDocument": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Diagnostics.Tools": "4.3.0", "System.Globalization": "4.3.0", "System.IO": "4.3.0", "System.Reflection": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading": "4.3.0", "System.Xml.ReaderWriter": "4.3.0" } }, "diz.core": { "type": "Project", "dependencies": { "Diz.Core.Interfaces": "[1.0.0, )", "ExtendedXmlSerializer": "[3.9.6, )", "FluentValidation": "[11.9.0, )", "JetBrains.Annotations": "[2023.3.0, )", "JetBrains.Profiler.SelfApi": "[2.5.0, )", "LightInject": "[6.6.4, )", "SharpZipLib": "[1.4.2, )", "System.Diagnostics.Tracing": "[4.3.0, )", "System.Resources.Extensions": "[8.0.0, )", "System.Text.Encoding.CodePages": "[8.0.0, )" } }, "diz.core.interfaces": { "type": "Project" }, "diz.cpu.65816": { "type": "Project", "dependencies": { "Diz.Core": "[1.0.0, )", "Diz.Core.Interfaces": "[1.0.0, )" } }, "diz.import": { "type": "Project", "dependencies": { "Diz.Core": "[1.0.0, )", "Diz.Cpu.65816": "[1.0.0, )" } }, "diz.logwriter": { "type": "Project", "dependencies": { "CsvHelper": "[30.0.3, )", "Diz.Core": "[1.0.0, )", "Diz.Cpu.65816": "[1.0.0, )", "ExtendedXmlSerializer": "[3.9.6, )", "LightInject": "[6.6.4, )" } } } } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/AssemblyInfo.cs ================================================ using Diz.Controllers.services; using LightInject; [assembly: CompositionRootType(typeof(DizControllersCompositionRoot))] ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/IImportRomDialogController.cs ================================================ using Diz.Controllers.interfaces; using Diz.Core.serialization; using Diz.Cpu._65816.import; namespace Diz.Controllers.controllers; public interface IImportRomDialogController { IImportRomDialogView View { get; set; } public ISnesRomImportSettingsBuilder Builder { get; } public event SettingsCreatedEvent OnBuilderInitialized; string CartridgeTitle { get; } string RomSpeedText { get; } ImportRomSettings PromptUserForImportOptions(string romFilename); delegate void SettingsCreatedEvent(); bool Submit(); public int ReadRomVectorTableEntryValueWord(int vectorEntryTableStartOffset); bool IsProbablyValidDetection(); string GetDetectionMessage(); } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/IProjectView.cs ================================================ using System; using System.Collections.Generic; using Diz.Controllers.interfaces; using Diz.Core.model; using Diz.LogWriter; namespace Diz.Controllers.controllers { public interface ILongRunningTaskHandler { public delegate void LongRunningTaskHandler(Action task, string description, IProgressView progressView); LongRunningTaskHandler TaskHandler { get; } } public interface IMainGridWindowView : IProjectView, IFormViewer { } public interface IProjectView : ILongRunningTaskHandler, ISnesNavigation { Project Project { get; set; } void OnProjectOpenFail(string errorMsg); void OnProjectSaved(); void OnExportFinished(LogCreatorOutput.OutputResult result); string AskToSelectNewRomFilename(string promptSubject, string promptText); void OnProjectOpenWarnings(IEnumerable warnings); } public interface ISnesNavigation { public class HistoryArgs { public string Description { get; set; } public string Position { get; set; } } /// /// Select a PC offset /// /// PC [not SNES] offset /// if non-null, record this event in the project history void SelectOffset(int pcOffset, HistoryArgs historyArgs = null); void SelectOffsetWithOvershoot(int pcOffset, int overshootAmount = 0); // get the PC offset of the currently selected row in the view public int SelectedOffset { get; } } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/ImportROMDialogController.cs ================================================ using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Diz.Controllers.interfaces; using Diz.Core.Interfaces; using Diz.Core.serialization; using Diz.Core.util; using Diz.Cpu._65816; using Diz.Cpu._65816.import; using JetBrains.Annotations; namespace Diz.Controllers.controllers; [SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")] public class ImportRomDialogController : IImportRomDialogController { public IImportRomDialogView View { get; set; } public ISnesRomImportSettingsBuilder Builder { get; } public event IImportRomDialogController.SettingsCreatedEvent OnBuilderInitialized; private readonly ICommonGui commonGui; public int RomSettingsOffset { get { if (Builder.Input.AnalysisResults == null) return -1; return RomUtil.GetRomSettingOffset(Builder.OptionSelectedRomMapMode); } } public IReadOnlyList RomBytes => Builder.Input.RomBytes; public RomSpeed RomSpeed => Builder.Input.AnalysisResults?.RomSpeed ?? RomSpeed.Unknown; public string CartridgeTitle => RomUtil.GetCartridgeTitleFromRom(RomBytes, RomSettingsOffset); public string RomSpeedText => Util.GetEnumDescription(RomSpeed); public string GetDetectionMessage() { string msg = null; if (Builder.Input.AnalysisResults is { DetectedRomMapModeCorrectly: true }) msg = RomMapModeText; return msg ?? "Couldn't auto detect ROM Map Mode!"; } [CanBeNull] public string RomMapModeText { get { var romMapModeTxt = Builder?.Input?.AnalysisResults?.RomMapMode; return romMapModeTxt != null ? Util.GetEnumDescription(romMapModeTxt) : null; } } public ImportRomDialogController(ICommonGui commonGui, IImportRomDialogView view, ISnesRomImportSettingsBuilder builder) { this.commonGui = commonGui; Builder = builder; View = view; } public ImportRomSettings PromptUserForImportOptions(string romFilename) { return !PromptUserForOptions(romFilename) ? null : Builder.GenerateSettings(); } private string romFileNameAnalyzed = ""; private bool PromptUserForOptions(string romFilename) { Debug.Assert(Builder != null); romFileNameAnalyzed = romFilename; ReAnalyze(); Builder.PropertyChanged += BuilderOnPropertyChanged; OnBuilderInitialized?.Invoke(); Refresh(); var result = View.ShowAndWaitForUserToConfirmSettings(); Refresh(); Builder.PropertyChanged -= BuilderOnPropertyChanged; View = null; return result; } private void ReAnalyze() { Builder.Analyze(romFileNameAnalyzed); } private void BuilderOnPropertyChanged(object sender, PropertyChangedEventArgs e) { Refresh(); } private bool IsOffsetInRange(int offset) => Builder.Input.RomBytes != null && offset > 0 && offset <= Builder.Input.RomBytes.Count; public bool IsProbablyValidDetection() => Builder.Input.AnalysisResults != null && Builder.Input.AnalysisResults.RomSpeed != RomSpeed.Unknown && IsOffsetInRange(Builder.Input.RomSettingsOffset ?? -1); private void Refresh() { View?.RefreshUi(); SyncVectorTableEntriesFromGui(); } private void SyncVectorTableEntriesFromGui() { Builder.OptionClearGenerateVectorTableLabels(); foreach (var vectorEntry in View.EnabledVectorTableEntries) { Builder.OptionSetGenerateVectorTableLabelFor(vectorEntry, true); } } private bool Warn(string msg) { return commonGui.PromptToConfirmAction(msg + "\nIf you proceed with this import, imported data might be wrong.\n" + "Proceed anyway?\n\n (Experts only, otherwise say No)"); } public bool Submit() { if (Builder == null) { Warn("Internal error (couldn't build new ROM import settings). Aborting"); return false; } var analysisResults = Builder.Input.AnalysisResults; if (analysisResults == null) { Warn("Internal error (Rom analysis results were empty). Aborting"); return false; } if (!analysisResults.DetectedRomMapModeCorrectly) { if (!Warn("ROM Map type couldn't be detected.")) return false; } else if (analysisResults.RomMapMode != Builder.OptionSelectedRomMapMode) { if (!Warn("The ROM map type selected is different than what was detected.")) return false; } return true; } public int ReadRomVectorTableEntryValueWord(int vectorEntryTableStartOffset) { Debug.Assert(vectorEntryTableStartOffset % 2 == 0); var romOffset = RomSettingsOffset + CpuVectorTable.VectorTableSettingsOffset + vectorEntryTableStartOffset; return ReadRomWord(romOffset); } private int ReadRomWord(int romOffset) => RomBytes[romOffset] + (RomBytes[romOffset + 1] << 8); } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/LogCreatorExportSettingsEditorController.cs ================================================ #nullable enable using System; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Runtime.CompilerServices; using Diz.Controllers.interfaces; using Diz.Core.export; using Diz.Core.util; using Diz.LogWriter.util; using JetBrains.Annotations; namespace Diz.Controllers.controllers; [UsedImplicitly] public class LogCreatorSettingsEditorController : ILogCreatorSettingsEditorController { private enum PromptCreateDirResult { AlreadyExists, DontWantToCreateItNow, DidCreateItNow, } public LogWriterSettings Settings { get => settings; set => this.SetField(PropertyChanged, ref settings, value); } public string? KeepPathsRelativeToThisPath { get => keepPathsRelativeToThisPath; set => this.SetField(PropertyChanged, ref keepPathsRelativeToThisPath, value); } public ILogCreatorSettingsEditorView View { get; set; } public event EventHandler? Closed; public event PropertyChangedEventHandler? PropertyChanged; private LogWriterSettings settings = new(); private string? keepPathsRelativeToThisPath; private readonly IFilesystemService fs; public LogCreatorSettingsEditorController(ILogCreatorSettingsEditorView view, IFilesystemService fs, Func sampleAssemblyOutputFactory) { this.fs = fs; this.sampleAssemblyOutputFactory = sampleAssemblyOutputFactory; Debug.Assert(fs != null); View = view; View.Controller = this; View.OnFormClosed += OnClosed; } /// /// Show settings editor UI for user to edit. /// NOTE: edited settings don't have to be valid when this returns. /// /// True if settings were saved, false if user cancelled the operation and we should discard edits public bool PromptSetupAndValidateExportSettings() => View.PromptEditAndConfirmSettings(); [NotifyPropertyChangedInvocator] public void OnPropertyChanged([CallerMemberName] string? propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); public bool EnsureSelectRealOutputDirectory(bool forcePrompt = false) { var result = PromptToCreateOutputDirIfNeeded("Press YES to create and use this path, NO to select a new path instead."); if (result == PromptCreateDirResult.DidCreateItNow) return true; var shouldPrompt = forcePrompt || result == PromptCreateDirResult.DontWantToCreateItNow; if (shouldPrompt && !PromptForPath()) return false; return PromptToCreateOutputDirIfNeeded() is PromptCreateDirResult.AlreadyExists or PromptCreateDirResult.DidCreateItNow; } private readonly Func sampleAssemblyOutputFactory; public string GetSampleOutput() { try { var sampleAssemblyTextGenerator = sampleAssemblyOutputFactory(Settings); return sampleAssemblyTextGenerator.GetSampleAssemblyOutput().AssemblyOutputStr; } catch (Exception ex) { return $"Invalid format or sample output: {ex.Message}"; } } /// /// If the output directory doesn't exist, ask the user if they'd like to create it. /// /// true if the directory exists (either already existing or was just created), false if user chose not to create it private PromptCreateDirResult PromptToCreateOutputDirIfNeeded(string extraMsg = "") { if (DoesOutputDirExist()) return PromptCreateDirResult.AlreadyExists; // already exists, so we're good. // doesn't exist, ask if they want to create it now if (!View.PromptCreatePath(Settings.BuildFullOutputPath(), extraMsg)) return PromptCreateDirResult.DontWantToCreateItNow; // they don't want to create it now // yes, they want to create the directory now CreateOutputDirIfNeeded(); return PromptCreateDirResult.DidCreateItNow; } private void CreateOutputDirIfNeeded() { if (DoesOutputDirExist()) return; // TODO: catch exceptions here. var outputDirectoryName = GetOutputDirectoryName(); if (!string.IsNullOrEmpty(outputDirectoryName)) fs.CreateDirectory(outputDirectoryName); } private bool PromptForPath() { var askForFile = Settings.Structure == LogWriterSettings.FormatStructure.SingleFile; var selectedFileOrFolderOutPath = View.PromptForLogPathFromFileOrFolderDialog(askForFile); if (string.IsNullOrEmpty(selectedFileOrFolderOutPath)) return false; Settings = Settings.WithPathRelativeTo(selectedFileOrFolderOutPath, KeepPathsRelativeToThisPath); return true; } private string? GetOutputDirectoryName() => Path.GetDirectoryName(Settings.BuildFullOutputPath()); private bool DoesOutputDirExist() => fs.DirectoryExists(GetOutputDirectoryName()); private void OnClosed(object? sender, EventArgs eventArgs) => Closed?.Invoke(sender, eventArgs); public bool ValidateExportSettings() { return Settings.IsValid(fs); } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/MarkManyController.cs ================================================ using System; using System.Collections.Generic; using Diz.Controllers.interfaces; using Diz.Core; using Diz.Core.commands; using Diz.Core.Interfaces; using Diz.Core.util; namespace Diz.Controllers.controllers; public class MarkManyController : IMarkManyController where TDataSource : IRomSize { public IDataRange DataRange { get; } public TDataSource Data { get; } public IMarkManyView MarkManyView { get; } public int DesiredStartingCount { get; set; } = 0x10; public MarkManyController(int offset, MarkCommand.MarkManyProperty initialProperty, TDataSource data, IMarkManyView view) { Data = data; MarkManyView = view; MarkManyView.Controller = this; DataRange = new CorrectingRange(Data.GetRomSize()); DataRange.StartIndex = offset; DataRange.RangeCount = Math.Min( DesiredStartingCount, DataRange.MaxCount - DataRange.StartIndex ); MarkManyView.Property = initialProperty; } private MarkCommand CreateCommandFromView() => new() { Start = DataRange.StartIndex, Count = DataRange.RangeCount, Value = MarkManyView.GetPropertyValue(), Property = MarkManyView.Property, }; public MarkCommand GetMarkCommand() { // attempt to set to previous values from last run, if they are compatible MarkManyView.AttemptSetSettings(Settings); var command = !MarkManyView.PromptDialog() ? null : CreateCommandFromView(); Settings = MarkManyView.SaveCurrentSettings(); return command; } public Dictionary Settings { get; set; } = new(); } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/NavigationEntry.cs ================================================ using System.ComponentModel; using System.ComponentModel.DataAnnotations; using Diz.Core.model.snes; using Diz.Core.util; using JetBrains.Annotations; namespace Diz.Controllers.controllers { public class NavigationEntry { [Browsable(false)] public Data Data { get; } [Browsable(false)] public int SnesOffset { get; } public NavigationEntry(int snesOffset, [CanBeNull] ISnesNavigation.HistoryArgs historyArgs, Data data) { SnesOffset = snesOffset; Description = historyArgs?.Description ?? ""; Position = historyArgs?.Position ?? ""; Data = data; } [DisplayName("SNES Offset")] [Editable(false)] public string Address => Util.ToHexString6(SnesOffset); [Editable(false)] public string Description { get; } [Editable(false)] public string Position { get; } } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/ProgressBarWorker.cs ================================================ using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using Diz.Controllers.interfaces; namespace Diz.Controllers.controllers { // TODO: replace this with Task and async/await. don't use threads directly. public abstract class ProgressBarWorker { public IProgressView View { get; set; } public bool IsMarquee { get; init; } public string TextOverride { get; init; } private bool isRunning; private Thread backgroundThread; protected ProgressBarWorker(IProgressView view) { View = view; } protected void UpdateProgress(int i) { Debug.Assert(i >= 0 && i <= 100); View?.Report(i); } protected abstract void Thread_DoWork(); // call from main thread to start a long-running job // // shows a progress bar dialog box while the work is being performed // note: we're not being super-careful about thread safety here. // if main thread is blocked it should be fine, but, if other things can // still happen in the background, be really careful. public void Run() { Setup(); backgroundThread.Start(); WaitForJobToFinish(); } protected virtual void Setup() { if (isRunning) throw new InvalidOperationException( "Progress bar already running, existing job must finish first"); isRunning = true; Debug.Assert(View != null); View.IsMarquee = IsMarquee; View.TextOverride = TextOverride; // setup, but don't start, the new thread backgroundThread = new Thread(Thread_Main); // honestly, not sure about this. works around some weird Invoke() stuff // this all needs to be ripped out. there's another branch with the WIP version of that. if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { backgroundThread.SetApartmentState(ApartmentState.STA); } } // blocking function private void WaitForJobToFinish() { // blocks til worker thread closes this dialog box View.PromptDialog(); } // called from a new worker thread private void Thread_Main() { try { // BAD APPROACH. we should instead get an event // I'm too lazy right now. TODO FIXME // TODO: fix: in Eto we can't call .Visible from the non-UI thread while (!View.IsVisible()) Thread.Sleep(50); Thread_DoWork(); } finally { isRunning = false; SignalJobIsDone(); } } private void SignalJobIsDone() { // unblock the main thread from ShowDialog() View?.SignalJobIsDone(); } } // a version that keeps calling 'callback' until it returns -1 public class ProgressBarJob : ProgressBarWorker { // a version that calls action once and exits // shows a "marquee" i.e. spinner public static void RunAndWaitForCompletion(Action action, string overrideTxt, IProgressView progressView) { Debug.Assert(progressView != null); var j = new ProgressBarJob(progressView) { MaxProgress = -1, Callback = () => { action(); return -1; }, IsMarquee = (long)-1 == -1, TextOverride = overrideTxt, }; j.Run(); } public NextAction Callback { get; set; } public long MaxProgress { get; set; } protected override void Thread_DoWork() { UpdateProgress(0); var progress = -1L; do { progress = Callback(); UpdateProgress(progress); } while (progress > 0); } private int previousProgress; protected void UpdateProgress(long currentProgress) { if (MaxProgress <= 0) return; var percent = currentProgress / (float)MaxProgress; var progressValue = (int)(percent * 100); if (progressValue <= previousProgress) return; // don't do this too often, kinda slow due to thread synchronization. base.UpdateProgress(progressValue); previousProgress = progressValue; } // return > 0 to continue. return value will be used to indicate progress in range of [0 -> MaxProgress] public delegate long NextAction(); public ProgressBarJob(IProgressView view) : base(view) { } } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/ProjectController.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using Diz.Controllers.interfaces; using Diz.Core; using Diz.Core.export; using Diz.Core.model; using Diz.Core.serialization; using Diz.Core.serialization.xml_serializer; using Diz.Core.util; using Diz.Cpu._65816; using Diz.Import; using Diz.Import.bizhawk; using Diz.Import.bsnes.tracelog; using Diz.Import.bsnes.usagemap; using Diz.LogWriter; using Diz.LogWriter.util; using JetBrains.Annotations; namespace Diz.Controllers.controllers; [SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")] public class ProjectController( ICommonGui commonGui, IFilesystemService fs, IControllerFactory controllerFactory, Func projectImporterFactoryCreate, Func projectFileManagerCreate, Func progressViewFactoryCreate) : IProjectController { public IProjectView ProjectView { get; set; } public Project Project { get; private set; } public event IProjectController.ProjectChangedEvent ProjectChanged; // there's probably better ways to handle this. // probably replace with a UI like "start task" and "stop task" // so we can flip up a progress bar and remove it. public void DoLongRunningTask(Action task, string description = null) { if (ProjectView.TaskHandler == null) { // fallback task(); return; } // normal way to do it: var progressBarView = progressViewFactoryCreate(); ProjectView.TaskHandler(task, description, progressBarView); } public bool OpenProject(string filename) { ProjectOpenResult projectOpenResult = null; var errorMsg = ""; DoLongRunningTask(delegate { try { projectOpenResult = CreateProjectFileManager().Open(filename); } catch (AggregateException ex) { projectOpenResult = null; errorMsg = ex.InnerExceptions.Select(e => e.Message).Aggregate((line, val) => line += val + "\n"); } catch (Exception ex) { projectOpenResult = null; errorMsg = ex.Message; } }, $"Opening {Path.GetFileName(filename)}..."); if (projectOpenResult == null) { ProjectView.OnProjectOpenFail(errorMsg); return false; } var warnings = projectOpenResult.OpenResult.Warnings; if (warnings.Count > 0) ProjectView.OnProjectOpenWarnings(warnings); OnProjectOpenSuccess(filename, projectOpenResult.Root.Project); return true; } private IProjectFileManager CreateProjectFileManager() { var projectFileManager = projectFileManagerCreate(); projectFileManager.RomPromptFn = AskToSelectNewRomFilename; return projectFileManager; } private void OnProjectOpenSuccess(string filename, Project project) { ProjectView.Project = Project = project; Project.PropertyChanged += Project_PropertyChanged; ProjectChanged?.Invoke(this, new IProjectController.ProjectChangedEventArgs { ChangeType = IProjectController.ProjectChangedEventArgs.ProjectChangedType.Opened, Filename = filename, Project = project, }); } private void Project_PropertyChanged(object sender, PropertyChangedEventArgs e) { // TODO: use this to listen to interesting change events in Project/Data // so we can react appropriately. } public string SaveProject(string filename) { try { var emptyFilename = string.IsNullOrEmpty(filename); if (emptyFilename) throw new ArgumentException("empty filename specified", nameof(filename)); string err = null; DoLongRunningTask( () => err = CreateProjectFileManager().Save(Project, filename), $"Saving {Path.GetFileName(filename)}..." ); if (err != null) return err; } catch (Exception ex) { return ex.Message; } ProjectView.OnProjectSaved(); return null; } public void ImportBizHawkCdl(string filename) { BizHawkCdlImporter.Import(filename, Project.Data.GetSnesApi() ?? throw new InvalidOperationException("Project has no SNES API Present")); ProjectChanged?.Invoke(this, new IProjectController.ProjectChangedEventArgs { ChangeType = IProjectController.ProjectChangedEventArgs.ProjectChangedType.Imported, Filename = filename, Project = Project, }); } public bool ImportRomAndCreateNewProject(string romFilename) { var importController = SetupImportController(); var importSettings = importController.PromptUserForImportOptions(romFilename); if (importSettings == null) return false; CloseProject(); ImportRomAndCreateNewProject(importSettings); return true; } private void ImportRomAndCreateNewProject(ImportRomSettings importSettings) { var importer = projectImporterFactoryCreate.Invoke(importSettings); var project = importer.Read(); if (project != null) { OnProjectOpenSuccess(project.ProjectFileName, project); } } private IImportRomDialogController SetupImportController() { // let the user select settings on the GUI var importController = controllerFactory.GetImportRomDialogController(); importController.View.Controller = importController; return importController; } public void ImportLabelsCsv(ILabelEditorView labelEditor, bool replaceAll) { var importFilename = labelEditor.PromptForCsvFilename(); if (string.IsNullOrEmpty(importFilename)) return; var errLine = 0; try { Project.Data.Labels.ImportLabelsFromCsv(importFilename, replaceAll, smartMerge: true, out errLine); labelEditor.RepopulateFromData(); } catch (Exception ex) { labelEditor.ShowLineItemError(ex.Message, errLine); } } private string AskToSelectNewRomFilename(string error) => ProjectView.AskToSelectNewRomFilename("Error", $"{error}\n\nLink a new ROM now?"); public void WriteAssemblyOutput() { WriteAssemblyOutput(Project.LogWriterSettings, true); } private void WriteAssemblyOutput(LogWriterSettings settings, bool showProgressBarUpdates = false) { var lc = new LogCreator { Settings = settings, Data = new LogCreatorByteSource(Project.Data), }; LogCreatorOutput.OutputResult result = null; DoLongRunningTask(() => result = lc.CreateLog(), "Exporting assembly source code..."); ProjectView.OnExportFinished(result); } public void UpdateExportSettings(LogWriterSettings selectedSettings) { if (Project == null) return; var projectHadUnsavedChanges = Project.Session?.UnsavedChanges ?? false; var exportSettingsChanged = !Project.LogWriterSettings.Equals(selectedSettings); Project.LogWriterSettings = selectedSettings; if (Project.Session != null && exportSettingsChanged && !projectHadUnsavedChanges) Project.Session.UnsavedChanges = true; } public void MarkChanged() { // eventually set this via INotifyPropertyChanged or similar. if (Project.Session != null) Project.Session.UnsavedChanges = true; } public void SelectOffset(int offset, [CanBeNull] ISnesNavigation.HistoryArgs historyArgs = null) => ProjectView.SelectOffset(offset, historyArgs); public void NormalizeWramLabels() { if (!commonGui.PromptToConfirmAction( "This converts all WRAM labels (where possible and non-overlapping) to the $7E/$7F range. Proceed?")) return; Project.Data.GetSnesApi()?.NormalizeWramLabels(); } public int FixMisalignedFlags() { var countModified = Project.Data.GetSnesApi()?.FixMisalignedFlags() ?? 0; if (countModified > 0) MarkChanged(); return countModified; } public bool RescanForInOut() { var snesData = Project.Data.GetSnesApi(); if (snesData == null) return false; snesData.RescanInOutPoints(); MarkChanged(); return true; } public long ImportBsnesUsageMap(string fileName) { var snesData = Project?.Data.GetSnesApi(); if (snesData == null) return 0; var linesModified = 0; DoLongRunningTask(() => { // 1. run the BSNES import usage map var importer = new BsnesUsageMapImporter( usageMap: File.ReadAllBytes(fileName), snesData: snesData, onlyMarkIfUnreached: Project.ProjectSettings.BsnesUsageMapImportOnlyChangedUnmarked ); linesModified = importer.Run(); // 2. to clean it up a little, run our "fixup" stuff. FixMisalignedFlags(); RescanForInOut(); }, "Import usage map + fixup flags + rescan IN/Out"); if (linesModified > 0) MarkChanged(); return linesModified; } public long ImportBsnesTraceLogs(string[] fileNames) { var importer = new BsnesTraceLogImporter(Project.Data.GetSnesApi()); // TODO: differentiate between binary-formatted and text-formatted files // probably look for a newline within 80 characters // call importer.ImportTraceLogLineBinary() var largeFilesReader = controllerFactory.GetLargeFileReaderProgressController(); // caution: trace logs can be gigantic, even a few seconds can be > 1GB // inside here, performance becomes critical. largeFilesReader.Filenames = new List(fileNames); largeFilesReader.LineReadCallback = line => importer.ImportTraceLogLine(line); largeFilesReader.Run(); if (importer.CurrentStats.NumRomBytesModified > 0) MarkChanged(); return importer.CurrentStats.NumRomBytesModified; } public long ImportBsnesTraceLogsBinary(IEnumerable filenames, BsnesTraceLogCaptureController.TraceLogCaptureSettings workItemCaptureSettings) { var importer = new BsnesTraceLogImporter(Project.Data.GetSnesApi()); foreach (var file in filenames) { using Stream source = File.OpenRead(file); const int bytesPerPacket = 22; var buffer = new byte[bytesPerPacket]; int bytesRead; while ((bytesRead = source.Read(buffer, 0, bytesPerPacket)) > 0) { Debug.Assert(bytesRead == 22); importer.ImportTraceLogLineBinary(buffer, true, workItemCaptureSettings); } } importer.CopyTempGeneratedCommentsIntoMainSnesData(); return importer.CurrentStats.NumRomBytesModified; } public void CloseProject() { if (Project == null) return; ProjectChanged?.Invoke(this, new IProjectController.ProjectChangedEventArgs { ChangeType = IProjectController.ProjectChangedEventArgs.ProjectChangedType.Closing }); Project = null; } /// /// Confirm with user that the project export settings are valid, then start exporting. /// /// True if we exported assembly, false if we didn't / aborted. public bool ConfirmSettingsThenExportAssembly() { var newlyEditedSettings = ShowSettingsEditorUntilValid(); return WriteAssemblyOutputIfSettingsValid(newlyEditedSettings); } /// /// Export assembly using current project settings (fails if settings not currently valid) /// /// True if we exported assembly, false if we didn't / aborted. public bool ExportAssemblyWithCurrentSettings() => WriteAssemblyOutputIfSettingsValid() || ConfirmSettingsThenExportAssembly(); [CanBeNull] public LogWriterSettings ShowSettingsEditorUntilValid() { LogWriterSettings newlyEditedSettings = null; do { var shouldAskUserToContinue = newlyEditedSettings != null; if (shouldAskUserToContinue && !PromptUserTryAgainOrAbortExport()) return null; newlyEditedSettings = ShowExportSettingsEditor(); if (newlyEditedSettings == null) return null; } while (!newlyEditedSettings.IsValid(fs)); return newlyEditedSettings; } private bool PromptUserTryAgainOrAbortExport() => commonGui.PromptToConfirmAction("Can't export assembly because export settings are invalid. Edit now?"); public bool WriteAssemblyOutputIfSettingsValid() => WriteAssemblyOutputIfSettingsValid(Project?.LogWriterSettings); public bool WriteAssemblyOutputIfSettingsValid(LogWriterSettings settingsToUseAndSave) { if (settingsToUseAndSave == null || !settingsToUseAndSave.IsValid(fs)) return false; // must have saved the project first if (Project.Session?.ProjectDirectory.Length == 0) return false; // save asm exporter settings UpdateExportSettings(settingsToUseAndSave); // OPTIONAL: save the project file, just in case anything goes wrong during export if (Project?.ProjectFileName != "") SaveProject(Project?.ProjectFileName); // do the real output WriteAssemblyOutput(); return true; } [CanBeNull] private LogWriterSettings ShowExportSettingsEditor() { var exportSettingsController = CreateExportSettingsEditorController(); return !(exportSettingsController?.PromptSetupAndValidateExportSettings() ?? false) ? null : exportSettingsController.Settings; } [CanBeNull] private ILogCreatorSettingsEditorController CreateExportSettingsEditorController() { if (Project == null) return null; var exportSettingsController = controllerFactory.GetAssemblyExporterSettingsController(); exportSettingsController.KeepPathsRelativeToThisPath = Project.Session?.ProjectDirectory ?? ""; exportSettingsController.Settings = Project.LogWriterSettings with { }; // operate on a new copy of the settings return exportSettingsController; } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/ProjectOpenerGuiController.cs ================================================ namespace Diz.Controllers.controllers; // this is for Diz3, re-enable if still useful later. /*public class ProjectOpenerGuiController { private readonly IProgressView progressView; public ProjectOpenerGuiController(IProgressView progressView) { this.progressView = progressView; } public IProjectOpenerHandler Handler { get; init; } public Project OpenProject(string filename) { Project project = null; var errorMsg = ""; var warningMsg = ""; DoLongRunningTask(() => { try { var (project1, warning) = new ProjectFileManager() { RomPromptFn = Handler.AskToSelectNewRomFilename }.Open(filename); project = project1; warningMsg = warning; } catch (AggregateException ex) { project = null; errorMsg = ex.InnerExceptions.Select(e => e.Message).Aggregate((line, val) => line += val + "\n"); } catch (Exception ex) { project = null; errorMsg = ex.Message; } }, $"Opening {Path.GetFileName(filename)}..."); if (project == null) { Handler.OnProjectOpenFail(errorMsg); return null; } if (warningMsg != "") Handler.OnProjectOpenWarning(warningMsg); Handler.OnProjectOpenSuccess(filename, project); return project; } private void DoLongRunningTask(Action task, string description) { if (Handler.TaskHandler != null) Handler.TaskHandler(task, description, progressView); else task(); } }*/ ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/ProjectsController.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using Diz.Controllers.interfaces; using Diz.Core; using Diz.Core.model; namespace Diz.Controllers.controllers { /// /// Loads and caches Project objects, and stores references to the last loaded project. /// public class ProjectsManager : IProjectsManager { private readonly IProjectLoader projectLoader; public Dictionary LoadedProjects { get; } = new(); // this needs some rework, it's used all over the place in odd ways. public static string LastOpenedProjectFilename { get; set; } public ProjectsManager(IProjectLoader projectLoader) { this.projectLoader = projectLoader; } /// /// Get a loaded project associated with the filename /// If it's already loaded, we'll return a copy of the loaded project. This may /// be shared with already opened views. If it's not loaded, load from disk. /// /// /// public Project GetProject(string filename) { if (string.IsNullOrEmpty(filename)) return null; if (LoadedProjects.ContainsKey(filename)) return LoadedProjects[filename]; var project = projectLoader.LoadProject(filename); if (project == null) return null; LoadedProjects.Add(filename, project); return project; } /// /// Get a sample project, loaded from hardcoded data inside the app itself. Suitable for testing/demo purposes /// and doesn't need to read anything from the disk. /// /// Demo project with demo ROM loaded public Project GetSampleProject() => GetProject(ProjectLoaderWithSampleDataDecorator.MagicSampleProjectName); public Project GetLastOpenedProject() { // this is kinda messy/dumb, rethink. Debug.Assert(LoadedProjects.Values.Count == 1); return LoadedProjects.Values.Select(project => project).FirstOrDefault(); } public void OpenProjectFile(string filename) { if (filename == null) return; AfterProjectOpenAttempt(filename, GetProject(filename)); } public void OpenLastLoadedProject() => AfterProjectOpenAttempt("", GetLastOpenedProject()); private void AfterProjectOpenAttempt(string filenameAttempted, Project loadedProject) { if (loadedProject == null) { var filenameInfo = !string.IsNullOrEmpty(filenameAttempted) ? $" (filename={filenameAttempted})" : ""; throw new InvalidDataException($"Failed to open project{filenameInfo}"); } OnProjectOpened?.Invoke(this, loadedProject); } public event EventHandler OnProjectOpened; } /// /// Interface to Load Project objects /// public interface IProjectLoader { public Project LoadProject(string filename); } /// /// A loader that reads from disk /// public class ProjectFileLoader : IProjectLoader { public IProjectOpenerHandler ProjectOpenerHandler { get; init; } public Project LoadProject(string filename) { return ProjectOpenerHandler?.OpenProject(filename, showPopupAlertOnLoaded: false); } } /// /// A decorator for IProjectLoader that returns a project created from our internal sample data /// (instead of data from disk). Pass in the special string constant here to use. /// TODO: integrate this with the other ISnesSampleProjectFactory interface, they duplicate the same functionality. /// public class ProjectLoaderWithSampleDataDecorator : IProjectLoader { // pass in this magic string to load the "sample data" project. // great for testing and for showing sample stuff in the app. // // ReSharper disable once MemberCanBeProtected.Global public const string MagicSampleProjectName = "sampleproject111111112"; private readonly IProjectLoader previous; private readonly ISampleDataFactory sampleDataFactory; public ProjectLoaderWithSampleDataDecorator(IProjectLoader previous, ISampleDataFactory sampleDataFactory) { Debug.Assert(previous != null); this.previous = previous; this.sampleDataFactory = sampleDataFactory; } public Project LoadProject(string filename) { return filename != MagicSampleProjectName ? previous.LoadProject(filename) : CreateNewSampleProject(); } private Project CreateNewSampleProject() { var project = new Project { Data = sampleDataFactory.Create(), }; project.Session = new ProjectSession(project, MagicSampleProjectName); return project; } } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/controllers/StartFormController.cs ================================================ // using System; // using System.Diagnostics; // using Diz.Controllers.interfaces; // // namespace Diz.Controllers.controllers // { // public class StartFormController : IStartFormController // { // public IStartFormViewer View { get; } // // // public StartFormController(IStartFormViewer view) // { // Debug.Assert(view != null); // View = view; // View.Closed += ViewOnClosed; // } // // public void Show() => View.Show(); // // [Obsolete] // public event EventHandler Closed; // // private void ViewOnClosed(object sender, EventArgs e) => Closed?.Invoke(this, e); // } // } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/interfaces/IControllers.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using Diz.Controllers.controllers; using Diz.Core; using Diz.Core.commands; using Diz.Core.export; using Diz.Core.model; using Diz.Core.util; using Diz.Cpu._65816; using JetBrains.Annotations; // NOTE: lots of these interfaces were created temporarily for major refactoring. // when that process is finished, we should probably take a pass here to simplify anything // that ended up being unnecessary or over-complicated namespace Diz.Controllers.interfaces; // public interface IStartFormController : IFormViewer // { // public IStartFormViewer View { get; } // } // public interface IProjectController : ITraceLogImporters, IFixInstructionUtils, IDataUtilities { // diz3.0 is going to need some major surgery from this one. public Project Project { get; } public class ProjectChangedEventArgs { public enum ProjectChangedType { Invalid, Saved, Opened, Imported, Closing } public ProjectChangedType ChangeType; public Project Project; public string Filename; } delegate void ProjectChangedEvent(object sender, ProjectChangedEventArgs e); event ProjectChangedEvent ProjectChanged; IProjectView ProjectView { get; set; } bool OpenProject(string filename); // older signature string SaveProject(string filename); // older signature. new should return void bool ImportRomAndCreateNewProject(string romFilename); void ImportLabelsCsv(ILabelEditorView labelEditor, bool replaceAll); void SelectOffset(int offset, [CanBeNull] ISnesNavigation.HistoryArgs historyArgs = null); bool ConfirmSettingsThenExportAssembly(); bool ExportAssemblyWithCurrentSettings(); void MarkChanged(); // rename to MarkUnsaved or similar in Diz3.0 } public interface IProjectOpenerHandler : ILongRunningTaskHandler { public void OnProjectOpenSuccess(string filename, Project project); public void OnProjectOpenWarnings(IReadOnlyList warnings); public void OnProjectOpenFail(string fatalError); public string AskToSelectNewRomFilename(string error); Project OpenProject(string filename, bool showPopupAlertOnLoaded); } public interface IExportDisassembly { void UpdateExportSettings(LogWriterSettings selectedSettings); void WriteAssemblyOutput(); } public interface IFixInstructionUtils { // probably combine this with something else. // not sure that this should really be an interface but... bool RescanForInOut(); } public interface ITraceLogImporters { void ImportBizHawkCdl(string filename); long ImportBsnesUsageMap(string fileName); long ImportBsnesTraceLogs(string[] fileNames); } public interface IProjectNavigation { public int SelectedSnesOffset { get; set; } void GoTo(int offset); void GoToUnreached(bool end, bool direction); void GoToIntermediateAddress(int offset); // void OnUserChangedSelection(ByteEntry newSelection); } public interface ILabelImporter { void ImportLabelsCsv(ILabelEditorView labelEditor, bool replaceAll); } #if DIZ_3_BRANCH public interface IMainFormController : IFormController, // TODO: shouldn't have the word 'Grid' in here for Main Form controller. refactor // either naming or functionality. // IBytesGridViewerDataController, IProjectController, I65816CpuOperations, IExportDisassembly, IProjectOpenerHandler, ITraceLogImporters, IProjectNavigation, ILabelImporter { public FlagType CurrentMarkFlag { get; set; } public bool MoveWithStep { get; set; } void SetProject(string filename, Project project); } #endif public interface IMarkManyController { IDataRange DataRange { get; } TDataSource Data { get; } MarkCommand GetMarkCommand(); } public interface ILogCreatorSettingsEditorController : INotifyPropertyChangedExt { ILogCreatorSettingsEditorView View { get; set; } LogWriterSettings Settings { get; set; } public string KeepPathsRelativeToThisPath { get; set; } bool PromptSetupAndValidateExportSettings(); bool EnsureSelectRealOutputDirectory(bool forcePrompt = false); string GetSampleOutput(); } public interface IDizAppSettings : INotifyPropertyChanged { string LastProjectFilename { get; set; } bool OpenLastFileAutomatically { get; set; } } public interface IDizDocument : INotifyPropertyChanged { Project Project { get; set; } string LastProjectFilename { get; set; } public BindingList NavigationHistory { get; set; } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/interfaces/IViewers.cs ================================================ using System; using System.Collections.Generic; using Diz.Controllers.controllers; using Diz.Core.commands; using Diz.Core.Interfaces; using JetBrains.Annotations; namespace Diz.Controllers.interfaces; public interface IFormViewer { public event EventHandler OnFormClosed; // void Close(); void Show(); void BringFormToTop(); } public interface IModalDialog { /// /// Show the dialog to the user and wait for them to complete /// the steps on the view /// /// True if steps were completed and we have a valid result bool PromptDialog(); } public interface IProgressView : IFormViewer, IModalDialog, IProgress { public bool IsMarquee { get; set; } public string TextOverride { get; set; } bool IsVisible(); /// /// Signal that a job (potentially running in another task/thread) has completed. /// CAUTION: Implementers should use thread-safety measures, this may be called /// from a different thread than any other calls /// void SignalJobIsDone(); } // diz2 version (use it) public interface IMarkManyView : IModalDialog where TDataSource : IRomSize { MarkCommand.MarkManyProperty Property { get; set; } object GetPropertyValue(); [CanBeNull] IMarkManyController Controller { get; set; } void AttemptSetSettings(Dictionary settings); Dictionary SaveCurrentSettings(); } #if DIZ_3_BRANCH public interface IBytesGridViewer : IRowBaseViewer, IViewer { public List DataSource { get; set; } int TargetNumberOfRowsToShow { get; } void SelectRow(int row); void BeginEditingSelectionComment(); void BeginEditingSelectionLabel(); public class SelectedOffsetChangedEventArgs : EventArgs { public TByteItem Row { get; init; } public int RowIndex { get; init; } } public delegate void SelectedOffsetChange(object sender, SelectedOffsetChangedEventArgs e); public event SelectedOffsetChange SelectedOffsetChanged; } #endif public interface ILabelEditorView : IFormViewer { // a lot of these fields/methods shouldn't be done this way string PromptForCsvFilename(); // get rid of void ShowLineItemError(string exMessage, int errLine); // get rid of void SetProjectController([CanBeNull] IProjectController projectController); void RepopulateFromData(); // keep void RebindProject(); // keep void FocusOrCreateLabelAtSelectedRomOffsetIa(); void FocusOrCreateLabelAtRomOffsetIa(int selectedOffset); void FocusOrCreateLabelAtSnesAddress(int snesAddress); } public interface IRegionListView : IFormViewer { void SetProjectController([CanBeNull] IProjectController projectController); void RebindProject(); } public interface IImportRomDialogView { IImportRomDialogController Controller { get; set; } public List EnabledVectorTableEntries { get; } bool ShowAndWaitForUserToConfirmSettings(); void RefreshUi(); } public interface ICommonGui { bool PromptToConfirmAction(string msg); void ShowError(string msg); void ShowWarning(string msg); void ShowMessage(string msg); } public interface ILogCreatorSettingsEditorView : IFormViewer { ILogCreatorSettingsEditorController Controller { get; set; } [CanBeNull] string PromptForLogPathFromFileOrFolderDialog(bool askForFile); bool PromptCreatePath(string buildFullOutputPath, string extraMsg); /// /// Main method, return true if we showed the dialog and edited successfully. /// /// bool PromptEditAndConfirmSettings(); } #if DIZ_3_BRANCH public interface IDataGridEditorForm : IFormViewer, IProjectView { IMainFormController MainFormController { get; set; } } #endif ================================================ FILE: Diz.Controllers/Diz.Controllers/src/interfaces/Interfaces.cs ================================================ using System; using Diz.Controllers.controllers; using Diz.Controllers.util; using Diz.Core.model; // using Diz.Core.model.byteSources; using Diz.Core.model.snes; namespace Diz.Controllers.interfaces; public interface IDizApp { void Run(string initialProjectFileToOpen = ""); } public interface IGridRow { Data Data { get; init; } TItem Item { get; } } #if DIZ_3_BRANCH public interface IDataGridRow : IGridRow, INotifyPropertyChanged { } public interface IDataSubsetRomByteDataGridLoader : IDataSubsetLoader { // probably this needs to be refactored away, this exists for dependency injection resolution only // across the Controller and Gui layer public IBytesGridViewer View { get; set; } public Data Data { get; set; } } #endif public interface IProjectsManager : IProjects, IProjectLoadListener, ISampleProjectLoader, ILastProjectLoaded { } public interface IProjectLoadListener { public event EventHandler OnProjectOpened; void OpenProjectFile(string filename); } public interface IProjects { Project GetProject(string filename); } public interface ISampleProjectLoader { Project GetSampleProject(); } public interface ILastProjectLoaded { Project GetLastOpenedProject(); void OpenLastLoadedProject(); } // note: this is an autofactory, so the names of the methods map to registrations (strings) public interface IViewFactory { IImportRomDialogView GetImportRomView(); IProgressView GetProgressBarView(); ILogCreatorSettingsEditorView GetExportDisassemblyView(); ILabelEditorView GetLabelEditorView(); IMainGridWindowView GetMainGridWindowView(); IFormViewer GetAboutView(); IRegionListView GetRegionEditorView(); } public interface IControllerFactory { ILogCreatorSettingsEditorController GetAssemblyExporterSettingsController(); IImportRomDialogController GetImportRomDialogController(); ILargeFilesReaderController GetLargeFileReaderProgressController(); } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/services/Registration.cs ================================================ // using Diz.Controllers.controllers; using Diz.Controllers.controllers; using Diz.Controllers.interfaces; using Diz.Controllers.util; using JetBrains.Annotations; using LightInject; namespace Diz.Controllers.services; [UsedImplicitly] public class DizControllersCompositionRoot : ICompositionRoot { public void Compose(IServiceRegistry serviceRegistry) { serviceRegistry.Register("ProjectController"); serviceRegistry.Register("AssemblyExporterSettingsController"); serviceRegistry.Register("ImportRomDialogController"); serviceRegistry.Register("LargeFileReaderProgressController"); serviceRegistry.EnableAutoFactories(); serviceRegistry.RegisterAutoFactory(); serviceRegistry.Register(); // sorry this is all a huge WIP mess, cleanup incoming soon. // serviceRegistry.Register( // (factory, offset, whichIndex, data) => // { // // TODO: update this with updated controller from Diz 2.0 branch. // // I think that means kill 'whichIndex', use the new format that doesn't rely on it. // var view = factory.GetInstance(); // var markManyController = new MarkManyController(offset, whichIndex, data, view); // markManyController.MarkManyView.Controller = markManyController; // return markManyController; // }); // TODO: might be able to make some of these register using // "open generics" to be more flexible. #if DIZ_3_BRANCH serviceRegistry.Register( typeof(IDataController), typeof(RomByteDataBindingController>) ); serviceRegistry.Register(); serviceRegistry.Register( typeof(IBytesGridDataController<,>), typeof(RomByteDataBindingController<>) ); serviceRegistry.Register( typeof(IBytesGridDataController), typeof(RomByteDataBindingGridController) ); serviceRegistry.Register(); serviceRegistry.Register(); serviceRegistry.Register(); serviceRegistry.Decorate( typeof(IProjectLoader), typeof(ProjectLoaderWithSampleDataDecorator)); serviceRegistry.Register(); serviceRegistry.RegisterSingleton("SampleProjectLoader"); #endif } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/util/DizDocument.cs ================================================ #nullable enable using System.ComponentModel; using Diz.Controllers.controllers; using Diz.Controllers.interfaces; using Diz.Core.model; using Diz.Core.util; using JetBrains.Annotations; namespace Diz.Controllers.util; /// /// This class is for GUI internal use only, it should never be serialized. /// It represents the current "open document" (usually a thin wrapper around a Project) /// Anything that should persist should go inside Project instead. /// /// This can store some per-user settings that get saved locally. /// Don't save anything important here though. /// [UsedImplicitly] public class DizDocument : IDizDocument { private readonly IDizAppSettings appSettings; public Project? Project { get => project; set => this.SetField(PropertyChanged, ref project, value, compareRefOnly: true); } private Project? project; public string LastProjectFilename { get => appSettings.LastProjectFilename; set { var projectName = appSettings.LastProjectFilename; this.SetField(PropertyChanged, ref projectName, value); appSettings.LastProjectFilename = projectName; } } public BindingList NavigationHistory { get => navigationHistory; set => this.SetField(PropertyChanged, ref navigationHistory, value); } private BindingList navigationHistory = new() { RaiseListChangedEvents = true, AllowNew = false, AllowRemove = false, AllowEdit = false, }; public DizDocument(IDizAppSettings appSettings) { this.appSettings = appSettings; } public event PropertyChangedEventHandler? PropertyChanged; } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/util/LargeFilesReader.cs ================================================ using System; using System.Collections.Generic; using System.IO; using Diz.Controllers.controllers; using Diz.Controllers.interfaces; using Diz.Core.util; namespace Diz.Controllers.util { public class LargeFilesReader : ProgressBarWorker, ILargeFilesReaderController { public IReadOnlyCollection Filenames { get; set; } public Action LineReadCallback { get; set; } protected long SumFileLengthsInBytes { get; set; } protected long BytesReadFromPreviousFiles { get; set; } protected override void Thread_DoWork() { SumFileLengthsInBytes = 0L; foreach (var filename in Filenames) { SumFileLengthsInBytes += Util.GetFileSizeInBytes(filename); } BytesReadFromPreviousFiles = 0L; foreach (var filename in Filenames) { using var fs = File.Open(filename, FileMode.Open, FileAccess.Read); using var bs = new BufferedStream(fs); using var sr = new StreamReader(bs); string line; while ((line = sr.ReadLine()) != null) { LineReadCallback(line); UpdateProgress(fs.Position); } BytesReadFromPreviousFiles += fs.Length; } } private int previousProgress; protected void UpdateProgress(long currentPositionInBytes) { var percent = (BytesReadFromPreviousFiles + currentPositionInBytes) / (float)SumFileLengthsInBytes; var progressValue = (int)(percent * 100); if (progressValue <= previousProgress) return; // don't do this too often, kinda slow due to thread synchronization. base.UpdateProgress(progressValue); previousProgress = progressValue; } public LargeFilesReader(IProgressView view) : base(view) { } } public interface ILargeFilesReaderController { IReadOnlyCollection Filenames { get; set; } Action LineReadCallback { get; set; } void Run(); } } ================================================ FILE: Diz.Controllers/Diz.Controllers/src/util/RomByteRowBase.cs ================================================ // using Diz.Core.model.byteSources; #if DIZ_3_BRANCH namespace Diz.Controllers.util { public class RomByteRowBase : INotifyPropertyChangedExt { [DisplayName("Label")] [Editable(true)] // [CellStyleFormatter(GetBackColorInOut)] public string Label { get => Data.Labels.GetLabelName(Data.ConvertPCtoSnes(ByteEntry.ParentIndex)); // todo (validate for valid label characters) // (note: validation implemented in Furious's branch, integrate here) set { Data.Labels.AddLabel( Data.ConvertPCtoSnes(ByteEntry.ParentIndex), new Label {Name = value}, true); OnPropertyChanged(); } } [DisplayName("PC")] [ReadOnly(true)] public string Offset => Util.ToHexString6(Data.ConvertPCtoSnes(ByteEntry.ParentIndex)); // show the byte two different ways: ascii and numeric [DisplayName("@")] [ReadOnly(true)] public char AsciiCharRep => ByteEntry?.Byte == null ? ' ' : ByteEntry.Byte.ToString()[0]; [DisplayName("#")] [ReadOnly(true)] public string NumericRep => Util.NumberToBaseString(ByteEntry.ParentIndex, NumberBase); [DisplayName("<*>")] [ReadOnly(true)] public string Point => RomUtil.PointToString(ByteEntry.Point); [DisplayName("Instruction")] [ReadOnly(true)] public string Instruction { get { // NOTE: this does not handle instructions whose opcodes cross banks correctly. // if we hit this situation, just return empty for the grid, it's likely real instruction won't do this? var romOffset = ByteEntry.ParentIndex; var len = Data.GetInstructionLength(romOffset); return romOffset + len <= Data.GetRomSize() ? Data.GetInstruction(romOffset) : ""; } } [DisplayName("IA")] [ReadOnly(true)] // ReSharper disable once InconsistentNaming public string IA { get { var ia = Data.GetIntermediateAddressOrPointer(ByteEntry.ParentIndex); return ia >= 0 ? Util.ToHexString6(ia) : ""; } } [DisplayName("Flag")] [ReadOnly(true)] public string TypeFlag => Util.GetEnumDescription(Data.GetFlag(ByteEntry.ParentIndex)); [DisplayName("B")] [Editable(true)] public string DataBank { get => Util.NumberToBaseString(Data.GetDataBank(ByteEntry.ParentIndex), Util.NumberBase.Hexadecimal, 2); set { if (!int.TryParse(value, NumberStyles.HexNumber, null, out var parsed)) return; Data.SetDataBank(ByteEntry.ParentIndex, parsed); OnPropertyChanged(); } } [DisplayName("D")] [Editable(true)] public string DirectPage { get => Util.NumberToBaseString(Data.GetDirectPage(ByteEntry.ParentIndex), Util.NumberBase.Hexadecimal, 4); set { if (!int.TryParse(value, NumberStyles.HexNumber, null, out var parsed)) return; Data.SetDirectPage(ByteEntry.ParentIndex, parsed); OnPropertyChanged(); } } [DisplayName("M")] [Editable(true)] public string MFlag { get => RomUtil.BoolToSize(Data.GetMFlag(ByteEntry.ParentIndex)); set { Data.SetMFlag(ByteEntry.ParentIndex, value is "8" or "M"); OnPropertyChanged(); } } [DisplayName("X")] [Editable(true)] public string XFlag { get => RomUtil.BoolToSize(Data.GetXFlag(ByteEntry.ParentIndex)); set { Data.SetXFlag(ByteEntry.ParentIndex, value is "8" or "X"); OnPropertyChanged(); } } [DisplayName("Comment")] [Editable(true)] public string Comment { get => Data.GetCommentText(Data.ConvertPCtoSnes(ByteEntry.ParentIndex)); set { Data.AddComment(Data.ConvertPCtoSnes(ByteEntry.ParentIndex), value, true); OnPropertyChanged(); } } private readonly ByteEntry byteEntry; [Browsable(false)] public ByteEntry ByteEntry { get => byteEntry; init { this.SetField(PropertyChanged, ref byteEntry, value); // tmp disable // if (ByteOffset != null) // ByteOffset.PropertyChanged += OnRomBytePropertyChanged; } } [Browsable(false)] public Data Data { get; init; } [Browsable(false)] public IRowBaseViewer ParentView { get; init; } [Browsable(false)] private Util.NumberBase NumberBase => ParentView?.NumberBaseToShow ?? Util.NumberBase.Hexadecimal; [Browsable(false)] public event PropertyChangedEventHandler PropertyChanged; private void OnRomBytePropertyChanged(object sender, PropertyChangedEventArgs e) { void OnInstructionRelatedChanged() { OnPropertyChanged(nameof(Instruction)); OnPropertyChanged(nameof(IA)); } // NOTE: if any properties under ByteOffset change, make sure the names update here switch (e.PropertyName) { case nameof(ByteEntry.Byte): OnPropertyChanged(nameof(AsciiCharRep)); OnPropertyChanged(nameof(NumericRep)); OnInstructionRelatedChanged(); break; case nameof(ByteEntry.Arch): OnInstructionRelatedChanged(); break; case nameof(ByteEntry.DataBank): case nameof(ByteEntry.DirectPage): case nameof(ByteEntry.XFlag): case nameof(ByteEntry.MFlag): case nameof(ByteEntry.TypeFlag): case nameof(ByteEntry.Point): OnPropertyChanged(e.PropertyName); break; } } [NotifyPropertyChangedInvocator] public virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); #region Formatting protected Color? GetBackgroundColorForMarkedAsOpcode(string colPropName) { // TODO: eventually, don't match strings here. // instead, look for the appropriate attribute attached to romByteRow and let that // attribute hook in here. return colPropName switch { nameof(Point) => GetBackColorInOut(), nameof(Instruction) => GetInstructionBackgroundColor(), nameof(DataBank) => GetDataBankColor(), nameof(DirectPage) => GetDirectPageColor(), nameof(MFlag) => GetMFlagColor(), nameof(XFlag) => GetXFlagColor(), _ => null }; } private Color? GetBackColorInOut() { int r = 255, g = 255, b = 255; if ((ByteEntry.Point & (InOutPoint.EndPoint | InOutPoint.OutPoint)) != 0) g -= 50; if ((ByteEntry.Point & InOutPoint.InPoint) != 0) r -= 50; if ((ByteEntry.Point & InOutPoint.ReadPoint) != 0) b -= 50; return Color.FromArgb(r, g, b); } private Color? GetInstructionBackgroundColor() { var opcode = ByteEntry.Byte; var isWeirdInstruction = opcode == 0x40 || opcode == 0xCB || opcode == 0xDB || opcode == 0xF8 || // RTI WAI STP SED opcode == 0xFB || opcode == 0x00 || opcode == 0x02 || opcode == 0x42 // XCE BRK COP WDM ; return isWeirdInstruction ? Color.Yellow : null; } private Color? GetDataBankColor() { switch (ByteEntry.Byte) { // PLB MVP MVN case 0xAB: case 0x44: case 0x54: return Color.OrangeRed; // PHB case 0x8B: return Color.Yellow; default: return null; } } private Color? GetDirectPageColor() { switch (ByteEntry.Byte) { // PLD TCD case 0x2B: case 0x5B: return Color.OrangeRed; // PHD TDC case 0x0B: case 0x7B: return Color.Yellow; default: return null; } } public Color? GetMFlagColor() => GetMxFlagColor(0x20); public Color? GetXFlagColor() => GetMxFlagColor(0x10); private Color? GetMxFlagColor(int nextByteMask) { var nextByte = Data.GetNextRomByte(ByteEntry.ParentIndex) ?? 0; switch (ByteEntry.Byte) { // PLP // SEP REP, *iff* relevant bit is set on next byte case 0x28: case 0xC2 or 0xE2 when (nextByte & nextByteMask) != 0: return Color.OrangeRed; case 0x08: // PHP return Color.Yellow; default: return null; } } #endregion } public static class RomByteRowAttributes { public static bool IsColumnEditable(string propertyName) => TestAttribute((EditableAttribute attr) => attr?.AllowEdit ?? false, propertyName); public static string GetColumnDisplayName(string propertyName) => TestAttribute((DisplayNameAttribute attr) => attr?.DisplayName, propertyName); public static bool GetColumnIsReadOnly(string propertyName) => TestAttribute((ReadOnlyAttribute attr) => attr?.IsReadOnly ?? false, propertyName); public static bool IsPropertyBrowsable(string propertyName) => TestAttribute((BrowsableAttribute attr) => attr?.Browsable ?? true, propertyName); private static TResult TestAttribute( Func getValueFn, string memberName) where TAttribute : Attribute { return Util.GetPropertyAttribute(getValueFn, typeof(RomByteRowBase), memberName); } } public interface IRowBaseViewer { Util.NumberBase NumberBaseToShow { get; } TItem SelectedByteOffset { get; } } } #endif ================================================ FILE: Diz.Controllers/Diz.Controllers.Test/Diz.Controllers.Test/Diz.Controllers.Test.csproj ================================================ net9.0 enable false runtime; build; native; contentfiles; analyzers; buildtransitive all runtime; build; native; contentfiles; analyzers; buildtransitive all 6.12.0 0.29.1 all runtime; build; native; contentfiles; analyzers; buildtransitive 3.1.0 2023.3.0 6.6.4 17.8.0 4.20.70 2.0.3 2.6.6 2.6.6 runtime; build; native; contentfiles; analyzers; buildtransitive all 1.10.0 2.6.6 ================================================ FILE: Diz.Controllers/Diz.Controllers.Test/Diz.Controllers.Test/src/ImportRomDialogontroller.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Diz.Controllers.controllers; using Diz.Controllers.interfaces; using Diz.Core.Interfaces; using Diz.Core.model.project; using Diz.Core.serialization; using Diz.Core.util; using Diz.Cpu._65816.import; using Diz.Test.Utils; using FluentAssertions; using LightInject; using Moq; using Xunit; namespace Diz.Controllers.Test; public class ImportRomDialogControllerTest : ContainerFixture { [Inject] private readonly IImportRomDialogController importRomDialogController = null!; [Inject] private readonly ISampleRomTestData sampleDataFixture = null!; public event EventHandler? SimulateViewActions; private const string RomFilename = "SAMPLEROM"; private ImportRomSettings? generatedSettings; private Mock? mockView = null!; protected override void Configure(IServiceRegistry serviceRegistry) { base.Configure(serviceRegistry); serviceRegistry.Register(new PerContainerLifetime()); serviceRegistry.Register(factory => { var mockLinkedRomBytesProvider = TestUtil.CreateReadFromFileMock( factory.GetInstance().SampleRomBytes ); return mockLinkedRomBytesProvider.Object; }); serviceRegistry.Register(factory => new Mock().Object); serviceRegistry.Register(factory => { mockView = new Mock(); mockView.Setup(x => x.ShowAndWaitForUserToConfirmSettings()) .Callback( () => { SimulateViewActions?.Invoke(null, EventArgs.Empty); importRomDialogController.Submit(); }).Returns(true); mockView.SetupGet(x => x.EnabledVectorTableEntries).Returns(new List()); return mockView.Object; }); } private void Run(Action? uiActions = null) { if (uiActions != null) SimulateViewActions += (sender, args) => uiActions(); generatedSettings = importRomDialogController.PromptUserForImportOptions(RomFilename); } [Fact] public void Defaults() { Run(); generatedSettings!.RomBytes.Should().BeEquivalentTo(sampleDataFixture.SampleRomBytes); generatedSettings.RomFilename.Should().Be(RomFilename); } [Fact] public void WithNoLabels() { Run(() => importRomDialogController.Builder.OptionClearGenerateVectorTableLabels()); generatedSettings!.InitialLabels.Should().BeEmpty("We cleared them in the UI code"); } [Fact] public void WithTwoLabels() { mockView!.SetupGet(x => x.EnabledVectorTableEntries) .Returns([ SnesVectorNames.Native_ABORT, SnesVectorNames.Emulation_RESET ]); Run(() => { // importRomDialogController.Builder.OptionSetGenerateVectorTableLabelFor(SnesVectorNames.Native_ABORT, true); // importRomDialogController.Builder.OptionSetGenerateVectorTableLabelFor(SnesVectorNames.Emulation_RESET, true); }); var vectorNames = generatedSettings!.InitialLabels.Select(x => x.Value.Name).ToList(); vectorNames.Should().HaveCount(2); } public static TheoryData EnableDisableLabelGeneration => new() { true, false }; [Theory, MemberData(nameof(EnableDisableLabelGeneration))] public void LabelGenerationDisable(bool labelGenerationEnabled) { mockView!.SetupGet(x => x.EnabledVectorTableEntries) .Returns(new List { SnesVectorNames.Native_ABORT, SnesVectorNames.Emulation_RESET, }); Run(() => { importRomDialogController.Builder.OptionGenerateSelectedVectorTableLabels = labelGenerationEnabled; }); generatedSettings!.InitialLabels.Should().HaveCount(labelGenerationEnabled ? 2 : 0); } [Fact] public void ControllerProperties() { Run(); importRomDialogController.CartridgeTitle.Should().Be(sampleDataFixture.Project.InternalRomGameName); var input = importRomDialogController.Builder.Input; input.Filename.Should().Be(RomFilename); input.RomBytes.Should().HaveCountGreaterThan(100); input.RomSettingsOffset!.Value.Should().Be(RomUtil.LoromSettingOffset); var snesRomAnalysisResults = input.AnalysisResults!; snesRomAnalysisResults.RomMapMode.Should().Be(RomMapMode.LoRom); snesRomAnalysisResults.DetectedRomMapModeCorrectly.Should().Be(true); snesRomAnalysisResults.RomSpeed.Should().Be(sampleDataFixture.Project.Data.RomSpeed); } } ================================================ FILE: Diz.Controllers/Diz.Controllers.Test/Diz.Controllers.Test/src/LogCreatorSettingsEditorControllerTests.cs ================================================ #nullable enable using System; using Diz.Controllers.controllers; using Diz.Controllers.interfaces; using Diz.Core.export; using Diz.Core.util; using Diz.LogWriter.util; using Diz.Test.Utils; using FluentAssertions; using Moq; using Xunit; namespace Diz.Controllers.Test; public class LogCreatorSettingsEditorControllerTests : ContainerFixture { private static IFilesystemService CreateFilesystemMockObject() { var fsMock = new Mock(); fsMock.Setup(x => x.DirectoryExists(It.IsAny())).Returns(true); fsMock.Setup(x => x.CreateDirectory(It.IsAny())); return fsMock.Object; } private static ILogCreatorSettingsEditorView CreateLogCreatorSettingsEditorView() { var viewMock = new Mock(); viewMock.Setup(x => x.PromptEditAndConfirmSettings()).Returns(true); return viewMock.Object; } [Inject] private readonly Func createSampleTextFn = null!; [Fact] public void Basics() { var fsMock = CreateFilesystemMockObject(); var viewMock = CreateLogCreatorSettingsEditorView(); var controller = new LogCreatorSettingsEditorController(viewMock, fsMock, createSampleTextFn); controller.ValidateExportSettings().Should().BeTrue("default settings should be valid"); controller.PromptSetupAndValidateExportSettings().Should().BeTrue("dialog unchanged settings should be valid"); controller.GetSampleOutput().Should().Contain("UNREACH"); } [Fact] public void TestSampleTextGeneration() { createSampleTextFn.Should().NotBeNull(); var x = createSampleTextFn(new LogWriterSettings()); } } ================================================ FILE: Diz.Controllers/packages.lock.json ================================================ { "version": 1, "dependencies": { "net6.0": { "GitInfo": { "type": "Direct", "requested": "[2.2.0, )", "resolved": "2.2.0", "contentHash": "SKTmjt40sYqoDB3S7HFVUToUN/vl6Zrt+PuSHdjbQDlcBx0JAZBdS7BXVbVKyy+0iaaF3FBd4ZxspIlKQCC9Lw==" }, "LightInject": { "type": "Direct", "requested": "[6.4.0, )", "resolved": "6.4.0", "contentHash": "WjrY67fnaUJzBSnb7wiaZUOSl7gmxjfg+xo+GrHI55jz0YZR2b5ZB+lDOM5XDu2+2+/OnVT3y4+6BOv6xTqo9w==" }, "ExtendedXmlSerializer": { "type": "Transitive", "resolved": "3.7.6", "contentHash": "it17cdP9hzppmvb7Ue3tbXBKWC8ZtcbM7Uz/svRij8HoMwHAPibXEX5lOaavWmyVV6t6ATcPuE0+K6LxUAWoxA==", "dependencies": { "LightInject": "6.3.5", "NReco.LambdaParser": "1.0.12", "Sprache": "2.3.1", "System.Collections.Immutable": "1.7.1", "System.Interactive": "4.1.1", "System.Runtime.CompilerServices.Unsafe": "4.7.1", "System.ValueTuple": "4.5.0" } }, "FluentValidation": { "type": "Transitive", "resolved": "10.3.6", "contentHash": "iMd370ZDx6ydm8t7bIFdRbSKX0e42lpvCtifUSbTSXOk5iKjmgl7HU0PXBhIWQAyIRi3gCwfMI9luj8H6K+byw==" }, "IX.Observable": { "type": "Transitive", "resolved": "0.7.3", "contentHash": "YiOcqYWatb335Jo1lSu6kFd+DFJlc1TZPiUr4o4BtnfBb061YGMfhkAshZCfHL6AWgORWfGYH/kQh7T+jxBUiA==", "dependencies": { "IX.StandardExtensions": "[0.7.3, 0.8.0)", "JetBrains.Annotations": "2020.1.0" } }, "IX.StandardExtensions": { "type": "Transitive", "resolved": "0.7.3", "contentHash": "vNDln18OhH5UFThM4kGYLExGQaP0Fu6YtbCMTmHymOBLOjurmmoJEkIm7gRxjPo1F1itOglofuM2LdM5+kMvsw==", "dependencies": { "JetBrains.Annotations": "2020.1.0", "System.ComponentModel.Annotations": "4.7.0" } }, "JetBrains.Annotations": { "type": "Transitive", "resolved": "2021.3.0", "contentHash": "Ddxjs5RRjf+c8m9m++WvhW1lz1bqNhsTjWvCLbQN9bvKbkJeR9MhtfNwKgBRRdG2yLHcXFr5Lf7fsvvkiPaDRg==" }, "JetBrains.Profiler.Api": { "type": "Transitive", "resolved": "1.1.8", "contentHash": "a/zkJHzyzjIilu5cn5SnnCkPDbfUD+nLBpCaSivp0GCotBR6w7S8CaDymI5p0qFB1XUImgii1AqWYZsIK+Lh5g==" }, "JetBrains.Profiler.SelfApi": { "type": "Transitive", "resolved": "2.2.0", "contentHash": "WrnwHktJbwW2A4hhW8TwLPJeu+F0Gl8QCmHs8bm+OEggrPk1Rv50lDYH/+8HNtsCOFJcxmbNJ5XzZCYe0EkRrQ==", "dependencies": { "JetBrains.Profiler.Api": "1.1.8" } }, "Microsoft.NETCore.Platforms": { "type": "Transitive", "resolved": "1.1.1", "contentHash": "TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", "resolved": "1.1.3", "contentHash": "3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==" }, "NReco.LambdaParser": { "type": "Transitive", "resolved": "1.0.12", "contentHash": "f1nye8fMJCYfJeR+Qb7qlcvC8et4Y4TLf2GLfaFoeISgI+yisaJkbNSGfKCpFBNeVF/iPDkyFmr4J28dv342/Q==" }, "SharpZipLib": { "type": "Transitive", "resolved": "1.3.3", "contentHash": "N8+hwhsKZm25tDJfWpBSW7EGhH/R7EMuiX+KJ4C4u+fCWVc1lJ5zg1u3S1RPPVYgTqhx/C3hxrqUpi6RwK5+Tg==" }, "Sprache": { "type": "Transitive", "resolved": "2.3.1", "contentHash": "Q+mXeiTxiUYG3lKYF6TS82/SyB4F2613Q1yXTMwg4jWGHEEVC3yrzHtNcI4B3qnDI0+eJsezGJ0V+cToUytHWw==", "dependencies": { "System.Globalization": "4.3.0", "System.Linq": "4.3.0", "System.Private.Uri": "4.3.2", "System.Runtime": "4.3.0", "System.Text.RegularExpressions": "4.3.0" } }, "System.Collections": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Collections.Immutable": { "type": "Transitive", "resolved": "1.7.1", "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.ComponentModel.Annotations": { "type": "Transitive", "resolved": "4.7.0", "contentHash": "0YFqjhp/mYkDGpU0Ye1GjE53HMp9UVfGN7seGpAMttAC0C40v5gw598jCgpbBLMmCo0E5YRLBv5Z2doypO49ZQ==" }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Globalization": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Interactive": { "type": "Transitive", "resolved": "4.1.1", "contentHash": "pL6aZm6Im/KSpQADvJMr3sK5d/Q/iQbC4TQ2zQfiDZ+qzAskuMgrtgnCheAwLX1vC5YDTXpXnVjeMzfxUZzfjQ==" }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Threading.Tasks": "4.3.0" } }, "System.Linq": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", "dependencies": { "System.Collections": "4.3.0", "System.Diagnostics.Debug": "4.3.0", "System.Resources.ResourceManager": "4.3.0", "System.Runtime": "4.3.0", "System.Runtime.Extensions": "4.3.0" } }, "System.Private.Uri": { "type": "Transitive", "resolved": "4.3.2", "contentHash": "o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.1", "Microsoft.NETCore.Targets": "1.1.3" } }, "System.Reflection": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.IO": "4.3.0", "System.Reflection.Primitives": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Resources.Extensions": { "type": "Transitive", "resolved": "6.0.0", "contentHash": "pBnVzNQYd0OHqh0VLu/hi0zFOTtyF8QwtziQBmzX/ZtVOea4+JEVOGu29DHeSOA0a9SFrYjQorBrOLuKLhcMNQ==" }, "System.Resources.ResourceManager": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Globalization": "4.3.0", "System.Reflection": "4.3.0", "System.Runtime": "4.3.0" } }, "System.Runtime": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0" } }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, "System.Runtime.Extensions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Text.Encoding": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "6.0.0", "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", "dependencies": { "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Text.RegularExpressions": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", "dependencies": { "System.Runtime": "4.3.0" } }, "System.Threading.Tasks": { "type": "Transitive", "resolved": "4.3.0", "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } }, "System.ValueTuple": { "type": "Transitive", "resolved": "4.5.0", "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==" }, "diz.core": { "type": "Project", "dependencies": { "Diz.Core.Interfaces": "1.0.0", "ExtendedXmlSerializer": "3.7.6", "FluentValidation": "10.3.6", "IX.Observable": "0.7.3", "JetBrains.Annotations": "2021.3.0", "JetBrains.Profiler.SelfApi": "2.2.0", "LightInject": "6.4.0", "SharpZipLib": "1.3.3", "System.Diagnostics.Tracing": "4.3.0", "System.Resources.Extensions": "6.0.0", "System.Text.Encoding.CodePages": "6.0.0" } }, "diz.core.interfaces": { "type": "Project", "dependencies": { "IX.Observable": "0.7.3" } }, "diz.cpu.65816": { "type": "Project", "dependencies": { "Diz.Core": "1.0.0", "Diz.Core.Interfaces": "1.0.0" } }, "diz.import": { "type": "Project", "dependencies": { "Diz.Core": "1.0.0", "Diz.Cpu.65816": "1.0.0" } }, "diz.logwriter": { "type": "Project", "dependencies": { "Diz.Core": "1.0.0", "Diz.Cpu.65816": "1.0.0", "LightInject": "6.4.0" } } } } } ================================================ FILE: Diz.Core/Diz.Core.csproj ================================================  net9.0 false true Diz.Core Diz.Core true true 3.9.6 2023.3.0 6.6.4 1.4.2 4.3.0 11.9.0 ================================================ FILE: Diz.Core/Interfaces.cs ================================================ #nullable enable using Diz.Core.model; using Diz.Core.model.snes; namespace Diz.Core; public interface IDataRange { public int MaxCount { get; } public int StartIndex { get; set; } public int EndIndex { get; set; } public int RangeCount { get; set; } public void ManualUpdate(int newStartIndex, int newRangeCount); } public interface IDataFactory { // TODO: eventually, make this be IData. it's a whole new refactor though. Data Create(); } // TODO: maybe make this a decorator? for IDataFactory, then get rid of it. public interface ISampleDataFactory : IDataFactory { } public interface IProjectFileAssemblyExporter { bool ExportAssembly(string projectFileName); } public interface IProjectProvider { Project? Read(); } public interface IProjectFileOpener : IProjectProvider { void SetOpenFilename(string projectFilename); } public static class ProjectFileProviderExtensions { public static Project? ReadProjectFromFile(this IProjectFileOpener @this, string filename) { @this.SetOpenFilename(filename); return @this.Read(); } } public interface IProjectFactoryFromRomImportSettings : IProjectProvider { } ================================================ FILE: Diz.Core/Properties/AssemblyInfo.cs ================================================ using Diz.Core.services; using LightInject; [assembly: CompositionRootType(typeof(DizCoreServicesCompositionRoot))] ================================================ FILE: Diz.Core/app.config ================================================  ================================================ FILE: Diz.Core/commands/Commands.cs ================================================ namespace Diz.Core.commands; public class MarkCommand { public enum MarkManyProperty { Flag = 0, DataBank = 1, DirectPage = 2, MFlag = 3, XFlag = 4, CpuArch = 5, }; public MarkManyProperty Property { get; set; } public int Start { get; set; } public int Count { get; set; } public object Value { get; set; } } ================================================ FILE: Diz.Core/datasubset/DataSubset.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using Diz.Core.util; using JetBrains.Annotations; namespace Diz.Core.datasubset { public interface IDataSubsetLoader { // provide a row (either retrieve from cache or make a new one, either way) TRow RowValueNeeded(int largeOffset, DataSubset subset); void OnBigWindowChangeStart(DataSubset subset); void OnBigWindowChangeFinished(DataSubset subset); } public class DataSubset : INotifyPropertyChangedExt { // the full range of items to pick from. // anything that deals with "largeIndex" refers to an index into THIS list. // // note: client may filter or sort this list ahead of time, it doesn't have to be 1:1 with the underlying data public List Items { get => items; set { DropRowCache(); this.SetField(PropertyChanged, ref items, value); } } public IDataSubsetLoader RowLoader { get; init; } // rows (relative) public int StartingRowLargeIndex { get => startingRowLargeIndex; set { if (Items == null) throw new ArgumentException("RomBytes must be set before setting view dimensions"); if (!IsValidLargeOffset(value)) throw new ArgumentException("StartingRowLargeIndex is out of range"); // validate window range is OK. if (value + RowCount > Items.Count) throw new ArgumentException("Window size is out of range"); UpdateDimensions(RowCount, value, () => this.SetField(PropertyChanged, ref startingRowLargeIndex, value)); } } // zero is OK. public int RowCount { get => rowCount; set { if (value < 0) throw new ArgumentOutOfRangeException(nameof(RowCount)); if (Items == null) throw new ArgumentException("RomBytes must be set before setting view dimensions"); if (value != 0 && !IsValidLargeOffset(value - 1)) throw new ArgumentException("Count out of range"); // validate window range is OK. if (!IsValidLargeOffset(StartingRowLargeIndex)) throw new ArgumentException("starting large index is out of range"); if (StartingRowLargeIndex + value > Items.Count) { EndingRowLargeIndex = Items.Count - 1; } UpdateDimensions(value, StartingRowLargeIndex, () => this.SetField(PropertyChanged, ref rowCount, value)); } } protected virtual void UpdateDimensions(int newRowCount, int newStartingRowLargeIndex, Action updateAction) { if (newRowCount != RowCount || newStartingRowLargeIndex != StartingRowLargeIndex) OnWindowDimensionsChanging(newStartingRowLargeIndex, newRowCount); updateAction(); } // called right before we change StartingRowLargeIndex and RowCount [SuppressMessage("ReSharper", "UnusedParameter.Local")] private void OnWindowDimensionsChanging(int newRowStartingIndex, int newRowCount) { DropRowCache(); } public int EndingRowLargeIndex { get => StartingRowLargeIndex + RowCount - 1; set => StartingRowLargeIndex = value - RowCount + 1; } // main idea here is, this list never changes until we scroll, in which case we drop and re-add // everything. recalculating this list should never do anything that involves a lot of processing. // instead, we'll leave the heavy lifting to cachedRows, which can do fancier things if needed // like predict which rows might be needed later. public List OutputRows { get { if (outputRows != null) return outputRows; DropRowCache(); CacheRows(); return outputRows; } } private int startingRowLargeIndex; private int rowCount; private List outputRows; private List items; // this only ever needs to happen when the dimensions change // if startingIndex and count don't change, this doesn't need to be recalculated. private void CacheRows() { Debug.Assert(outputRows == null); outputRows = new List(RowCount); RowLoader.OnBigWindowChangeStart(this); for (var i = StartingRowLargeIndex; i < StartingRowLargeIndex + RowCount; ++i) { var newRow = RowValueNeededForLargeOffset(i); outputRows.Add(newRow); } SetNotifyChangedForAllRows(register: true); RowLoader.OnBigWindowChangeFinished(this); } private void DropRowCache() { if (outputRows == null) return; SetNotifyChangedForAllRows(register: false); outputRows = null; } private void SetNotifyChangedForAllRows(bool register) { foreach (var row in outputRows) { if (!(row is INotifyPropertyChanged iNotify)) continue; if (register) iNotify.PropertyChanged += OnRowPropertyChanged; else iNotify.PropertyChanged -= OnRowPropertyChanged; } } private void OnRowPropertyChanged(object sender, PropertyChangedEventArgs e) { // underlying data in one of the visible rows just changed, so pass that along so // listeners can get a notification that they should refresh the data. PropertyChanged?.Invoke(sender, e); } // key thing: this class (DataSubset) will itself cache the current outputRows // which don't need to change as long as the view doesn't change. // // RowLoader's job is: // - must cache all visible rows // - optionally, selectively cache some rows no longer in view anymore // // the goal is: for small amounts of scrolling, make sure repopulating outputRows // is a quick operation. this will be true if RowLoader does a good job saving recently // cached rows and predicting which ones might be needed soon. // // this also keeps the complex caching logic can stay out of this class and in RowLoader. // // example: if a user is looking at 10 rows in the middle of a 100 count data source, // the screen GUI only need 10 row objects to exist. however, RowLoader might choose to also cache // an extra +/- 25 most recently used and rows that might be probably used in the near future. // so if the user is scrolling around in the same area, they might hit some of the non-visible cache // when rows are needed. that will speed up the GUI operations. // // if needed, in the future, predictive row caching could be done on a background thread as well. protected TRow RowValueNeededForLargeOffset(int largeOffset) => RowLoader.RowValueNeeded(largeOffset, this); public bool IsRowOffsetValid(int rowOffset) => rowOffset >= 0 && rowOffset < RowCount; public bool IsLargeOffsetContainedInVisibleRows(int largeOffset) => largeOffset >= startingRowLargeIndex && largeOffset <= EndingRowLargeIndex; public bool IsValidLargeOffset(int largeOffset) => largeOffset >= 0 && largeOffset < Items?.Count; public int GetRowIndexFromLargeOffset(int largeOffset) => !IsLargeOffsetContainedInVisibleRows(largeOffset) ? -1 : largeOffset - startingRowLargeIndex; public int GetLargeOffsetFromRowOffset(int rowOffset) => !IsRowOffsetValid(rowOffset) ? -1 : rowOffset + startingRowLargeIndex; public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] public void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } } ================================================ FILE: Diz.Core/datasubset/DataSubsetSupport.cs ================================================ using System.Collections.Generic; using System.Linq; namespace Diz.Core.datasubset { public abstract class DataSubsetLoader : IDataSubsetLoader { public class Entry { public TRow Row { get; set; } public int AgeScore { get; set; } // 0 = newer, higher = older } // map large data index offset to a row // // sometimes this will contain extra or not enough rows, and we'll page them in and out as needed. // this dictionary ALWAYS includes all of the currently displayed rows, // but also, can include more cached rows that we can kick out as needed to save memory. private readonly Dictionary cachedRows = new(); // tune as needed. if user can see about 20 rows at a time, we'll keep around 10x that in memory. // if cached rows are in memory, it'll make small scrolling (like bouncing around near the same // couple of rows) already cached // // this can be jacked WAY up with little effect except using more memory. // hike it if you need more perf. public int TargetCachedMultiplier { get; init; } = 15; public int TargetCachedRows { get; protected set; } // we'll allow going a certain percentage over the target before cleaning up. // that way we're only cleaning up in chunks and not in individual rows. public int FuzzThreshold => (int)(TargetCachedRows / (float)TargetCachedMultiplier); public virtual void OnBigWindowChangeStart(DataSubset subset) { TargetCachedRows = subset.RowCount * TargetCachedMultiplier; IncrementAllAgeScores(); } private void IncrementAllAgeScores() { foreach (var entry in cachedRows) entry.Value.AgeScore++; } public virtual TRow RowValueNeeded(int largeOffset, DataSubset subset) { var entry = GetOrCreateRowEntry(largeOffset, subset); entry.AgeScore = 0; // any recent rows will always be aged at zero return entry.Row; } private Entry GetOrCreateRowEntry(int largeIndex, DataSubset subset) { if (cachedRows.TryGetValue(largeIndex, out var entry)) return entry; // assume this creation is expensive, we're optimizing to minimize # initializations here entry = new Entry { Row = CreateNewRow(subset, largeIndex), }; cachedRows[largeIndex] = entry; return entry; } protected abstract TRow CreateNewRow(DataSubset subset, int largeIndex); // this is a hint that big changes just finished up (like recreating the rows due to a scroll), // so it's likely a good time to kick irrelevant rows out of the cache. // // we could do a bunch of clever stuff, I'm just going to a really simple age check // and kick out the oldest rows (rows that haven't been in any view for a while) // which are furthest away from the current window public virtual void OnBigWindowChangeFinished(DataSubset subset) { // see if we're about 10% over our target, and if so, dump about 10% of the cache. // it's OK to go over so that we're not constantly dumping cache with every small change. if (cachedRows.Count <= TargetCachedRows + FuzzThreshold) return; // we're over our target, so start dropping the oldest least useful stuff from the cache var oldestDeletionCandidates = (from kvp in cachedRows where kvp.Value.AgeScore != 0 orderby kvp.Value.AgeScore descending select kvp).Take(FuzzThreshold).ToList(); foreach (var entry in oldestDeletionCandidates) { cachedRows.Remove(entry.Key); } } } public class DataSubsetSimpleLoader : IDataSubsetLoader where TRow : new() { // no caching, just create a new row as needed each time // if performance is an issue, use another strategy. public TRow RowValueNeeded(int largeOffset, DataSubset subset) { TRow newRow = new(); PopulateRow?.Invoke(ref newRow, largeOffset); return newRow; } public delegate void PopulateNewlyCreatedRow(ref TRow newlyCreatedRow, int largeIndex); public PopulateNewlyCreatedRow PopulateRow { get; set; } public void OnBigWindowChangeStart(DataSubset subset) {} public void OnBigWindowChangeFinished(DataSubset subset) {} } } ================================================ FILE: Diz.Core/datasubset/DataSubsetWithSelection.cs ================================================ using System; using System.Diagnostics; using Diz.Core.util; namespace Diz.Core.datasubset { // controls what rows are visible and scrolls intelligently based on our offset public class DataSubsetWithSelection : DataSubset { public TRow SelectedRow => RowValueNeededForLargeOffset(SelectedLargeIndex); public int SelectedRowIndex => GetRowIndexFromLargeOffset(SelectedLargeIndex); // when set: when the start or end range changes, the selected row will be // clamped to be within the Start..End range. public bool WindowResizeKeepsSelectionInRange { get => windowResizeKeepsSelectionInRange; set { this.SetField(ref windowResizeKeepsSelectionInRange, value); ClampSelectionIfNeeded(); } } private bool windowResizeKeepsSelectionInRange; // when set: when the selection is changed, the start and end points will move // to keep the selection inside the range. public bool EnsureBoundariesEncompassWhenSelectionChanges { get => ensureBoundariesEncompassWhenSelectionChanges; set { this.SetField(ref ensureBoundariesEncompassWhenSelectionChanges, value); EnsureViewContainsLargeIndex(SelectedLargeIndex); } } private bool ensureBoundariesEncompassWhenSelectionChanges = true; private void EnsureViewContainsLargeIndex(int largeIndex) { if (RowCount == 0) return; Debug.Assert(IsValidLargeOffset(largeIndex)); if (largeIndex < StartingRowLargeIndex) { StartingRowLargeIndex = largeIndex; } else if (largeIndex > EndingRowLargeIndex) { EndingRowLargeIndex = largeIndex; } } public int SelectedLargeIndex { get => selectedLargeIndex; set { if (!IsValidLargeOffset(value)) throw new ArgumentException("Invalid large value"); // var clampedValue = GetClampedIndexIfNeeded(value); if (NotifyPropertyChangedExtensions.FieldIsEqual(selectedLargeIndex, value)) return; selectedLargeIndex = value; EnsureViewContainsSelectionIfNeeded(); OnPropertyChanged(); } } public int LargestPossibleStartingLargeIndex => Items.Count - RowCount; private int selectedLargeIndex; private void EnsureViewContainsSelectionIfNeeded() { if (ensureBoundariesEncompassWhenSelectionChanges) EnsureViewContainsLargeIndex(SelectedLargeIndex); } private void ClampSelectionIfNeeded() => SelectedLargeIndex = GetClampedIndexIfNeeded(SelectedLargeIndex); private int GetClampedIndexIfNeeded(int largeIndex) => !windowResizeKeepsSelectionInRange ? largeIndex : GetLargeIndexClampedToVisibleRows(largeIndex); public int GetLargeIndexClampedToVisibleRows(int largeIndexToClamp) => Util.Clamp(largeIndexToClamp, StartingRowLargeIndex, EndingRowLargeIndex); public void SelectRow(int rowIndex) => SelectedLargeIndex = GetLargeOffsetFromRowOffset(rowIndex); protected override void UpdateDimensions(int newRowCount, int newStartingRowLargeIndex, Action updateAction) { base.UpdateDimensions(newRowCount, newStartingRowLargeIndex, updateAction); ClampSelectionIfNeeded(); } } } ================================================ FILE: Diz.Core/export/LogWriterSettings.cs ================================================ #nullable enable using System.IO; using System.Xml.Serialization; using Diz.Core.util; /* * TODO: * Couple things for ongoing refactors: * 1) This class should ideally live with the Diz.LogWriter project (not Diz.Core) * 2) Probably use dependency injection starting with this system to register settings providers in Diz like this one? */ namespace Diz.Core.export; public interface ILogWriterSettings { } public record LogWriterSettings : ILogWriterSettings { // path to output file or folder public const string DefaultStr = "%label:-22% %code:37%;%pc%|%bytes%|%ia%; %comment%"; public enum FormatUnlabeled { ShowAll = 0, ShowInPoints = 1, // TODO Add Show In Points with +/- labels ShowNone = 2 } public enum FormatStructure { SingleFile = 0, OneBankPerFile = 1 } public string Format { get; init; } = DefaultStr; public int DataPerLine { get; init; } = 8; public FormatUnlabeled Unlabeled { get; init; } = FormatUnlabeled.ShowInPoints; public FormatStructure Structure { get; init; } = FormatStructure.OneBankPerFile; // tmp hack until we fix single file mode. allows sample data to still be generated [XmlIgnore] public bool SuppressSingleFileModeDisabledError { get; init; } = false; public bool NewLine { get; init; } = false; public bool OutputExtraWhitespace { get; init; } = true; public bool GenerateFullLine { get; init; } = true; public bool IncludeUnusedLabels { get; init; } public bool PrintLabelSpecificComments { get; init; } public bool GeneratePlusMinusLabels { get; init; } = true; // this is an experimental option, if useful, remove [XmlIgnore] and add the UI for this [XmlIgnore] public bool AppendFlagTypeToComment { get; init; } = false; /// /// specify an override for the # of bytes to assemble. default is to visit every byte in the entire ROM /// public int RomSizeOverride { get; init; } = -1; /// /// The (usually absolute) base path to the project directory, if any. /// Don't save this with the project XML. /// [XmlIgnore] public string? BaseOutputPath { get; init; } /// /// Relative path to add on after the base path. /// public string FileOrFolderOutPath { get; init; } = "export\\"; public bool OutputToString { get; init; } public string ErrorFilename { get; init; } = "errors.txt"; public LogWriterSettings WithPathRelativeTo(string newFileNameAndPath, string? pathToMakeRelativeTo) => this with { FileOrFolderOutPath = Util.TryGetRelativePath(newFileNameAndPath, pathToMakeRelativeTo), BaseOutputPath = pathToMakeRelativeTo, }; public string BuildFullOutputPath() { // this is still a bit of an in-progress mess. sigh. var path = FileOrFolderOutPath; if (Structure == FormatStructure.OneBankPerFile) path += "\\"; // force it to treat it as a path. // if it's absolute path, use that first, ignore base path if (Path.IsPathFullyQualified(path)) return path; // if it's not an absolute path, combine BaseOutputPath and FileOrFolderPath to get the final var relativeFolderPath = Path.GetDirectoryName(path) ?? ""; if (Structure == FormatStructure.OneBankPerFile) relativeFolderPath += "\\"; // force it to treat it as a path. return Path.Combine(BaseOutputPath ?? "", relativeFolderPath); } public string? Validate(IFilesystemService fs) { var results = new LogWriterSettingsValidator(fs).Validate(this); return !results.IsValid ? results.ToString() : null; } public bool IsValid(IFilesystemService fs) => Validate(fs) == null; } ================================================ FILE: Diz.Core/export/LogWriterSettingsValidator.cs ================================================ using System.IO; using Diz.Core.util; using FluentValidation; namespace Diz.Core.export { public class LogWriterSettingsValidator : AbstractValidator { public LogWriterSettingsValidator(IFilesystemService fs) { When(x => x.OutputToString, () => Include(new LogWriterSettingsOutputString())) .Otherwise(() => Include(new LogWriterSettingsOutputMultipleFiles(fs))); } } public class LogWriterSettingsOutputString : AbstractValidator { public LogWriterSettingsOutputString() { // runs when OutputToString == true // i.e. when we expect the output to be a single .asm file, and not a directory RuleFor(x => x.Structure) .NotEqual(LogWriterSettings.FormatStructure.OneBankPerFile) .WithMessage("Can't use one-bank-per-file output with string output enabled"); RuleFor(x => x.FileOrFolderOutPath) .Empty() .WithMessage("Can't use one-bank-per-file output with valid file or path specified"); } } public class LogWriterSettingsOutputMultipleFiles : AbstractValidator { private readonly IFilesystemService fs; private bool OutputDirReallyExistsOnDisk(LogWriterSettings settings) { var path = settings.BuildFullOutputPath(); return fs.DirectoryExists(Path.GetDirectoryName(path)); } // this is not the most bulletproof thing in the world. // it's hard to validate without hitting the disk, you should follow this with additional checks private bool PathLooksLikeDirectoryNameOnly(string fileOrFolderPath) => Path.GetFileName(fileOrFolderPath) == string.Empty || !Path.HasExtension(fileOrFolderPath); public LogWriterSettingsOutputMultipleFiles(IFilesystemService fs) { // runs when OutputToString == false // i.e. we expect the output path to be a directory path and not a file. this.fs = fs; RuleFor(x => x.FileOrFolderOutPath) .NotEmpty().WithMessage("Disassembly output file directory is empty, but is required"); RuleFor(settings => settings) .Must(OutputDirReallyExistsOnDisk).WithMessage("Disassembly output directory doesn't exist on disk."); // verify what we have appears to be a filename and NOT a directory RuleFor(x => x.FileOrFolderOutPath) .Must(PathLooksLikeDirectoryNameOnly) .When(settings => settings.Structure == LogWriterSettings.FormatStructure.OneBankPerFile) .WithMessage("Disassembly output directory doesn't appear to be a valid directory name"); } } } ================================================ FILE: Diz.Core/model/Annotation.cs ================================================ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using Diz.Core.Interfaces; using Diz.Core.util; using JetBrains.Annotations; #if DIZ_3_BRANCH using Diz.Core.model.byteSources; #endif namespace Diz.Core.model { public abstract class Annotation : AnnotationBase #if !DIZ_3_BRANCH {} #else , IParentAware { public ByteEntry Parent { get; protected set; } public void OnParentChanged(ByteEntry parent) { Parent = parent; } } #endif public abstract class AnnotationBase : INotifyPropertyChangedExt { public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] public virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public class MarkAnnotation : Annotation, IComparable, IComparable { public FlagType TypeFlag { get => typeFlag; set => this.SetField(ref typeFlag, value); } private FlagType typeFlag = FlagType.Unreached; protected bool Equals(MarkAnnotation other) { return typeFlag == other.typeFlag; } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != GetType()) return false; return Equals((MarkAnnotation) obj); } public override int GetHashCode() { return (int) typeFlag; } public int CompareTo(MarkAnnotation other) { if (ReferenceEquals(this, other)) return 0; if (ReferenceEquals(null, other)) return 1; return typeFlag.CompareTo(other.typeFlag); } public int CompareTo(object obj) { if (ReferenceEquals(null, obj)) return 1; if (ReferenceEquals(this, obj)) return 0; return obj is MarkAnnotation other ? CompareTo(other) : throw new ArgumentException($"Object must be of type {nameof(MarkAnnotation)}"); } } public class ByteAnnotation : Annotation, IComparable, IComparable { public byte Val { get => dataByte; set => this.SetField(ref dataByte, value); } private byte dataByte; #region Generated Comparison public int CompareTo(ByteAnnotation other) { if (ReferenceEquals(this, other)) return 0; if (ReferenceEquals(null, other)) return 1; return dataByte.CompareTo(other.dataByte); } public int CompareTo(object obj) { if (ReferenceEquals(null, obj)) return 1; if (ReferenceEquals(this, obj)) return 0; return obj is ByteAnnotation other ? CompareTo(other) : throw new ArgumentException($"Object must be of type {nameof(ByteAnnotation)}"); } protected bool Equals(ByteAnnotation other) { return dataByte == other?.dataByte; } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != GetType()) return false; return Equals((ByteAnnotation) obj); } public override int GetHashCode() { return HashCode.Combine(base.GetHashCode(), dataByte); } #endregion } public class OpcodeAnnotation : Annotation, IComparable, IComparable { public byte DataBank { get => dataBank; set => this.SetField(ref dataBank, value); } public int DirectPage { get => directPage; set => this.SetField(ref directPage, value); } public bool XFlag { get => xFlag; set => this.SetField(ref xFlag, value); } public bool MFlag { get => mFlag; set => this.SetField(ref mFlag, value); } public Architecture Arch { get => arch; set => this.SetField(ref arch, value); } private byte dataBank; private int directPage; private bool xFlag; private bool mFlag; private Architecture arch; #region Equality protected bool Equals(OpcodeAnnotation other) { return DataBank == other.DataBank && DirectPage == other.DirectPage && XFlag == other.XFlag && MFlag == other.MFlag && Arch == other.Arch; } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return obj.GetType() == GetType() && Equals((OpcodeAnnotation)obj); } public override int GetHashCode() { unchecked { var hashCode = DataBank.GetHashCode(); hashCode = (hashCode * 397) ^ DirectPage; hashCode = (hashCode * 397) ^ XFlag.GetHashCode(); hashCode = (hashCode * 397) ^ MFlag.GetHashCode(); hashCode = (hashCode * 397) ^ (int)Arch; return hashCode; } } public int CompareTo(OpcodeAnnotation other) { if (ReferenceEquals(this, other)) return 0; if (ReferenceEquals(null, other)) return 1; var dataBankComparison = dataBank.CompareTo(other.dataBank); if (dataBankComparison != 0) return dataBankComparison; var directPageComparison = directPage.CompareTo(other.directPage); if (directPageComparison != 0) return directPageComparison; var xFlagComparison = xFlag.CompareTo(other.xFlag); if (xFlagComparison != 0) return xFlagComparison; var mFlagComparison = mFlag.CompareTo(other.mFlag); if (mFlagComparison != 0) return mFlagComparison; return arch.CompareTo(other.arch); } public int CompareTo(object obj) { if (ReferenceEquals(null, obj)) return 1; if (ReferenceEquals(this, obj)) return 0; return obj is OpcodeAnnotation other ? CompareTo(other) : throw new ArgumentException($"Object must be of type {nameof(OpcodeAnnotation)}"); } #endregion } // technically, this computed data can be re-created at any time and we keep it because: // 1) serialize so we don't have to recompute on load // 2) so it's faster when figuring out what to display to the user (vs recomputing on the fly) public class BranchAnnotation : Annotation, IComparable, IComparable { // never modify fields directly. only go through the public fields // cached mark if it's an in vs out point private InOutPoint point = InOutPoint.None; // cached data public InOutPoint Point { get => point; set => this.SetField(ref point, value); } #region Equality protected bool Equals(BranchAnnotation other) { return Point == other.Point; } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return obj.GetType() == GetType() && Equals((BranchAnnotation)obj); } public override int GetHashCode() { var hashCode = (int)Point; return hashCode; } public int CompareTo(BranchAnnotation other) { if (ReferenceEquals(this, other)) return 0; if (ReferenceEquals(null, other)) return 1; return point.CompareTo(other.point); } public int CompareTo(object obj) { if (ReferenceEquals(null, obj)) return 1; if (ReferenceEquals(this, obj)) return 0; return obj is BranchAnnotation other ? CompareTo(other) : throw new ArgumentException($"Object must be of type {nameof(BranchAnnotation)}"); } #endregion } [Serializable] public class ContextMapping : IContextMapping { private string context = ""; private string nameOverride = ""; public string Context { get => context; set { context = value; OnPropertyChanged(); } } public string NameOverride { get => nameOverride; set { nameOverride = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } // represent a label at a particular SNES address // // Comments here are for the LABEL itself, and not so much about where they're used. // i.e. a label for 0x7E0020 might store a character's HP in RAM. It would look like: // - address: snes address 0x7E0020 (i.e. mapped to a WRAM address) // - label: "character_3_hp" // - comment: "this address is only used in RAM during battle sequences" public class Label : Annotation, IAnnotationLabel, IComparable