├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── SFI.Application ├── Application.cs ├── CHANGELOG.txt ├── CommandApplication.cs ├── ComponentCollection.cs ├── ComponentInspector.cs ├── ConfigurableApplication.cs ├── ExtensibleInspector.cs ├── IApplicationEnvironment.cs ├── Inspector.cs ├── InspectorOptions.cs ├── Plugins │ ├── ComponentType.cs │ ├── IPluginResolver.cs │ ├── Plugin.cs │ └── PluginResolvers.cs ├── README.md ├── SFI.Application.csproj └── Tools │ ├── ComponentLogger.cs │ ├── ConfigurationTools.cs │ ├── CustomStringConversionTypeDescriptionProviderDelegator.cs │ ├── EncodingTypeDescriptionProvider.cs │ ├── Extensions.cs │ ├── MappedStream.cs │ ├── NamespaceHandler.cs │ ├── NuGet │ ├── NuGetPlugin.cs │ ├── NuGetPluginFile.cs │ └── NuGetPluginResolver.cs │ ├── PercentSingleTypeDescriptionProvider.cs │ ├── PluginLoadContext.cs │ ├── RectangleFTypeDescriptionProvider.cs │ ├── SparqlValuesQueryWriter.cs │ ├── StandardPaths.cs │ ├── TemporaryGraphHandler.cs │ ├── TypeConfigurationCollection.cs │ ├── UdeEncodingDetector.cs │ └── ZipArchiveWrapper.cs ├── SFI.ComponentImportGenerator ├── ImportSourceGenerator.cs └── SFI.ComponentImportGenerator.csproj ├── SFI.ConsoleApp ├── ClipboardStream.cs ├── ConsoleInspector.cs ├── Program.cs ├── Properties │ └── PublishProfiles │ │ ├── net461.pubxml │ │ ├── net6.0-minimal.pubxml │ │ ├── net6.0-windows.pubxml │ │ └── net6.0.pubxml ├── README.md ├── SFI.ConsoleApp.csproj ├── StaThread.cs └── icon.ico ├── SFI.Formats ├── All │ ├── CHANGELOG.txt │ └── SFI.Formats.All.csproj ├── AllPortable │ ├── CHANGELOG.txt │ └── SFI.Formats.AllPortable.csproj ├── Archives │ ├── ArchiveAnalyzer.cs │ ├── ArchiveReaderAnalyzer.cs │ ├── CHANGELOG.txt │ ├── LhaFormat.cs │ └── SFI.Formats.Archives.csproj ├── Audio │ ├── AudioSpectrum.cs │ ├── CHANGELOG.txt │ ├── MathNetLibraryHelper.cs │ ├── Mp3Format.cs │ ├── OggFormat.cs │ ├── PolarSpectrumGenerator.cs │ ├── SFI.Formats.Audio.csproj │ ├── WasapiFormat.cs │ ├── WaveAnalyzer.cs │ └── WaveFormat.cs ├── CLI.Assembly │ ├── AssemblyApiEncoder.cs │ └── SFI.Formats.CLI.Assembly.csproj ├── CLI │ ├── AssemblyAnalyzer.cs │ ├── AttributeConstants.cs │ ├── CHANGELOG.txt │ ├── CliModuleFormat.cs │ ├── CodeElementAnalyzer.cs │ ├── EmbeddedAssemblies.tt │ ├── EmbeddedAssemblies.txt │ ├── EventAnalyzer.cs │ ├── FieldAnalyzer.cs │ ├── MemberAnalyzer.cs │ ├── MethodAnalyzer.cs │ ├── NamespaceAnalyzer.cs │ ├── ParameterAnalyzer.cs │ ├── PropertyAnalyzer.cs │ ├── ReferencedAssembly.cs │ ├── SFI.Formats.CLI.csproj │ └── TypeAnalyzer.cs ├── Crypto │ ├── SFI.Formats.Crypto.csproj │ ├── X509CertificateAnalyzer.cs │ └── X509CertificateFormat.cs ├── DOS │ ├── DosModule.cs │ ├── DosModuleAnalyzer.cs │ ├── DosModuleComFormat.cs │ ├── DosModuleExeFormat.cs │ └── SFI.Formats.DOS.csproj ├── Delphi │ ├── DelphiFormFormat.cs │ ├── DelphiFormReader.cs │ ├── DelphiObjectAnalyzer.cs │ └── SFI.Formats.Delphi.csproj ├── Disks │ ├── DiscFormat.cs │ ├── FileSystemAnalyzer.cs │ ├── IsoFormat.cs │ ├── SFI.Formats.Disks.csproj │ └── UdfFormat.cs ├── Flash │ ├── SFI.Formats.Flash.csproj │ ├── ShockwaveFlashAnalyzer.cs │ └── ShockwaveFlashFormat.cs ├── GameArchives │ ├── MpqAnalyzer.cs │ ├── MpqFormat.cs │ ├── PboAnalyzer.cs │ ├── PboFormat.cs │ ├── SFI.Formats.GameArchives.csproj │ ├── WadAnalyzer.cs │ └── WadFormat.cs ├── HTML │ ├── HtmlAnalyzer.cs │ ├── HtmlFormat.cs │ └── SFI.Formats.HTML.csproj ├── Images │ ├── CHANGELOG.txt │ ├── DrawingImage.cs │ ├── DrawingImageTools.cs │ ├── DrawingPropertyId.cs │ ├── ImageAnalyzer.cs │ ├── ImageFormat.cs │ ├── MemoryUtils.cs │ ├── SFI.Formats.Images.csproj │ ├── SharpImage.cs │ └── SharpImageTools.cs ├── Metadata │ ├── CHANGELOG.txt │ ├── ExifMetadataAnalyzer.cs │ ├── ImageMetadataAnalyzer.cs │ ├── ImageMetadataFormat.cs │ ├── MetadataExtractorFormat.cs │ ├── SFI.Formats.Metadata.csproj │ ├── TagLibAnalyzer.cs │ ├── TagLibFormat.cs │ ├── XmpMetadataAnalyzer.cs │ └── XmpTagAnalyzer.cs ├── Modules │ ├── CHANGELOG.txt │ └── SFI.Formats.Modules.csproj ├── OLE │ ├── OleStorageAnalyzer.cs │ ├── OleStorageFormat.cs │ └── SFI.Formats.OLE.csproj ├── Office │ ├── CHANGELOG.txt │ ├── ExcelDocumentFormat.cs │ ├── ExcelXmlDocumentFormat.cs │ ├── OleDocumentAnalyzer.cs │ ├── OleDocumentFormat.cs │ ├── OpenPackageFormat.cs │ ├── OpenXmlDocumentAnalyzer.cs │ ├── OpenXmlDocumentFormat.cs │ ├── SFI.Formats.Office.csproj │ ├── SimpleXmlDocumentFormat.cs │ ├── WordDocumentFormat.cs │ └── WordXmlDocumentFormat.cs ├── PDF │ ├── PdfAnalyzer.cs │ ├── PdfFormat.cs │ └── SFI.Formats.PDF.csproj ├── PE │ ├── CHANGELOG.txt │ ├── SFI.Formats.PE.csproj │ └── Win32ModuleFormatManaged.cs ├── Packages │ ├── ContainerFileFormat.cs │ ├── PackageDescription.cs │ ├── PackageDescriptionAnalyzer.cs │ ├── PackageDescriptionProvider.cs │ ├── PackageProvider.cs │ └── SFI.Formats.Packages.csproj ├── RDF │ ├── CHANGELOG.txt │ ├── RdfAHtmlAnalyzer.cs │ ├── RdfXmlAnalyzer.cs │ ├── RdfXmlFormat.cs │ └── SFI.Formats.RDF.csproj ├── SVG │ ├── SFI.Formats.SVG.csproj │ ├── SvgAnalyzer.cs │ └── SvgFormat.cs ├── WARC │ ├── SFI.Formats.WARC.csproj │ ├── WarcAnalyzer.cs │ └── WarcFormat.cs ├── Windows │ ├── CabinetFile.cs │ ├── CabinetFormat.cs │ ├── ComTypes │ │ ├── IPersistStream.cs │ │ ├── IStream.cs │ │ └── StreamWrapper.cs │ ├── InternetShortcutAnalyzer.cs │ ├── InternetShortcutFormat.cs │ ├── SFI.Formats.Windows.csproj │ ├── ShellLinkAnalyzer.cs │ ├── ShellLinkFormat.cs │ ├── Win32ModuleFormat.cs │ └── WinVersionAnalyzer.cs └── XML │ ├── CHANGELOG.txt │ ├── SFI.Formats.XML.csproj │ ├── XmlAnalyzer.cs │ └── XmlFormat.cs ├── SFI.Hashes ├── All │ ├── CHANGELOG.txt │ └── SFI.Hashes.All.csproj ├── AllPortable │ ├── CHANGELOG.txt │ └── SFI.Hashes.AllPortable.csproj ├── BitTorrent │ ├── BitTorrentHash.cs │ ├── BitTorrentHashCache.cs │ ├── BitTorrentIndividuals.cs │ ├── CHANGELOG.txt │ ├── Padded256BlockSHA1Hash.cs │ ├── PaddedBlockHash.cs │ └── SFI.Hashes.BitTorrent.csproj ├── Blake3 │ ├── Blake3Hash.cs │ └── SFI.Hashes.Blake3.csproj ├── DHash │ ├── CHANGELOG.txt │ ├── DHash.cs │ └── SFI.Hashes.DHash.csproj ├── Murmur │ ├── Murmur128Hash.cs │ ├── Murmur32Hash.cs │ ├── Properties │ │ └── PublishProfiles │ │ │ └── FolderProfile.pubxml │ └── SFI.Hashes.Murmur.csproj └── NonCryptographic │ ├── BuiltInNonCryptographicHash.cs │ ├── CHANGELOG.txt │ ├── NonCryptographicHashIndividuals.cs │ ├── NonCryptographicHashes.cs │ └── SFI.Hashes.NonCryptographic.csproj ├── SFI.RDF ├── CHANGELOG.txt ├── ConcurrentHandler.cs ├── DirectGraphHandler.cs ├── FileNodeQueryTester.cs ├── JsonLdHandler.cs ├── LinkedNodeHandler.cs ├── NodeQueryTester.cs ├── README.md ├── RdfAInitialContext.cs ├── SFI.RDF.csproj ├── SearchNodeQueryTester.cs ├── SparseBitTable.cs └── TurtleHandler.cs ├── SFI.SamplePlugin ├── HttpMessageAnalyzer.cs ├── HttpRequestAnalyzer.cs ├── HttpResponseAnalyzer.cs ├── Properties │ └── PublishProfiles │ │ └── FolderProfile.pubxml ├── SFI.SamplePlugin.csproj ├── UriListAnalyzer.cs └── UriListFormat.cs ├── SFI.Shared ├── DynamicDependencyAttribute.cs ├── DynamicallyAccessedMemberTypes.cs ├── DynamicallyAccessedMembersAttribute.cs ├── IsExternalInit.cs ├── NullableAttributes.cs ├── SFI.Shared.projitems └── SFI.Shared.shproj ├── SFI.Tests ├── AnalyzedObjectCollection.cs ├── ComponentTests │ ├── AnalyzerTests.cs │ ├── DataAnalyzerTests.cs │ ├── FileAnalyzerTests.cs │ └── ImageAnalyzerTests.cs ├── EquatableUri.cs ├── ExpectedDescriptions │ ├── cdn.pvpgn.pro │ │ └── 64 │ │ │ └── 64f8e2cc572e5bb6a6ab71e838ab8f55.ttl │ ├── local │ │ ├── 19 │ │ │ └── 1930de3308d05959abd8b9d0365d32d3.ttl │ │ ├── 3c │ │ │ └── 3caf98498538517eaae0b52c4cf22f26.ttl │ │ ├── 5e │ │ │ └── 5e3718fa506153009d28e293802d7b14.ttl │ │ ├── a8 │ │ │ └── a8a17d345e2b50a381849918f4e17a4c.ttl │ │ └── e2 │ │ │ └── e28a8986e29e52c4bd605148ab242ed1.ttl │ ├── nwc3l.com │ │ └── a9 │ │ │ └── a9455dbacdc959fe898302fe7194856e.ttl │ ├── sfsrealm.hopto.org │ │ ├── 17 │ │ │ ├── 1700f5a5486155f8aa7220fad6288a97.ttl │ │ │ └── 1712f426cde6560baec4751a9fbb273c.ttl │ │ ├── 32 │ │ │ └── 32e2cc7d94a457cebb90b5a3e95b924e.ttl │ │ ├── 1b │ │ │ └── 1b015cfbed21566ca5291cdab3ef6641.ttl │ │ ├── 1d │ │ │ └── 1debcda6d7c1599ba56d752b3898bc4f.ttl │ │ ├── 2b │ │ │ └── 2bf52d0b0b39535da3fc809e4f3f8b03.ttl │ │ ├── 5a │ │ │ └── 5a1e4f16e2bb5a168470342112811ade.ttl │ │ ├── d0 │ │ │ └── d01406daf53e5b8aaac553bd75a9df42.ttl │ │ └── ea │ │ │ └── eaacb6e3f8f65e099ffd4b3a2b3d1fc9.ttl │ ├── telparia.com │ │ ├── 10 │ │ │ ├── 100cd019e12e501ba20f05fab1e52331.ttl │ │ │ ├── 1016721b787552a6b85b4880a9d9424c.ttl │ │ │ ├── 103ec6a832bc5259b21544a1ab8502f2.ttl │ │ │ ├── 10406d2f09e35c098cf03e4af7a068a4.ttl │ │ │ ├── 1041a404e28f5e89a57e5adaecb6801c.ttl │ │ │ ├── 104f4f053d605b5eb5927d3cee329a11.ttl │ │ │ └── 1066dfed472e5e5096855868183e5e82.ttl │ │ ├── 11 │ │ │ ├── 110d2fc5968f5d43b8f6c9b1dc4b6425.ttl │ │ │ ├── 115036660f4e5ca3a39290b72c0ce89b.ttl │ │ │ ├── 1160852a27ba52d0bc8f4c62033b56cf.ttl │ │ │ ├── 118172fdbc335c09b6da410f91e1eee5.ttl │ │ │ ├── 11b34dc8aa685e63a0d9834573c088d4.ttl │ │ │ ├── 11bc6af2d13e5050a722d5eec79779eb.ttl │ │ │ ├── 11ca60766b8355b1b315f7fc697e9564.ttl │ │ │ ├── 11ec3b06e4db53448d20bbe2714992ef.ttl │ │ │ └── 11efc38274355923ac0ea4adffc8da78.ttl │ │ ├── 12 │ │ │ ├── 12163fa3331f567588f1fb8d247c8cd0.ttl │ │ │ ├── 121e9a1bde4654aa9ec20b3be1a95819.ttl │ │ │ ├── 1232152086315345a32301e05f6dafc4.ttl │ │ │ ├── 1243de842efe56e89f347257e9fe94fa.ttl │ │ │ ├── 1255bd33f6f8573b973cf82a0c488724.ttl │ │ │ ├── 127367ed91825f178f22a427165f6ed1.ttl │ │ │ ├── 12777db7009c5afca0932a291589a6f4.ttl │ │ │ ├── 127a7b939f6a524cb7f6fd680f34007d.ttl │ │ │ ├── 12a583898d085cd2a798bf3024330d9e.ttl │ │ │ ├── 12ae14f979c85e1cbff96034ddea6a78.ttl │ │ │ ├── 12b4241a1c125f1c94307a2e6458a99b.ttl │ │ │ ├── 12bec88db10f53e7ac01f0000bcf5e3b.ttl │ │ │ ├── 12cbaa04eea25efca4b6849dd41c426f.ttl │ │ │ └── 12fe2f0dd6215c42aa99011b5b02e39a.ttl │ │ ├── 13 │ │ │ ├── 133e1e1cf6a457afb5b4f9f44a835995.ttl │ │ │ ├── 1341f4241ed756c884389f270faabcfd.ttl │ │ │ ├── 134e6c5be7bf50f89d222380ae1f3399.ttl │ │ │ ├── 135e6034432b5f90b790ddda97095356.ttl │ │ │ ├── 13621ffb13605a319a9089bfa23bae37.ttl │ │ │ ├── 136f1f73134a518bb087aff33a690904.ttl │ │ │ ├── 139530b0e9a15d409ec9630abfd0630e.ttl │ │ │ ├── 13be00bb6cbd5ff9a054647718c9037d.ttl │ │ │ └── 13fb252d63a25294b2fbf06aec678803.ttl │ │ ├── 14 │ │ │ ├── 14007426e0d85649b5498ded0492dac1.ttl │ │ │ ├── 143797e299c25b4a9a3bb9f9203de229.ttl │ │ │ └── 14b9bc1008b15601bf8b669a36d93eff.ttl │ │ ├── 15 │ │ │ ├── 15031d3df8395318bac16a89ec031bad.ttl │ │ │ ├── 15159be29c8a53b89d2eaee9fcbc8c26.ttl │ │ │ ├── 15219a8e98f15487bc0cfc0261103b8d.ttl │ │ │ ├── 15267685bb4c55f9b98aea1432aa5d55.ttl │ │ │ ├── 1549c1a7ae7a58449fea8ca056d68c38.ttl │ │ │ ├── 154ba733e83e54448118412b69275c6c.ttl │ │ │ ├── 154fa440ae9157d086e88684f058fca5.ttl │ │ │ ├── 155f9c53098d58fa8e73803d87ad1ee7.ttl │ │ │ ├── 157ec4e8535552d184a7d20a73e00bb0.ttl │ │ │ └── 158638eb127d5199bde838519bfc453f.ttl │ │ ├── 16 │ │ │ ├── 1604d56a5f1c5fe3a4363d664304f21a.ttl │ │ │ ├── 160780a22da8588db1ff5d341b47df73.ttl │ │ │ ├── 1609dee8ac565f2a956ff3bb11b56236.ttl │ │ │ ├── 1614fde5eb0c56ec87ddd27df342ec41.ttl │ │ │ ├── 16192625c71e5a2396eccf00ee7ece4d.ttl │ │ │ ├── 16493190a6525b0fb453dbbce77c542f.ttl │ │ │ ├── 16555b437c46544186fe4dee292981d8.ttl │ │ │ ├── 166ce942109754a39aef5bec36a619ff.ttl │ │ │ ├── 168adb2e7126523e92b3ed8cb5124e3b.ttl │ │ │ ├── 168ed286cc035b4d86447531541b2bd2.ttl │ │ │ ├── 169da36292525778b9493e1422e24f31.ttl │ │ │ ├── 16c8a5ee56d15b79b3ec45990fbc0b13.ttl │ │ │ ├── 16dd348ea71b57f18363bdc0b0ec5350.ttl │ │ │ ├── 16eb7349377e54e8a4bf1cb4bba7305f.ttl │ │ │ └── 16eda3ddb1055763808f76ca43eff363.ttl │ │ ├── 17 │ │ │ ├── 17038a7c8328525bb2f63ddf920a3a98.ttl │ │ │ ├── 171d7e5cb9c05e468baa9a7bdce92445.ttl │ │ │ ├── 174cc4f363985f9786cdd6cd7a839cb1.ttl │ │ │ ├── 1750dc4a5c5652039d627828bcbb7c65.ttl │ │ │ ├── 176154295d045bd29ff4dd4865bf5baf.ttl │ │ │ ├── 1774b4b27afe51959f6082395ee1a4d4.ttl │ │ │ ├── 179b09e74a65505790622c1e0456d1c1.ttl │ │ │ ├── 17a2757c8268522482912b4585a3dc07.ttl │ │ │ ├── 17b3863cea415634aac890a65e2dd3df.ttl │ │ │ └── 17d1597e98815d1abf0d299165e16c11.ttl │ │ ├── 18 │ │ │ ├── 1868089d00d05768b7bfabd5f50019cf.ttl │ │ │ ├── 18844e6ae8bf5c7ab9908f588c7317b2.ttl │ │ │ ├── 18931dd1dd69586981fb4b75363dbded.ttl │ │ │ ├── 189b98e6b9af5420a61ae7d6b1bd75da.ttl │ │ │ ├── 18a88047e635553c96cc66f4b65350d3.ttl │ │ │ └── 18bd71a34a18592397b014c3a7177d5b.ttl │ │ ├── 19 │ │ │ ├── 19082868463457f197689bc75793d013.ttl │ │ │ ├── 190c584678fc50019a88138c888b45f6.ttl │ │ │ ├── 1915837aa84858a0b7a2df11ca55111a.ttl │ │ │ ├── 191fb6dbb3b457f8abe4e590b62fc54a.ttl │ │ │ ├── 192e61d54aa25b7aaf01161a6a2fcad5.ttl │ │ │ ├── 19336a3bcb655376aa559396bec27e23.ttl │ │ │ ├── 19642e4654af561fbfb7652221454de4.ttl │ │ │ ├── 1973c3217691545c8812b064bece2b15.ttl │ │ │ ├── 197de0d5420b5fdb98873aa40fc38994.ttl │ │ │ ├── 197e1a8248d8573787778fcc3a15fe68.ttl │ │ │ ├── 1981f71894be5ce681ecedd0b1650108.ttl │ │ │ ├── 19976c1a77205aa28fb7f2d8e702d396.ttl │ │ │ ├── 1997c3c9b5c751b384f18ac1835fa778.ttl │ │ │ ├── 19b9850325b15ba69fd7361452b2add5.ttl │ │ │ └── 19fae8c9b9d25d0f8e01d1ac0a53c290.ttl │ │ ├── 20 │ │ │ ├── 2037559b05da5ae5b842079a4c7f7b7f.ttl │ │ │ ├── 20515ad4bf6c5e67a408420b7c11786a.ttl │ │ │ ├── 208cd0e790bf5099ba4ef5468caf307b.ttl │ │ │ ├── 20cbb8f02980500a83fd5bfa21af358c.ttl │ │ │ ├── 20e8f99d180b53548ef79281f8e237ba.ttl │ │ │ └── 20f7fbaea6d459d3858350b5a5d8a841.ttl │ │ ├── 21 │ │ │ ├── 21618fa76c755f54aa5268af3c478f44.ttl │ │ │ ├── 21656166540256d6ba54eec196b69542.ttl │ │ │ ├── 2166bddc8046590187abf1c384209f9c.ttl │ │ │ ├── 2168da3f46bd5ed8a96c74184922f7fd.ttl │ │ │ ├── 2170b754e0de5474b9a833100cac32b7.ttl │ │ │ ├── 218f62ef755d59f28bca883fb6ab7eb3.ttl │ │ │ ├── 21b9998aefc7510b8eed96bee0dbe0b2.ttl │ │ │ ├── 21c00f29592e57c6888abdf511ce5e42.ttl │ │ │ ├── 21da630b32ce55f997d72b60b976f87d.ttl │ │ │ └── 21fd2f370f8759809ca75d83f15b40e1.ttl │ │ ├── 22 │ │ │ ├── 220a7216f83f53798c81f94ad3c04f49.ttl │ │ │ ├── 221bd67fb42753ca94df4a1eb7a70a4a.ttl │ │ │ ├── 222c84312694537db8b2051a3e1c0639.ttl │ │ │ ├── 225f8ef10dcb5219a9b5f654ed8907b5.ttl │ │ │ ├── 2296754dea5c5c03ad2030476345207a.ttl │ │ │ ├── 229ed05bf5f85ff69dfd0a82a6b86cc7.ttl │ │ │ ├── 22cbc7282407509889c31d21257199d4.ttl │ │ │ └── 22fa68e00a3d560d83efac345bd7ab61.ttl │ │ ├── 23 │ │ │ ├── 230729156d82579da56de307a55678e4.ttl │ │ │ ├── 231b6ac9cd34580689f4dce567980349.ttl │ │ │ ├── 23273bbe66b35ffea81dac4e297e01ab.ttl │ │ │ ├── 232f8a670e2c5e008e788080e5285136.ttl │ │ │ ├── 2391eafd318055128fbdd63ad0024b88.ttl │ │ │ ├── 23a1a2da7554546dbefac5b246235920.ttl │ │ │ ├── 23b9bbdef3fa54348fb29b2c9dcaae38.ttl │ │ │ ├── 23cccff3395057a5b4f0c5545946527c.ttl │ │ │ ├── 23d98534c1a655ff8e3ca67d78471c1c.ttl │ │ │ ├── 23dbb5c9db8e503fa794dcb0f25323b3.ttl │ │ │ ├── 23de7ed0f38a5bf9b2db1c683466515f.ttl │ │ │ └── 23e6091cf1a45ef7b4c22e267881efcd.ttl │ │ ├── 24 │ │ │ ├── 241468f91ca15aeb99e87c3677b0dcc4.ttl │ │ │ └── 24670ab038f65c8d87f1f71b14846e25.ttl │ │ ├── 25 │ │ │ ├── 25077be685b05cd6b3d8d48a9841749a.ttl │ │ │ ├── 250a0fe9b47a5ae58b91393be726567a.ttl │ │ │ ├── 25264d43a148526c854bb0ccc4e42beb.ttl │ │ │ ├── 2535ae9524cc573890e3c6cc9f74a51b.ttl │ │ │ ├── 25850d20f64956859c4fdb47d10dbb6f.ttl │ │ │ ├── 258947a0552c543ebdceaeda6f2f2eba.ttl │ │ │ ├── 25a896534d8d5a658cfc07caf49431fd.ttl │ │ │ ├── 25bc243496a9578cb0090db69138a8d1.ttl │ │ │ └── 25c9e93a54945aecb9c2277a771aaf6a.ttl │ │ ├── 26 │ │ │ ├── 26167a7b3fda585c8402fa20ac2395f9.ttl │ │ │ ├── 26485f6d6cac52039899bf0410afdd9e.ttl │ │ │ ├── 264a7b7a896f5922a8efc95c1e291f25.ttl │ │ │ └── 26efff00555e5b979e43ef4def7e43f0.ttl │ │ ├── 27 │ │ │ ├── 2752b9999cc25c3dbc8073dffee41a03.ttl │ │ │ ├── 27844f831b2556f59acd53373c3319f4.ttl │ │ │ └── 27a62e11e71f5be9b1c71228540839dd.ttl │ │ ├── 28 │ │ │ ├── 28168bb958c6544799b37e97118f5b7b.ttl │ │ │ ├── 283aed85346853f89fc285f6b65e9bfd.ttl │ │ │ ├── 28638dd8a2c257e689bf56f777f7d398.ttl │ │ │ ├── 289dc5200788581a83ebfe8592fd9ab1.ttl │ │ │ └── 28c136017f5d57d58a6ba291b0cd9bc6.ttl │ │ ├── 29 │ │ │ ├── 2922378441bd545daf2b8c67255fcd2f.ttl │ │ │ ├── 2987ab6fec5053a2a87c06adfeece032.ttl │ │ │ ├── 29b50f95936c53c1b5fbba8491645bde.ttl │ │ │ ├── 29bc29bb95be54c391eac4ede18caf20.ttl │ │ │ └── 29ce5d43c3675b79b9b29fa96e52bb20.ttl │ │ ├── 30 │ │ │ ├── 300402a1df6a59679b5f12c5631f618e.ttl │ │ │ ├── 301976197db85e0ca7f9102fe2b5b2b8.ttl │ │ │ ├── 303df6add78b5fa384b06dbb516054fb.ttl │ │ │ ├── 304d180b559b5c3599326064d49f257d.ttl │ │ │ ├── 3060201578ac5112918f29faab455ffa.ttl │ │ │ ├── 30664df6f26357ada4e9395d76a61fb7.ttl │ │ │ ├── 307bea5cdc2455f6b276e15d6172147f.ttl │ │ │ ├── 307e108d568d5252afca6c91f7429423.ttl │ │ │ ├── 308a9d84b1ab5c8d88831ee30d4bfebd.ttl │ │ │ ├── 309bbcce5d345dc4854a6d8abbf954d5.ttl │ │ │ └── 30f8203a5c15597897740be3fe3429b8.ttl │ │ ├── 31 │ │ │ ├── 3135ad3e21f65ad787c53938e35f88f6.ttl │ │ │ ├── 3144b687a57e5bbb8be2c5d2dee43ac8.ttl │ │ │ ├── 315350731a5a59a5ac4d636701a47bfa.ttl │ │ │ ├── 317439bdf5195171ba08920a49c07a44.ttl │ │ │ ├── 31a64ce0c78a51b7bc617d3c0244b112.ttl │ │ │ ├── 31aca29daeb655fe9b7bf20dff99f2af.ttl │ │ │ ├── 31b61eba2fba55bbb86351cf43df9384.ttl │ │ │ ├── 31e7be0d9d88582dbb11f2fec402c524.ttl │ │ │ └── 31fd1a856faf54d7a961e274420bf984.ttl │ │ ├── 32 │ │ │ ├── 3216d3a4a36552e4858598eb944ada59.ttl │ │ │ ├── 3236ab9a76375a399a1b6616e9c994bc.ttl │ │ │ ├── 326143204798511ba6a0c152a34bb7e3.ttl │ │ │ ├── 32622b5c1a6151839674fd35d18ea045.ttl │ │ │ ├── 326e7c2f20035316b55e6bee8ff1b968.ttl │ │ │ ├── 32754a6ef37456af903752312e4762e6.ttl │ │ │ ├── 329ef4f5e7135e03908b753f66683345.ttl │ │ │ ├── 32b402d2787f53709bb4733932645278.ttl │ │ │ └── 32fae87a031959a5aeb0e7bb5e03e859.ttl │ │ ├── 33 │ │ │ ├── 3303ba0e09255fb7a4a287dffaaade8c.ttl │ │ │ ├── 331f6cfda216561583e7cd32fa4b4165.ttl │ │ │ ├── 3378ca4c965c57bc94f06a966e1ada9c.ttl │ │ │ ├── 3379eb767c8c549a8429b53e78bab023.ttl │ │ │ ├── 337b55f993755ab69843416c6bba89d0.ttl │ │ │ ├── 3387173834cb538abc69592d19b2a7fe.ttl │ │ │ ├── 33cbd4d06b1851baae732f166c024113.ttl │ │ │ └── 33ef6505ab5f5bb6a411e003713d3d09.ttl │ │ ├── 34 │ │ │ ├── 3448f39aab6f510b83dc99bea85973d8.ttl │ │ │ ├── 3454c8df314159b09902a08f74fc9e24.ttl │ │ │ ├── 348870b83050539dbfb16abaf97ce2ca.ttl │ │ │ ├── 349cbad801705a7ea05298220abd3d4c.ttl │ │ │ ├── 34c774cbc8ab5c18a0dec806c0d751ec.ttl │ │ │ ├── 34e3991988f05c6295210c76499e490f.ttl │ │ │ └── 34e6ca14fcc3592fad337c6343866e2f.ttl │ │ ├── 35 │ │ │ ├── 3500e57b9e6551788f72e02d1040adee.ttl │ │ │ ├── 3567f10090345149ba48d644c3aae7f7.ttl │ │ │ ├── 35858256ca315706be839ac037095d43.ttl │ │ │ ├── 35dd94b038b15d2eb296b87eb532601a.ttl │ │ │ ├── 35e0d86360f7530a8bb9995603660b8c.ttl │ │ │ └── 35f3d1e179ae59cba1a0f90cb5d3a1b3.ttl │ │ ├── 36 │ │ │ ├── 3632fcf49dd35b01a60847f65d127f0b.ttl │ │ │ ├── 3644acbbcdde5d1394770e10bff70388.ttl │ │ │ ├── 366b9f83811a55dab53f5d2d758ed471.ttl │ │ │ ├── 3675a0899c4058fe9944d247725ba1e8.ttl │ │ │ ├── 369b005609165062a8fbd3f49e65e56c.ttl │ │ │ ├── 36aa7e917a4752b991485529997d3d7b.ttl │ │ │ ├── 36c0397321ea5933805999800abb33ad.ttl │ │ │ ├── 36cb817a9c2a5e46bd35ebbc5b378f7b.ttl │ │ │ └── 36ea2103d3e654029360efdce022f4db.ttl │ │ ├── 37 │ │ │ ├── 3727f6346b695b1b9a0f58935d6c7f9e.ttl │ │ │ ├── 373b141bf5945425ac4454d8b04516ed.ttl │ │ │ ├── 37679e6474ed5db9b138d76e322ea0d9.ttl │ │ │ ├── 37bd3a1e6db8585ebd6eaca8db23f28d.ttl │ │ │ ├── 37c0abfbcb0f5a98b0b52fb2e6d7a216.ttl │ │ │ ├── 37e6526776515a1db3788a0c8b63690a.ttl │ │ │ └── 37ee42d24e6f590ebfa9c8660d565322.ttl │ │ ├── 38 │ │ │ ├── 380dddb6d3105ae2860adec13ca52975.ttl │ │ │ ├── 38141af2c1c352c7bd853cf7a23d4426.ttl │ │ │ ├── 388a03231f7953f39ef0b75bb59d472c.ttl │ │ │ ├── 3892bba9f636556e88a01a150a284a0c.ttl │ │ │ ├── 38b91872fc8e5bfaaa87a5c05a432d73.ttl │ │ │ ├── 38bac9e86abe591cb9bb0af2b2c59010.ttl │ │ │ ├── 38daeafc7e625b39b7a261adf3f8f27e.ttl │ │ │ └── 38ff65a1f2465789bebb5ebd25b1fa1f.ttl │ │ ├── 39 │ │ │ ├── 3946f3ea59625d90b90321e5d6730c84.ttl │ │ │ ├── 394818cf6e2e5b7e9fe39375c50278d8.ttl │ │ │ ├── 394ca94a52fe59c8aa6e26c4be2494b1.ttl │ │ │ ├── 394f6909f3ea59d68af4ae1b865c7cbb.ttl │ │ │ ├── 39b15792f2d25f849cc712413068e87b.ttl │ │ │ ├── 39d2a3922ee756deaa442163bb4228bc.ttl │ │ │ ├── 39e5d8d7e3255c72bc1ed776088c8fdb.ttl │ │ │ ├── 39eb30bed8d45cb0a260bb84c6777b9d.ttl │ │ │ └── 39f7dedab5b35391b5afcba178f25bd3.ttl │ │ ├── 40 │ │ │ ├── 400adcf88b275a61afd0052914526cbb.ttl │ │ │ ├── 4016ccae9fb1573980e05d8b6521d921.ttl │ │ │ ├── 401d9dd2d1a554b297956ae18179b114.ttl │ │ │ ├── 4057e8d306cf5dbaabb4486e771792b4.ttl │ │ │ ├── 4093133bcf8c573f9bee5c162fbc391c.ttl │ │ │ ├── 4099c782ce605b7aa97c75ab35c57bac.ttl │ │ │ ├── 40ca01d0be1f5085afa452859835aa90.ttl │ │ │ └── 40d06c2007165ccd9f2d29d8b24c2b76.ttl │ │ ├── 41 │ │ │ ├── 416ba816d57b5944abc1849c196c960a.ttl │ │ │ └── 417265f53d09569a81f37ff785289b7e.ttl │ │ ├── 42 │ │ │ ├── 42080d7bb1715d8496349799c3aa96a4.ttl │ │ │ ├── 422a1f280a96527cb64202a4106fff0b.ttl │ │ │ ├── 425bce8c64855d1cb2e7fb7e200eced7.ttl │ │ │ ├── 42748e720ec65c6aaa25e6042763b307.ttl │ │ │ ├── 4285ef8f03215f6e94e3c21720ada01d.ttl │ │ │ ├── 42927d43132a5dcfb671162c14e628a1.ttl │ │ │ ├── 42b9d6aa59ad55ea98e0ad9b543f5802.ttl │ │ │ ├── 42eb8708e33554cf81f0c0aadc97fb3a.ttl │ │ │ └── 42ef7f20c7a755048be04302b48fa45a.ttl │ │ ├── 43 │ │ │ ├── 4309c2ba71315c9987bdf09177737dc8.ttl │ │ │ ├── 433702a8d9905af791d6a18815c60d75.ttl │ │ │ ├── 43a17d361a5a544982e8fe23b2cd5382.ttl │ │ │ └── 43b922c9215859368492150b3d3351f6.ttl │ │ ├── 44 │ │ │ ├── 4419ca9047955a5dbe751e72cf1ea360.ttl │ │ │ ├── 443fda02fb4d53eb97f4700d8fe3f24b.ttl │ │ │ ├── 449acc82c2da5fd7a723842cdbfd15ed.ttl │ │ │ ├── 44c832cd6a515785a3d84d9693729ae2.ttl │ │ │ └── 44fe624ec8cc57ac83cd3d8a9b479925.ttl │ │ ├── 45 │ │ │ ├── 451bda1e317a523ca5313252067ab6c0.ttl │ │ │ ├── 4580c87057265b5fb590db25ef6f38b6.ttl │ │ │ ├── 458c78810e285dd8afe1f4c9a8a1e4aa.ttl │ │ │ ├── 45a0f89420a051ecb0688998ab439574.ttl │ │ │ ├── 45b326eb01ce5f25aee4ba023364f872.ttl │ │ │ ├── 45bc1292a2015a62914699eb7dc0fc53.ttl │ │ │ ├── 45c37137577a523f81806ef73a53c52c.ttl │ │ │ ├── 45e9086c5f9050a48b21e6ba29bd1983.ttl │ │ │ ├── 45f6f68c2f9559dfb8e2da6f57226d99.ttl │ │ │ └── 45f77967782e50f39ead40cf43d2a508.ttl │ │ ├── 46 │ │ │ ├── 46387f3987fc5f43a0f40bf986a6447d.ttl │ │ │ ├── 4645e33594d95953b32edc4ae7544f05.ttl │ │ │ ├── 46496733fab25a9d80e80291b8e1c94a.ttl │ │ │ ├── 464f073bf1335d33b890d4903de387a0.ttl │ │ │ ├── 46ab17a52890552789d597121e622644.ttl │ │ │ └── 46ba688621b5541f92498c7c395a3f42.ttl │ │ ├── 47 │ │ │ ├── 4744ef1a8c1856bfb39fb767a02c4f05.ttl │ │ │ ├── 4751ef9241625ecc9dac861553fe9bf0.ttl │ │ │ ├── 475938df2d1f5a98b17e3e579a03995e.ttl │ │ │ ├── 4782d46b94cc556bbcdcb7b2f80c6e15.ttl │ │ │ └── 47d27c5697c051f180e52470952349fd.ttl │ │ ├── 48 │ │ │ ├── 481a21bbc1b15b5d82490d49446c6a53.ttl │ │ │ ├── 4821fbe360235f2980c2670079301d45.ttl │ │ │ ├── 483a9afd21395a1787a2d90ec56e3607.ttl │ │ │ ├── 4869ce630b5d5175a7fd3ab0e62a9316.ttl │ │ │ ├── 488b1b8385b650298f4d1c6c74cdd471.ttl │ │ │ ├── 489de0b16cfd5d828cf30c1e9eb87491.ttl │ │ │ ├── 48e44a06184d589c89b9e98d9a1a8ea9.ttl │ │ │ └── 48f0bbc2e7015858b0a0a498089ae6d9.ttl │ │ ├── 49 │ │ │ ├── 4914e6a2b6d052b0a1c87941322b1acd.ttl │ │ │ ├── 4920de2d4ddc57ddb99ab2de764cfa82.ttl │ │ │ ├── 4943ff9d14f95c04b24eb3fc1def99bd.ttl │ │ │ ├── 49b50ac93cb953f69aec7a61cc3075eb.ttl │ │ │ └── 49c3703f5d475a4188e835db85731485.ttl │ │ ├── 50 │ │ │ ├── 500814c6424657fd89c7a4d5ef70bb2b.ttl │ │ │ ├── 501a349180895d9e82207b7ead33d04f.ttl │ │ │ ├── 50585cdb0def588ba2d4953d6f57656c.ttl │ │ │ ├── 506ca0c8954850068a0bbc96168ec385.ttl │ │ │ ├── 506d4ee6707c508793a7ae81bf69bc3e.ttl │ │ │ ├── 507062ab7e935069b69de0970294a0da.ttl │ │ │ └── 50907b0e59115a5093114a53d04547c4.ttl │ │ ├── 51 │ │ │ ├── 5164180f23c0571e8408cdd2ea6a02e5.ttl │ │ │ ├── 5188ffc8f3b15e9a8d384e0e4f068732.ttl │ │ │ ├── 5189242f92185e318f940dbe72326662.ttl │ │ │ ├── 5193a6f10f9651fbb83df356528933c5.ttl │ │ │ ├── 519b2e01668b5f5b95dbc793baa468ec.ttl │ │ │ ├── 51aa947cde605003b83d2aae54e9e2f0.ttl │ │ │ └── 51e0aebd8d305d13829030c652d5c02a.ttl │ │ ├── 52 │ │ │ ├── 520517747261565183c2ced5c69db8d9.ttl │ │ │ ├── 523295e6599e54778e2865a598d2f5b8.ttl │ │ │ ├── 523eecb4ccc2526fa8db4eb7814784d8.ttl │ │ │ ├── 52630c76c60d5cbf9d6ae09854de9fc6.ttl │ │ │ └── 526a769dbc1f5f1f91a75a093d5fa5e9.ttl │ │ ├── 53 │ │ │ ├── 53046b60869d54faa61317b782678b88.ttl │ │ │ ├── 5325a3bbb32e550d8d862ee1a257a0d9.ttl │ │ │ ├── 53425a6ebd29583d81fd2cdde880854a.ttl │ │ │ ├── 536f062cdb6e5b3690771e4f51e9c53c.ttl │ │ │ ├── 53b1956aaf4252fab4741c9c4c567ab9.ttl │ │ │ └── 53b3f4c3af9452588a9dc2fbc08ace7b.ttl │ │ ├── 54 │ │ │ ├── 5422a452936158d5911014c8daaec690.ttl │ │ │ ├── 5423e073b543510994249ccacb3eb917.ttl │ │ │ ├── 5425b65952d75168ac9a52050853ae58.ttl │ │ │ ├── 54305f41953b58ffb4be914070b96620.ttl │ │ │ ├── 548280d4150f5ca28f56f15ef82b6980.ttl │ │ │ ├── 54944bc0dba4584e8e3c0feb3a8e47b7.ttl │ │ │ ├── 54ec79909beb5b81adbaee211c882b8e.ttl │ │ │ ├── 54fe907adec2586d8a1c5882f574dee0.ttl │ │ │ └── 54ff1542ba7f5769b6229f1e4c198aff.ttl │ │ ├── 55 │ │ │ ├── 550be7e972345943bbb6141760818e57.ttl │ │ │ ├── 551a3369479859b68c6c1b5ef8bfeaad.ttl │ │ │ ├── 5529cbcd8adf517983717108ae1915e6.ttl │ │ │ ├── 5533a58fcd5a505a928f36a361beb377.ttl │ │ │ ├── 553dca1228e85364a2000bc2f2fe90f3.ttl │ │ │ ├── 5549494418e859309114c39c4074301f.ttl │ │ │ ├── 5593a7e11cb85a85a7f07e3f1ff21f1d.ttl │ │ │ ├── 559d9ee7a9bb5c6899fe2d1cf5513c58.ttl │ │ │ ├── 55a959ac594b5917ab31ad73c6c4ccbd.ttl │ │ │ └── 55c9917583e15aaf95a50601a3675384.ttl │ │ ├── 56 │ │ │ ├── 564a074a5599526d973b6639b42c8776.ttl │ │ │ ├── 564f4b3d247c5fda94560957cc74ac3e.ttl │ │ │ ├── 5669b7b4dc305ddf8b8806d6aac9f61a.ttl │ │ │ ├── 56a09d1f6f345323aa00a201709045ed.ttl │ │ │ ├── 56c8b2d41a135ba98ad002f0ef3b8395.ttl │ │ │ ├── 56d3c0eed64b525f8abb5af120c89586.ttl │ │ │ ├── 56dbc5f3aa1255829b059dceabed1baa.ttl │ │ │ ├── 56ee145f6e535b4fb7a164786117fb40.ttl │ │ │ └── 56fbabf50acb5e4a942271691f3feb1c.ttl │ │ ├── 57 │ │ │ ├── 57429d40ae7a5730a288a9a8aea7e600.ttl │ │ │ ├── 576d3c28d7e65978a4ecb787fce0899b.ttl │ │ │ ├── 57ab8505fe39509185226c584632a514.ttl │ │ │ ├── 57b0b60fe047553c95595b6253d4039c.ttl │ │ │ ├── 57bdc50b89cb5201bebd6fc3d51add59.ttl │ │ │ ├── 57cac4e95b915ddcb1feeb308f199545.ttl │ │ │ ├── 57cb1be9098954acbc2b4eb9a6d84508.ttl │ │ │ ├── 57d8e31b9f345beeb1ac63a103536777.ttl │ │ │ └── 57dcfea6b03c54c68fe1c6534de3ebc3.ttl │ │ ├── 58 │ │ │ ├── 58078a1772c859ce93deae487bd3a519.ttl │ │ │ ├── 580f1d1838305dc2b2e3953badf57ce4.ttl │ │ │ ├── 58228599225350d1a74c60d19dafde7b.ttl │ │ │ ├── 5847393da1745dc1bd3b72a6b70d1e0d.ttl │ │ │ ├── 586c876a1745540791889439084146ab.ttl │ │ │ ├── 586e40e5db93583ea035094435391344.ttl │ │ │ ├── 58720c0068305132965029bd21bf143d.ttl │ │ │ ├── 58cc5145c62e57abbf818e2590496428.ttl │ │ │ ├── 58e3897e88705dc2a53bc14b4aaad1d9.ttl │ │ │ └── 58fe6d5b91145525b9901352266aebf4.ttl │ │ ├── 59 │ │ │ ├── 59305f50890356258a877fe321be45a1.ttl │ │ │ ├── 594f45dab3f658f2a78fbcc7f7193e59.ttl │ │ │ ├── 5968b872447d5e0186fd4a21d972662e.ttl │ │ │ ├── 596e7d0d40c859da90a70a52b1b96b6e.ttl │ │ │ ├── 59c30be254b050fc8974aeef30416ef1.ttl │ │ │ ├── 59c58dea582a58d49d8b7e553d590567.ttl │ │ │ ├── 59fcdd2c797f5100b4d1eb6ec6eace20.ttl │ │ │ └── 59fe13f89b865b059158f679374b0e3a.ttl │ │ ├── 60 │ │ │ ├── 604720d4b6bc50938aee87fdae0359aa.ttl │ │ │ ├── 60874ce26c0f5cab8e80fbfeb5f8fe34.ttl │ │ │ ├── 60a01e5e6eb85ef48f8bb54b1e45fcfb.ttl │ │ │ ├── 60f3b3e501b75c2a88b971e19cf48474.ttl │ │ │ └── 60feb5079f5853fd981754867aead91a.ttl │ │ ├── 61 │ │ │ ├── 611fcd310eb150a3bdaacf4c64f8d8db.ttl │ │ │ ├── 61299964d92a5f169cc1e7f75e9f6fee.ttl │ │ │ ├── 6140e2c421f25782aa99f540dfd81c80.ttl │ │ │ ├── 614487df4f0e5675820b6a50d13775dd.ttl │ │ │ ├── 614ff2b8a1bb5021ad04287978e0c279.ttl │ │ │ ├── 615d107191245358b0ee017804c6f774.ttl │ │ │ ├── 6167586ba1c25e6598e11ca3ef3cafe5.ttl │ │ │ ├── 616d06951f665b54a3dd60d91bd4c48c.ttl │ │ │ ├── 619620903b585b5bbc48be024638d08a.ttl │ │ │ ├── 61daf94b60fb55ce97a9f44aa42bce7c.ttl │ │ │ └── 61e6daf6b42a5d4fa5d6766d58a4cc10.ttl │ │ ├── 62 │ │ │ ├── 624f7956f3125ad5a026638f256651c4.ttl │ │ │ ├── 6261f071816a53b5948a0653a7550070.ttl │ │ │ ├── 62d727d082a5575eac07e71cf4171c06.ttl │ │ │ ├── 62d9c7d1f837591bac94f6afcb707e09.ttl │ │ │ ├── 62ee04e0f93453c781398290f5f0d84d.ttl │ │ │ └── 62ff9a4b82de5624b88e8ad2e198855a.ttl │ │ ├── 63 │ │ │ ├── 630240acf715502b91ff5b95116ad2b3.ttl │ │ │ ├── 6310dbf9c24f5ba5b43b8ad205639904.ttl │ │ │ ├── 63341c33034052a59372ecbc45f9cc23.ttl │ │ │ ├── 63344b7eb87d51f8a8aff98b66d15d26.ttl │ │ │ ├── 633983c8e59c567083145ba4ff70f3f8.ttl │ │ │ ├── 63a1100a932a50ce95638b9fb33e127b.ttl │ │ │ ├── 63ba808377fe56698dc18c6066e03a2e.ttl │ │ │ ├── 63d9e6a18d3a551fbc14e4607959670a.ttl │ │ │ ├── 63eadac62c045f22935e4e42ffe78209.ttl │ │ │ └── 63f6197dfabe549d86456d8312b32066.ttl │ │ ├── 64 │ │ │ ├── 641dffc147535701a976cac9f92d0761.ttl │ │ │ ├── 6425b0f54fe75353aa63c10dd0ccd53b.ttl │ │ │ ├── 6440ea1a8c6f5b29a7fbeff16bc6e293.ttl │ │ │ ├── 648c2c48a99f545186651d18a2ea9470.ttl │ │ │ ├── 648e3be728d553b68ccd302f689bd54f.ttl │ │ │ ├── 6494989e5a23569da34944519dcca964.ttl │ │ │ ├── 64955756ce715575bd0eb66476b8ed7c.ttl │ │ │ └── 64efbb38d98159dfafa2e3412febcae4.ttl │ │ ├── 65 │ │ │ ├── 653c97f88419577cb6e1111ddabaa49f.ttl │ │ │ ├── 6566bf091aa355b791259f0a83e973d3.ttl │ │ │ ├── 65b1a09c57615294b69767cb654b6816.ttl │ │ │ └── 65db9b196f3e5cd9a821a66ee8717d42.ttl │ │ ├── 66 │ │ │ ├── 665fbc01950b5abc95994de0c4d76227.ttl │ │ │ ├── 667789e0a6b35668b96949d3b9c04c01.ttl │ │ │ └── 66a9e8719a9c5f26b77ea08394b0fa9c.ttl │ │ ├── 67 │ │ │ ├── 670ce7454357560998f61df528e48773.ttl │ │ │ ├── 6745b54da533546fac1482dc9675b8c2.ttl │ │ │ ├── 676c05a118755626b89cb764fc95aab7.ttl │ │ │ ├── 6794168327c952f7a1b2434870937f20.ttl │ │ │ └── 67eaa7a45665552e8b2a396968281854.ttl │ │ ├── 68 │ │ │ ├── 681904ffe3d95b77b3e98ae81b81ed20.ttl │ │ │ ├── 682a2143a8005e14961c305d89c6fe92.ttl │ │ │ ├── 68a8cd2ddf9b508d8071c94f75a4549e.ttl │ │ │ ├── 68d937f7bac05a7cbf9bc6b1769abf29.ttl │ │ │ └── 68ee71acbcc653feb9210b03a0b79a2d.ttl │ │ ├── 69 │ │ │ ├── 69061f3ab8435089845a4bb963e1baa8.ttl │ │ │ ├── 6946cbb148865824ab6e2b0ade54233b.ttl │ │ │ ├── 697f018aa9895fe589e12386ca16e4bc.ttl │ │ │ ├── 698d8163d8815333a53c54854c03c4a0.ttl │ │ │ ├── 69930b6ed9e85f30acaf3c645450df32.ttl │ │ │ ├── 699f08ca2e5752859e2512a556f16144.ttl │ │ │ ├── 69ae11e67fa45241b270cc0400dfb789.ttl │ │ │ ├── 69be9982948e57fa85bc957fb5a034bc.ttl │ │ │ ├── 69c381a30c72580783b90b52e3cdf1d3.ttl │ │ │ ├── 69f01e2091af5da7b457f4a1db888f30.ttl │ │ │ └── 69f08dfd02035ecfb6c1d98b1c817024.ttl │ │ ├── 70 │ │ │ ├── 702add0551f45f3cb01b57cae3815503.ttl │ │ │ ├── 7035b62a86b95b12b170b5bf6ce92f84.ttl │ │ │ ├── 7098658ac7db5ac58eb2c80116376bef.ttl │ │ │ ├── 709e1e4283845b728a6764fd28056c90.ttl │ │ │ ├── 70c769d74d2a568697aa1417d140373e.ttl │ │ │ ├── 70c79f137e465595be40d472a0768965.ttl │ │ │ ├── 70eca593bf0e55f8aa292557a0227cc3.ttl │ │ │ ├── 70fac5c7a446539a9df2eba42846649f.ttl │ │ │ └── 70fd9420fdd253b9854f8edb5b109a19.ttl │ │ ├── 71 │ │ │ ├── 7101055c8b0454879b0c643803fa883f.ttl │ │ │ ├── 71299c42652d58f88a99755e0139151f.ttl │ │ │ ├── 7152d25a51e95eb68a6de7bf1ee76613.ttl │ │ │ ├── 71571e3c3b8459639a4ceeaf4420b875.ttl │ │ │ ├── 718382fc830f5054917062a363461bec.ttl │ │ │ ├── 71adce607709524aae4fc28f7fe8c269.ttl │ │ │ ├── 71b14c7ca24258ed94a137a1506aaa76.ttl │ │ │ ├── 71b280cbf0e45d26bc1183d78b848b0a.ttl │ │ │ └── 71be19cf94375fd0a9e42bad58abdce9.ttl │ │ ├── 72 │ │ │ ├── 720450bbf49251c4ba91025f50177387.ttl │ │ │ ├── 72466b8cc74e55b3918f2975c8688c93.ttl │ │ │ ├── 727ff503f04b5bc99cfbfc26893f518a.ttl │ │ │ ├── 72bb4119ab9654cdb76c868b9c33fb1a.ttl │ │ │ ├── 72be1c4cb7295c72a9f4dc2bd34b3e4e.ttl │ │ │ ├── 72c5c16f9da25bb1bcd4e7a31a8bd4a2.ttl │ │ │ └── 72f1f91f08535a3c8208ce2ec2bf4990.ttl │ │ ├── 73 │ │ │ ├── 73296378499f597e92505c8cf2191aec.ttl │ │ │ ├── 7332fa3d92765280aea7089f5342322d.ttl │ │ │ ├── 73940123589253d9baa26fc1214f569d.ttl │ │ │ ├── 73d36edfdb2953399b39e93dee93d710.ttl │ │ │ └── 73eeca4056275a7e92f43e7d13aa5dc1.ttl │ │ ├── 74 │ │ │ ├── 740d1c3555235d578f4c9fcd1348a6a3.ttl │ │ │ ├── 742c6fd3f8035ca6ad256190a99cd72c.ttl │ │ │ ├── 743278a2bbc15f76a7c40eba93ef277b.ttl │ │ │ ├── 747fc3c6e2b1538cb1c5438102c2819c.ttl │ │ │ ├── 74805a239ccd581eb497aadabf82a35f.ttl │ │ │ ├── 7489bc04638e568397024945f25bc065.ttl │ │ │ ├── 748f907ff854510188f833d6938312fa.ttl │ │ │ ├── 74adeb7a9be35f28bd7b0c7ab76af7bd.ttl │ │ │ ├── 74d91a54c7c45b39aa42c30bdb10affe.ttl │ │ │ ├── 74e0e02077d45a8a86be1e2ba6c61326.ttl │ │ │ └── 74fd357e36085d60b3a23558ea40af12.ttl │ │ ├── 75 │ │ │ ├── 750e7ba1d1ad5e2cb5fe9c81da8febfe.ttl │ │ │ ├── 7530de7ee6f758359815ab079ffb9f15.ttl │ │ │ ├── 75751cfe3ad95f01b18079c22ebb9813.ttl │ │ │ ├── 757710bc861a5e4c9b71ce8cbd4693c4.ttl │ │ │ ├── 759217dee8455624b5c032d36922af05.ttl │ │ │ ├── 759b327840c556b6b726659398b178a6.ttl │ │ │ ├── 759b4718dc015731b14ecf703ee47c2b.ttl │ │ │ ├── 75cc4cb73e5b542a949ac081d796c2f1.ttl │ │ │ ├── 75e7071e25525a33b5d779e57ce3443e.ttl │ │ │ └── 75eab5c7688154f7b30413e6a26b393f.ttl │ │ ├── 76 │ │ │ ├── 760cb3d4952056e3adbced0c03108d27.ttl │ │ │ ├── 760e21cf698a568ca8c8bbb05265b5b8.ttl │ │ │ ├── 769013595b2a5cf4bbcd6820480c079c.ttl │ │ │ ├── 76ac48cd31cc585085ced6096ba12552.ttl │ │ │ └── 76e43472adb1529c8d6b57bcb0dd5455.ttl │ │ ├── 77 │ │ │ ├── 7713a39a24db5654a37098606f0b1cd1.ttl │ │ │ ├── 7731ee0b26935539b85c41a867b21ef4.ttl │ │ │ ├── 773711f7930a58b28552575f6a9baf83.ttl │ │ │ ├── 776ed70ffddd5201bcbd758a8b1f0743.ttl │ │ │ ├── 7772e1053fe052fdb3e18b3b8657107d.ttl │ │ │ ├── 777d8e0b6987520eadae0f938a3b2664.ttl │ │ │ ├── 779dd25f42465887aee6b70c73bd6a2b.ttl │ │ │ ├── 77a4a9ea757d559dbda6371cfeef99ed.ttl │ │ │ ├── 77a7165bf38f5d8babbb3ac177fd1030.ttl │ │ │ ├── 77a94d7063e958098cc6f537d6d2ec73.ttl │ │ │ ├── 77cd7fce2490595798897acb8ce53e8c.ttl │ │ │ ├── 77cdee62bedc5f318975341063c8e7c5.ttl │ │ │ ├── 77e5d4df470f5863b984511a24ce1c67.ttl │ │ │ ├── 77f01ac953be5d048826ef7cf4a7d1ea.ttl │ │ │ └── 77fc10aab16858afaa7e41f2ce032d60.ttl │ │ ├── 78 │ │ │ ├── 780df54ab04d554ca78d03712b903f52.ttl │ │ │ ├── 7835b7c883535228b336830331d8fe4f.ttl │ │ │ ├── 7849ce5e084355838784bb9ed05891be.ttl │ │ │ ├── 784b8887ff4154c4a41b2abc28e614e1.ttl │ │ │ ├── 78607099b9e552cdaf63ff98f18d7c75.ttl │ │ │ ├── 787743298f525d78a510fd49df5fcb45.ttl │ │ │ ├── 78887e541aa758e4addabb1edcf6baa2.ttl │ │ │ ├── 788c82073ae0569eb2c5358e0e93fc9d.ttl │ │ │ └── 789d028f23055fc49ddeec7765ca5f2c.ttl │ │ ├── 79 │ │ │ ├── 79083cdabfef5fb8b06dd773e9fe6fe1.ttl │ │ │ ├── 791f59f9cf0c520d955ac37c431ebec8.ttl │ │ │ ├── 7923032ca4dc531dba60de40bd55eb81.ttl │ │ │ ├── 798fb0c4e33f52f7a0fd3877d48e92ac.ttl │ │ │ ├── 799add46d99d575ba5805b7cac2b60b0.ttl │ │ │ ├── 79ab48cf34505991a63de007ad16ef11.ttl │ │ │ ├── 79c0edbdef7f5ae59c58a4a2dcf29e14.ttl │ │ │ ├── 79d8dc49114d52dc934504ea5555880d.ttl │ │ │ ├── 79e831fce9b350b786fcb2b14acf8aac.ttl │ │ │ └── 79eb406ea6385099bde235e8626fbbce.ttl │ │ ├── 80 │ │ │ ├── 80269c092f835af19cb7d5d21d0a2384.ttl │ │ │ ├── 80623a0e90f753bfa40e9ff76186d7db.ttl │ │ │ ├── 807051a638955f729c478fb3dd67bbe8.ttl │ │ │ ├── 8074b5a00e1c51c2a5026820be251a8f.ttl │ │ │ ├── 808649199c2c5083819a695cf8b821f0.ttl │ │ │ ├── 809c8464ec37548eb62419acddb22b92.ttl │ │ │ ├── 80b07574238c5bc7b8c9cfbec812860c.ttl │ │ │ ├── 80e834e89df65730a9bc9ab9680a8eef.ttl │ │ │ ├── 80ea4ceaa05453448fc932c05666256e.ttl │ │ │ └── 80f3229e757b577ca5c6dde3ec0deff3.ttl │ │ ├── 81 │ │ │ ├── 810ad77b970f57319137e1b734ead4af.ttl │ │ │ ├── 810fc90cab6559c1b1b3c39958dad584.ttl │ │ │ ├── 817552533cf6500fbe8e7c64ab84f4c1.ttl │ │ │ ├── 817d0cc4aae35b1aa4e8fbfd839563e3.ttl │ │ │ ├── 81bd99207b065e609c57426259d1610b.ttl │ │ │ └── 81c4889686e558edba30a14818b73bf0.ttl │ │ ├── 82 │ │ │ ├── 8202652ca6c15c88a97b94697164d1eb.ttl │ │ │ ├── 8222df7517525c9aa89abbead54651fe.ttl │ │ │ ├── 8234a01563b9525fb9f0ba5130f7c57c.ttl │ │ │ ├── 825f26c25b4d50b78280e319b1c5e49a.ttl │ │ │ ├── 82a8b5e5849b59f698d26cb54d89aeb3.ttl │ │ │ ├── 82c5c2e21b59549b8e01a6d58224a62b.ttl │ │ │ └── 82c6d0f1dd0c5fe992d18443e4fd40fc.ttl │ │ ├── 83 │ │ │ ├── 833e5457bc15574eb700ee725a5ff5a6.ttl │ │ │ └── 83f4cb243a3550a0b6eb03bce7576832.ttl │ │ ├── 84 │ │ │ ├── 84000c49b6575a26b138e908ef603eb3.ttl │ │ │ ├── 8405928aad565bc3ba95ef454dbe4dd2.ttl │ │ │ ├── 847d15a669355d6ba7d35102fb7c39b5.ttl │ │ │ ├── 8493491a919756e7bf6909a4d54af112.ttl │ │ │ ├── 84c8fafa39d651318ed5745c67da1b09.ttl │ │ │ └── 84f6d113c69b59f59afa4d4dee0b9687.ttl │ │ ├── 85 │ │ │ ├── 8516e7b8ffed587da074cf9a768415e9.ttl │ │ │ ├── 8520f0c8f00f5f7d89abc1667b8aa711.ttl │ │ │ ├── 8531003dc2265066bf85e90d9fc52b4c.ttl │ │ │ ├── 85b0a0a43d1c590caaff33a704fa1868.ttl │ │ │ └── 85b0bf5e151058ca826201ed1175aa76.ttl │ │ ├── 86 │ │ │ ├── 86022471f6025386842398083ea3b978.ttl │ │ │ ├── 8645db89e2bf575aa4987f0060092ed8.ttl │ │ │ ├── 86472ba7572c5beab179f0c4de07a778.ttl │ │ │ ├── 8658edf8e5245d44b00e939bdabebe09.ttl │ │ │ ├── 865eb27f74cc51a285409f09f5e3ec37.ttl │ │ │ ├── 867189b5d5dc55c495b324258d3361cc.ttl │ │ │ ├── 869201d3da7755c8978fb5804ea7b3df.ttl │ │ │ └── 86a484d0b51a5499b787db4eede6910b.ttl │ │ ├── 87 │ │ │ ├── 8746b8608c2a5e369f12833b43b6fefb.ttl │ │ │ ├── 87bce03a58e55f02a3bec4199650c695.ttl │ │ │ ├── 87bd941203435cb983430dc385d33642.ttl │ │ │ ├── 87c768f6036f5b6fa4b37c57ec61c1f5.ttl │ │ │ ├── 87c823c11bbb521983c46929dda592aa.ttl │ │ │ └── 87da05e6560a5b28a4380de6c5757541.ttl │ │ ├── 88 │ │ │ ├── 8802a99865eb59209edf3240966014dd.ttl │ │ │ ├── 8803308793e3599cbac7de62d12bb0d4.ttl │ │ │ ├── 880c93592e8154499b17e564f4134948.ttl │ │ │ ├── 883d847e0da15fa2aa53a1647ec7b2b5.ttl │ │ │ ├── 884e32fa61605c66a9a616fcd89aec2e.ttl │ │ │ ├── 884e8de5a0ee5a3f904c206fb8cc53b6.ttl │ │ │ ├── 885f427635ad5f9d87a53139ad6ea2fe.ttl │ │ │ ├── 8879e5c902395de9a64053b1c174c939.ttl │ │ │ ├── 8883cb94485c5f679b51148d7215cde9.ttl │ │ │ ├── 88bd965c029256468677fe813ff1a3d0.ttl │ │ │ └── 88c259dfb0eb5967a5bf590e055c0042.ttl │ │ ├── 89 │ │ │ ├── 896df3820b365e8ba0fad90ea6b9b630.ttl │ │ │ ├── 8984740a9d32510db5c2b55e36a7a2ba.ttl │ │ │ ├── 89d46a40586c5bd0b3c50f79ebcd0277.ttl │ │ │ ├── 89df0c21f8a45006ad75374f9609a9bf.ttl │ │ │ └── 89e34262bdbe5e0ab248bf5432414baf.ttl │ │ ├── 90 │ │ │ ├── 9027b51f084153b7b88c1a1f50db6326.ttl │ │ │ ├── 904379ae0325546899c5c2ec8cd77fd7.ttl │ │ │ ├── 9050465e6adf5d26918d44252529639d.ttl │ │ │ ├── 90549b9ceeff510ab4f143fad91646ca.ttl │ │ │ ├── 908b8dbf6040586cb02a02d6ef1a3ed3.ttl │ │ │ ├── 9092a35c8d0f549c8c912e905270b973.ttl │ │ │ ├── 90bdc64aaa1f5c3caea73fc75bcf204d.ttl │ │ │ ├── 90beb5206dcc5a379eeb6f2f4aa22e3d.ttl │ │ │ ├── 90c1d146d1e35d0e80c6f5fcafefee9c.ttl │ │ │ ├── 90c573a817f35eae8a17edbcc76ec690.ttl │ │ │ ├── 90f8d810f2d454ca9531162bc5a775e1.ttl │ │ │ └── 90fb9c011e2553efb3487d6b10a0a636.ttl │ │ ├── 91 │ │ │ ├── 91248c83eb2f581ca06e1be2ee4c3895.ttl │ │ │ ├── 912b51b0e6ee5ec088266fbd6a6b41fb.ttl │ │ │ ├── 9145109c44f553daa2350c3cc59a59c0.ttl │ │ │ └── 919ba77b0d665a40b3d6fee9bc70a118.ttl │ │ ├── 92 │ │ │ ├── 9242a8303f8f554990a0ba8d4485c79d.ttl │ │ │ └── 9295964a7d2d5f758ba14740f0f6774d.ttl │ │ ├── 93 │ │ │ ├── 932f4768a6435eda931583b5528c44ea.ttl │ │ │ ├── 933ae286c16d5049a4bf7e6a0ac8f48b.ttl │ │ │ ├── 934160528dad5841bfe78ba7088a69ca.ttl │ │ │ ├── 93554e8fe8b7550ab59ca9ba34de0db0.ttl │ │ │ ├── 9372a8b63a8c5f77b1e877d445eaa0e7.ttl │ │ │ ├── 9376b10a7b5b5f4bb37260c78feffa5e.ttl │ │ │ ├── 93874a3d354b55938d78ffe5e924f1c0.ttl │ │ │ ├── 93a30c9888115516a93dfba136da2d02.ttl │ │ │ ├── 93ddf453bb105e5e835c1282dde3020f.ttl │ │ │ └── 93e56257472d58e8aea6b7eca0254e3c.ttl │ │ ├── 94 │ │ │ ├── 942ab4140b915039bc67c0abd1241961.ttl │ │ │ ├── 9445f48c686e5e2d9d01b2b364d2f783.ttl │ │ │ ├── 9460c9db5d9b5549bed5386a6d466f85.ttl │ │ │ ├── 9491acc21ce15209903aa87e062dc75e.ttl │ │ │ ├── 94b8df5f6ed4578ead32577192ff975a.ttl │ │ │ ├── 94d021b799605a42b4ed404e74bdedc4.ttl │ │ │ ├── 94d395f0173c5dc095f9226fde0495ff.ttl │ │ │ ├── 94e1317bae50588188a747beb6b22050.ttl │ │ │ └── 94ec9fe640ef56b2b12c2a71fae2eba2.ttl │ │ ├── 95 │ │ │ ├── 95146c5e839452ed923e58b65e07f172.ttl │ │ │ ├── 95416cdee1a25e2b8eecd79b29d6e74d.ttl │ │ │ ├── 954d42d28f6a54538d00dbe77d12fc48.ttl │ │ │ ├── 957f85325b1d59cf90528535d0a69c7a.ttl │ │ │ ├── 958cdb5112105f7b95554f4572d13ac5.ttl │ │ │ ├── 958fa12210015a9cbfa0984b69caf644.ttl │ │ │ ├── 95a0a59528ac5aa38d8a8de41534b3c9.ttl │ │ │ ├── 95b5a6921f0857b3813d98f0a4e1a794.ttl │ │ │ └── 95d2d86dea655053ba0d847c51b5fc07.ttl │ │ ├── 96 │ │ │ ├── 960179880a2e58b69cdbced13697a55e.ttl │ │ │ ├── 9639911f7e815cd0826916068b5e458b.ttl │ │ │ ├── 9653b429ba735b6d917c261fb93b6cfa.ttl │ │ │ ├── 967225cf6ec9504c857a4a165b0e2963.ttl │ │ │ ├── 9687940d5dfb5b09b7274448a9daa028.ttl │ │ │ ├── 969d7c84d7ea5742959ad223afccd640.ttl │ │ │ ├── 96bcca0d61e155a6b09d91cdcbc43644.ttl │ │ │ ├── 96e9e66216ab5dc6a7c5f334235f9930.ttl │ │ │ └── 96f77130c40554a88e8b0475f93ecd05.ttl │ │ ├── 97 │ │ │ ├── 972e2b195f245174be3853f4e91dba79.ttl │ │ │ ├── 97a28db98deb508e944a0a55bf9d2c7a.ttl │ │ │ ├── 97a9302a350556c0aeb805c7241f7a41.ttl │ │ │ ├── 97b779036e8e5c0591600ed115c7d8f2.ttl │ │ │ ├── 97c39b79a6455bb7b506a38c317f3078.ttl │ │ │ ├── 97c68d055ab254c1bb6bdc7e35df8c14.ttl │ │ │ ├── 97c6eb40f9a55a74aeb36cda67b25f8c.ttl │ │ │ └── 97efb199551d5452802b84a9ffde08c3.ttl │ │ ├── 98 │ │ │ ├── 98347a92e0c359de8057b9d935fe28f2.ttl │ │ │ ├── 9850069284c355cea08a9d7f08be39ef.ttl │ │ │ ├── 98c8c44c80c55e4fa6146ce2b9560fab.ttl │ │ │ ├── 98f7e2d9cba850989dad89bcd87b7dc0.ttl │ │ │ └── 98fffe0cb33555ce8e6f9dc773b3e858.ttl │ │ ├── 99 │ │ │ ├── 99155795e76b54f0854e6284b7647c4d.ttl │ │ │ ├── 9969d908b3705a37ba3bdbee983abbd4.ttl │ │ │ ├── 996f63e4110358deb1df89cc29cedfaf.ttl │ │ │ ├── 99947907189c5932a3fcc43d09b933e4.ttl │ │ │ ├── 9998b6e087d1563a9eea7ef5a09d7a41.ttl │ │ │ ├── 99a2d35daf2b5bbfbace013c1adcb5d9.ttl │ │ │ ├── 99ac64346f185495a182bfe9e5f8e665.ttl │ │ │ ├── 99bdd814d14e562fa36220a4074d4ce0.ttl │ │ │ └── 99d87ca97c405d958d79d1a94e9ab228.ttl │ │ ├── 00 │ │ │ ├── 001203584fca5ee4b96d9afdaae26527.ttl │ │ │ ├── 002d8215cf4d53a198f1ae66339d3fda.ttl │ │ │ ├── 0053913df3185e7895994c8dd594c88c.ttl │ │ │ ├── 00571bfd6d695fe8b79da34b4ecbd37e.ttl │ │ │ ├── 008141f54504527d9424db41a12d9243.ttl │ │ │ ├── 00eead046f3b5edda9c41567d480b1f9.ttl │ │ │ └── 00fc156e5de650939147d2946941ba6f.ttl │ │ ├── 01 │ │ │ ├── 010022841c515b49b7694748c9508b31.ttl │ │ │ ├── 01083b1b5dc4506c8029d45d3668bc6b.ttl │ │ │ ├── 01154268bbd2522493235d01846458b3.ttl │ │ │ ├── 016ad701906a5b5f9ea9f916dddc6388.ttl │ │ │ ├── 019ab30e096353a2a8a34e26276bf771.ttl │ │ │ ├── 01a744a7b1805cba984d9a943cfad4e9.ttl │ │ │ └── 01ba6b29997e5450b0725e3b4dfa214e.ttl │ │ ├── 02 │ │ │ ├── 02026585ba2c59df880f435202eafa9b.ttl │ │ │ ├── 02c525cdf6cb5a7e8bbdef8abca718e5.ttl │ │ │ └── 02d6fa4ec2d45c6e964b4ea0f1006df0.ttl │ │ ├── 03 │ │ │ ├── 03097c914c9c56fb82efd28f2c0f0294.ttl │ │ │ ├── 033f500895985c3091699118bc22102a.ttl │ │ │ ├── 0363b1eb4ac65e5499baa6902e276ea5.ttl │ │ │ ├── 038e5b936d7e5e53b10d3222e52152ba.ttl │ │ │ ├── 0393c8c8b8ea5937a1e8ba180bc18a06.ttl │ │ │ ├── 03d0a423dde55dc2af7118e3ad2ddab7.ttl │ │ │ ├── 03deb538c48159859b464c17fbee9bfc.ttl │ │ │ └── 03ef9832019e5c54a07bba1279fca5af.ttl │ │ ├── 04 │ │ │ ├── 040cff762e7356bb9825d0b2184dc3bc.ttl │ │ │ ├── 0425030b585c5508a56c2d7e2ae11069.ttl │ │ │ ├── 0442381557505a228b86004c6a1fc3a3.ttl │ │ │ ├── 0459d7ec1c955193b108d1644c9aa234.ttl │ │ │ ├── 047ad1c890f6575b830a5576686eb6ee.ttl │ │ │ ├── 04a38e6a140b50daa7d11f2ced8011a0.ttl │ │ │ ├── 04ab0c606c535a1faa2d8615b912633a.ttl │ │ │ ├── 04b202e1b43053a3b6c67769f6a88e3a.ttl │ │ │ ├── 04b37dbc20be5f23a7dd1ed360da3b99.ttl │ │ │ └── 04dcc2f3db3b512b82797bd708dc8487.ttl │ │ ├── 05 │ │ │ ├── 050b73719797572985e66a50fa4d6328.ttl │ │ │ ├── 0551d79da5465a3c87c90d4d74872c37.ttl │ │ │ ├── 0575e94602cb5e42b4f8e2c41b51e1c1.ttl │ │ │ ├── 057cf0111cad572392e528079fc871db.ttl │ │ │ ├── 05977225ad945c3794d24d9d74dfbdee.ttl │ │ │ ├── 05a81127de4950c1b811d5ade582c527.ttl │ │ │ └── 05e36cc883b35fbd95530e6f6b3d6f47.ttl │ │ ├── 06 │ │ │ ├── 0603a6af0fe052d8b53275091edd141c.ttl │ │ │ ├── 06044c02723253369f502be7cf4af7d4.ttl │ │ │ ├── 060796feb1cf5dd299094aa64bab953c.ttl │ │ │ ├── 060fcac9a5e95bc4b361b84401f85e87.ttl │ │ │ ├── 061f23427034529f93ecce6b4162e8f1.ttl │ │ │ ├── 062fc42925f75b33a75a14888a8ffe98.ttl │ │ │ ├── 06374dc4f64b5a60979cda232fe24342.ttl │ │ │ ├── 0643ab1b534850128539e14f16eaeab8.ttl │ │ │ ├── 068123812313573781d87f3cce60f2bd.ttl │ │ │ ├── 068e4cfe81a85287bb4110b7cefdcdf1.ttl │ │ │ ├── 06be4eeca09d5dfb9b11ddd27d10595e.ttl │ │ │ ├── 06c06b2fd3c95511ba377cee92ed7be9.ttl │ │ │ ├── 06c43a7f06ad55069f73baedc3c8c130.ttl │ │ │ └── 06f12533d5c85b9fa18de13269e4f547.ttl │ │ ├── 07 │ │ │ ├── 070a542a395853ecb2d91e97e3ba5cb2.ttl │ │ │ ├── 071456f45fed55e59e8b679abbf2617d.ttl │ │ │ ├── 072b2dbdfd735b80bb6a8739d54cacd6.ttl │ │ │ ├── 075e6eefeb6154d885760aecba558e0b.ttl │ │ │ ├── 076ef6b338145d12b54f6fcdbf1a9205.ttl │ │ │ ├── 077f0aafbbc05c6193b7a5e43101246d.ttl │ │ │ ├── 07b9fb8fd3b25fdeb341420b2b2483db.ttl │ │ │ ├── 07c0702b0bd851f282ce3bfae051e71e.ttl │ │ │ ├── 07c2985b973c5ea2bead72515cfdaa7c.ttl │ │ │ ├── 07de5f419f0157d689461cbabfb198b5.ttl │ │ │ └── 07e77dad68a3549ab9e8bf303bd5a6dd.ttl │ │ ├── 08 │ │ │ ├── 082282ce80e75a0d9f1172d2ce5769b7.ttl │ │ │ ├── 08433718af8c58bda10c5b5b08c9f4a9.ttl │ │ │ ├── 08be5b0fad1856b480ea056db5fe5ffa.ttl │ │ │ ├── 08cd1378adec52fe968827c0352b9aca.ttl │ │ │ └── 08e591080ef1517aafed98ceaffba17b.ttl │ │ ├── 09 │ │ │ ├── 09220f3a873d54b0890cfc5e9a06bd75.ttl │ │ │ ├── 09242c580cc7574fb9c5a0d831645d82.ttl │ │ │ ├── 095b2016d01a5eb2a34f4bf0bad2813b.ttl │ │ │ ├── 096749811d035b2ea85645b63b86f2c8.ttl │ │ │ ├── 0988be709b525be28e75f80da59c7b40.ttl │ │ │ ├── 09c061879975571c9f368438de528401.ttl │ │ │ ├── 09edb2851d065528b85be970445860cb.ttl │ │ │ └── 09f21f6b4def5a6d9f9f8ff3ecfb6439.ttl │ │ ├── 0a │ │ │ ├── 0a314b47a8c553cd901440b316bfb73c.ttl │ │ │ ├── 0a965463a7d55483bef8cde6d685796f.ttl │ │ │ ├── 0aa6a6e8e99550deaf694d28592543ea.ttl │ │ │ ├── 0ac595de2b115e97a29078beeadad927.ttl │ │ │ └── 0af5858be36958a2a780419b5c0fc235.ttl │ │ ├── 0b │ │ │ ├── 0b249567b1c15afc9e466dde420aa915.ttl │ │ │ ├── 0b38aed08bbb5af58e1ed454e80f1ea5.ttl │ │ │ ├── 0b6af16fb0955a0b8d4f7ef44a8ebf95.ttl │ │ │ ├── 0b7739f41bf352269a44ec33ba74d064.ttl │ │ │ ├── 0b84835f19c05f49a3a5829cae0dbf88.ttl │ │ │ ├── 0b86eee2dcd352028c026248426bc0d9.ttl │ │ │ ├── 0bf5b9a6f47c534e9cf8306f33fc9040.ttl │ │ │ ├── 0bf8d4f3ca76531ebd9a5b6ff2fc6949.ttl │ │ │ └── 0bfcb70299875666bdb4112654928e2a.ttl │ │ ├── 0c │ │ │ ├── 0c127498f60b52a7b67adc8c4b531430.ttl │ │ │ ├── 0c2794912a6a5ffca7ea7cf30d4e2f17.ttl │ │ │ ├── 0c374060e6915b4eae806cd1063f0c62.ttl │ │ │ ├── 0c8383101a8851b1a0d2eeac16c69e28.ttl │ │ │ ├── 0c9524398bbf525c9a0d3bdf063fcf45.ttl │ │ │ └── 0cfac3a25aad5b6b987bcdeb302d7f2b.ttl │ │ ├── 0d │ │ │ ├── 0d276e4046905322a9bd30bb75914228.ttl │ │ │ ├── 0d340f6815e55d2cb16303b19f75bdc3.ttl │ │ │ ├── 0d6c8fb274bf5b40ab9f3488a933aca5.ttl │ │ │ ├── 0d7baa571e4f53ffa638562c123014c7.ttl │ │ │ ├── 0da77599a99c5c48811984afead11fcf.ttl │ │ │ ├── 0db4e04da03f504284fcfbe812487f57.ttl │ │ │ ├── 0dcf5a4a4981516dba893fa4bde25e87.ttl │ │ │ ├── 0de8f1ef888a5e03ba3aacbdf4925a1e.ttl │ │ │ ├── 0df64af8a4605e2ab97f4ff202d23f4b.ttl │ │ │ └── 0df6fd7947e55af3b3e523ded53241e3.ttl │ │ ├── 0e │ │ │ ├── 0e36e8c7e81858b0829bb3b4bf13ed2f.ttl │ │ │ ├── 0e5ff64f62be509b9aa7cb94bb1cb207.ttl │ │ │ ├── 0e676f220f5655afbd4158305049c2d4.ttl │ │ │ ├── 0e6d9687a8a95f709b2e65f871ef433f.ttl │ │ │ ├── 0e758d36ab3a5fb7a14f2e0e5aeeb53f.ttl │ │ │ ├── 0e816d358c015cf5b46c0ae104474311.ttl │ │ │ └── 0e9902b259155a1aab86d295ffb46a96.ttl │ │ ├── 0f │ │ │ ├── 0f02e3bc50675967b0878f5a77fe7c7a.ttl │ │ │ ├── 0f28ed8c314551c987dd8a544b78766a.ttl │ │ │ ├── 0f5fbc74ae4a5bb094e05a49d3193df4.ttl │ │ │ ├── 0fd689a7cd675d68a569a911d296fd9b.ttl │ │ │ ├── 0fd7b141b8b25ca6aaef9c4df287ae44.ttl │ │ │ ├── 0fe6b96d0abf56e59a214725271a9edf.ttl │ │ │ └── 0ffc4c68e7d955d1ad6aa941bfb52ff9.ttl │ │ ├── 1a │ │ │ ├── 1a1dc436fb095ba8b02681b5b68f049f.ttl │ │ │ ├── 1a4eb43828af59fc97486f0ce7c3067f.ttl │ │ │ ├── 1a948d64bd3159c5ac4d5cc78f1c426a.ttl │ │ │ ├── 1a94af829e8155538ad4189428c9c74c.ttl │ │ │ ├── 1ada130f04965661bf0a26f6f28b15e7.ttl │ │ │ └── 1afca2a825ca5fd1892aa940d3d8caea.ttl │ │ ├── 1b │ │ │ ├── 1b0b3e7162cd55cbbb42110a2ac80a4b.ttl │ │ │ ├── 1b143e1f4a835a9cb9ac564f0d22757c.ttl │ │ │ ├── 1b1633d4e6cb506bb966b8a4f1e79820.ttl │ │ │ ├── 1b34606c97305775a0a438803f29d67a.ttl │ │ │ ├── 1b4b96721ce75be1be098f0bdbff66e8.ttl │ │ │ ├── 1b68cb893582557bae4270e7ed778e18.ttl │ │ │ ├── 1b6bfc086c915095a0fab27385ed3674.ttl │ │ │ ├── 1b816194c87951afa3fd2164aee9c864.ttl │ │ │ ├── 1bb0c33202fb545f85611c1f9bc151f7.ttl │ │ │ ├── 1bba2316ff09552c909372b15cf862fc.ttl │ │ │ ├── 1bef85d34ff959079d0afcbfc87b40e3.ttl │ │ │ ├── 1bf2fb13771f5fb3a68dfd1386118b40.ttl │ │ │ └── 1bf4c070378a54ef842559169a973d27.ttl │ │ ├── 1c │ │ │ ├── 1c33ef7dad6457b9adf006e04e2ae39f.ttl │ │ │ ├── 1c42b8ef118c51da820a85203823f1ed.ttl │ │ │ ├── 1c50906c20a157d5878629ab406a5027.ttl │ │ │ ├── 1c653b19f19c50618a69b639041a543e.ttl │ │ │ ├── 1c767697e68c555d8ee817eacb9701b2.ttl │ │ │ ├── 1cc8009bbb2856e5868b30e01bdf9ebf.ttl │ │ │ └── 1ccfde1450f85f22b0e4fc1c84e99e24.ttl │ │ ├── 1d │ │ │ ├── 1d1c694c65f05e4e88d29f308e5cefdb.ttl │ │ │ ├── 1d20b0b4e03c5827b83ba40d33aa498c.ttl │ │ │ ├── 1d74f6b14b6f5c939c5b8f6b59e0db5c.ttl │ │ │ ├── 1d833b816fba5a50a7b38a5c5d33ee55.ttl │ │ │ ├── 1d8c1e5c92185f1091d5f0b0ce8503ac.ttl │ │ │ ├── 1da97d4a24055df19256ef191da21ce3.ttl │ │ │ ├── 1dbe9b42e99652a09f0dfaa91e2040d2.ttl │ │ │ ├── 1de64802cecb55a99400608981aea140.ttl │ │ │ └── 1df12b3692805343a981b8c0b444e660.ttl │ │ ├── 1e │ │ │ ├── 1e242c7345be5ed7bcfc08f5276379e7.ttl │ │ │ ├── 1e2bdd14dd435dadaa8d7a57637e641b.ttl │ │ │ ├── 1ea149d648ba5400b70c91e0076ae398.ttl │ │ │ ├── 1ed8cf9f6cd151508579a3d098c8ad22.ttl │ │ │ ├── 1ee8ff9b7a6c55209e6c768a10a2e53a.ttl │ │ │ └── 1efa71fe57f55b3b9969ae6e322ca36d.ttl │ │ ├── 1f │ │ │ ├── 1f3923dff4d05fe0a72fd0d2a6dbb3b7.ttl │ │ │ ├── 1f3b0f4352e953b2b18135fdf40c6df9.ttl │ │ │ ├── 1f83bd28320355c69e8c5679b7707dc2.ttl │ │ │ ├── 1faca01a1e8f5569a0866a0356513960.ttl │ │ │ └── 1fb48d5f499753e1923ef8238f79df80.ttl │ │ ├── 2a │ │ │ ├── 2a20e1d2df0e579991ce6106dd7e763e.ttl │ │ │ ├── 2a39be43055a56ea9fee216dd54a4ec5.ttl │ │ │ ├── 2a7a7723eef257d6b01a48d3b0f437d4.ttl │ │ │ ├── 2aa4d09086fd556aabe85e921d5d1c5e.ttl │ │ │ ├── 2aace758a0ee5631b32364a200d1f9b1.ttl │ │ │ └── 2ac956f3a404527d84eae30f461d1347.ttl │ │ ├── 2b │ │ │ ├── 2b12e88fe4cb5fbe82165451eadcfb66.ttl │ │ │ ├── 2b303ca781ab5ffbb546cd9d59603426.ttl │ │ │ ├── 2bb9226ddf5452cd86c0fbc48e85ec1c.ttl │ │ │ ├── 2be8ed52021d526ea672bd52bf294ce8.ttl │ │ │ ├── 2be9fa75acee59c2bc71ab933bfc0c2a.ttl │ │ │ └── 2bfa3a6a75ab590ea194fecf0a76539b.ttl │ │ ├── 2c │ │ │ ├── 2c0a7ca32dd95c418432058fbabebe3d.ttl │ │ │ ├── 2c2bf4d1717c59e091343a0389aeebe8.ttl │ │ │ ├── 2c5c70c3332357e9bb295113dd3f5cdf.ttl │ │ │ ├── 2c6bcd6e681e59518280a8918b6e693f.ttl │ │ │ ├── 2c80d87eedee52d2971b9c2bb6495094.ttl │ │ │ ├── 2c94ac324deb5720aacb0dbfe03b03aa.ttl │ │ │ ├── 2ca6a7c449795215a3182e7fbbaa03f9.ttl │ │ │ └── 2cada5a1fc4252bc89a3ceb3f6c41844.ttl │ │ ├── 2d │ │ │ ├── 2d28877f772756d584219c0c02e10051.ttl │ │ │ ├── 2d41901ecaf75382b946cf9f99af42f5.ttl │ │ │ ├── 2d6ad45454615479a806719bd4506274.ttl │ │ │ ├── 2d6c20ca75525ce48fef8beca5d97e13.ttl │ │ │ ├── 2dd7456353655e66852d62d640870e1c.ttl │ │ │ ├── 2de61a565f6957fc97aa7a5871f3567f.ttl │ │ │ └── 2dfa9160824657feae90d06f4c6354ef.ttl │ │ ├── 2e │ │ │ ├── 2e1c6661791559daa63ffe26d8759555.ttl │ │ │ ├── 2e46fbfe9d715e54a73dbe0e9cb1f376.ttl │ │ │ ├── 2e4844f5892f5f9e8f90199fc5ed0d8a.ttl │ │ │ ├── 2e67d152c99a5357a876e578c5f5046d.ttl │ │ │ ├── 2eb77528f4fa590380e0a248cb2c1016.ttl │ │ │ └── 2ec6ea5c3000561283a163275f4b2c0c.ttl │ │ ├── 2f │ │ │ ├── 2f178660e4d253d0989e449f08b953bd.ttl │ │ │ ├── 2f2ec334f87f5b28a89f0360c871847f.ttl │ │ │ ├── 2f4ac4ccde4c5727a7ddb25d1c980dcb.ttl │ │ │ ├── 2f4c22aa851652dda63a150c359cb19a.ttl │ │ │ ├── 2f4f0598232a56ea83a1707fedb98170.ttl │ │ │ ├── 2f753ba9ccea58acb311d2386957d941.ttl │ │ │ ├── 2f7cc37874ad59c89bc9445062be2d76.ttl │ │ │ ├── 2f7ff670e2d154f5a290c6c355a13dfa.ttl │ │ │ ├── 2f9662c9c2cb50c9afe3e8d35b022b39.ttl │ │ │ ├── 2fb3a34b2cc75275b7ec494cf1f7b8f4.ttl │ │ │ ├── 2fc5d13c070f514c9b4b6c57cf8248a0.ttl │ │ │ └── 2fe15d77ff9754e0bbc983ecbcce64ef.ttl │ │ ├── 3a │ │ │ ├── 3a32192ec2a656f8a4e86473af570888.ttl │ │ │ ├── 3a46f47f297657e6aa10455a520a42db.ttl │ │ │ ├── 3a948b61f9025cb29c62db9129a41125.ttl │ │ │ ├── 3ad7b5ce2cc053b9b9778ed50d4972bd.ttl │ │ │ ├── 3ae92d8da5f65d2c8921a07783cf5f6c.ttl │ │ │ └── 3af5dee75f3d581c8768e0247dcd56fe.ttl │ │ ├── 3b │ │ │ ├── 3b451dc09c9759b5afedf105ae2b16b0.ttl │ │ │ ├── 3b591edca3945ddc85280b2aaa030cd4.ttl │ │ │ ├── 3b7e94bfa7ea564a8bb99c3695d2fbc1.ttl │ │ │ ├── 3b959ea0ed665243af6eab288cf4612d.ttl │ │ │ ├── 3b9683cac985533ca76819e7304702ed.ttl │ │ │ ├── 3b995afe065d596faab013d5d3f381d8.ttl │ │ │ ├── 3bb9208abf5d54608cf956592b59ce32.ttl │ │ │ └── 3bc71fac63cf5755ab62e1dab62763f6.ttl │ │ ├── 3c │ │ │ ├── 3c52ab95aba2545584856192d508730b.ttl │ │ │ ├── 3c86a8a2c0b552e8bba66305d0d615fc.ttl │ │ │ ├── 3c9c5346c58e5353a08fe0e7afbc8e3e.ttl │ │ │ ├── 3ca85f7cb8c054548aab3d07b08a0f3f.ttl │ │ │ ├── 3cb2d966121b59c89a0c70d8e53ff9a7.ttl │ │ │ ├── 3ccd39a4c17751758b4a03ad8b73a0fd.ttl │ │ │ └── 3cd43b4850d853fc9873b966501278a3.ttl │ │ ├── 3d │ │ │ ├── 3d08eb5462805d1ca0b005ef885b2b21.ttl │ │ │ ├── 3d1f30503d8d58dca0c618a5d1a2b0d2.ttl │ │ │ ├── 3d1fe3a9215e557ba3e2a68ce3a267bd.ttl │ │ │ ├── 3d2e95eac43a546391e73e6f7692b194.ttl │ │ │ ├── 3d90c4167e015c379e2f9974d4f4ccfb.ttl │ │ │ ├── 3d97eb5977b050d7a6c45333359fa844.ttl │ │ │ ├── 3db3c3bc987753a1b01f4e760d590455.ttl │ │ │ └── 3dcbe034f4815bf08210bc8d00a6c33b.ttl │ │ ├── 3e │ │ │ ├── 3e243f8e54085847aa5e2793f6e8251d.ttl │ │ │ ├── 3e70da367c235ce7a071b483125e6730.ttl │ │ │ ├── 3ea909a59c875df68717efd69cd8e925.ttl │ │ │ ├── 3ee06fd7589b5e97820715ba9652687e.ttl │ │ │ ├── 3ee5b64a28355e3d866ab14cd9667ae8.ttl │ │ │ └── 3efe4dbb7bb4567d96eaf4dd856849ee.ttl │ │ ├── 3f │ │ │ ├── 3f24fe9d3b75559bb7adc7933c0e9ce6.ttl │ │ │ ├── 3f3cd278b993517fad9cfb3713cce497.ttl │ │ │ ├── 3f3e09ff3f6656e78e1091d8a2939ee4.ttl │ │ │ ├── 3f44290fd39c50ccbaff83cbc188d0bd.ttl │ │ │ ├── 3f5a71095df45882abfa888910db9390.ttl │ │ │ ├── 3f6d1b56d1fa5af4b245c8c96294d9ae.ttl │ │ │ ├── 3feaf43df5c153038254b02cc74ed804.ttl │ │ │ └── 3ff7c02a2f2d55cdbde2f2581b122fbb.ttl │ │ ├── 4a │ │ │ ├── 4a23fbb157625bf7b88d238760dbba4a.ttl │ │ │ ├── 4a8a013b8e2458288feaf30940f179c9.ttl │ │ │ ├── 4a9a901e4a16529ea4c910c15d9ab391.ttl │ │ │ ├── 4ab28755e106546d826f20946b2c192f.ttl │ │ │ ├── 4abe116ed549528f8423143d695b1cbb.ttl │ │ │ ├── 4ac53fd2ddfa5e62bb0941d67f921be5.ttl │ │ │ ├── 4ae1e75a85ef55a9886a50579f5cb23d.ttl │ │ │ └── 4ae68cbbb863546da0e5c814b5e30607.ttl │ │ ├── 4b │ │ │ ├── 4b0a8cfefbbd57a7845bc8918bcb5e0f.ttl │ │ │ ├── 4b59702c18875571a161abfe88531d08.ttl │ │ │ ├── 4b6ed6beeaa852e993dd0110a3ebe930.ttl │ │ │ └── 4b8da9db85bc56e783873fac37263864.ttl │ │ ├── 4c │ │ │ ├── 4c20e7eeeb5c5862a9d6ecc967c69bea.ttl │ │ │ ├── 4c24f7c3b6df55679180064c33d3edd1.ttl │ │ │ ├── 4c5e6d88d40e583091419d3fb3cef870.ttl │ │ │ ├── 4c5eb39f8c8357bfa0dbed710af4cd4d.ttl │ │ │ ├── 4c75c2eecf8d570c8b3b719107f98185.ttl │ │ │ ├── 4c7a003b45fe50b6889aa910b9a77a9b.ttl │ │ │ ├── 4c91ce7415565ee79e1db9e5de624451.ttl │ │ │ ├── 4cece73d3c555c96994a30fedecb92cf.ttl │ │ │ └── 4cf40f06988a53e292a4672b714946bc.ttl │ │ ├── 4d │ │ │ ├── 4d06a89696505ec2bb4ac9d3614bddf2.ttl │ │ │ ├── 4d4edd53bc955e50ab81cde87df7f40f.ttl │ │ │ ├── 4d5e1518158f5493b4c5a1634ca8ab60.ttl │ │ │ ├── 4d70be12ca875cb2a0ba73301aafbaba.ttl │ │ │ ├── 4d8679a19d9a5ea48e0ae6fafde4f82b.ttl │ │ │ ├── 4d982a31b1205820bfacb34da0c05bc0.ttl │ │ │ ├── 4da7428f98d4585381f00fa7aba7425f.ttl │ │ │ ├── 4db281c9b7eb5c59829274b913258378.ttl │ │ │ ├── 4dd86655f3a052ed839c5069c77a5ce6.ttl │ │ │ └── 4df35172ff225e6bb6a25abd759028fd.ttl │ │ ├── 4e │ │ │ ├── 4e2ba340ef815188bc67eb202e5d9706.ttl │ │ │ ├── 4e69ebf1fedc5ab6b10859b2e505265d.ttl │ │ │ ├── 4e80cd2059d95417a54c327f047b9d7f.ttl │ │ │ ├── 4e889ec47f9b52028d6911f071e92756.ttl │ │ │ ├── 4e9b9881cf495c1ca3750c9599392764.ttl │ │ │ └── 4ec4fc5b12425b06b8aa0802c553f3d7.ttl │ │ ├── 4f │ │ │ ├── 4f045d6858b75d1ea222b23c34c43094.ttl │ │ │ ├── 4f8fc13a7fba58ecbf0129da278bbd8e.ttl │ │ │ ├── 4fa2aaab176e527082ff4cadc90094f5.ttl │ │ │ ├── 4fb70ba42c2c534eb552bdfb4c083702.ttl │ │ │ └── 4ff068312a165b8f8baf25b2b5c5ad6a.ttl │ │ ├── 5a │ │ │ ├── 5a4e45b1e2b754a288a687c923ef8888.ttl │ │ │ ├── 5a7ed199db0c50c8b2d2dbe4e1fe8a5d.ttl │ │ │ ├── 5a8d8ab8f99357ecbf9c35d746f78315.ttl │ │ │ ├── 5ab681e2759150f0baef772d0468986e.ttl │ │ │ ├── 5abbe89522225cedbe2f325fd205ce05.ttl │ │ │ ├── 5accb4baff4f564ea90eec20e93addf3.ttl │ │ │ ├── 5ae2efefdc16558fb398cd594fd4ca93.ttl │ │ │ ├── 5ae724767f9d50f68236e5b39e41ab0f.ttl │ │ │ ├── 5af3d33b73c551a7bb818bc1f1a37c99.ttl │ │ │ └── 5af480618bf359569a1cfc6bf4ab4a2a.ttl │ │ ├── 5b │ │ │ ├── 5b064e0c620e5d13ac3af783e5081525.ttl │ │ │ ├── 5b48c746785e5426b0e70bf4998f668d.ttl │ │ │ ├── 5b696e24a0445d408444fb5ebb4c475c.ttl │ │ │ ├── 5b70c5d5b43b555786e48d6ddf782f82.ttl │ │ │ ├── 5b8bc3eda05751349e70e67fbdfdd83f.ttl │ │ │ ├── 5bb6b22371a85f648e486bd8c6ad6572.ttl │ │ │ └── 5bebe6e63b265bb9ab3a414743ccb2f8.ttl │ │ ├── 5c │ │ │ ├── 5c035be162185675b2ce266ca0d6d078.ttl │ │ │ ├── 5c14e10bc46d56fd8c5e44d7c30d3c78.ttl │ │ │ ├── 5c2de7703ee25ae1b4e840550e49f424.ttl │ │ │ ├── 5c302666d279510e9260f5ec13045813.ttl │ │ │ ├── 5c32b46607bd5e15aa91cada7c22960c.ttl │ │ │ ├── 5c444e2e681d54c1b3f15add534938d3.ttl │ │ │ ├── 5c4ef55ac3945d60a25b11b54aed00d7.ttl │ │ │ ├── 5ca64e0210ce57d4b383f3dfda040e7c.ttl │ │ │ ├── 5cb79f4afc5758d48f42e93e9b44d8da.ttl │ │ │ └── 5cb7fbaa22435f10b4a66546e8a3a6b3.ttl │ │ ├── 5d │ │ │ ├── 5d3145979d4a5e8a8cc87bb9012b76b6.ttl │ │ │ ├── 5d34849647b354c8b8be2411477c85b2.ttl │ │ │ ├── 5d64cac3e6865568ab9194797e6251a7.ttl │ │ │ ├── 5d66db12795d5c2cb57c287c436fc096.ttl │ │ │ ├── 5dbad341ce135ba8955ee60649845203.ttl │ │ │ └── 5dbd5a61a772517599307f7cdd13a4df.ttl │ │ ├── 5e │ │ │ ├── 5e27db97904e5f3cb21d2ddd8fe42c2a.ttl │ │ │ ├── 5e961e6b901b567db76ce3a242acb86b.ttl │ │ │ ├── 5e9975d7a4015ea2959d8c6674302ca7.ttl │ │ │ ├── 5ea1203896255459886ecf621fc3405d.ttl │ │ │ ├── 5eb5270cc7ca543d94ce7ae8eb70332a.ttl │ │ │ ├── 5ef0f16916c35cf48a1ee81479b3739b.ttl │ │ │ └── 5ef33d9331aa52d4943b3582b0963b6f.ttl │ │ ├── 5f │ │ │ ├── 5f4b402777f75aeb9722f3f30a7c9535.ttl │ │ │ ├── 5f56bb0f8e505a9e944c26df4407bb4e.ttl │ │ │ ├── 5f6ac92f50d757cb8c82fa74ae36e504.ttl │ │ │ ├── 5f73958da668561197bc5b6cea8aa90c.ttl │ │ │ ├── 5f7977dc6e0d54afbf037ce0c062876e.ttl │ │ │ ├── 5f7a20a449b75fcc8103e544f83ae4a9.ttl │ │ │ ├── 5f7afa6874ea5987a04f3d5c1cc1d1cf.ttl │ │ │ ├── 5f8c67ed261a5332912998d87d7c9f6d.ttl │ │ │ ├── 5f8c68e12a5e5b7fa723c050ebb11167.ttl │ │ │ ├── 5f928943cc685f0eb85a97b15092cf36.ttl │ │ │ ├── 5fac1eb63f8555109bcc45d55fe64198.ttl │ │ │ └── 5ffe2212f0185e87b6c49fe9f65bb96e.ttl │ │ ├── 6a │ │ │ ├── 6a1e4831498951f09bcfec140fa505fe.ttl │ │ │ ├── 6a28dcfd17835002b5475f7eb44e3673.ttl │ │ │ ├── 6a2f6939082b5768aacbd87aa5c6acc3.ttl │ │ │ ├── 6a3eca03ec545a6e91aa6fa1f8421956.ttl │ │ │ ├── 6a3f8bcbbd145230806f760322b35264.ttl │ │ │ ├── 6a8e2ff0f3765c899819f1f305adeec4.ttl │ │ │ ├── 6a94c0884b6857138eae8d699cab27e5.ttl │ │ │ ├── 6ad9c947c89d5d709bf0cd8a45f3ad4e.ttl │ │ │ └── 6af61b94ee305c86b5c92261dd7412c5.ttl │ │ ├── 6b │ │ │ ├── 6b1a4be842d75a95b5266bfd3da3c554.ttl │ │ │ ├── 6b7315a8f1135cd8a91dbac2cb5cbe26.ttl │ │ │ ├── 6b734b9614c75495b5df4fb1b550fd94.ttl │ │ │ ├── 6b96cc2b7bdb5cc293761f0bf36106dc.ttl │ │ │ ├── 6ba043ff0fa3531484187f3d030a28fe.ttl │ │ │ ├── 6be5839c09ff556381e84d307a149b76.ttl │ │ │ └── 6bf921c31c3253c9bc84d755e8ba8c69.ttl │ │ ├── 6c │ │ │ ├── 6c2b78bebd3552fa967dc423879c8fdc.ttl │ │ │ ├── 6c3627d343fb5e7dbecefb9fe8eae45d.ttl │ │ │ ├── 6c3e062459e5581f9b3aed4507754d2c.ttl │ │ │ ├── 6c41b5d4d0695351951436ecb7d62c59.ttl │ │ │ ├── 6c4279f24955533aa124ccc7c8ea2a8f.ttl │ │ │ ├── 6c5a84110cd1597a8357e0189838500b.ttl │ │ │ ├── 6c6c2b69b1925dcfbeda503be2f13890.ttl │ │ │ ├── 6c89ec35553559498fb7544b9b15fc64.ttl │ │ │ ├── 6c9d2e7ac2a65ec9b517a2f0d8843fc8.ttl │ │ │ ├── 6cc8f4eef1995b60b26699f0a482ada0.ttl │ │ │ ├── 6ccb0f0179cb56a4bb249b9ea6d145c6.ttl │ │ │ ├── 6ccfb8816d645790875414a3c8e9fcb0.ttl │ │ │ └── 6cd1f8b1471a5facb104bbee8b410475.ttl │ │ ├── 6d │ │ │ ├── 6d1d3a3204935e64985a73dc3ffe06ef.ttl │ │ │ ├── 6d21516c680852ae9c87f71a6fc9eb78.ttl │ │ │ ├── 6d33408d5d0154d6b72192182a7c38b7.ttl │ │ │ ├── 6d485b0448d6578b84c974b5e7032a3a.ttl │ │ │ ├── 6d8650da7bcd555ba4388fa57a1d4e9b.ttl │ │ │ ├── 6d8a8394aa80550e9a34228d8649b6b2.ttl │ │ │ ├── 6dc10c6999fe56149d6999e9ce7ce453.ttl │ │ │ ├── 6dd4cc53f32951c39144bf273a9d3ace.ttl │ │ │ └── 6de4b2f0aecb5105a3fcff13a8a074cb.ttl │ │ ├── 6e │ │ │ ├── 6e05432f22be5d4fbdb17c49155c60d4.ttl │ │ │ ├── 6e07fdb78dfc5bffae170a2953f8ee12.ttl │ │ │ ├── 6e3bad9af1795888981c9f8e416ae498.ttl │ │ │ ├── 6e492217adf152d192cfea3e272a66ec.ttl │ │ │ ├── 6eb75777ec1c5080af83942f98276eb2.ttl │ │ │ ├── 6ed69a52307c5f4aa4bc15aec46d7c96.ttl │ │ │ └── 6efe3e853c5455eeb1e84c53d6af3690.ttl │ │ ├── 6f │ │ │ ├── 6f1a1b9b09f25dc5abc060e3d0b2081e.ttl │ │ │ ├── 6f1e95f37abd5383aa585c2f1f821d7f.ttl │ │ │ ├── 6f669caff1a657eba3cfe13adab3033c.ttl │ │ │ ├── 6f8aa4823f4e50e384558f796fcdff31.ttl │ │ │ └── 6fb7788ad5c855c091540a5a223b9a41.ttl │ │ ├── 7a │ │ │ ├── 7a2a3775112659c593eefea70d06509b.ttl │ │ │ ├── 7a571d3051dd593191f1c554c76f5d9c.ttl │ │ │ ├── 7a5d1053bb5f5c34a4b43b9c73172294.ttl │ │ │ ├── 7a65ca87ad3e5f2f9e0de0404b390396.ttl │ │ │ ├── 7a6dc90fa62b53ca8d8c85c563f4c4b5.ttl │ │ │ ├── 7a7a6ba6b37c5ab4962d037f1c7058f9.ttl │ │ │ ├── 7a7b370051b95da98dc3548c7983dbfa.ttl │ │ │ ├── 7a7e737828b05e5e97038c5c299ef2cd.ttl │ │ │ ├── 7a822db7c9bb5b3eb1a153ac6d87dab3.ttl │ │ │ ├── 7a8acca44c3a5bbab16a3dea752f437c.ttl │ │ │ ├── 7aa3fceccc0c5595b364f9c8ce6462aa.ttl │ │ │ └── 7ac5ddbbfc0e5248b44abddf1c1d6c91.ttl │ │ ├── 7b │ │ │ ├── 7b115ec8d3cf562aa5f2ff55ba92dbd8.ttl │ │ │ ├── 7b2d3e4a8325591ea83f1e967a8fc7dd.ttl │ │ │ ├── 7b37eafdf68d50dcb39aaf7180f7ecbe.ttl │ │ │ ├── 7b46a02e6f9153779d638f4f92266872.ttl │ │ │ ├── 7b49f180461d57f4b2af661e0dedbb36.ttl │ │ │ ├── 7b9ebe024a775505aef3e4287d6706cf.ttl │ │ │ ├── 7bb77806dffd50d3b7883d1ce4308940.ttl │ │ │ └── 7bdbcae16a735fc2812093d59a662a6c.ttl │ │ ├── 7c │ │ │ ├── 7c3c5c3510bc5744a5427bb7c3a46d72.ttl │ │ │ ├── 7c3db683ee7e5485834e9d4fb627f33f.ttl │ │ │ ├── 7c46dc3bc11b5f1b8f8fa66911613ec3.ttl │ │ │ ├── 7c5ab2ea014e57e389daed1fb85b4ccc.ttl │ │ │ ├── 7c6293a861ac576194d03f8f9caf01ab.ttl │ │ │ ├── 7ccd86109cc45ae8aa64901d9e4201d0.ttl │ │ │ ├── 7cd9b056bc8b5de4a931189347dc70aa.ttl │ │ │ ├── 7ce78e1f206c53fcb4807775eca3452d.ttl │ │ │ └── 7ce8c77488075636b5ec85cb0dcc60d3.ttl │ │ ├── 7d │ │ │ ├── 7d01e1856d5c5c8e9052d26200e3bef7.ttl │ │ │ ├── 7d18b1c0783d551c939000e3dbfa3664.ttl │ │ │ ├── 7d38a71a77495435ba403398b2e10e4e.ttl │ │ │ ├── 7d3ccc5b05c95bc59103762d4040f987.ttl │ │ │ ├── 7d570ee86b2a524ead028555296258bf.ttl │ │ │ └── 7ded88a73c335ca1bad5d48fcd098f6a.ttl │ │ ├── 7e │ │ │ ├── 7e3715a960b651428813bfc8f66ee557.ttl │ │ │ ├── 7e52627b4f5f525eb45a53f0d61e6e10.ttl │ │ │ ├── 7e715557f47e51a098ad1a2fce3b1a00.ttl │ │ │ ├── 7e79bf39fa675819a57a445ab12c150e.ttl │ │ │ └── 7efb371839755953bacb78231ef1aff6.ttl │ │ ├── 7f │ │ │ ├── 7f01b34528d05f6db7292432885fd2b4.ttl │ │ │ ├── 7f3a289081ac5604bf2e46978e060c74.ttl │ │ │ ├── 7f8172759d475e31838a23bfae11f373.ttl │ │ │ ├── 7f8a938339865f37a74e1007b5e927ff.ttl │ │ │ ├── 7f9a39776c675a79a905f026a048aed8.ttl │ │ │ └── 7fd59b85e94d58e5a3e7689345f27f1d.ttl │ │ ├── 8a │ │ │ ├── 8a40b488f68154b4b0a0e67d8ad2659e.ttl │ │ │ ├── 8a5226ea21705e9d8554d484b85bde9c.ttl │ │ │ ├── 8a53e9a64b1957dd8b65ed5156787e7f.ttl │ │ │ ├── 8a54a1ae55065257952a382f42a2a941.ttl │ │ │ ├── 8a71c2e9b9c65f8baf90e07d71c66b8f.ttl │ │ │ ├── 8a9b3ffdbc4d58abb15d96e1298a8920.ttl │ │ │ ├── 8ab45b82332e50af8500d624c54decd1.ttl │ │ │ ├── 8ac09f26b26058e58ddce7bb1dd1b787.ttl │ │ │ └── 8adfb4886f2456d6aec939b7eb78c205.ttl │ │ ├── 8b │ │ │ ├── 8b3087f5c6c150749a05142814fc73ce.ttl │ │ │ ├── 8b31dfda680658beb98c979c87f77b21.ttl │ │ │ ├── 8b54197539ff5b108831ea80ee0f9b11.ttl │ │ │ ├── 8b71d3d41c165c2ea0cb0e9836c14ddd.ttl │ │ │ ├── 8b7503385a5d56e6b6663d4c12b6ecb5.ttl │ │ │ ├── 8b8ee1b35ef35ec8968dc9418be21629.ttl │ │ │ ├── 8b952814988b5abc935e25f020c3c0b2.ttl │ │ │ ├── 8ba007df1f985127be3aa95c5ead3b73.ttl │ │ │ ├── 8bc7dfd7071d5dba833e298c1df3e850.ttl │ │ │ └── 8bffef0cbbf7501a9d96d1e88ef37402.ttl │ │ ├── 8c │ │ │ ├── 8c4cec3dc16d548da54088cbcb4673f9.ttl │ │ │ ├── 8c5f378a6f025d339c0d31454504743f.ttl │ │ │ ├── 8c930f16ee57561bbb74d91e501307fc.ttl │ │ │ ├── 8c939b05d8fb5e7f81ecd66428065b37.ttl │ │ │ ├── 8c96cfe534ec5228a522cfe0b3a7309a.ttl │ │ │ ├── 8cbceb856b0459cb9161f247af79b7ef.ttl │ │ │ ├── 8cc4ff32660a579aa3e14f75b265fab5.ttl │ │ │ ├── 8cc6a5af0a3250efb1f0dc35457d0c2f.ttl │ │ │ ├── 8cdad479f5fb540bbd02660146ab30fa.ttl │ │ │ ├── 8ce4df66063154788fd9c29532f666d3.ttl │ │ │ └── 8cee1c0559fa50f8843fc883dcd04ff6.ttl │ │ ├── 8d │ │ │ ├── 8d085e6c6a42517a8be3d390729630a5.ttl │ │ │ ├── 8d4ec3429e5b54eba8ef5cf08954a2fb.ttl │ │ │ ├── 8d4fb0eccfda56c190466d817ad283a2.ttl │ │ │ ├── 8d72ce7e5f1252fe9ca86a7cdb6d395a.ttl │ │ │ ├── 8da2cfd399825afdbf87a36344b4898a.ttl │ │ │ ├── 8da5835776d15146bbc014a73a6817ae.ttl │ │ │ ├── 8db968ccc5a95409a9f58d38c9da5d41.ttl │ │ │ ├── 8dc6f9e659885decab5b50cec0584dbf.ttl │ │ │ └── 8de2b1d59b9a5d1992473256107a898b.ttl │ │ ├── 8e │ │ │ ├── 8e1d9325f0e5549eafeb921b6821b2c9.ttl │ │ │ ├── 8e217e58d87c592a8bd659d82fe486e9.ttl │ │ │ ├── 8e260ee07ef559008375c7b032b87202.ttl │ │ │ ├── 8e4ea3c67fcd576aab87112b5f849904.ttl │ │ │ ├── 8e7272095a1759a1adf1a97a85a9aa39.ttl │ │ │ ├── 8e99c2caf67b506c847c6d94f53ebac6.ttl │ │ │ ├── 8ebf3ceaa3df5986939e460f3bd5a809.ttl │ │ │ └── 8ec446b1f8d95abd8eb5fc485652a210.ttl │ │ ├── 8f │ │ │ ├── 8f2d430e2c6958478b5c06765d3b3e59.ttl │ │ │ ├── 8f2e0d61f7935eae8999b769e0bb6338.ttl │ │ │ ├── 8f7253fba9e15fa58db2ae72f6e49975.ttl │ │ │ ├── 8fa803eeaa1457a9bdd15167da7930e2.ttl │ │ │ └── 8fc576b74dac56cd88e136409ea03edf.ttl │ │ ├── 9a │ │ │ ├── 9a05179a8068525d87c71398b51cd6ef.ttl │ │ │ ├── 9a548a616b1656509449232bd1a664ee.ttl │ │ │ ├── 9a571ef59bc0593d9d071ec4d5172063.ttl │ │ │ ├── 9a6bf5e01aa255829ec6c669e55f309a.ttl │ │ │ ├── 9ad47a86b51b59ff9c72a913731a2e73.ttl │ │ │ └── 9ae16dcc8e365bc7b6f83b91300ae4a2.ttl │ │ ├── 9b │ │ │ ├── 9b57aa4a3b125b1bb152a60a72c88106.ttl │ │ │ ├── 9b8e1d9f26385de3be8d5bff9ad32924.ttl │ │ │ ├── 9b945730532b575fbc99dcc27f403c98.ttl │ │ │ ├── 9b950b2042e05f69a4ab5768a2e74d31.ttl │ │ │ ├── 9ba0093520325111944627796b0981fe.ttl │ │ │ └── 9bba76617cd75450a560ce7ad35aabe4.ttl │ │ ├── 9c │ │ │ ├── 9c4bc59db3605612973708b0580d5ef6.ttl │ │ │ ├── 9c53e9ce074f52e6b06b02db9847e4dd.ttl │ │ │ ├── 9c69ef427ecf5235b12917f5ba88c8cc.ttl │ │ │ ├── 9ca81f7b838a553bb4850ef1a027c3b6.ttl │ │ │ ├── 9cb8790fd6f151db9e672b02569a3524.ttl │ │ │ └── 9cf96bfbd88f5fda9db0d1a9c4b81c8d.ttl │ │ ├── 9d │ │ │ ├── 9d47d14652be56db84e65ef6f1631ead.ttl │ │ │ ├── 9d68c8fabefe5c479d03c36ec61c9f5a.ttl │ │ │ ├── 9d8b8cd5af515c3193abfaec3963204d.ttl │ │ │ ├── 9d9c6f8030c6584fbde01debcde854b0.ttl │ │ │ ├── 9dabc74b678d547a9124490538d662a2.ttl │ │ │ ├── 9dd7e728aa3052d0a3e655f9a2c63325.ttl │ │ │ └── 9dee72068e825fbbaf49bbc2fecfc977.ttl │ │ ├── 9e │ │ │ ├── 9e18a7e7ab935c2793cbdd83f083c231.ttl │ │ │ ├── 9e327f45d70254a990bb2d73c7bc3f05.ttl │ │ │ ├── 9e5327728e1c51809d75e519f0a36463.ttl │ │ │ ├── 9e9070ff831c5b7cb830ecca00589254.ttl │ │ │ ├── 9e9761dbb0ee5c809f3cc7915db914bf.ttl │ │ │ ├── 9e9dab4a0a2e54a5a7e099037596864c.ttl │ │ │ ├── 9ec9d675f53e5070b226b2d860e4de77.ttl │ │ │ └── 9ef0dec5f3785b2c8699fed996f61e3a.ttl │ │ ├── 9f │ │ │ ├── 9f1845e8eaf6508fb463fec244240040.ttl │ │ │ ├── 9f21e8bc3aec53b7b249e354d3ce3e23.ttl │ │ │ ├── 9f43e20cdbb5541b94ed5bb243b0b4d2.ttl │ │ │ ├── 9f45a2e85a7d5407b8b1db8dac3eb56b.ttl │ │ │ ├── 9f4d72fa795657ed8312a676a8104100.ttl │ │ │ ├── 9f7423e07e5b59a3bf344750c032246d.ttl │ │ │ ├── 9f7efffd97a5552f914e0563db03e497.ttl │ │ │ ├── 9f965bb432e956e7a9bbc6a5af6528b4.ttl │ │ │ ├── 9fa28c8dc91b544eb538e52fa4648602.ttl │ │ │ ├── 9fc4606d2b1f5a328aa929c0c03a2cc2.ttl │ │ │ ├── 9fcf2bed66035de2ab58995ac2eb8ef9.ttl │ │ │ └── 9fe4c5d7719450febc17d760605d6d26.ttl │ │ ├── a0 │ │ │ ├── a00f05de14f25718b4157cb6695069d2.ttl │ │ │ ├── a01313fccc3b5b999db3ade24d1aa1d4.ttl │ │ │ ├── a01ab4f2ee835dbcb08400ef35de9447.ttl │ │ │ ├── a038fc4f890a5d9ea8e65470912da9ee.ttl │ │ │ ├── a052e3d530205b04963d2d9fb77adea5.ttl │ │ │ ├── a05c079ab5e658f8be928cecb716f038.ttl │ │ │ ├── a07c7298c4155211bcb6c133d75b83d0.ttl │ │ │ └── a0b6327525f15ba89379b23e1959509a.ttl │ │ ├── a1 │ │ │ ├── a11fcd3742e25daba19d24b8ae6d8171.ttl │ │ │ ├── a127f65abc905737b4c1e8b12f5d7b04.ttl │ │ │ ├── a13ac0ce95695f8488a64a582709c349.ttl │ │ │ ├── a1493bf524e95626be68b4e1544c8b04.ttl │ │ │ ├── a162b39717045e1cbdb09fe7d7d8eef5.ttl │ │ │ ├── a16944e0561e5e0fae6134cbc8013ff9.ttl │ │ │ ├── a172dd97e8ae57789e443cf633b67693.ttl │ │ │ ├── a19f5cbea89a5e129d5327ac53c4d067.ttl │ │ │ ├── a1a6348df9155078a08bd7cbcc172d8b.ttl │ │ │ ├── a1b027584e195d64b57511cd626d59dc.ttl │ │ │ ├── a1b5b0127ba558c7a2fa8544c6e6648a.ttl │ │ │ └── a1de2d0d4c03555aa402de0abead2a1c.ttl │ │ ├── a2 │ │ │ ├── a2225995f4775cc4b3a3400a372ad544.ttl │ │ │ ├── a22a07d05e495bd09fea5de71f7ee7b9.ttl │ │ │ ├── a2a8a32a61415e75a0822cd5aaaf4689.ttl │ │ │ ├── a2c8892b1f325f0191f0f836a268e711.ttl │ │ │ └── a2c8b3e5a7cf5c7eb17cd4874d19ee20.ttl │ │ ├── a3 │ │ │ ├── a3413c6354225567a18224e50b29865c.ttl │ │ │ ├── a34ad8ef02245e43b710fae6b09c2fac.ttl │ │ │ ├── a372382f61185499aedeef3a0a7d7279.ttl │ │ │ ├── a3c5047a66da590da092785a29a0b174.ttl │ │ │ └── a3e9b3e4bf255a6596c5dfbacb75d163.ttl │ │ ├── a4 │ │ │ ├── a4032387aaf25274b119ebae5d3caef4.ttl │ │ │ ├── a44c0be45be45240aed9a84219753112.ttl │ │ │ ├── a479fa3de67e5714bf1ed4fe9b0dd9c1.ttl │ │ │ ├── a48a0f2b0f165da7837b1afe01cc22cc.ttl │ │ │ ├── a4b6676d11a95c33a44dcae9a3e93e66.ttl │ │ │ ├── a4ba1fc1b0af52dbb5dd20dd4b86e904.ttl │ │ │ ├── a4c577b672ad5a7080502e01caa6c016.ttl │ │ │ ├── a4c8f35c18dc533aad750d2b916c3c00.ttl │ │ │ ├── a4ceb2f58f0f5061addb4a48be0a558d.ttl │ │ │ └── a4fdc418898c54d0a3ad64fffccfbd99.ttl │ │ ├── a5 │ │ │ ├── a50aca32d5a7513e894059ce6f65a283.ttl │ │ │ ├── a513ca2ea11c5318abfefaa9f7424d83.ttl │ │ │ ├── a51eff795cb55a2297cae2102fee9fd8.ttl │ │ │ ├── a54d778a2e1f53119698bba337616400.ttl │ │ │ ├── a55b61275d915eaeb91a07dae5dcbb52.ttl │ │ │ ├── a55b9fb957db5e56ac9bd2d0ca116e3a.ttl │ │ │ ├── a5662543a2fe5b71a9037ff9dfaee6c1.ttl │ │ │ ├── a57881fd15335603bb3f84d17a25c1ed.ttl │ │ │ ├── a57a478974e05c86be101c3144ce7929.ttl │ │ │ ├── a5c13f42add05be687825fc276658280.ttl │ │ │ └── a5ce94ed3ad151a192a46c1c79dca24d.ttl │ │ ├── a6 │ │ │ ├── a6208ec05ea357e3ba0c3ad7db6eb4d9.ttl │ │ │ ├── a639ce85559954f98fd2637c5e2ccfde.ttl │ │ │ ├── a64e68963f33511c9fe2954762391741.ttl │ │ │ ├── a6689da5291253b882983cd320e01c70.ttl │ │ │ ├── a671bf466ae2592caca321163f909d43.ttl │ │ │ ├── a67c53942fb35262aa6add656b7c847d.ttl │ │ │ ├── a6839bb854d359f8bb30af07f27cdd43.ttl │ │ │ ├── a69be5cb8cb0541d9732a98979195855.ttl │ │ │ ├── a6b21385da805efa8c94227104564b82.ttl │ │ │ └── a6b91125a83c5c7382828ec83ea6978c.ttl │ │ ├── a7 │ │ │ ├── a704b7592dd25c35b8fc36d9f9655c6f.ttl │ │ │ ├── a7097d0db11f5091a338cf41b4605daf.ttl │ │ │ ├── a713af69a62754b9af5835f3e2663dc0.ttl │ │ │ ├── a71aaba4bd3a53d9a80043018c1b151b.ttl │ │ │ ├── a744f599c18d5d9bb356d8c6349b9f0e.ttl │ │ │ ├── a791d257c81953d7af16ba629f6b5322.ttl │ │ │ ├── a7a2c7c7c7795446a183995a0c29181a.ttl │ │ │ ├── a7b4a0c0789a53e18ef3b34c256d21f6.ttl │ │ │ ├── a7b4b4eeb07255ec948d348b2d1af536.ttl │ │ │ ├── a7cda2ec65c354898b08f24e298f9f44.ttl │ │ │ ├── a7ce342760a05a48bba90b2f1bacbc60.ttl │ │ │ └── a7dbc06c829059bbadbdaf4e5262acee.ttl │ │ ├── a8 │ │ │ ├── a80326dc145051e183a7033afcaf7b40.ttl │ │ │ ├── a825f2d51c465fad8db825ae942f06fe.ttl │ │ │ ├── a84b97785ce3584aa372676bc513262f.ttl │ │ │ ├── a84ba57fdce65046b3e94a8d13694b24.ttl │ │ │ ├── a87ea93a0d4755578a1b0d1a8d0b7e3c.ttl │ │ │ ├── a8bc2112856f5dca9b11d2a6ecd105b6.ttl │ │ │ ├── a8bf81715b8558e8a57c19ec96015619.ttl │ │ │ ├── a8bfc6f066c75d20b2660157a30bdf7e.ttl │ │ │ └── a8cbf60fc5ad57fe8c6e5b8270df2a19.ttl │ │ ├── a9 │ │ │ ├── a925c1115a145de394e7b80b07ae5deb.ttl │ │ │ ├── a9475eb0322c54d3a0c58f9dc3cfef2c.ttl │ │ │ ├── a9a4f16cca2f5270bf08b8f3460b6a1c.ttl │ │ │ └── a9a848c70f635113b178df6fa041e969.ttl │ │ ├── aa │ │ │ ├── aa082a9eb7d3554798c7fe24af5ae73a.ttl │ │ │ ├── aa30f27307e551988c080bab63fa1ead.ttl │ │ │ ├── aa5aad1c5c2a552a87aa0217484be615.ttl │ │ │ ├── aa661cf1e893559682b1e54e872c9ae6.ttl │ │ │ ├── aa8897b5ecda5d31876fe8cc1199fb76.ttl │ │ │ ├── aab99121f0305f2693cc9a2dc81b85bb.ttl │ │ │ ├── aad8c4318eb65bd5b5f17195240109c2.ttl │ │ │ └── aada1d9ef8265ee884add3a224748b80.ttl │ │ ├── ab │ │ │ ├── ab08484295c55157a6f5fcf7d7a414b2.ttl │ │ │ ├── ab0ae02406b95e1495021259a95d6eac.ttl │ │ │ ├── ab0e61878a8b5ae2b0a74b39ff9c5295.ttl │ │ │ ├── ab1b1398518a50b3ab16ef11c3765d03.ttl │ │ │ ├── ab315c81d186577c80ec6d89a331f7b4.ttl │ │ │ ├── ab90a24231bb500ba72faae7461a81f7.ttl │ │ │ ├── ab989ec52b6d5e38a9e04d62c4ccc98b.ttl │ │ │ ├── ab991ee0f2ca54599f898516d8b15a8c.ttl │ │ │ └── abdef6e197145c50a1564e75ec2fa315.ttl │ │ ├── ac │ │ │ ├── ac24958b8ece5189b45397889d397dc1.ttl │ │ │ ├── ac57307f524459ed8aeef482e2383d93.ttl │ │ │ ├── ac6f0aa24560516cab8978f0ea2017e2.ttl │ │ │ ├── ac7ce15485fe5248816c1095536bb2d8.ttl │ │ │ ├── ac99b46d31d75417bf011727d63fa143.ttl │ │ │ ├── acc89bd7ed905a61ba69bd5b19375c70.ttl │ │ │ ├── ace63d1d229e5171a476128c83438882.ttl │ │ │ └── acf2dc9395015191bc83e9ae50cff2e8.ttl │ │ ├── ad │ │ │ ├── ad44cfb8cf085ed28fceb024b7865d99.ttl │ │ │ ├── ad6a33cf490e591aa9e8d5909733db5c.ttl │ │ │ ├── ad6d3b9bf4c25eadbc1eab59e851ea25.ttl │ │ │ ├── ad8a43cd98045bd6bf40229dd123fd43.ttl │ │ │ ├── ad907a20bd1d5c899d4daef22261180e.ttl │ │ │ ├── ada43b90ec685b278b9f8d0104ed565e.ttl │ │ │ └── ada91b5a99ce52a48646c0fce90b2afb.ttl │ │ ├── ae │ │ │ ├── ae1b916974bd57fd8c5f8e469be36fbe.ttl │ │ │ ├── ae3156cc70a6559ca9b53acf349ae067.ttl │ │ │ ├── ae6f6adbadd2504c83434195d20c4e04.ttl │ │ │ ├── aea6303de77857c1bc7d35fd9ff8e85b.ttl │ │ │ └── aec0aafedca65905988436401574968e.ttl │ │ ├── af │ │ │ ├── af0be13cacb954fd8f19f50062b98862.ttl │ │ │ ├── af2447deac4b50fd9db41defdf8aaa45.ttl │ │ │ ├── af354c0833f9565ab771735b091bf5ae.ttl │ │ │ ├── af576be574c95b9ba16477ab66625143.ttl │ │ │ ├── af637298b84f5adfb2e6574ce21052e7.ttl │ │ │ ├── af9f12caaad953bca1e9a4f26fb76ad8.ttl │ │ │ ├── afa0b07419515993bae8293b88716ddd.ttl │ │ │ ├── afc01ab101ac50938ae6fc350d9e69da.ttl │ │ │ ├── afdac028cd3e575f9984054120ceb129.ttl │ │ │ └── afe4977d6e2b56a794c1c80e75cce9f3.ttl │ │ ├── b0 │ │ │ ├── b02d17cf56ad5cdd9f5352b5cdfb7334.ttl │ │ │ ├── b079a537b26a56e78231e3d5271747f2.ttl │ │ │ ├── b0949ffefab45e4cbbb6b173f50f3a9e.ttl │ │ │ ├── b0a6ee06f500509986054ddaf2815c46.ttl │ │ │ ├── b0b66c749a4355b69cb8e7056ca6cd84.ttl │ │ │ ├── b0d8352d37ed59b48fa572f7ba9be037.ttl │ │ │ ├── b0de8e22892955a184e4a19ed52779a7.ttl │ │ │ └── b0fd235dc728531185207bb066ae60d1.ttl │ │ ├── b1 │ │ │ ├── b131131d43ae529cb3dc50cce79d2028.ttl │ │ │ ├── b133efa302815c9c8b1277fe1fe08316.ttl │ │ │ ├── b15baa96f19c54bd865043491d537a0d.ttl │ │ │ ├── b178cdb4b2ff5125a817545a4a3e181d.ttl │ │ │ ├── b17926a4f3005c33b475a11184a40b93.ttl │ │ │ ├── b17daac5dfd05cec83b6b0146953905d.ttl │ │ │ ├── b18f914f51f95ab49ae49df1305aebd5.ttl │ │ │ ├── b1bc888a4b4a50f4ad0b744784e3f056.ttl │ │ │ ├── b1ebf889a7fd5d599b7ff44fdd78cbb9.ttl │ │ │ ├── b1f22b8b182f54aaad7a28f93e022ee4.ttl │ │ │ └── b1fdfbbf8a1052f1a2068178379d01a7.ttl │ │ ├── b2 │ │ │ ├── b26bb9a86062553f8a6567e3ee70be37.ttl │ │ │ ├── b2843e95ee8e51d38cfde14d4eeb95cd.ttl │ │ │ ├── b287fdfc195c5c4c8bf69098568608b3.ttl │ │ │ ├── b294616e6ca45059b30a697b5962f2a0.ttl │ │ │ ├── b29b31018caa5915a0afb782709e7151.ttl │ │ │ └── b2cdabfc3a695fd6b9bd83fcc82029fe.ttl │ │ ├── b3 │ │ │ ├── b37561f939025faa82359b5bc42dd2f5.ttl │ │ │ ├── b37efb0bc87b55db9072196a34d4071c.ttl │ │ │ ├── b388965d083e54c28246af5364a7acda.ttl │ │ │ ├── b38fdf189aad5114ab896b1a78c41770.ttl │ │ │ ├── b3c1994818f455d798870d7020c0f5f3.ttl │ │ │ └── b3c4182d781856ac97413a0cd6c53af7.ttl │ │ ├── b4 │ │ │ ├── b4039879fe8c501db25ee3f7f1d06ad6.ttl │ │ │ ├── b46260fd1f84506b99ff2ce611c87a64.ttl │ │ │ ├── b473c88c47d75c7d84046140d9852e87.ttl │ │ │ ├── b47842651fe958688da4fb2de08e0dc2.ttl │ │ │ ├── b47e53a41d515fc0b9962caa65086f98.ttl │ │ │ ├── b48fa8b50cea52808c141c7fb5070b3f.ttl │ │ │ ├── b4ca4242bfb2528b92bffc2e086c2c0e.ttl │ │ │ ├── b4ced0cdef8b5eb9a9a961838447322f.ttl │ │ │ ├── b4d0078a18005ff29b1f48746eb9025a.ttl │ │ │ └── b4f68b6034c553a6a8056ba16e559392.ttl │ │ ├── b5 │ │ │ ├── b5002a4126995caca567803c50327f95.ttl │ │ │ ├── b52e6cc7c0cf5f6c9ef369f6e285ebdd.ttl │ │ │ ├── b5325d4da6205c65b09013553547b068.ttl │ │ │ ├── b5440a7a1a4c5f3a921f5e47592264b0.ttl │ │ │ ├── b5707032f7cf561ea38faf084f1d7c47.ttl │ │ │ ├── b58b7853d5eb561c8aaaad34f12ab9a5.ttl │ │ │ ├── b5ca0bf6d9b45c6cbc4451d38c300bea.ttl │ │ │ └── b5d3e114e968578bbd4874d1238b27fb.ttl │ │ ├── b6 │ │ │ ├── b624075c2041542a9fb380f75b11464e.ttl │ │ │ ├── b63cae72ba245128bfdbc662d212f0d6.ttl │ │ │ ├── b647da895f475838ac2ebd6c097ef874.ttl │ │ │ ├── b6851ad6e8ca5d0fa2350e09d8975833.ttl │ │ │ ├── b694389e83ee5ab6abf31f48721c1fb4.ttl │ │ │ ├── b6957ab249905044aecd63fcf00078b3.ttl │ │ │ ├── b69c53f412605e7b8aed41fa5b1a3b36.ttl │ │ │ └── b6ea952f916859b19c0d3119f142cd09.ttl │ │ ├── b7 │ │ │ ├── b72306cbecd85eaaac1111df9730df50.ttl │ │ │ ├── b739ad620c5958a8a9bcb5fbe6dfe6b4.ttl │ │ │ ├── b7491ecfe9fc5dba9fe0fd9387b6cdd7.ttl │ │ │ ├── b785a14916405b5393e1c4002925cf17.ttl │ │ │ ├── b7920b0d2d095584af9c7377121128a1.ttl │ │ │ ├── b7b9c24afc14556dae3db3dad5ec76ef.ttl │ │ │ ├── b7e459c31a4c5fcea90a0c95a01d7716.ttl │ │ │ ├── b7e6276b1fda51c5bbaca3a67a13061c.ttl │ │ │ └── b7ede4e171a953f1ab2174cf2639a1a8.ttl │ │ ├── b8 │ │ │ ├── b83b7464800759ed90905e99819b4d1c.ttl │ │ │ ├── b84f5ead92e1562fa16389378683685b.ttl │ │ │ ├── b86da26473e85e7fae7a1f9e4f2c57b9.ttl │ │ │ ├── b86e5d236c44506e939b05e3dcc222cd.ttl │ │ │ ├── b8708b341f155bc996faee53662cb3b1.ttl │ │ │ ├── b8860149be7b59c194916d6413cbd30f.ttl │ │ │ └── b89ec6732b4452749515ca272a4cc587.ttl │ │ ├── b9 │ │ │ ├── b907b121701e5ddeb01c21ce3d6f29fb.ttl │ │ │ ├── b966935a6e765c6eb324874b20e26de9.ttl │ │ │ ├── b97d720f1d3a5f31ba1b147fc253894e.ttl │ │ │ ├── b97f0c7fd7c95171b2eddb9849d84d0e.ttl │ │ │ ├── b9b2f17565055ce486659dd5dd22e444.ttl │ │ │ ├── b9c84bce1b4a5fe8859ab8e71569a735.ttl │ │ │ └── b9f1e54dacc255799d742f6345e8a4da.ttl │ │ ├── ba │ │ │ ├── ba668bfcc14e59a89809dd37dc106b52.ttl │ │ │ └── bad318205ce057b8b9b64d55002816f9.ttl │ │ ├── bb │ │ │ ├── bb0e0c52961054bba7782a5381751dfb.ttl │ │ │ ├── bb251df1545c566090dbc92ee209c418.ttl │ │ │ ├── bb4be8b3c3f7567fa539ef1567788429.ttl │ │ │ ├── bbacbd002b375b03992b4d2ca29f281a.ttl │ │ │ ├── bbc74e1be288522387a1d20895ba42be.ttl │ │ │ ├── bbf167a0ad075d0fa960996e51f3dbb3.ttl │ │ │ └── bbf3d0678e2657acb383ba3c9f0b25f3.ttl │ │ ├── bc │ │ │ ├── bc095ddb747155169958bd548a697ef0.ttl │ │ │ ├── bc26278e2cee574c80123c2b27bb3fb5.ttl │ │ │ ├── bc3d01132dbc5e308bf1edc4aa4064b5.ttl │ │ │ ├── bc5b305e6bc2515e9a8639bb1f178e45.ttl │ │ │ ├── bc61a7be6e0b5d59aa9889efd1e3d15e.ttl │ │ │ ├── bc71be0a405d5de191d98b7d96ad40af.ttl │ │ │ ├── bc851166fd2657e28365e3b4da5bbd65.ttl │ │ │ ├── bc93cd50a282555ebd42fa135352e95b.ttl │ │ │ ├── bc9dbfa921575e028b03daf855c964ce.ttl │ │ │ ├── bca46a12eb1c5c889021907780f3d5ca.ttl │ │ │ ├── bce184570adc5b49975525b99f2b5efc.ttl │ │ │ └── bceb16782f4658bfbaa228dd3bd41d7a.ttl │ │ ├── bd │ │ │ ├── bd3ccd0b20ca5c628e64ccc5a35ffe4b.ttl │ │ │ ├── bd8f7a2ec9ba5357a5e7ba546b656cc4.ttl │ │ │ ├── bd948f93496f51d2947dece88d795ef1.ttl │ │ │ ├── bdaa8944f81354e69bde9f07eb898ca9.ttl │ │ │ ├── bdb5d88abe8558449a187605e4d25905.ttl │ │ │ ├── bdd3e2ee19885e4487928d917da73ba9.ttl │ │ │ └── bddc079a564f51a8ba5bbbc52b7aa176.ttl │ │ ├── be │ │ │ ├── be15a80ac72d57f98ace0606758627ee.ttl │ │ │ ├── be504c89e0e954869fe178e92826100e.ttl │ │ │ ├── be52a011d5885a0d8e2e28bf0720e3c8.ttl │ │ │ ├── be53d9667de856ea8d74dcfbe4286444.ttl │ │ │ ├── be60af2fef1f5dcaa3b14903bc53e4da.ttl │ │ │ ├── be7a5cc8c238564880f20645b8eadfd1.ttl │ │ │ ├── beb3236cf84450298e1d81255024debe.ttl │ │ │ ├── bebce7018e7358b19576694ab5d2037e.ttl │ │ │ ├── becd7051ef3652f88a3462749d93ea19.ttl │ │ │ └── bedb78c009175410ad374f5b597aed6b.ttl │ │ ├── bf │ │ │ ├── bf1d7a6230c35a7dacada929dc7e0881.ttl │ │ │ ├── bf1f4fdd95a05090afca8809c0bf8fe3.ttl │ │ │ ├── bf55a09cbbb35b05ae3fd7648fe4017d.ttl │ │ │ ├── bf978ec9f52653d4974c9720d19e4720.ttl │ │ │ ├── bfd755fb83615213858a1e50f5f0a3bd.ttl │ │ │ ├── bfdc58735754503ebf376500d707f352.ttl │ │ │ ├── bffad23000065966b552df37faaf50e1.ttl │ │ │ ├── bffe4a3d857a55c7b950ada1bee86a5b.ttl │ │ │ └── bfff35c4cb7d53e4869103d79d3b0b06.ttl │ │ ├── c0 │ │ │ ├── c00afc9729105e9cbc42166ca96c3dd0.ttl │ │ │ ├── c02728bc4a55596680cf090266766736.ttl │ │ │ ├── c039876b0b585267b6a2bc46b0f5b928.ttl │ │ │ ├── c04fa316eb325bad8fee5f126acbe082.ttl │ │ │ ├── c05458d90f80538d94bc702df4ade3e1.ttl │ │ │ ├── c054b9d45238543d8ded6d279d717295.ttl │ │ │ ├── c06b70bcd8bf572e966bb7753ccc2029.ttl │ │ │ ├── c0779272b5da5bc5bda14093fcaff088.ttl │ │ │ ├── c07a376db8c65e67b848a975591c90b3.ttl │ │ │ ├── c07b3ec892ca5447a480ad295e9dd7e9.ttl │ │ │ ├── c086bffd0fe25a53a82e79e3c998a864.ttl │ │ │ ├── c095712c5c495d849b701b2887f1e256.ttl │ │ │ ├── c095e64a069956558407c26f201f8bde.ttl │ │ │ ├── c0bd29dc22565c918eb5cd0cb37fcae0.ttl │ │ │ ├── c0bfe755a9fe5e659aec4943d621c206.ttl │ │ │ ├── c0d79dcf118b5ac89944a57a1920baf8.ttl │ │ │ └── c0fcab3df7b55b94aa370d7429ca2d88.ttl │ │ ├── c1 │ │ │ ├── c1441ca20ac556be86d41fe1d223e497.ttl │ │ │ ├── c1501f175cf55a849d93f6fd91576682.ttl │ │ │ ├── c1553eef3af25dcf93d60738d25ea013.ttl │ │ │ ├── c15629c298445b28ba7cf6f6e89ca550.ttl │ │ │ ├── c1ba0abd80535171898234274fab1351.ttl │ │ │ ├── c1d163ec5be552dfb5cbd59dae90f303.ttl │ │ │ └── c1f03c0701fe57c08b21da84acaacff3.ttl │ │ ├── c2 │ │ │ ├── c22be091c95b5877b459d5bfcec955e5.ttl │ │ │ ├── c27f94744e1a5a77887c12547c649642.ttl │ │ │ ├── c28363ad957e539ea9894ef41f897898.ttl │ │ │ ├── c2a00151e9c952dab8db3db6ccf140bc.ttl │ │ │ ├── c2a8e1a7e31d51569743b82378e0bcc5.ttl │ │ │ ├── c2d7462b36c05fb08316f53de7003661.ttl │ │ │ ├── c2e1706dfeab5466b144eeaa29551228.ttl │ │ │ └── c2f12376b8515c9baecb93f33aba8edd.ttl │ │ ├── c3 │ │ │ ├── c308cc524e4151e6a893b5c024a815c7.ttl │ │ │ ├── c30ab07586505e01a31ec3cccbe4f636.ttl │ │ │ ├── c30cf482c0bf5e2aa100d15c60421a7a.ttl │ │ │ ├── c30ecc116c5c5ddc80560babe1858711.ttl │ │ │ ├── c314c227bd6e569eb779dbfcf68c4c0a.ttl │ │ │ ├── c3278b2df6935fa9b93d224fe3686ad8.ttl │ │ │ ├── c32e2e4af6a65879b46d65090d5fb944.ttl │ │ │ ├── c3c51976c8f259b0baabc3e87b28beee.ttl │ │ │ ├── c3c671b6d7e75a4691055a37b7fed9a0.ttl │ │ │ ├── c3e97a352e695542a0bd9d4e26cec5e6.ttl │ │ │ ├── c3f26c548b4c55529261bd3223578fa0.ttl │ │ │ └── c3fa6ea9aed150a0a0e694dc7c55c4f9.ttl │ │ ├── c4 │ │ │ ├── c4251fe031b5534c8baf9a0d9d017e4b.ttl │ │ │ ├── c44561fce82255e7b01407983b67babb.ttl │ │ │ ├── c449f77b924c528d8286159931cffaf6.ttl │ │ │ ├── c469e479cfa452ada259a325f2441b7e.ttl │ │ │ ├── c471041db3c35b8caa2ca3e396bfe9bb.ttl │ │ │ ├── c4917a2edefa5b3683ee72df8a4773ac.ttl │ │ │ ├── c4c6a2f022b5597aa9238bc059cf827d.ttl │ │ │ ├── c4c85bc274b55308ada3d27e7cfe4ea6.ttl │ │ │ └── c4fba8c6d9915d3cb9f0a50b1fd4bf82.ttl │ │ ├── c5 │ │ │ ├── c50e6086568f5484affcc4baa4340872.ttl │ │ │ ├── c54bb1aa55795a11b8ddcea20f76244e.ttl │ │ │ ├── c58f5f4154075087b76f973384615111.ttl │ │ │ ├── c59e3985cb01508aa4652cb712e8ad52.ttl │ │ │ ├── c5b7c965eeda52b3ada86ef14a13d1f5.ttl │ │ │ ├── c5dffc2126f858608f9210623f5bd818.ttl │ │ │ └── c5ed93e776255523b15513bf2f4df5ae.ttl │ │ ├── c6 │ │ │ ├── c61564709c4759e989942e59bf1cb2d3.ttl │ │ │ ├── c62e011d105d566e944f11b0dc2ffa04.ttl │ │ │ ├── c6329ef1a336557a864a47b7e0b012df.ttl │ │ │ ├── c650e7b3fe2f53faaa7e6aca13fd251d.ttl │ │ │ ├── c6747cebc140569cab243e1597880f84.ttl │ │ │ ├── c68cbf0bb9125fc1a04df0f15a570106.ttl │ │ │ ├── c69ea119237057e698c152c706bb1af3.ttl │ │ │ ├── c6af0b32e5375bd78aca6af3cfae60e3.ttl │ │ │ ├── c6b0168a7b7f58efb42346f218b23ab4.ttl │ │ │ └── c6c217afd67c5a21bde81096d0bff51d.ttl │ │ ├── c7 │ │ │ ├── c724516157dc535eb2f11abe27e07545.ttl │ │ │ ├── c73daa42bec25fc4be9750cddf147d43.ttl │ │ │ ├── c751f83d5c655a558d24d66ff9b74132.ttl │ │ │ ├── c753fb71ec685d06b4e4614eab023854.ttl │ │ │ ├── c79c635cf5305f7496a115e2bc7d6a54.ttl │ │ │ ├── c7a31f573cf758318ebce4a3452a755b.ttl │ │ │ ├── c7bdef357daf52e8810b657af961a6c5.ttl │ │ │ └── c7fd9552cfdd5c27bf853bebfbc72a1e.ttl │ │ ├── c8 │ │ │ ├── c81caee3bfd253ccbbd85d9cae222833.ttl │ │ │ ├── c83d87ed9c695a67929f60c423d754f4.ttl │ │ │ ├── c84f3853a2d05d5c967bd0cb3adbf11a.ttl │ │ │ ├── c8556a6990b2519faf862e3f0da19d13.ttl │ │ │ ├── c85e174382b953a9815bb7d9c6dc085d.ttl │ │ │ ├── c86238e478b457b9baa3e4b18e0a561c.ttl │ │ │ ├── c8665addb9315999888fe91d2482e861.ttl │ │ │ ├── c88e8a2d9d4e5b41b1c26058bab16cf2.ttl │ │ │ ├── c89a02d09c425ee9b188f5ffd61bc47e.ttl │ │ │ └── c8a11d5c670c5c639e90016a5c766766.ttl │ │ ├── c9 │ │ │ ├── c9122f82dffc5c73bcbea96558b0fade.ttl │ │ │ ├── c92da36e9cc856f788d4b9f2476747fc.ttl │ │ │ ├── c93c3fc5d16a5e51b017afeb3f67c4e3.ttl │ │ │ ├── c93e6fb48f3654998cb2340e4b765160.ttl │ │ │ ├── c9421db4fa94523da338ec8be707cf91.ttl │ │ │ ├── c95f8cdcc87d51cfad9dd620d26b9b4e.ttl │ │ │ ├── c9652f1362c85472957ecce5e47c83ae.ttl │ │ │ ├── c98e14836e5d5df5a43a58f39edb7939.ttl │ │ │ └── c9e658abc32e5303877dc1674dce1b2e.ttl │ │ ├── ca │ │ │ ├── ca19e605cad658e7b1a2a00d719df43d.ttl │ │ │ ├── ca221e5ab90652aeb64e9a13730cb1d2.ttl │ │ │ ├── ca271633de28580780031e508d68b137.ttl │ │ │ ├── ca507b606cb55fd0a1231ae8184f8443.ttl │ │ │ ├── ca510941dff65b3f98789702f7faa76c.ttl │ │ │ ├── ca61f4963b7a50fb985e648db9101600.ttl │ │ │ ├── ca7678ec7543515ea7787674e8a6d5ab.ttl │ │ │ ├── ca8903f3091855b896838e4225b43a75.ttl │ │ │ ├── cac20bf58aaa5605ab897410f8841a0b.ttl │ │ │ ├── cac253ed591952418da679b7683570ab.ttl │ │ │ ├── cac56741f3155acea5bc1972fb9bfbf1.ttl │ │ │ ├── cae669b44b2757d1a5d32a3da8523afa.ttl │ │ │ └── caedb6322efd5363b0a8f683376aa566.ttl │ │ ├── cb │ │ │ ├── cb0751ce2a7a580e93aa5c82cf2e8969.ttl │ │ │ ├── cb426d6f538958418b54968b8a3b7c21.ttl │ │ │ ├── cb4ee6cd49915e3bb873bec7652dad13.ttl │ │ │ ├── cb6907d0941a5636a8ef5577dd9a4341.ttl │ │ │ ├── cb6e76aa897e51628a143f08e9709a0f.ttl │ │ │ ├── cb77b7a8e0f35fca97b5fd40760e12d0.ttl │ │ │ ├── cb8c56eccbea56d58d5ffd4fc7523b5a.ttl │ │ │ ├── cbaa8d015d9a5e58a19137603e2a64cc.ttl │ │ │ ├── cbcef40113be55c08d4ce25c1772699e.ttl │ │ │ ├── cbda39be6d6c55ca8c4f64f0c944415c.ttl │ │ │ └── cbe6e7a238ae5b2c9a4be3b2878e7515.ttl │ │ ├── cc │ │ │ ├── cc0ee0f08d865ef98b9edf426a381556.ttl │ │ │ ├── cc189e798c185a9fab6ffd0989b6a6b9.ttl │ │ │ ├── cc7bd8dc72915167bce3c776772fec53.ttl │ │ │ ├── cca64d6790a958a48b094abf8a18b294.ttl │ │ │ ├── ccaffc26b49e5a1b875580c7b88582e6.ttl │ │ │ ├── cce004b28f9d5fb380e70e311e94f183.ttl │ │ │ └── ccedf0981cdb56c2b9aac6ccd9f63c0f.ttl │ │ ├── cd │ │ │ ├── cd132a6e29f35bb09f4516c254f985e3.ttl │ │ │ ├── cd239024ec6155bbb315e3a3f5b341fa.ttl │ │ │ ├── cd284fb2712c5f7dbc361ba1113c65a8.ttl │ │ │ ├── cd4292e3c1025326bd3968d06ee7403d.ttl │ │ │ ├── cd44dc570306525a8975d40cf811834c.ttl │ │ │ ├── cd78f93e28f358f78a1361c4aaf62b2d.ttl │ │ │ ├── cda17b42cdcd5657b503c9e939af5956.ttl │ │ │ ├── cdc532b2575d5895884c216e938ff286.ttl │ │ │ └── cde8bcbdf69f5193b80796e8ee7be301.ttl │ │ ├── ce │ │ │ ├── ce12a09b589d5306a3cf4f1ff83d7e01.ttl │ │ │ ├── ce2311a9998c5d099e7610c61da829ef.ttl │ │ │ ├── ce289ede5f71515cbe3444b9ae7cbc6d.ttl │ │ │ ├── ce372558b376589181e50f186af8c8de.ttl │ │ │ ├── ceb83a9bcc485422ab736ede3cf6827f.ttl │ │ │ ├── cec2cd2ad1cc53e58ecbc747cfbe5050.ttl │ │ │ ├── cecb7c0a3d6f51439e75d240114c8d02.ttl │ │ │ ├── cee0904dfca458f79ee1ac45e61ac5ac.ttl │ │ │ ├── cee28033976f59bc9d8f60be34a60543.ttl │ │ │ ├── cee4ab15e5aa55039f17aa7fc3920911.ttl │ │ │ ├── cef538d8c84451c18b19eb94d6ca3dd0.ttl │ │ │ ├── cefd7a77b72357d2a1543e4f3eaaed60.ttl │ │ │ └── cefe903246025453a2fe469e511edffb.ttl │ │ ├── cf │ │ │ ├── cf06c6e2e5a755e8b9dba784e33db929.ttl │ │ │ ├── cf469336452352a8a5c19a81349a1f66.ttl │ │ │ ├── cfe42df2b10954efb6b841fb91951308.ttl │ │ │ └── cff25a10b2fc53cb82c31fa056e9cf69.ttl │ │ ├── d0 │ │ │ ├── d0042af6e4d855eba2bd2a7b51727dae.ttl │ │ │ ├── d06042fe192654fc81738959716379b2.ttl │ │ │ ├── d0702026d41a50bea8c466d3fe9cd8ef.ttl │ │ │ ├── d08abf24ce045c75ad8a3d56441dbf58.ttl │ │ │ ├── d0943f463b295f97a46ceb3a1fbc7e7c.ttl │ │ │ ├── d0ae19e7f9305706b96a01b80c47f992.ttl │ │ │ └── d0eac6ed35c95db8a5d90c8546f9599d.ttl │ │ ├── d1 │ │ │ ├── d123a732ef2d513a8d8edf359fdf1165.ttl │ │ │ ├── d14b727fbb8a5b8db08af42305015943.ttl │ │ │ ├── d16461335806504e8d32617ac793cd50.ttl │ │ │ ├── d164d354c6ff535181d009366a227fbb.ttl │ │ │ ├── d18c04c2b58f578c9f1f42fb109cdefa.ttl │ │ │ ├── d1a358fee4c5587d8e580b41507ad6bc.ttl │ │ │ ├── d1b788443d495edba22928b7a0fae646.ttl │ │ │ └── d1faf58a7a965c62a6058cdbff23f326.ttl │ │ ├── d2 │ │ │ ├── d21f981baf58588fa1127c67e0597e49.ttl │ │ │ ├── d2545640cf2754168101636860cd970e.ttl │ │ │ ├── d276ef17b05a5bf9a8a6addd49746b68.ttl │ │ │ ├── d2932633702557508d8fddf279ba6b74.ttl │ │ │ ├── d2bf7035b37c57878f249748f6f4e4d1.ttl │ │ │ ├── d2cd60f4d9585efbbc7a6e1847e0e39f.ttl │ │ │ └── d2f1aa8b571e5e76add96705c2e2ae2d.ttl │ │ ├── d3 │ │ │ ├── d322311e247659dcb24c7acd07f0615c.ttl │ │ │ ├── d324f5ede8945e958549b12c66f6f6a8.ttl │ │ │ ├── d38635f58c9e58d5b52ba38cdb788b98.ttl │ │ │ ├── d39f4fd11d6857189b9566d6ae984f0a.ttl │ │ │ └── d3fda77a7edf5dd996923d4ac6e0a29c.ttl │ │ ├── d4 │ │ │ ├── d4239511612c55139c6422185984f1c2.ttl │ │ │ ├── d46fb20e303b55d597baf31393073690.ttl │ │ │ ├── d4945251e57650a39e1a02337cd87646.ttl │ │ │ ├── d49d299fa0555f00b7a7a43d2fe6c062.ttl │ │ │ ├── d4d9ccadccb1504a84afdb05c455b12b.ttl │ │ │ └── d4eed1cec56f523db31eca4a595579a8.ttl │ │ ├── d5 │ │ │ ├── d532fa5665415adfa67a0166a5875100.ttl │ │ │ ├── d5be17a45f945b74b75543dc26cd1f77.ttl │ │ │ ├── d5c21eca41c95ba083e038718c8558f8.ttl │ │ │ ├── d5d28ccb052c57bb938e77ec63803920.ttl │ │ │ └── d5de9e48a8e651daafd8ca1571ff1ce6.ttl │ │ ├── d6 │ │ │ ├── d62c009db2a7585fa4978d48f30c7713.ttl │ │ │ ├── d63f754469ce59aab60476a369a3d65b.ttl │ │ │ ├── d68e65ef20535de88db106edb4cf75ce.ttl │ │ │ ├── d69ba69e2d295c6fa83d3cc53a16ba01.ttl │ │ │ └── d6f82709cfb154fa949ac5880e3214b3.ttl │ │ ├── d7 │ │ │ ├── d77906a8b8ba535b94c3ff313cb26048.ttl │ │ │ ├── d786f9fc06b55047912a1673f0af9840.ttl │ │ │ ├── d79dc85419315f29b3a9e3aa3a6e4aae.ttl │ │ │ └── d7a05441bccf5260ba0d3039023fd6f4.ttl │ │ ├── d8 │ │ │ ├── d80b92aa89105d18a0f09acc9361bf19.ttl │ │ │ ├── d80c5d34e8805a069332620ece636db6.ttl │ │ │ ├── d80ff7632f4858d0afd404417f597e81.ttl │ │ │ ├── d82abb0379fb5b9584006a6303a28aca.ttl │ │ │ ├── d83dea6dc394500a91810f6cc9345c57.ttl │ │ │ ├── d8bd7e3835b6507fae8aea2dae48116a.ttl │ │ │ ├── d8d126997f365cb6871a281aa718a97b.ttl │ │ │ └── d8ed652c7ec55defadc9408b71a2f8c9.ttl │ │ ├── d9 │ │ │ ├── d917501e4a3c53a49c3715942a3f37d9.ttl │ │ │ ├── d923c5bdac2750a0b49bbc3603ef7783.ttl │ │ │ ├── d92e802941a15f5fac2f40777332d533.ttl │ │ │ ├── d958340b89e85c1aa21e1e721265eca6.ttl │ │ │ ├── d95f024f45685975826459b738ed8cb3.ttl │ │ │ ├── d965ac745e4852eab5c3fa5390ab5d16.ttl │ │ │ ├── d9cd89a40de35f169519d64084e0714a.ttl │ │ │ └── d9f4acc663d35e63875ac9243b539b49.ttl │ │ ├── da │ │ │ ├── da23e8eaf5615bb2b3f6ecca4d0333fc.ttl │ │ │ ├── da25688bd0a05fd68c2ed693066e99d6.ttl │ │ │ ├── da6dc9a252b859a49366d70fad3ef5e7.ttl │ │ │ └── daf78119ea4054e199d12115dccc1300.ttl │ │ ├── db │ │ │ ├── db082d4e8d5e5e2b93c1e007b74fd543.ttl │ │ │ ├── db0aaf8abda9564d850dee2b1dc877f3.ttl │ │ │ ├── db0c625817ee57548c272920ca3e99a1.ttl │ │ │ ├── db145fbe9c2553cdb1cb58daa8f08fa7.ttl │ │ │ ├── db92516905ac55fc9156ffb9b4f17cfc.ttl │ │ │ ├── dbba6e1b1e1d5edb8cf169d42bba289f.ttl │ │ │ └── dbf3683f040f57b8bbe3a8951620d00a.ttl │ │ ├── dc │ │ │ ├── dc049f1675c7559192a205cf7d039d96.ttl │ │ │ ├── dc157d23d55059df8c288d5db0c3d93f.ttl │ │ │ ├── dc1aae6d86e6593daf6c88ed76ddb321.ttl │ │ │ ├── dc6073639ebe5d52b675cc76d7005d8c.ttl │ │ │ ├── dca59d4c7fbc5a69bea4ae6c2c4ee279.ttl │ │ │ ├── dcbb3dce3bcd565eb80a8b5baf8f0e66.ttl │ │ │ ├── dcc4637b2466561da4d6e51500f01d19.ttl │ │ │ └── dcdabde734415889beec4fdb716b576c.ttl │ │ ├── dd │ │ │ ├── dd1a01044bbd5b48b8059eb4203bee81.ttl │ │ │ ├── dd1e5d0fb7825e70a3d60d4f20c94373.ttl │ │ │ ├── dd2c6455e05b53b9b3a6afbe644cc38c.ttl │ │ │ ├── dd2ef23520835193815e5e26f670deb0.ttl │ │ │ ├── dd7ab714a93154efb697a6135741f35b.ttl │ │ │ ├── ddccb25453375da9ab5c6b5f82dbbede.ttl │ │ │ ├── dde3946d2c4b5f4b954152e171123d7d.ttl │ │ │ ├── ddf71fe07c805610816279bdd6b49aa5.ttl │ │ │ └── ddfb4d97f4d55180a816b734124ed742.ttl │ │ ├── de │ │ │ ├── de4b7935677855f48e58b68e2290a2f0.ttl │ │ │ ├── decb4c17a18b5320bcb860d264bf67a1.ttl │ │ │ ├── ded1743345b755349434f18479b2f64f.ttl │ │ │ └── deeffdeb071b5c2cb12c9d03c49e55df.ttl │ │ ├── df │ │ │ ├── df51d499a8895cbdbb95ab2b8e119dcb.ttl │ │ │ ├── df599132f66b5f528f3c746d578e70c2.ttl │ │ │ ├── df61da2589b25f25bf42adf8ce9b1c59.ttl │ │ │ ├── df6a8a1d6176507d964ae00365365e61.ttl │ │ │ ├── df88d83495525b3aae84431652ce45c3.ttl │ │ │ ├── df91791404ca5ba8b453f3395fca9bc5.ttl │ │ │ ├── dfa0b5b0154d5dd9bfea49476815daf6.ttl │ │ │ └── dfa542caf9c950ccb216a6ecd37c05bd.ttl │ │ ├── e0 │ │ │ ├── e00c2a79735f5ff8a285ef402ae9e1c1.ttl │ │ │ ├── e00f6ea035df56c7bb2ac232250a6c6f.ttl │ │ │ ├── e03df0ca2cf052d49cf50bd5a4b21855.ttl │ │ │ ├── e069c186edfa5e27ad2a96bb3f315b9e.ttl │ │ │ ├── e0707f054e81536fa3244bdce794bc6d.ttl │ │ │ ├── e0777b398eed5f5dbcb5d095b873d249.ttl │ │ │ └── e077f610942054478729c89585ed9ab0.ttl │ │ ├── e1 │ │ │ ├── e131ca22a37c5aad857091e2fc95c4e4.ttl │ │ │ ├── e13d436cb0155dc180b01b858afe99df.ttl │ │ │ ├── e171d6e314a55cb08e85c85901f06a75.ttl │ │ │ ├── e190ce7ab2e652e8a96d0715681ec86c.ttl │ │ │ ├── e1ebf45fd3895b5d8cbd648dbba21275.ttl │ │ │ └── e1f87468d3125fbea98e2ca0cb6dd3de.ttl │ │ ├── e2 │ │ │ ├── e217919b14b05a17b6883a0c5602201e.ttl │ │ │ ├── e232d2fde34151f19b3bf3e7d4955b0d.ttl │ │ │ ├── e243ae14d43a5303a70a9ca6b2a631f7.ttl │ │ │ ├── e24d020480b15931a7b3d4208949ac6b.ttl │ │ │ ├── e2667bfae9eb512fbadb74a83012bf74.ttl │ │ │ ├── e285483cfc6f5f7fbbff3fbae3f68ece.ttl │ │ │ ├── e2ba23adfd19524a90856cd154669d15.ttl │ │ │ └── e2bffb1da4fe5863b5fd736958b8ef05.ttl │ │ ├── e3 │ │ │ ├── e312ccdbd2ed5741b225a1a8951ac459.ttl │ │ │ ├── e3419412b3d6552a977724ede5e99a94.ttl │ │ │ ├── e34a0955a7355079aa7b643f472f0160.ttl │ │ │ ├── e3798c687f145caeba82c0998c36084e.ttl │ │ │ ├── e385d6ff42085d0c8b8e8f70dfd3fb67.ttl │ │ │ ├── e3aa03f4e069514ea520a03b702fca49.ttl │ │ │ ├── e3c6ef11abe752bdbd8d19b94cf88b52.ttl │ │ │ └── e3cd47c86110518884b5cec38501eb37.ttl │ │ ├── e4 │ │ │ ├── e412cebd0e115d22862d4403fb8cf772.ttl │ │ │ ├── e417ba786eb958498dac16926bcdd0f5.ttl │ │ │ ├── e457496423af5544b41fc4660caed6bd.ttl │ │ │ ├── e4650714136c50a4a0d2e2d3caf9269a.ttl │ │ │ ├── e4a22daf417050d98415d258fca522bf.ttl │ │ │ ├── e4b88ce646785e1985eac86fe0b41cf4.ttl │ │ │ ├── e4c5c1a2a9525ae885ea745a9b15bf95.ttl │ │ │ └── e4f6b8f89fd751b4aa802aa960783d00.ttl │ │ ├── e5 │ │ │ ├── e52125260cc2517cbdd2279950462e56.ttl │ │ │ ├── e523e17fee2558319c402ea818acd3d5.ttl │ │ │ ├── e5251fe955905d2595c80b66d04a0347.ttl │ │ │ ├── e52f37af735c5691871148e27f3009b8.ttl │ │ │ ├── e534c9e091e35ded9d188115382be006.ttl │ │ │ ├── e56d84000da4510b99e5466b2e2a119c.ttl │ │ │ ├── e5845e82902152c38d4caa4765cfb1c1.ttl │ │ │ ├── e5af8a1ead775685b7edfd56d0d6f1fe.ttl │ │ │ ├── e5e1d172f9735b449d12092daf909500.ttl │ │ │ ├── e5e8c938fc8d5c7d8c2118b60b0c7740.ttl │ │ │ └── e5edd89ffcf450a38bf4cdfc9c7bcf32.ttl │ │ ├── e6 │ │ │ ├── e6109d0a98305514becaab6214c1d62c.ttl │ │ │ ├── e61a6674f74351858a8e7f8f56b6c3e7.ttl │ │ │ ├── e62462c6e7105db08eca624cb604fec9.ttl │ │ │ ├── e62fc24ccaef584980aa8f39e391f8d9.ttl │ │ │ ├── e68507c1fbd15663ba59cfecdb511e5a.ttl │ │ │ ├── e69638529ce5595db718efbf43e65b87.ttl │ │ │ ├── e69802434cb55dc383438b2dcf80b54c.ttl │ │ │ ├── e6d18d8deddf54da9219e956b95e664e.ttl │ │ │ └── e6e4d547fc0d56c0ab3513b8d23a1b35.ttl │ │ ├── e7 │ │ │ ├── e704ad3902cb509b97ea483ac37a5296.ttl │ │ │ ├── e7441a6e2b0b5053aeac8fa92ab6883c.ttl │ │ │ ├── e74c3ac12db75eb588363ceaab11fbc0.ttl │ │ │ ├── e7676892cc565b28a9ba88970c65d8e6.ttl │ │ │ ├── e78ce5c9495c5e879cba4fe67af165e7.ttl │ │ │ ├── e79bd7876fdf512fbfa26204cee36b2a.ttl │ │ │ ├── e79e55610dce570ca14a7183a70cb0c6.ttl │ │ │ └── e7de4174f6075c0aaeefbc92887948a4.ttl │ │ ├── e8 │ │ │ ├── e80426830e0e5fdaa79bf4c8af9c8c6b.ttl │ │ │ ├── e8d084a0185457ae98b2a8171e49cd79.ttl │ │ │ ├── e8dac264dce85722ab734062856373e9.ttl │ │ │ ├── e8ed6d8bf0f55bddb92cafead083187e.ttl │ │ │ └── e8fa0be127095976b08d7a5188f7240f.ttl │ │ ├── e9 │ │ │ ├── e902d3bdb1c450cca7d41feea4f6de3f.ttl │ │ │ ├── e91a99774b205274b0bc04c940d2a0ae.ttl │ │ │ ├── e92cebc11f6657d6bece966f3831d09d.ttl │ │ │ ├── e954c65e936c534c99145ea873da2da2.ttl │ │ │ ├── e95b151d42f359aa989909c4f2307ec8.ttl │ │ │ ├── e96bc939fdb95a6fa0b0f5ca132c8be5.ttl │ │ │ ├── e9a2a91606e853d4bda8b266257689fc.ttl │ │ │ ├── e9bd7fa4a42f5d10a9faefb2e83f2625.ttl │ │ │ └── e9f04c6d7d475e82a6d8b1c1a93d4c8c.ttl │ │ ├── ea │ │ │ ├── ea268890f9a3529594ee268dad5e8328.ttl │ │ │ ├── ea3b8a85890a54cfa76f965921203e57.ttl │ │ │ ├── ea6a1b9bab2b5e998e08709b55fd668c.ttl │ │ │ ├── ea7255bfa0fb54359b7f30916ebe4827.ttl │ │ │ ├── ea77287f8e7a5c719b2d4bb82478e90f.ttl │ │ │ ├── ea7bc70fdebe5fe38d8bcb68034bf8c2.ttl │ │ │ ├── eab1cc1a2ab4557cba728dd720dbd1c2.ttl │ │ │ ├── eabe795f1ac55d1882b2c97615cc9a07.ttl │ │ │ └── eaeb6f329f925760bc62f868f525a8f0.ttl │ │ ├── eb │ │ │ ├── eb3199e0d63e59209a4c065be06be86b.ttl │ │ │ ├── eb3c56cd0a395f829f8948c4dfae09c6.ttl │ │ │ ├── eb77b078630a515b9b3dd5a01a283a9b.ttl │ │ │ ├── ebdc45fded535ac89ecaa8b3d8fa466b.ttl │ │ │ ├── ebdf551ed4105652a79fe08c0589ee92.ttl │ │ │ └── ebf2b7f17af75f4db0a346074683a486.ttl │ │ ├── ec │ │ │ ├── ec05bc93722e58f7928980e3dbae8481.ttl │ │ │ ├── ec176e65490a54e48cf64773b45d6323.ttl │ │ │ ├── ec1ab9506f8f5d8e80e764c800d8ee9a.ttl │ │ │ ├── ec27433c79db5476b3b3e3e1dcb0d09e.ttl │ │ │ ├── ec2da9da42ce529da33eb0a07ac51402.ttl │ │ │ ├── ec52cb5a10285e3298b9d77bd55c55a0.ttl │ │ │ ├── ec6f6f1f9fb553699017f7160b3d3c65.ttl │ │ │ ├── ec7a6b9faa6558038e6e3f4348953a96.ttl │ │ │ ├── ec7faf30504d5069900575eddd634874.ttl │ │ │ ├── ec996813e4be5384abe5d8cd00e24692.ttl │ │ │ ├── ecba16aa35c75518ae3794e3656e8e72.ttl │ │ │ ├── ecc669a88f7d52a9a7c6af22c945aa24.ttl │ │ │ ├── eccec14ddc7b52539b0780f3b687424b.ttl │ │ │ ├── ecd6d5dee0df56368df9b326c570e92e.ttl │ │ │ └── ecfe8e114f5d577aab8ec32e694745fc.ttl │ │ ├── ed │ │ │ ├── ed42cf5224c35461b731ddb2785e314b.ttl │ │ │ ├── ed91fd94fa6b5b33bcc543d41bccc6c3.ttl │ │ │ ├── eda5a9a5e5f352ef87ba22415ea189b6.ttl │ │ │ ├── edc2672afc155579895e97cc9ad5d15d.ttl │ │ │ ├── eddca97f77c65d3ca678c4ade358a57e.ttl │ │ │ ├── eddde6272be45d65966c892e9210d34d.ttl │ │ │ └── ede348935f1c535680f4714ebdec1a0f.ttl │ │ ├── ee │ │ │ ├── ee0e4381cf1551d089fbb2157e9526e9.ttl │ │ │ ├── ee76db7837e45ad2b2114fcb00074feb.ttl │ │ │ ├── ee81d6a50636585d94181fda6ccb1270.ttl │ │ │ ├── ee839da601005393b7b0a8bcd3b9f75f.ttl │ │ │ ├── ee976b90fb765abd82f688ae11bcf466.ttl │ │ │ ├── ee9bace8702d5b138ec60232ef4026a8.ttl │ │ │ ├── eeb970baf70e52acbd4b55a5ea179bf1.ttl │ │ │ ├── eebfb5ae3a3656149b474e341ba87012.ttl │ │ │ ├── eec5009c291b502f886bc22d0eae2a3b.ttl │ │ │ ├── eece8cf34e2c52249caf2ec5f6accfe7.ttl │ │ │ ├── eee4c735967055ceb082ce8c091604ec.ttl │ │ │ ├── eef4bec49cf6539788bd1e9f2b4ac57f.ttl │ │ │ └── eef73e89e4875a8b8ae9f75b6f236843.ttl │ │ ├── ef │ │ │ ├── ef037a52a7805314b092b5150534114d.ttl │ │ │ ├── ef08dcbec63a516e80e51ef4bd72088b.ttl │ │ │ ├── ef1bef299e965afa8e4d7b8748cc8ec3.ttl │ │ │ ├── ef3cabd644b15860a4035dbeb7abafc7.ttl │ │ │ ├── ef3e8a0f1fd751eda7790942fe3c13ad.ttl │ │ │ ├── ef503fef8e74543d9ce9031eb6063303.ttl │ │ │ ├── ef64f6671ea95bfb8a1295f509631d20.ttl │ │ │ ├── ef854684f1975266abe15309593d2aee.ttl │ │ │ ├── efa7cdcfc3b35d929e2204d36aa1fabe.ttl │ │ │ ├── efd42667a2655d5792d4c1568812d78d.ttl │ │ │ └── efeb7a3b3cf55118a4a5572b11f4771e.ttl │ │ ├── f0 │ │ │ ├── f0091fa0dabb5b8cbaee356114c19785.ttl │ │ │ ├── f011ee0b846b5017900e11cfdd37c4b6.ttl │ │ │ ├── f017523626975d28a5ea01af6d7ab470.ttl │ │ │ ├── f01a6377742355558111d902a89f4020.ttl │ │ │ ├── f04a2465e61c59b89d491b6bc809353a.ttl │ │ │ └── f0579377cb7852638676e44c4bc6e34f.ttl │ │ ├── f1 │ │ │ ├── f10f43ac56335fa19dd231e929b330dd.ttl │ │ │ ├── f11f90d878c65305a2f90652db427d4f.ttl │ │ │ ├── f11fc31600d5568fa2664b09ce07e6a1.ttl │ │ │ ├── f1379bcc63955bfc890c55f04127178a.ttl │ │ │ ├── f1552f8ea6b25aafb8bea193334e6db8.ttl │ │ │ ├── f16fdb7a38b15dd6b81bf9105475be44.ttl │ │ │ ├── f1857210b0ef5096b384e371b0c34b2e.ttl │ │ │ ├── f1b80cad4ff15c3ba0eeea527efcfa1a.ttl │ │ │ ├── f1b82baef7ec5a77a78219893de0907f.ttl │ │ │ ├── f1d7d925ab7b5a04b968387d80fc6026.ttl │ │ │ └── f1e59c5168f758a0ae502fd60a4fb868.ttl │ │ ├── f2 │ │ │ ├── f213ed70e3455ee980f6c83b74406584.ttl │ │ │ ├── f21c53df8a9a5c72a91195729c9a5688.ttl │ │ │ ├── f22483b69ca75cda94660e74c00c368d.ttl │ │ │ ├── f2435f16130b5dcd828b3094783c8616.ttl │ │ │ ├── f25786b4be7d5aa191770fca50bf3805.ttl │ │ │ ├── f25c412ef4bd53209022bb3895fb5fd7.ttl │ │ │ ├── f28b90d7b0af53ce8aaa7201bdf0411b.ttl │ │ │ ├── f29e30cbf7b5534a888fb2dba342de0e.ttl │ │ │ ├── f2ac912e1e845b7eabe0b70b90856805.ttl │ │ │ ├── f2aca62b1a825722a36ef047062e1dfe.ttl │ │ │ ├── f2ae2f1849085dfab6f685722e2cf4ef.ttl │ │ │ ├── f2e294476cf859cb80899a455fbe9d8a.ttl │ │ │ ├── f2f5959f646251e0a13e3cbd1994e36a.ttl │ │ │ └── f2ffebb4f2045d529fe04d8d90b929b6.ttl │ │ ├── f3 │ │ │ ├── f33d2fbcfad55654a06fadbf01a985f4.ttl │ │ │ ├── f364abf044f456b0b798e4600e8418b0.ttl │ │ │ ├── f3afe1293cbe5c5fb868363693eeed85.ttl │ │ │ ├── f3b4e8d59c8f521094be84c1799759a7.ttl │ │ │ ├── f3c7697c8fd356058a12b0ba901e9b54.ttl │ │ │ ├── f3e4fac2eddd5077977aed98b3164c35.ttl │ │ │ └── f3e536810c6151d7a50556ab694fda94.ttl │ │ ├── f4 │ │ │ ├── f41f37f40e8c5c23865b7063c9f6351e.ttl │ │ │ ├── f42b7354d1a6586a8fc27dc3ab000390.ttl │ │ │ ├── f4569ac26890514a99468ac2f346deee.ttl │ │ │ └── f4b8c71c3f555f168a1781abeddee2a4.ttl │ │ ├── f5 │ │ │ ├── f533a91f345e5c4a826bdd6745b4a5e9.ttl │ │ │ ├── f535d98b5c4f5b56802823227cf678c7.ttl │ │ │ ├── f5621fd158a65cc1bea23dde48e3d400.ttl │ │ │ ├── f5b66b7695a259c38d85d0aa48fe809f.ttl │ │ │ ├── f5b7bc29d1f15666b0eb2e3620c14599.ttl │ │ │ └── f5f9a90736df58bfa81ac1321533f2d3.ttl │ │ ├── f6 │ │ │ ├── f612ee8f196f53e68ac27f44e13b70a2.ttl │ │ │ ├── f6341b63a339577fae9201f985febbf5.ttl │ │ │ ├── f642ba4489295e8cbf2da17dde35c70d.ttl │ │ │ ├── f67e2cc5c624598c854ef4cbd7c78a17.ttl │ │ │ ├── f69e6bb1db4853eab6a285628d05b8f0.ttl │ │ │ ├── f6ed7cede6b656e99e0b6d34aafb7b0d.ttl │ │ │ └── f6f90f18a1e5553f8cca09b298eeac2b.ttl │ │ ├── f7 │ │ │ ├── f70a141debea506194d47f98b6a1c6de.ttl │ │ │ ├── f71151391f00525a9212fa491dda9ea5.ttl │ │ │ ├── f7479b8bd12858028feaa733ba9bec10.ttl │ │ │ ├── f7643ff77fe85162bbbb72b7781dff93.ttl │ │ │ ├── f798ad3181275621b7cc9bc25a2ffc06.ttl │ │ │ ├── f7a50e7090655064a3f10060f9d380f6.ttl │ │ │ ├── f7af27f731bd511c8c521359e92b612e.ttl │ │ │ └── f7b5cdbd7ea559ee92b80ed5a5d2a3b4.ttl │ │ ├── f8 │ │ │ ├── f81e74ae6a57515284359f50feabd0ca.ttl │ │ │ ├── f84c7882ea6c5d1e960543c8fe78b68d.ttl │ │ │ ├── f84ebb0e5fd2508ca0d06e5fdf3d3990.ttl │ │ │ ├── f852e5609dfd564da4ddaddcf35821c9.ttl │ │ │ ├── f877af6d2f3553c4ac86dbc6f00716d1.ttl │ │ │ ├── f8784b6ca5a25086b834522c2c2c1398.ttl │ │ │ └── f8f3bfce6db35dcc89a3f4fcd7d57cad.ttl │ │ ├── f9 │ │ │ ├── f93c8327ce105d5d88be263a9d01a39f.ttl │ │ │ ├── f987f3e646ce5616b35e274529a86904.ttl │ │ │ ├── f990c03487a555b686ed4de6fe3e1ccf.ttl │ │ │ ├── f9925abb641850a29a589409f95541d8.ttl │ │ │ ├── f9c4ef3df0e55bdeaa28a04b1d262ba2.ttl │ │ │ ├── f9cfea2dedd759779fa20b8b9ea3f5b0.ttl │ │ │ ├── f9dc608d44dd5e5fa4d017a3918aa96f.ttl │ │ │ ├── f9e3def388655d7f89a4371f838743ce.ttl │ │ │ └── f9edc72a466b5db4bf4cd6ebb18cdcf0.ttl │ │ ├── fa │ │ │ ├── fa09fd8dd0835eb684a0146f7a894362.ttl │ │ │ ├── fa1c106cb81452b69dde0721b9761a7a.ttl │ │ │ ├── fa4d8fe91af751ff90d91d0513b7446a.ttl │ │ │ ├── fa6c1a09f2e85b4c890f0b11556affad.ttl │ │ │ ├── fa90d5efa5c25619adc5ccc6c035f803.ttl │ │ │ ├── faa656e111d359a0ae242ddc58ee8887.ttl │ │ │ ├── fab9e3b8136a5400a81609b28984c35e.ttl │ │ │ ├── fae3a1ae235c5b45b48eb8328c91dfaf.ttl │ │ │ └── fafd774064f5592c867c1c67f6336765.ttl │ │ ├── fb │ │ │ ├── fb010c53a99b5910a3afc36bc6dee6f9.ttl │ │ │ ├── fb3b31d133e250af89cc3cfbdc83b0e2.ttl │ │ │ ├── fb467ec5c8ab5ef08b6a0ba0f57c4107.ttl │ │ │ ├── fb4cb99555c759ed965ab5f2b7ab9e1a.ttl │ │ │ ├── fb8b0b8cdf49504ea5ad104474126452.ttl │ │ │ ├── fba06d70c18c557a8c04a84f8e1aa0b9.ttl │ │ │ ├── fbcd43281994586ca071e1f663c323d2.ttl │ │ │ ├── fbdacac509a45b88a828eb4da08f51d3.ttl │ │ │ ├── fbee597b040c5b29af9585f46c9e5720.ttl │ │ │ └── fbf4c486e3c25d12982292dcffcff3e4.ttl │ │ ├── fc │ │ │ ├── fc2187980d125b33b4372acdd6c521ab.ttl │ │ │ ├── fc28fe9c5ce7548d967b2473502cb237.ttl │ │ │ ├── fc32afbddf2c54bd9ae0f17d19fe2322.ttl │ │ │ ├── fc6824326a12509694fb1c5bc91b81de.ttl │ │ │ ├── fc93e6d0a8eb560aa7700723f588554e.ttl │ │ │ ├── fc9b69de10fd5d80b902ebdf4389d505.ttl │ │ │ ├── fcdf00c04c985c69bab691944eb36c8f.ttl │ │ │ ├── fce2febedc9e55a88b94be5af8bd6186.ttl │ │ │ ├── fcf0288b13e25cf18816173c16056e1c.ttl │ │ │ ├── fcf9a15e57b459e0a29558d1f29a63de.ttl │ │ │ └── fcfbbd20be0f58d1be84a3940ec75847.ttl │ │ ├── fd │ │ │ ├── fd235fbb91b159c4aa8ac92d70496c68.ttl │ │ │ ├── fd5299e7c3705390a11ebeff7ef10fd0.ttl │ │ │ ├── fd685695ee36547f965ff13a45f8827c.ttl │ │ │ ├── fd74841e75d85a74bc2324933ce0d024.ttl │ │ │ ├── fd8e5ca6da7d53158c7a876a3c6e99bb.ttl │ │ │ ├── fda514e4c81f5184b384eabfab057fc5.ttl │ │ │ ├── fdb1583d8f2452aa80c4be5394f884f7.ttl │ │ │ ├── fdc1bf53e86555eb93384bfdfeb61554.ttl │ │ │ ├── fde3423b9c6d53d7ac20fbb5c6a7ad23.ttl │ │ │ └── fdf61260385757ea8c807d26432d5a18.ttl │ │ ├── fe │ │ │ ├── fe5b476d4f8859c5ab29a4f9e92d0674.ttl │ │ │ ├── fe661765d12359b6908e5d1498752866.ttl │ │ │ ├── fe6ea7d6112e5cfe8e47cd962751b064.ttl │ │ │ ├── fe7b7d60250d5cc1a2965461cb7c76de.ttl │ │ │ ├── fe7da6d756db57bdbc3f390cb2ac8384.ttl │ │ │ └── fe94e60cd26a591681e66027f09d4cb5.ttl │ │ └── ff │ │ │ ├── ff03b45c17835f458da9cf47a5244b30.ttl │ │ │ ├── ff1719b1557153538b0bb65b2cf9680e.ttl │ │ │ ├── ff1e04317f3450f4bb2853883f0ca541.ttl │ │ │ ├── ff4126bc40be531cacb749ea8d971823.ttl │ │ │ ├── ff614d5047245e22b953256496a8bd7e.ttl │ │ │ ├── ff67946736d1549f97952a838438e394.ttl │ │ │ ├── ff68169ac01b52f1bbc6d11a99e13208.ttl │ │ │ ├── ff833a659d995958a0de0f64ae900a2f.ttl │ │ │ ├── ff9ff663a0c15403a487656a8d7ce307.ttl │ │ │ ├── ffb34c9d4a355f17b90104767cf99c57.ttl │ │ │ ├── ffca3cda06ea56b593d9a5903c6b3a71.ttl │ │ │ ├── ffde396b3c6a5af9802d77caf9a67771.ttl │ │ │ ├── ffe35e827e6b5ff89486eca8db650178.ttl │ │ │ └── fffac03f982e5c7f9f3af185ee62f112.ttl │ └── tspindler.de │ │ ├── 62 │ │ └── 62d88210ce215b8da0654e4b5af5de2a.ttl │ │ ├── 97 │ │ └── 9703d127bfe0523a9aed9cfd4474dd9c.ttl │ │ ├── 2c │ │ └── 2cca9683e923589b9308ecbdeeba6f4b.ttl │ │ └── 5f │ │ └── 5f411a3f32b45a8e9749ba5aa25221a1.ttl ├── GraphTests.Misc.cs ├── GraphTests.Samples.cs ├── GraphTests.Telparia.cs ├── GraphTests.cs ├── README.md ├── SFI.Tests.csproj ├── Samples │ ├── lnk │ │ ├── ExpandedVariables.lnk │ │ ├── ProgramFiles(x86).lnk │ │ └── notepad.exe.lnk │ ├── rdfxml │ │ └── rdf.xml │ ├── url │ │ └── Google.url │ └── zip │ │ └── example.zip ├── StorageLinkedNode.cs ├── UnitTests │ ├── BitmapDataStreamTests.cs │ ├── ChannelStreamTests.cs │ ├── ChannelXmlReaderTests.cs │ ├── DataToolsTests.cs │ ├── DirectoryToolsTests.cs │ ├── ExtensionsTests.cs │ ├── TextToolsTests.cs │ ├── UriToolsTests.cs │ └── XmlExtensionsTests.cs ├── UriCache.cs └── ValueUri.cs ├── SFI.WebApp ├── App.razor ├── BlobArrayStream.cs ├── BrowserFileInfo.cs ├── ClipboardStream.cs ├── EventWriter.cs ├── Pages │ └── Index.razor ├── Program.cs ├── Properties │ ├── PublishProfiles │ │ ├── net6.0.pubxml │ │ └── net8.0.pubxml │ └── launchSettings.json ├── README.md ├── SFI.WebApp.csproj ├── Shared │ ├── MainLayout.razor │ ├── MainLayout.razor.css │ ├── NavMenu.razor │ └── NavMenu.razor.css ├── WebEnvironment.cs ├── WebInspector.cs ├── _Imports.razor └── wwwroot │ ├── css │ ├── app.css │ ├── bootstrap │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.css.map │ └── open-iconic │ │ ├── FONT-LICENSE │ │ ├── ICON-LICENSE │ │ ├── README.md │ │ └── font │ │ ├── css │ │ └── open-iconic-bootstrap.min.css │ │ └── fonts │ │ ├── open-iconic.eot │ │ ├── open-iconic.otf │ │ ├── open-iconic.svg │ │ ├── open-iconic.ttf │ │ └── open-iconic.woff │ ├── favicon.ico │ ├── index.html │ └── js │ └── utils.js ├── SFI.sln ├── SFI ├── Analyzers │ ├── DataAnalyzer.cs │ ├── DataObjectAnalyzer.cs │ ├── ExceptionAnalyzer.cs │ ├── ExtensionObjectAnalyzer.cs │ ├── FileAnalyzer.cs │ ├── FormatObjectAnalyzer.cs │ ├── MediaObjectAnalyzer.cs │ ├── MediaTypeAnalyzer.cs │ └── PathObjectAnalyzer.cs ├── CHANGELOG.txt ├── ComponentCollectionAttribute.cs ├── DataTools.cs ├── DirectoryTools.cs ├── DynamicExtensions.cs ├── EntityAnalyzerProvider.cs ├── FileTools.cs ├── Formats │ ├── IBinaryFileFormat.cs │ ├── IFileFormat.cs │ ├── IXmlDocumentFormat.cs │ ├── MatchContext.cs │ └── SignatureFormat.cs ├── GlobalOptions.cs ├── IResultFactory.cs ├── InternalApplicationException.cs ├── LinkedNodeExtensions.cs ├── Media │ ├── IArchiveInfo.cs │ ├── ICabinetArchive.cs │ ├── ICustomWaveFormat.cs │ └── IModule.cs ├── README.md ├── ReferenceEqualityComparer.cs ├── SFI.csproj ├── Services │ ├── DeviceFileInfo.cs │ ├── ExtensionObject.cs │ ├── IContainerAnalyzerProvider.cs │ ├── IDataObject.cs │ ├── IDirectoryInfo.cs │ ├── IDriveInfo.cs │ ├── IEncodingDetector.cs │ ├── IEntityAnalyzer.cs │ ├── IFileInfo.cs │ ├── IFileNodeInfo.cs │ ├── IFormatObject.cs │ ├── IHasFileOutput.cs │ ├── IHashAlgorithm.cs │ ├── IHashedContentUriFormatter.cs │ ├── IIdentityKey.cs │ ├── IImage.cs │ ├── ILinkedNode.cs │ ├── ILinkedNodeFactory.cs │ ├── INodeMatchProperties.cs │ ├── IStreamFactory.cs │ ├── IUriFormatter.cs │ ├── IVocabularyCache.cs │ ├── LinkedNode.cs │ ├── Namespace.cs │ └── PathObject.cs ├── Tags │ ├── ImageResourceTag.cs │ └── ImageTag.cs ├── TextTools.cs ├── Tools │ ├── BuiltInHash.cs │ ├── ClrNamespaceUriFormatter.cs │ ├── EncodedUri.cs │ ├── Extensions.cs │ ├── IO │ │ ├── BitmapDataStream.cs │ │ ├── ChannelStream.cs │ │ ├── ChannelStreamImplementations.cs │ │ └── UnmanagedMemoryRange.cs │ ├── IdentityStore.cs │ ├── ImmutableContentType.cs │ ├── SortedMultiSet.cs │ ├── SortedMultiTree.cs │ ├── StreamDataHash.cs │ └── Xml │ │ ├── BaseXmlDocument.cs │ │ ├── ChannelXmlReader.cs │ │ ├── DelegatingXmlReader.cs │ │ ├── InitialXmlReader.cs │ │ ├── SequenceXmlReader.cs │ │ ├── XmlExtensions.cs │ │ ├── XmlReaderAsyncWrapper.cs │ │ └── XmlReaderState.cs ├── UriTools.Formatters.cs ├── UriTools.cs └── Vocabulary │ ├── ClassUri.cs │ ├── Classes.cs │ ├── Common.cs │ ├── DatatypeUri.cs │ ├── Datatypes.cs │ ├── Extensions.cs │ ├── GraphUri.cs │ ├── Graphs.cs │ ├── ITermUri.cs │ ├── IndividualUri.cs │ ├── Individuals.cs │ ├── LanguageCode.cs │ ├── Properties.cs │ ├── PropertyUri.cs │ ├── UriAttribute.cs │ ├── Vocabularies.cs │ ├── VocabularyCache.cs │ └── VocabularyUri.cs ├── SFi.Formats ├── Archives │ ├── ArchiveAdapter.cs │ ├── ArchiveFormat.cs │ ├── ArchiveReaderAdapter.cs │ ├── CabinetAnalyzer.cs │ ├── GZipFormat.cs │ ├── RarFormat.cs │ ├── SevenZipFormat.cs │ ├── SharpCompressExtensions.cs │ ├── SzFormat.cs │ ├── TarFormat.cs │ └── ZipFormat.cs └── Modules │ ├── GenericModuleFormat.cs │ ├── LeReader.cs │ ├── LinearModuleFormat.cs │ ├── ModuleFormat.cs │ ├── NeReader.cs │ ├── Win16ModuleFormat.cs │ ├── Win32ResourceType.cs │ ├── WinModuleAnalyzer.cs │ ├── WinModuleFormat.cs │ ├── WinVersionAnalyzerManaged.cs │ └── WinVersionInfo.cs └── icon.png /.gitattributes: -------------------------------------------------------------------------------- 1 | *.ttl binary 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2023-2024 IS4 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /SFI.Application/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.2.2 2 | ----- 3 | 4 | - Fixed an exception when an empty file is encountered with `--only-once`. 5 | 6 | 7 | 1.2.1 8 | ----- 9 | 10 | - Buffering level can now be set to one of none, temporary (a new intermediate level), and full. 11 | - Temporary buffering (set manually or automatically when a SPARQL query is provided) prevents duplicate triples from being emitted. 12 | 13 | 14 | 1.2 15 | ----- 16 | 17 | - Single-character options are converted to their canonical form for duplicate checking and options serialization. 18 | - XML options serialization determines whether a setting should be stored as element based on its cardinality. 19 | - The `.nuget/packages` plugin source directory is added only if it exists. 20 | - Options starting with `xml` are properly encoded when serialized. 21 | - Component and property names support wildcards when assigning (but the `:` must still be fully present). 22 | - Support for `/dev/folderpicker` to open a folder browser dialog. 23 | - Individual components are not shared across collections if they are configurable. 24 | - NuGet plugins support the `nuget:?package={package}&version={version}` format. 25 | - `ObsoleteAttribute` on properties is recognized. 26 | 27 | 28 | 1.1.1 29 | ----- 30 | 31 | - Changed display order of application modes. 32 | - Added missing command-line options. 33 | -------------------------------------------------------------------------------- /SFI.Application/Plugins/IPluginResolver.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | 5 | namespace IS4.SFI.Application.Plugins 6 | { 7 | /// 8 | /// Provides support for resolving plugin identifiers. 9 | /// 10 | public interface IPluginResolver 11 | { 12 | /// 13 | /// Retrieves a new instance from its identifier. 14 | /// 15 | /// The identifier of the plugin. 16 | /// The token to cancel the operation. 17 | /// A plugin instance based on . 18 | /// The identifier could not be resolved. 19 | ValueTask GetPluginAsync(string id, CancellationToken cancellationToken); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SFI.Application/Plugins/Plugin.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | 3 | namespace IS4.SFI.Application.Plugins 4 | { 5 | /// 6 | /// Stores information about a plugin. 7 | /// 8 | public readonly struct Plugin 9 | { 10 | /// 11 | /// The main directory of the plugin. 12 | /// 13 | public IDirectoryInfo Directory { get; } 14 | 15 | /// 16 | /// The name of the entry file of the plugin. 17 | /// 18 | public string MainFile { get; } 19 | 20 | /// 21 | /// Creates a new instance of the plugin. 22 | /// 23 | /// The value of . 24 | /// The value of . 25 | public Plugin(IDirectoryInfo directory, string mainFile) 26 | { 27 | Directory = directory; 28 | MainFile = mainFile; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /SFI.Application/README.md: -------------------------------------------------------------------------------- 1 | [Semantic File Inspector](https://github.com/IS4Code/SFI/) Application 2 | ========== 3 | 4 | This is the primary project to use when wishing to run 5 | the [Semantic File Inspector](https://github.com/IS4Code/SFI/) as an embedded component. 6 | 7 | The project contains a hierarchy of classes derived from `Inspector`, capable 8 | of easily setting up the process of file format inspection. This class is inherited 9 | by `ComponentInspector`, which is capable of storing configurable collections of 10 | components, and itself inherited by `ExtensibleInspector`, adding 11 | support for plugins. 12 | 13 | When intending to use one of these classes, the user should derive from the one 14 | of them covering the user's needs, adding the desired components (such as by 15 | calling the `ComponentInspector.LoadAssembly` method), and either use 16 | the inspector by calling methods on the instance, or through the `Application` 17 | class which can be controlled using command-line arguments (see 18 | [SFI.ConsoleApp](https://github.com/IS4Code/SFI/tree/HEAD/SFI.ConsoleApp) 19 | for an example how to set up the environment). 20 | 21 | Documentation for the command-line API, configuration, and plugin mechanism, 22 | can be found in the [wiki](https://github.com/IS4Code/SFI/wiki). 23 | -------------------------------------------------------------------------------- /SFI.ComponentImportGenerator/SFI.ComponentImportGenerator.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netstandard2.0 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /SFI.ConsoleApp/ClipboardStream.cs: -------------------------------------------------------------------------------- 1 | #if WINDOWS || NETFRAMEWORK 2 | 3 | using IS4.SFI.Application.Tools; 4 | using System; 5 | using System.IO; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using System.Windows.Forms; 9 | 10 | namespace IS4.SFI.ConsoleApp 11 | { 12 | internal class ClipboardStream : MappedStream 13 | { 14 | static readonly Encoding encoding = Encoding.UTF8; 15 | 16 | protected async override ValueTask Store(ArraySegment data) 17 | { 18 | var text = encoding.GetString(data.Array!, data.Offset, data.Count); 19 | await StaThread.InvokeAsync(() => Clipboard.SetText(text, TextDataFormat.UnicodeText)); 20 | } 21 | 22 | protected async override ValueTask Load() 23 | { 24 | var text = await StaThread.InvokeAsync(() => { 25 | var text = Clipboard.GetText(TextDataFormat.UnicodeText); 26 | if(String.IsNullOrEmpty(text)) 27 | { 28 | return Clipboard.GetText(TextDataFormat.Text); 29 | } 30 | return text; 31 | }); 32 | using var writer = new StreamWriter(this, encoding: encoding, bufferSize: 1024, leaveOpen: true); 33 | writer.Write(text); 34 | } 35 | } 36 | } 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /SFI.ConsoleApp/Properties/PublishProfiles/net461.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | bin\Release\net461\publish\ 10 | FileSystem 11 | net461 12 | 13 | -------------------------------------------------------------------------------- /SFI.ConsoleApp/Properties/PublishProfiles/net6.0-minimal.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | bin\Release\net6.0-minimal\publish\ 10 | FileSystem 11 | net6.0 12 | win-x64 13 | true 14 | false 15 | false 16 | false 17 | False 18 | true 19 | 20 | -------------------------------------------------------------------------------- /SFI.ConsoleApp/Properties/PublishProfiles/net6.0-windows.pubxml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | bin\Release\net6.0-windows\publish\ 10 | FileSystem 11 | net6.0-windows 12 | win-x64 13 | true 14 | false 15 | 16 | -------------------------------------------------------------------------------- /SFI.ConsoleApp/Properties/PublishProfiles/net6.0.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | bin\Release\net6.0\publish\ 10 | FileSystem 11 | net6.0 12 | 13 | -------------------------------------------------------------------------------- /SFI.ConsoleApp/README.md: -------------------------------------------------------------------------------- 1 | [Semantic File Inspector](https://github.com/IS4Code/SFI/) Console Application 2 | ========== 3 | 4 | This tool is an executable console application for .NET that embeds 5 | the Semantic File Inspector application. 6 | 7 | Documentation for the command-line API, configuration, and plugin mechanism, 8 | can be found in the [wiki](https://github.com/IS4Code/SFI/wiki). 9 | -------------------------------------------------------------------------------- /SFI.ConsoleApp/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.ConsoleApp/icon.ico -------------------------------------------------------------------------------- /SFI.Formats/All/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.2.3 2 | ----- 3 | 4 | - Updated `SFI.Formats.AllPortable` to 1.2.3. 5 | 6 | 7 | 1.2.2 8 | ----- 9 | 10 | - Updated `SFI.Formats.AllPortable` to 1.2.2. 11 | 12 | 13 | 1.2 14 | ----- 15 | 16 | - Updated `SFI.Formats.AllPortable` to 1.2. 17 | - Multi-target both .NET Standard 2.0 and .NET 6.0. 18 | 19 | 20 | 1.1.1 21 | ----- 22 | 23 | - Updated `SFI.Formats.AllPortable` to 1.1.1. 24 | 25 | 26 | 1.1 27 | ----- 28 | 29 | - Updated `SFI.Formats.AllPortable` to 1.1. 30 | - Updated `SFI.Formats.Audio` to 1.1. 31 | 32 | 33 | 1.0.1 34 | ----- 35 | 36 | - Updated `SFI.Formats.AllPortable` to 1.0.1. 37 | -------------------------------------------------------------------------------- /SFI.Formats/AllPortable/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.2.3 2 | ----- 3 | 4 | - Updated `SFI.Formats.Images` to 1.1.2. 5 | 6 | 7 | 1.2.2 8 | ----- 9 | 10 | - Updated `SFI.Formats.CLI` to 1.1.1. 11 | - Updated `SFI.Formats.Images` to 1.1.1. 12 | - Updated `SFI.Formats.Office` to 1.0.2. 13 | - Updated `SFI.Formats.XML` to 1.2.1. 14 | 15 | 16 | 1.2.1 17 | ----- 18 | 19 | - Correctly references `SFI.Formats.Images`. 20 | 21 | 22 | 1.2 23 | ----- 24 | 25 | - Updated `SFI.Formats.Archives` to 1.1. 26 | - Updated `SFI.Formats.CLI` to 1.1. 27 | - Updated `SFI.Formats.Images` to 1.1. 28 | - Updated `SFI.Formats.Metadata` to 1.0.1. 29 | - Updated `SFI.Formats.Modules` to 1.0.1. 30 | - Updated `SFI.Formats.PE` to 1.0.1. 31 | - Updated `SFI.Formats.RDF` to 1.0.1. 32 | - Updated `SFI.Formats.XML` to 1.2. 33 | - Added `SFI.Formats.GameArchives`. 34 | - Multi-target both .NET Standard 2.0 and .NET 6.0. 35 | 36 | 37 | 1.1.1 38 | ----- 39 | 40 | - Updated `SFI.Formats.Office` to 1.0.1. 41 | 42 | 43 | 1.1 44 | ----- 45 | 46 | - Updated `SFI.Formats.XML` to 1.1. 47 | 48 | 49 | 1.0.1 50 | ----- 51 | 52 | - Updated `SFI.Formats.XML` to 1.0.1. 53 | -------------------------------------------------------------------------------- /SFI.Formats/Archives/ArchiveReaderAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats; 2 | using IS4.SFI.Services; 3 | using IS4.SFI.Vocabulary; 4 | using System.ComponentModel; 5 | using System.Security.Cryptography; 6 | using System.Threading.Tasks; 7 | 8 | namespace IS4.SFI.Analyzers 9 | { 10 | /// 11 | /// Analyzes archives as instances of . 12 | /// 13 | [Description("Analyzes archives.")] 14 | public class ArchiveReaderAnalyzer : MediaObjectAnalyzer 15 | { 16 | /// 17 | public ArchiveReaderAnalyzer() : base(Common.ArchiveClasses) 18 | { 19 | 20 | } 21 | 22 | /// 23 | public async override ValueTask Analyze(IArchiveReader reader, AnalysisContext context, IEntityAnalyzers analyzers) 24 | { 25 | var node = GetNode(context); 26 | 27 | try{ 28 | while(reader.MoveNext()) 29 | { 30 | var entry = reader.Current!; 31 | var entryNode = (await analyzers.Analyze(entry, context.WithNode(node[entry.Path]))).Node; 32 | if(entryNode != null && (entry.Path == null || !entry.Path.Contains("/"))) 33 | { 34 | entryNode.SetClass(Classes.ArchiveItem); 35 | entryNode.Set(Properties.BelongsToContainer, node); 36 | } 37 | } 38 | }catch(CryptographicException) 39 | { 40 | node.Set(Properties.EncryptionStatus, Individuals.EncryptedStatus); 41 | } 42 | 43 | return new AnalysisResult(node); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /SFI.Formats/Archives/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.1 2 | ----- 3 | 4 | - Added LHA support. 5 | - Updated `SharpCompress` to 0.32.2. 6 | - `ArchiveAnalyer` supports obtaining properties from the archive's `IFileNodeInfo` implementation. 7 | - Multi-volume RAR files are now accepted (configurable). 8 | -------------------------------------------------------------------------------- /SFI.Formats/Audio/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.1 2 | ----- 3 | 4 | - `WaveAnalyzer.CreateSpectrum` is off by default. 5 | - `MathNet.Numerics.MKL` is no longer referenced statically, instead it is loaded dynamically if needed. 6 | -------------------------------------------------------------------------------- /SFI.Formats/Audio/OggFormat.cs: -------------------------------------------------------------------------------- 1 | using NAudio.Wave; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | 6 | namespace IS4.SFI.Formats 7 | { 8 | /// 9 | /// The OGG audio format. 10 | /// 11 | [Description("The OGG audio format.")] 12 | public class OggFormat : SignatureFormat 13 | { 14 | /// 15 | public OggFormat() : base("OggS", "application/ogg", "ogg") 16 | { 17 | 18 | } 19 | 20 | /// 21 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 22 | { 23 | using var reader = new NAudio.Vorbis.VorbisWaveReader(stream, false); 24 | return await resultFactory(reader, args); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SFI.Formats/Audio/WaveFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Tools; 3 | using NAudio.Wave; 4 | using System; 5 | using System.ComponentModel; 6 | using System.IO; 7 | using System.Threading.Tasks; 8 | 9 | namespace IS4.SFI.Formats 10 | { 11 | /// 12 | /// Represents the WAV format. 13 | /// 14 | [Description("Represents the WAV format.")] 15 | public class WaveFormat : SignatureFormat 16 | { 17 | /// 18 | public WaveFormat() : base(17, "RIFF", "audio/vnd.wave", "wav") 19 | { 20 | 21 | } 22 | 23 | /// 24 | public override bool CheckHeader(ReadOnlySpan header, bool isBinary, IEncodingDetector? encodingDetector) 25 | { 26 | if(header.Length < HeaderLength || !base.CheckHeader(header, isBinary, encodingDetector)) 27 | { 28 | return false; 29 | } 30 | return header.MemoryCast()[2] == 0x45564157; 31 | } 32 | 33 | /// 34 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 35 | { 36 | using var reader = new WaveFileReader(stream); 37 | return await resultFactory(reader, args); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /SFI.Formats/CLI.Assembly/SFI.Formats.CLI.Assembly.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net4.6 5 | 9.0 6 | enable 7 | true 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /SFI.Formats/CLI/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.1.1 2 | ----- 3 | 4 | - `AssemblyAnalyzer` now inherits the same properties as member analyzers. 5 | - Referenced assemblies can be analyzed as references. 6 | - Assembly and normal attributes are unified; specifying them on any metadata element leads to the same properties. 7 | - The `[AssemblyMetadata]` attribute is recognized. 8 | - Reference assemblies preserve `[InternalsVisibleTo]` and internal members that may be visible outside the assembly. 9 | - Better recovery from exceptions during analysis; loading core .NET assemblies works again. 10 | 11 | 12 | 1.1 13 | ----- 14 | 15 | - Support for analyzing all code metadata elements (namespaces, types, fields, methods etc.), using the CodeOntology vocabulary. 16 | - Links to general identifiers of code elements, using the `clr-namespace:` prefix, are generated. 17 | -------------------------------------------------------------------------------- /SFI.Formats/CLI/EmbeddedAssemblies.tt: -------------------------------------------------------------------------------- 1 | <#@ template debug="false" hostspecific="false" language="C#" #> 2 | <#@ assembly name="$(SolutionDir)\SFI.Formats\CLI.Assembly\bin\$(Configuration)\net4.6\SFI.Formats.CLI.Assembly.dll" #> 3 | <#@ import namespace="System" #> 4 | <#@ import namespace="System.Runtime.Versioning" #> 5 | <#@ import namespace="SFI.Formats.CLI.Assembly" #> 6 | <#@ output extension=".txt" #> 7 | <# 8 | 9 | var framework = AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName; 10 | var version = new FrameworkName(framework).Version.ToString(); 11 | 12 | foreach(var pair in AssemblyApiEncoder.EncodeSystemAssemblies(version)) 13 | { 14 | WriteLine(pair.Key); 15 | WriteLine(pair.Value); 16 | } 17 | #> -------------------------------------------------------------------------------- /SFI.Formats/Crypto/SFI.Formats.Crypto.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | IS4.SFI.Formats.Crypto 6 | Semantic File Inspector 7 | IS4 8 | Copyright (c) $(Authors) $([System.DateTime]::UtcNow.ToString('yyyy')) 9 | IS4.SFI.Formats 10 | 9.0 11 | enable 12 | 1701;1702;1998 13 | $(Product) Cryptographic Formats 14 | True 15 | $(AssemblyName) 16 | $(AssemblyTitle) 17 | Provides support for cryptography-based formats. 18 | https://github.com/IS4Code/SFI 19 | git 20 | $(RepositoryUrl)/tree/HEAD/SFI.Formats/Crypto 21 | icon.png 22 | linked-data;sparql;rdf;semantic-search;metadata-extraction;crypto;cryptography;cert;certificate;x509;pkcs;der;pfx;p7c 23 | LICENSE 24 | 25 | 26 | 27 | 28 | True 29 | \ 30 | 31 | 32 | True 33 | \ 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /SFI.Formats/DOS/DosModuleExeFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Modules; 2 | using IS4.SFI.Tools; 3 | using System; 4 | using System.ComponentModel; 5 | using System.IO; 6 | using System.Threading.Tasks; 7 | 8 | namespace IS4.SFI.Formats 9 | { 10 | /// 11 | /// Represents the MS-DOS MZ module format, producing instances of 12 | /// . 13 | /// 14 | [Description("Represents the MS-DOS MZ module format.")] 15 | public class DosModuleExeFormat : ModuleFormat 16 | { 17 | /// 18 | public DosModuleExeFormat() : base(null, "application/x-msdos-program", "exe") 19 | { 20 | 21 | } 22 | 23 | /// 24 | protected override bool CheckSignature(ReadOnlySpan header) 25 | { 26 | var fields = header.MemoryCast(); 27 | return (fields.Length > 0 && fields[0] == 0x4D5A) || base.CheckSignature(header); 28 | } 29 | 30 | /// 31 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 32 | { 33 | return await resultFactory(new DosModule(stream), args); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /SFI.Formats/Delphi/DelphiFormFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Data; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Formats 8 | { 9 | /// 10 | /// Represents the DFM format used by Delphi, producing instances of . 11 | /// 12 | [Description("Represents the DFM format used by Delphi.")] 13 | public class DelphiFormFormat : SignatureFormat 14 | { 15 | /// 16 | /// Contains the encoding used for reading strings. 17 | /// 18 | [Description("Contains the encoding used for reading strings.")] 19 | public Encoding DefaultEncoding { get; set; } 20 | 21 | /// 22 | public DelphiFormFormat() : base("TPF0", "application/x-delphi-form", "dfm") 23 | { 24 | try{ 25 | DefaultEncoding = Encoding.GetEncoding(1252); 26 | }catch{ 27 | DefaultEncoding = Encoding.ASCII; 28 | } 29 | } 30 | 31 | /// 32 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 33 | { 34 | return await resultFactory(DelphiFormReader.Read(stream, DefaultEncoding), args); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /SFI.Formats/Delphi/SFI.Formats.Delphi.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | IS4.SFI.Formats.Delphi 6 | Semantic File Inspector 7 | IS4 8 | Copyright (c) $(Authors) $([System.DateTime]::UtcNow.ToString('yyyy')) 9 | IS4.SFI.Formats 10 | 9.0 11 | enable 12 | 1701;1702;1998 13 | $(Product) Delphi Formats 14 | True 15 | $(AssemblyName) 16 | $(AssemblyTitle) 17 | Provides support for various Delphi-based formats. 18 | https://github.com/IS4Code/SFI 19 | git 20 | $(RepositoryUrl)/tree/HEAD/SFI.Formats/Delphi 21 | icon.png 22 | linked-data;sparql;rdf;semantic-search;metadata-extraction;delphi;dfm;tpf0 23 | LICENSE 24 | 25 | 26 | 27 | 28 | True 29 | \ 30 | 31 | 32 | True 33 | \ 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /SFI.Formats/Disks/IsoFormat.cs: -------------------------------------------------------------------------------- 1 | using DiscUtils.Iso9660; 2 | using System.ComponentModel; 3 | using System.IO; 4 | 5 | namespace IS4.SFI.Formats 6 | { 7 | /// 8 | /// Represents the ISO CD image format, as an instance of . 9 | /// 10 | [Description("Represents the ISO CD image format.")] 11 | public class IsoFormat : DiscFormat 12 | { 13 | /// 14 | public IsoFormat() : base("application/x-iso9660-image", "iso") 15 | { 16 | 17 | } 18 | 19 | /// 20 | protected override CDReader Create(Stream stream) 21 | { 22 | return new CDReader(stream, true); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /SFI.Formats/Disks/UdfFormat.cs: -------------------------------------------------------------------------------- 1 | using DiscUtils.Udf; 2 | using System.ComponentModel; 3 | using System.IO; 4 | 5 | namespace IS4.SFI.Formats 6 | { 7 | /// 8 | /// Represents the Universal Disk Format, as an instance of . 9 | /// 10 | [Description("Represents the Universal Disk Format.")] 11 | public class UdfFormat : DiscFormat 12 | { 13 | /// 14 | public UdfFormat() : base("application/x-udf", "udf") 15 | { 16 | 17 | } 18 | 19 | /// 20 | protected override UdfReader Create(Stream stream) 21 | { 22 | return new UdfReader(stream); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /SFI.Formats/GameArchives/MpqFormat.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | using War3Net.IO.Mpq; 5 | 6 | namespace IS4.SFI.Formats 7 | { 8 | /// 9 | /// Represents the MPQ archive format, as an instance of . 10 | /// 11 | [Description("Represents the MPQ archive format used in Blizzard games.")] 12 | public class MpqFormat : SignatureFormat 13 | { 14 | /// 15 | public MpqFormat() : base("MPQ", "application/x-mpq-compressed", "mpq") 16 | { 17 | 18 | } 19 | 20 | public override async ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 21 | { 22 | using var archive = new MpqArchive(stream, loadListFile: true); 23 | return await resultFactory(archive, args); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SFI.Formats/Images/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.1.1 2 | ----- 3 | 4 | - Updated ImageSharp to 2.1.7. 5 | 6 | 7 | 1.1.1 8 | ----- 9 | 10 | - Thumbnails are no longer generated automatically on systems with only one CPU core (such as WASM hosts). 11 | - Fixed SharpImage pixel data hashing. 12 | 13 | 14 | 1.1 15 | ----- 16 | 17 | - Alternative portable implementation of image reading using ImageSharp. 18 | -------------------------------------------------------------------------------- /SFI.Formats/Metadata/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | ----- 3 | 4 | - The actual presence of XMP metadata is now checked. 5 | -------------------------------------------------------------------------------- /SFI.Formats/Metadata/XmpMetadataAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using MetadataExtractor.Formats.Xmp; 3 | using System.ComponentModel; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | using XmpCore.Impl; 7 | using XmpCore.Options; 8 | 9 | namespace IS4.SFI.Analyzers 10 | { 11 | /// 12 | /// An analyzer of XMP metadata, as instances 13 | /// of . 14 | /// 15 | [Description("An analyzer of XMP metadata.")] 16 | public class XmpMetadataAnalyzer : EntityAnalyzer 17 | { 18 | /// 19 | /// The options to use when serializing XMP metadata to XML. 20 | /// 21 | public SerializeOptions XmpSerializeOptions = new() 22 | { 23 | Indent = "", 24 | Newline = " " 25 | }; 26 | 27 | /// 28 | public async override ValueTask Analyze(XmpDirectory directory, AnalysisContext context, IEntityAnalyzers analyzers) 29 | { 30 | var node = GetNode(context); 31 | if(directory.XmpMeta is { } xmp) 32 | { 33 | var serializer = new XmpSerializerRdf(); 34 | using(var stream = new MemoryStream()) 35 | { 36 | // Store as RDF/XML in 37 | serializer.Serialize(xmp, stream, XmpSerializeOptions); 38 | stream.Position = 0; 39 | DataTools.DescribeAsXmp(node, stream); 40 | } 41 | } 42 | return new AnalysisResult(node); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /SFI.Formats/Metadata/XmpTagAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | using System.Xml; 6 | using TagLib.Xmp; 7 | 8 | namespace IS4.SFI.Analyzers 9 | { 10 | /// 11 | /// An analyzer of XMP metadata tags, as instances 12 | /// of . 13 | /// 14 | [Description("An analyzer of XMP metadata tags.")] 15 | public class XmpTagAnalyzer : EntityAnalyzer 16 | { 17 | /// 18 | public async override ValueTask Analyze(XmpTag tag, AnalysisContext context, IEntityAnalyzers analyzers) 19 | { 20 | var node = GetNode(context); 21 | 22 | var doc = new XmlDocument(); 23 | var meta = doc.CreateElement("x", DataTools.XmpMetaName.Name, DataTools.XmpMetaName.Namespace); 24 | var rdf = doc.CreateElement("rdf", DataTools.RdfName.Name, DataTools.RdfName.Namespace); 25 | var description = doc.CreateElement("rdf", "Description", DataTools.RdfName.Namespace); 26 | tag.NodeTree.RenderInto(description); 27 | var about = doc.CreateAttribute("rdf", "about", DataTools.RdfName.Namespace); 28 | about.Value = ""; 29 | description.SetAttributeNode(about); 30 | rdf.AppendChild(description); 31 | meta.AppendChild(rdf); 32 | doc.AppendChild(meta); 33 | 34 | // XmlNodeReader is not used because namespaces are not properly mapped for inner elements 35 | DataTools.DescribeAsXmp(node, new StringReader(doc.OuterXml)); 36 | 37 | return new AnalysisResult(node); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /SFI.Formats/Modules/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | ----- 3 | 4 | - Fix infinite loop on corrupted WinVersionInfo. 5 | - Added bounds check when reading resources. 6 | -------------------------------------------------------------------------------- /SFI.Formats/OLE/OleStorageFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Tools; 3 | using OpenMcdf; 4 | using System; 5 | using System.ComponentModel; 6 | using System.IO; 7 | using System.Threading.Tasks; 8 | 9 | namespace IS4.SFI.Formats 10 | { 11 | /// 12 | /// Represents the OLE storage format, producing instances of . 13 | /// 14 | [Description("Represents the OLE storage format.")] 15 | public class OleStorageFormat : BinaryFileFormat 16 | { 17 | /// 18 | public OleStorageFormat() : base(8, "application/x-ole-storage", "ole") 19 | { 20 | 21 | } 22 | 23 | /// 24 | public override bool CheckHeader(ReadOnlySpan header, bool isBinary, IEncodingDetector? encodingDetector) 25 | { 26 | if(header.Length < HeaderLength || header.MemoryCast()[0] != 0xE11AB1A1E011CFD0) 27 | { 28 | return false; 29 | } 30 | return true; 31 | } 32 | 33 | /// 34 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 35 | { 36 | using var file = new CompoundFile(stream, CFSUpdateMode.ReadOnly, CFSConfiguration.NoValidationException); 37 | return await resultFactory(file, args); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /SFI.Formats/Office/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.0.2 2 | ----- 3 | 4 | - Office document types are properly recognized and checked. 5 | 6 | 7 | 1.0.1 8 | ----- 9 | 10 | - Updated `ScratchPad.NPOI.HWPF` to 2.5.7. 11 | -------------------------------------------------------------------------------- /SFI.Formats/Office/ExcelDocumentFormat.cs: -------------------------------------------------------------------------------- 1 | using NPOI.HSSF.UserModel; 2 | using NPOI.POIFS.FileSystem; 3 | using System.ComponentModel; 4 | 5 | namespace IS4.SFI.Formats 6 | { 7 | /// 8 | /// Represents the Excel (XLS) document format, producing instances of . 9 | /// 10 | [Description("Represents the Excel (XLS) document format.")] 11 | public class ExcelDocumentFormat : OleDocumentFormat 12 | { 13 | /// 14 | public ExcelDocumentFormat() : base("application/vnd.ms-excel", "xls") 15 | { 16 | 17 | } 18 | 19 | /// 20 | public override string? GetExtension(HSSFWorkbook value) 21 | { 22 | return value?.SpreadsheetVersion?.DefaultExtension ?? Extension; 23 | } 24 | 25 | /// 26 | public override string? GetMediaType(HSSFWorkbook value) 27 | { 28 | return value?.DocumentSummaryInformation?.ContentType ?? MediaType; 29 | } 30 | 31 | /// 32 | protected override HSSFWorkbook Open(NPOIFSFileSystem fileSystem) 33 | { 34 | return new HSSFWorkbook(fileSystem.Root, true); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /SFI.Formats/Office/ExcelXmlDocumentFormat.cs: -------------------------------------------------------------------------------- 1 | using NPOI.OpenXml4Net.OPC; 2 | using NPOI.XSSF.UserModel; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | 6 | namespace IS4.SFI.Formats 7 | { 8 | /// 9 | /// Represents the Excel (XLSX) document format, producing instances of . 10 | /// 11 | [Description("Represents the Excel (XLSX) document format.")] 12 | public class ExcelXmlDocumentFormat : OpenXmlDocumentFormat 13 | { 14 | static readonly Dictionary recognized = BuildOfficeFormats( 15 | new[] 16 | { 17 | ("spreadsheetml.sheet", "xlsx"), 18 | ("spreadsheetml.template", "xltx") 19 | }, 20 | new[] 21 | { 22 | ("excel.sheet", "xlsm"), 23 | ("excel.template", "xltm"), 24 | ("excel.sheet.binary", "xlsb") 25 | } 26 | ); 27 | 28 | /// 29 | public override IReadOnlyDictionary RecognizedTypes => recognized; 30 | 31 | /// 32 | public ExcelXmlDocumentFormat() : base("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx") 33 | { 34 | 35 | } 36 | 37 | /// 38 | protected override XSSFWorkbook Open(OPCPackage package) 39 | { 40 | return new XSSFWorkbook(package); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SFI.Formats/Office/WordDocumentFormat.cs: -------------------------------------------------------------------------------- 1 | using NPOI.HWPF; 2 | using NPOI.POIFS.FileSystem; 3 | using System.ComponentModel; 4 | 5 | namespace IS4.SFI.Formats 6 | { 7 | /// 8 | /// Represents the Word (DOC) document format, producing instances of . 9 | /// 10 | [Description("Represents the Word (DOC) document format.")] 11 | public class WordDocumentFormat : OleDocumentFormat 12 | { 13 | /// 14 | public WordDocumentFormat() : base("application/msword", "doc") 15 | { 16 | 17 | } 18 | 19 | /// 20 | protected override HWPFDocument Open(NPOIFSFileSystem fileSystem) 21 | { 22 | return new HWPFDocument(fileSystem.Root); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /SFI.Formats/Office/WordXmlDocumentFormat.cs: -------------------------------------------------------------------------------- 1 | using NPOI.OpenXml4Net.OPC; 2 | using NPOI.XWPF.UserModel; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | 6 | namespace IS4.SFI.Formats 7 | { 8 | /// 9 | /// Represents the Word (DOCX) document format, producing instances of . 10 | /// 11 | [Description("Represents the Word (DOCX) document format.")] 12 | public class WordXmlDocumentFormat : OpenXmlDocumentFormat 13 | { 14 | static readonly Dictionary recognized = BuildOfficeFormats( 15 | new[] 16 | { 17 | ("wordprocessingml.document", "docx"), 18 | ("wordprocessingml.template", "dotx") 19 | }, 20 | new[] 21 | { 22 | ("word.document", "docm"), 23 | ("word.template", "dotm") 24 | } 25 | ); 26 | 27 | /// 28 | public override IReadOnlyDictionary RecognizedTypes => recognized; 29 | 30 | /// 31 | public WordXmlDocumentFormat() : base("application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx") 32 | { 33 | 34 | } 35 | 36 | /// 37 | protected override XWPFDocument Open(OPCPackage package) 38 | { 39 | return new XWPFDocument(package); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /SFI.Formats/PDF/PdfFormat.cs: -------------------------------------------------------------------------------- 1 | using PdfSharpCore.Pdf; 2 | using PdfSharpCore.Pdf.IO; 3 | using System.ComponentModel; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Formats 8 | { 9 | /// 10 | /// Represents the Portable Document Format, producing instances of . 11 | /// 12 | [Description("Represents the Portable Document Format.")] 13 | public class PdfFormat : SignatureFormat 14 | { 15 | /// 16 | /// The opening mode used for matched PDF documents. 17 | /// 18 | [Description("The opening mode used for matched PDF documents.")] 19 | public PdfDocumentOpenMode OpenMode { get; set; } = PdfDocumentOpenMode.InformationOnly; 20 | 21 | /// 22 | public PdfFormat() : base("%PDF", "application/pdf", "pdf") 23 | { 24 | 25 | } 26 | 27 | /// 28 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 29 | { 30 | using var doc = PdfReader.Open(stream, OpenMode); 31 | return await resultFactory(doc, args); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /SFI.Formats/PE/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | ----- 3 | 4 | - Updated `PeNet` to 4.0.3. 5 | -------------------------------------------------------------------------------- /SFI.Formats/Packages/PackageDescription.cs: -------------------------------------------------------------------------------- 1 | namespace IS4.SFI.Formats.Packages 2 | { 3 | /// 4 | /// Stores the description of a package, as identified by metadata within. 5 | /// 6 | public class PackageDescription 7 | { 8 | /// 9 | /// The text of the description. 10 | /// 11 | public string Value { get; } 12 | 13 | /// 14 | /// Creates a new instance of the description. 15 | /// 16 | /// The value of . 17 | public PackageDescription(string value) 18 | { 19 | Value = value; 20 | } 21 | 22 | /// 23 | public override string ToString() 24 | { 25 | return Value; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SFI.Formats/Packages/PackageDescriptionAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Packages; 2 | using IS4.SFI.Services; 3 | using IS4.SFI.Vocabulary; 4 | using System.ComponentModel; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Analyzers 8 | { 9 | /// 10 | /// Analyzes instances of , describing a directory or archive 11 | /// storing its description as metadata. 12 | /// 13 | [Description("Analyzes package descriptions describing a directory or archive storing its description as metadata.")] 14 | public class PackageDescriptionAnalyzer : EntityAnalyzer 15 | { 16 | /// 17 | public async override ValueTask Analyze(PackageDescription desc, AnalysisContext context, IEntityAnalyzers analyzers) 18 | { 19 | var node = GetNode(context); 20 | node.Set(Properties.Description, desc.Value); 21 | return default(AnalysisResult); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /SFI.Formats/Packages/SFI.Formats.Packages.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | IS4.SFI.Formats.Packages 6 | Semantic File Inspector 7 | IS4 8 | Copyright (c) $(Authors) $([System.DateTime]::UtcNow.ToString('yyyy')) 9 | IS4.SFI.Formats 10 | 9.0 11 | enable 12 | 1701;1702;1998 13 | $(Product) Package Formats 14 | True 15 | $(AssemblyName) 16 | $(AssemblyTitle) 17 | Provides support for various package-based formats. 18 | https://github.com/IS4Code/SFI 19 | git 20 | $(RepositoryUrl)/tree/HEAD/SFI.Formats/Packages 21 | icon.png 22 | linked-data;sparql;rdf;semantic-search;metadata-extraction;package 23 | LICENSE 24 | 25 | 26 | 27 | 28 | True 29 | \ 30 | 31 | 32 | True 33 | \ 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /SFI.Formats/RDF/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | ----- 3 | 4 | - It is now possible to silently ignore parse errors from RDFa analysis. 5 | -------------------------------------------------------------------------------- /SFI.Formats/RDF/RdfXmlFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Analyzers; 2 | using IS4.SFI.Tools.Xml; 3 | using System; 4 | using System.ComponentModel; 5 | using System.Threading.Tasks; 6 | using System.Xml; 7 | using System.Xml.Linq; 8 | 9 | namespace IS4.SFI.Formats 10 | { 11 | /// 12 | /// Represents the RDF/XML format, producing instances of . 13 | /// 14 | [Description("Represents the RDF/XML format.")] 15 | public class RdfXmlFormat : XmlDocumentFormat 16 | { 17 | /// 18 | public RdfXmlFormat() : base(null, null, new Uri("http://www.w3.org/1999/02/22-rdf-syntax-ns#"), "application/rdf+xml", "rdf") 19 | { 20 | 21 | } 22 | 23 | /// 24 | public async override ValueTask Match(XmlReader reader, XDocumentType? docType, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 25 | { 26 | var document = new BaseXmlDocument(reader.NameTable); 27 | document.Load(reader); 28 | return await resultFactory.Invoke(new RdfXmlAnalyzer.Document(document), args); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /SFI.Formats/SVG/SvgFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Tools.Xml; 2 | using Svg; 3 | using System; 4 | using System.ComponentModel; 5 | using System.Threading.Tasks; 6 | using System.Xml; 7 | using System.Xml.Linq; 8 | 9 | namespace IS4.SFI.Formats 10 | { 11 | /// 12 | /// Represents the SVG image format, producing instances of . 13 | /// 14 | [Description("Represents the SVG image format.")] 15 | public class SvgFormat : XmlDocumentFormat 16 | { 17 | static SvgFormat() 18 | { 19 | SvgDocument.SkipGdiPlusCapabilityCheck = true; 20 | } 21 | 22 | /// 23 | public SvgFormat() : base("-//W3C//DTD SVG 1.1//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd", new Uri("http://www.w3.org/2000/svg", UriKind.Absolute), "image/svg+xml", "svg") 24 | { 25 | 26 | } 27 | 28 | /// 29 | public override bool CheckDocument(XDocumentType? docType, XmlReader rootReader) 30 | { 31 | return rootReader.LocalName.Equals("svg", StringComparison.OrdinalIgnoreCase); 32 | } 33 | 34 | /// 35 | public async override ValueTask Match(XmlReader reader, XDocumentType? docType, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 36 | { 37 | reader = new InitialXmlReader(reader); 38 | var doc = SvgDocument.Open(reader); 39 | if(doc == null) return default; 40 | return await resultFactory(doc, args); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SFI.Formats/WARC/WarcFormat.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | using Toimik.WarcProtocol; 6 | 7 | namespace IS4.SFI.Formats 8 | { 9 | /// 10 | /// Represents the Web ARCive format, producing instances of 11 | /// of . 12 | /// 13 | [Description("Represents the Web ARCive format.")] 14 | public class WarcFormat : SignatureFormat> 15 | { 16 | /// 17 | /// The parser used for processing input files. 18 | /// 19 | public WarcParser Parser { get; } = new WarcParser(); 20 | 21 | /// 22 | public WarcFormat() : base("WARC/", "application/warc", "warc") 23 | { 24 | 25 | } 26 | 27 | /// 28 | public override async ValueTask Match(Stream stream, MatchContext context, ResultFactory, TResult, TArgs> resultFactory, TArgs args) where TResult : default 29 | { 30 | return await resultFactory(Parser.Parse(stream, false), args); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SFI.Formats/Windows/CabinetFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Windows; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | 6 | namespace IS4.SFI.Formats 7 | { 8 | /// 9 | /// Represents the Cabinet archive format, producing instances of . 10 | /// 11 | [Description("Represents the Cabinet archive format.")] 12 | public class CabinetFormat : SignatureFormat 13 | { 14 | /// 15 | public CabinetFormat() : base("MSCF", "application/vnd.ms-cab-compressed", "cab") 16 | { 17 | 18 | } 19 | 20 | /// 21 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 22 | { 23 | using var file = new CabinetFile(stream); 24 | return await resultFactory(file, args); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SFI.Formats/Windows/ComTypes/IPersistStream.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.InteropServices; 3 | 4 | namespace IS4.SFI.Windows.ComTypes 5 | { 6 | [ComImport, Guid("00000109-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 7 | interface IPersistStream 8 | { 9 | Guid GetClassID(); 10 | [PreserveSig] 11 | int IsDirty(); 12 | [PreserveSig] 13 | int Load(IStream pStm); 14 | void Save(IStream pStm, bool fClearDirty); 15 | uint GetSizeMax(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SFI.Formats/Windows/ComTypes/IStream.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.InteropServices; 3 | using System.Runtime.InteropServices.ComTypes; 4 | 5 | namespace IS4.SFI.Windows.ComTypes 6 | { 7 | [ComImport, Guid("0000000c-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 8 | unsafe interface IStream 9 | { 10 | void Read([Out] byte* pv, int cb, [Out] int* pcbRead); 11 | void Write([In] byte* pv, int cb, [Out] int* pcbWritten); 12 | void Seek(long dlibMove, int dwOrigin, [Out] long* plibNewPosition); 13 | void SetSize(long libNewSize); 14 | void CopyTo(IStream pstm, long cb, [Out] long* pcbRead, [Out] long* pcbWritten); 15 | void Commit(int grfCommitFlags); 16 | void Revert(); 17 | void LockRegion(long libOffset, long cb, int dwLockType); 18 | void UnlockRegion(long libOffset, long cb, int dwLockType); 19 | void Stat(out STATSTG pstatstg, int grfStatFlag); 20 | void Clone(out IStream ppstm); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SFI.Formats/Windows/InternetShortcutAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Vocabulary; 3 | using System.ComponentModel; 4 | using System.Threading.Tasks; 5 | using static Vanara.PInvoke.Url; 6 | 7 | namespace IS4.SFI.Analyzers 8 | { 9 | /// 10 | /// An analyzer of URL shortcuts, as instances of . 11 | /// 12 | [Description("An analyzer of URL shortcuts.")] 13 | public class InternetShortcutAnalyzer : MediaObjectAnalyzer 14 | { 15 | /// 16 | public async override ValueTask Analyze(IUniformResourceLocator shortcut, AnalysisContext context, IEntityAnalyzers analyzers) 17 | { 18 | var node = GetNode(context); 19 | shortcut.GetUrl(out var url); 20 | node.Set(Properties.Links, UriFormatter.Instance, url); 21 | return new AnalysisResult(node); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /SFI.Formats/XML/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.2.1 2 | ----- 3 | 4 | - Fixed conformance setting not being exposed in pre-load mode. 5 | - Non-root elements are no longer analyzed when in fragment mode. 6 | 7 | 8 | 1.2 9 | ----- 10 | 11 | - A few more properties added to `XmlFormat` to ignore non-data XML nodes. 12 | - HTML and PHP files looking like XML are skipped by default (controllable). 13 | - Default encoding used during parsing can be changed, or used from the encoding detector. 14 | - Fragment conformance mode can now be specified, treating the XML as external parsed entities. 15 | - The XML can be parsed fully before analysis to ensure it is well-formed according to the conformance mode. 16 | 17 | 18 | 1.1 19 | ----- 20 | 21 | - Added several properties to `XmlFormat` to control the parsing of documents. 22 | - `MaxCharactersFromEntities` is now 1024 by default. 23 | 24 | 25 | 1.0.1 26 | ----- 27 | 28 | - Updated `SFI` to 1.2 and adjusted the updated names of vocabulary items. 29 | -------------------------------------------------------------------------------- /SFI.Hashes/All/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.1 2 | ----- 3 | 4 | - Updated `SFI.Hashes.AllPortable` to 1.1. 5 | 6 | 7 | 1.0.2 8 | ----- 9 | 10 | - Updated `SFI.Hashes.AllPortable` to 1.0.2. 11 | 12 | 13 | 1.0.1 14 | ----- 15 | 16 | - Updated `SFI.Hashes.AllPortable` to 1.0.1. 17 | -------------------------------------------------------------------------------- /SFI.Hashes/AllPortable/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.1 2 | ----- 3 | 4 | - Updated `SFI.Hashes.NonCryptographic` to 1.1 (XXH3 and XXH128). 5 | 6 | 7 | 1.0.2 8 | ----- 9 | 10 | - Added `SFI.Hashes.DHash` back since the implementation is now portable. 11 | 12 | 13 | 1.0.1 14 | ----- 15 | 16 | - Updated `SFI.Hashes.BitTorrent` to 1.0.1. 17 | -------------------------------------------------------------------------------- /SFI.Hashes/BitTorrent/BitTorrentIndividuals.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Vocabulary; 2 | using System; 3 | 4 | using static IS4.SFI.Vocabulary.Vocabularies.Uri; 5 | 6 | namespace IS4.SFI.Vocabulary 7 | { 8 | /// 9 | /// Instances of related to BitTorrent. 10 | /// 11 | public static class BitTorrentIndividuals 12 | { 13 | /// 14 | /// :btih. 15 | /// 16 | [Uri(At, "btih")] 17 | public static readonly IndividualUri BTIH; 18 | 19 | /// 20 | /// :bsha1-256. 21 | /// 22 | [Uri(At, "bsha1-256")] 23 | public static readonly IndividualUri BSHA1_256; 24 | 25 | /// 26 | /// :bsha1-512. 27 | /// 28 | [Uri(At, "bsha1-512")] 29 | public static readonly IndividualUri BSHA1_512; 30 | 31 | /// 32 | /// :bsha1-1024. 33 | /// 34 | [Uri(At, "bsha1-1024")] 35 | public static readonly IndividualUri BSHA1_1024; 36 | 37 | static BitTorrentIndividuals() 38 | { 39 | typeof(BitTorrentIndividuals).InitializeUris(); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /SFI.Hashes/BitTorrent/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | ----- 3 | 4 | - The `Padded256BlockSHA1Hash` algorithm is loaded as a component again. 5 | -------------------------------------------------------------------------------- /SFI.Hashes/BitTorrent/Padded256BlockSHA1Hash.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Vocabulary; 2 | using System.ComponentModel; 3 | 4 | namespace IS4.SFI.Hashes 5 | { 6 | /// 7 | /// A hash algorithm derived from 8 | /// that uses 256-KiB blocks. 9 | /// 10 | [Description("Hashes 256-KiB chunks using SHA-1.")] 11 | [Browsable(true)] 12 | public class Padded256BlockSHA1Hash : PaddedBlockHash 13 | { 14 | public Padded256BlockSHA1Hash() : base(BitTorrentIndividuals.BSHA1_256, "urn:bsha1-256:", 262144) 15 | { 16 | 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SFI.Hashes/DHash/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | ----- 3 | 4 | - Portable bitmap reading. 5 | -------------------------------------------------------------------------------- /SFI.Hashes/Murmur/Murmur128Hash.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Tools; 3 | using IS4.SFI.Vocabulary; 4 | using Murmur; 5 | using System; 6 | using System.ComponentModel; 7 | 8 | namespace IS4.SFI.Hashes 9 | { 10 | /// 11 | /// The 128-bit MurmurHash non-cryptographic hash algorithm, using . 12 | /// 13 | [Description("The 128-bit MurmurHash non-cryptographic hash algorithm.")] 14 | public class Murmur128Hash : BuiltInHash 15 | { 16 | /// 17 | /// :murmur128. 18 | /// 19 | [Uri(Vocabularies.Uri.At)] 20 | public static readonly IndividualUri Murmur128; 21 | 22 | /// 23 | public Murmur128Hash() : base(() => MurmurHash.Create128(), Murmur128, "urn:murmur128:", 0x1022, null, FormattingMethod.Base64) 24 | { 25 | 26 | } 27 | 28 | static Murmur128Hash() 29 | { 30 | typeof(Murmur128Hash).InitializeUris(); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SFI.Hashes/Murmur/Murmur32Hash.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Tools; 3 | using IS4.SFI.Vocabulary; 4 | using Murmur; 5 | using System; 6 | using System.ComponentModel; 7 | 8 | namespace IS4.SFI.Hashes 9 | { 10 | /// 11 | /// The 32-bit MurmurHash non-cryptographic hash algorithm, using . 12 | /// 13 | [Description("The 32-bit MurmurHash non-cryptographic hash algorithm.")] 14 | public class Murmur32Hash : BuiltInHash 15 | { 16 | /// 17 | /// :murmur32. 18 | /// 19 | [Uri(Vocabularies.Uri.At)] 20 | public static readonly IndividualUri Murmur32; 21 | 22 | /// 23 | public Murmur32Hash() : base(() => MurmurHash.Create32(), Murmur32, "urn:murmur32:", 0x23, null, FormattingMethod.Base64) 24 | { 25 | 26 | } 27 | 28 | static Murmur32Hash() 29 | { 30 | typeof(Murmur32Hash).InitializeUris(); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SFI.Hashes/Murmur/Properties/PublishProfiles/FolderProfile.pubxml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | bin\Release\netstandard2.0\publish\ 10 | FileSystem 11 | <_TargetId>Folder 12 | 13 | -------------------------------------------------------------------------------- /SFI.Hashes/NonCryptographic/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.1 2 | ----- 3 | 4 | - Added XXH3 and XXH128. 5 | - All components can now be individually configured when placed in different collections. 6 | -------------------------------------------------------------------------------- /SFI.Hashes/NonCryptographic/NonCryptographicHashIndividuals.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Vocabulary; 2 | using System; 3 | 4 | using static IS4.SFI.Vocabulary.Vocabularies.Uri; 5 | 6 | namespace IS4.SFI.Vocabulary 7 | { 8 | /// 9 | /// Instances of related to non-cryptographic hash algorithms. 10 | /// 11 | public static class NonCryptographicHashIndividuals 12 | { 13 | /// 14 | /// :crc32. 15 | /// 16 | [Uri(At)] 17 | public static readonly IndividualUri Crc32; 18 | 19 | /// 20 | /// :crc64. 21 | /// 22 | [Uri(At)] 23 | public static readonly IndividualUri Crc64; 24 | 25 | /// 26 | /// :xxHash32. 27 | /// 28 | [Uri(At)] 29 | public static readonly IndividualUri XxHash32; 30 | 31 | /// 32 | /// :xxHash64. 33 | /// 34 | [Uri(At)] 35 | public static readonly IndividualUri XxHash64; 36 | 37 | /// 38 | /// :xxHash3. 39 | /// 40 | [Uri(At)] 41 | public static readonly IndividualUri XxHash3; 42 | 43 | /// 44 | /// :xxHash64. 45 | /// 46 | [Uri(At)] 47 | public static readonly IndividualUri XxHash128; 48 | 49 | static NonCryptographicHashIndividuals() 50 | { 51 | typeof(NonCryptographicHashIndividuals).InitializeUris(); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /SFI.RDF/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | 1.2.1 2 | ----- 3 | 4 | - `JsonLdHandler` now turns consecutive objects with the same property into arrays once they appear for the second time. 5 | - Fixed race condition when validating a property for the first time. 6 | 7 | 8 | 1.2 9 | ----- 10 | 11 | - Using a container membership property for the first time emits metadata to identify it more easily in queries. 12 | -------------------------------------------------------------------------------- /SFI.RDF/DirectGraphHandler.cs: -------------------------------------------------------------------------------- 1 | using VDS.RDF; 2 | using VDS.RDF.Parsing.Handlers; 3 | 4 | namespace IS4.SFI.RDF 5 | { 6 | /// 7 | /// Represents an that asserts triples directly 8 | /// into a graph. 9 | /// 10 | public class DirectGraphHandler : BaseRdfHandler 11 | { 12 | readonly IGraph graph; 13 | 14 | /// 15 | /// Creates a new instance of the handler. 16 | /// 17 | /// The graph to assert to. 18 | public DirectGraphHandler(IGraph graph) : base(graph) 19 | { 20 | this.graph = graph; 21 | } 22 | 23 | /// 24 | public override bool AcceptsAll => true; 25 | 26 | /// 27 | protected override bool HandleTripleInternal(Triple t) 28 | { 29 | return graph.Assert(t); 30 | } 31 | 32 | /// 33 | protected override bool HandleQuadInternal(Triple t, IRefNode graph) 34 | { 35 | if(graph.Equals(this.graph.Name)) 36 | { 37 | return HandleTripleInternal(t); 38 | } 39 | return true; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /SFI.RDF/README.md: -------------------------------------------------------------------------------- 1 | [Semantic File Inspector](https://github.com/IS4Code/SFI/) RDF Library 2 | ========== 3 | 4 | This project provides a concrete implementation of the core classes and 5 | interfaces of the [Semantic File Inspector](https://github.com/IS4Code/SFI/) 6 | for the RDF output. It uses [dotNetRDF](https://github.com/dotnetrdf/dotnetrdf/). 7 | 8 | This project also defines the format descriptions and analyzers for 9 | RDF-based formats. 10 | -------------------------------------------------------------------------------- /SFI.SamplePlugin/HttpResponseAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Vocabulary; 3 | using System.Net.Http; 4 | using System.Threading.Tasks; 5 | 6 | namespace IS4.SFI.Analyzers 7 | { 8 | /// 9 | /// An analyzer of HTTP response messages, as instances of . 10 | /// 11 | public class HttpResponseAnalyzer : HttpMessageAnalyzer 12 | { 13 | /// 14 | public HttpResponseAnalyzer() : base(Classes.HttpResponse, Classes.Message) 15 | { 16 | 17 | } 18 | 19 | /// 20 | public async override ValueTask Analyze(HttpResponseMessage message, AnalysisContext context, IEntityAnalyzers analyzers) 21 | { 22 | var node = GetNode(context); 23 | return new AnalysisResult(node); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SFI.SamplePlugin/Properties/PublishProfiles/FolderProfile.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | ..\SFI.ConsoleApp\bin\Debug\net5.0\win-x64\plugins\ 10 | FileSystem 11 | 12 | -------------------------------------------------------------------------------- /SFI.SamplePlugin/SFI.SamplePlugin.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0 5 | false 6 | 9.0 7 | enable 8 | 1701;1702;1998 9 | IS4 10 | IS4.SFI.SamplePlugin 11 | bin\SFI.SamplePlugin.xml 12 | true 13 | 14 | 15 | 16 | ..\SFI.ConsoleApp\bin\Debug\$(TargetFramework)\win-x64\plugins\SFI.SamplePlugin\ 17 | 18 | 19 | 20 | ..\SFI.ConsoleApp\bin\Release\$(TargetFramework)\win-x64\plugins\SFI.SamplePlugin\ 21 | 22 | 23 | 24 | 25 | false 26 | false 27 | 28 | 29 | false 30 | false 31 | 32 | 33 | false 34 | false 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /SFI.SamplePlugin/UriListAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Vocabulary; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Analyzers 8 | { 9 | /// 10 | /// An analyzer for the text/uri-list format, as a list of instances. 11 | /// 12 | public class UriListAnalyzer : EntityAnalyzer> 13 | { 14 | /// 15 | public override async ValueTask Analyze(IReadOnlyList entity, AnalysisContext context, IEntityAnalyzers analyzers) 16 | { 17 | var node = GetNode(context); 18 | node.SetMembers(entity); 19 | return new(node); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SFI.Shared/IsExternalInit.cs: -------------------------------------------------------------------------------- 1 | // https://github.com/dotnet/runtime/blob/527f9ae88a0ee216b44d556f9bdc84037fe0ebda/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/IsExternalInit.cs 2 | 3 | // Licensed to the .NET Foundation under one or more agreements. 4 | // The .NET Foundation licenses this file to you under the MIT license. 5 | 6 | using System.ComponentModel; 7 | 8 | namespace System.Runtime.CompilerServices 9 | { 10 | /// 11 | /// Reserved to be used by the compiler for tracking metadata. 12 | /// This class should not be used by developers in source code. 13 | /// 14 | [EditorBrowsable(EditorBrowsableState.Never)] 15 | #if SYSTEM_PRIVATE_CORELIB 16 | public 17 | #else 18 | internal 19 | #endif 20 | static class IsExternalInit 21 | { 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SFI.Shared/SFI.Shared.projitems: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | true 6 | 922088ad-6dd3-4c3c-a64a-768407ade62c 7 | 8 | 9 | SFI.Shared 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /SFI.Shared/SFI.Shared.shproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 922088ad-6dd3-4c3c-a64a-768407ade62c 5 | 14.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /SFI.Tests/AnalyzedObjectCollection.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using System; 3 | using System.Collections.Concurrent; 4 | using System.Collections.Generic; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Tests 8 | { 9 | /// 10 | /// A mock implementation of , capturing instances 11 | /// requested for analysis inside . 12 | /// 13 | public class AnalyzedObjectCollection : IEntityAnalyzers 14 | { 15 | /// 16 | /// A collection of entities encountered in , 17 | /// grouped by the requested type. 18 | /// 19 | public ConcurrentDictionary> Analyzed { get; } = new ConcurrentDictionary>(); 20 | 21 | /// 22 | public async ValueTask Analyze(T entity, AnalysisContext context) where T : notnull 23 | { 24 | if(!Analyzed.TryGetValue(typeof(T), out var list)) 25 | { 26 | Analyzed[typeof(T)] = list = new List<(object, AnalysisContext)>(); 27 | } 28 | list.Add((entity, context)); 29 | return default; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/15/154fa440ae9157d086e88684f058fca5.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "comp intro anim"; 18 | nfo:fileSize 1265792 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "1265792"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (1.21 MiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "KYXGQIaKqlZ2hOt4pkuTFA=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/15/158638eb127d5199bde838519bfc453f.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "Sounds File"; 18 | nfo:fileSize 1895424 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "1895424"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (1.81 MiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "SJJ1ciIXj1D6vNEl+2T0Xw=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/1a/1a4eb43828af59fc97486f0ce7c3067f.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "QuickTime Logo Movie"; 18 | nfo:fileSize 235008 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "235008"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (229.5 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "tN/tIsAZoa6hEnBJar8n4Q=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/1e/1efa71fe57f55b3b9969ae6e322ca36d.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix cnt: . 7 | @prefix xsd: . 8 | @prefix skos: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix nie: . 12 | 13 | _:n1 at:pathObject ; 14 | nie:interpretedAs ; 15 | nfo:fileName "string.json"; 16 | nfo:fileSize 16 ; 17 | a nfo:FileDataObject. 18 | dcterms:extent "16"^^dt:byte; 19 | a cnt:ContentAsText; 20 | skos:prefLabel "text (16 B)"@en; 21 | cnt:characterEncoding "us-ascii"; 22 | cnt:chars """\"Hello, World!\" 23 | """^^xsd:string. 24 | at:extensionObject . 25 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/25/25bc243496a9578cb0090db69138a8d1.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "THEME OF BRIAN"; 18 | nfo:fileSize 6128 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "6128"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (5.98 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "K1HDKdZDc+Jg4yv2TRe0sw=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/2d/2dfa9160824657feae90d06f4c6354ef.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix nie: . 7 | @prefix skos: . 8 | @prefix cnt: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix sec: . 12 | @prefix dsm: . 13 | @prefix xsd: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "FLOW1.WMF"; 18 | nfo:fileSize 358 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "358"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (358 B)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "FrPQGzW5I/NYf+2CD6ZjJQ=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/2e/2e4844f5892f5f9e8f90199fc5ed0d8a.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "WATCH.CUR"; 18 | nfo:fileSize 326 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "326"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (326 B)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "7m5Mv0WC1wiAweLYq3JQbQ=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/36/36cb817a9c2a5e46bd35ebbc5b378f7b.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix nie: . 7 | @prefix skos: . 8 | @prefix cnt: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix sec: . 12 | @prefix dsm: . 13 | @prefix xsd: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "ISI.EMF"; 18 | nfo:fileSize 236 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "236"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (236 B)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "5N+auPkpXZ/1gJhnc7n9YQ=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/39/39eb30bed8d45cb0a260bb84c6777b9d.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "uCommandoHi"; 18 | nfo:fileSize 3630 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "3630"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (3.54 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "lxjW2z24keyRIuouHzbLow=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/3a/3ad7b5ce2cc053b9b9778ed50d4972bd.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "NO.CLP"; 18 | nfo:fileSize 19158 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "19158"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (18.71 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "d8jIf5vjLLlc9JBCl0VHeg=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/3f/3ff7c02a2f2d55cdbde2f2581b122fbb.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "_svl"; 18 | nfo:fileSize 536 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "536"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (536 B)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "Rcs5Kliqmij/Q+nFRGVxWA=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/45/45e9086c5f9050a48b21e6ba29bd1983.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix cnt: . 7 | @prefix xsd: . 8 | @prefix skos: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix nie: . 12 | 13 | _:n1 at:pathObject ; 14 | nie:interpretedAs ; 15 | nfo:fileName "number.json"; 16 | nfo:fileSize 3 ; 17 | a nfo:FileDataObject. 18 | dcterms:extent "3"^^dt:byte; 19 | a cnt:ContentAsText; 20 | skos:prefLabel "text (3 B)"@en; 21 | cnt:characterEncoding "us-ascii"; 22 | cnt:chars """47 23 | """^^xsd:string. 24 | at:extensionObject . 25 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/46/464f073bf1335d33b890d4903de387a0.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "Fitness"; 18 | nfo:fileSize 81099 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "81099"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (79.2 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "/AKgyp9EUJoxZ2qpFx+1aw=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/48/483a9afd21395a1787a2d90ec56e3607.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix cnt: . 7 | @prefix xsd: . 8 | @prefix skos: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix nie: . 12 | 13 | _:n1 at:pathObject ; 14 | nie:interpretedAs ; 15 | nfo:fileName "SCE.INX"; 16 | nfo:fileSize 36 ; 17 | a nfo:FileDataObject. 18 | dcterms:extent "36"^^dt:byte; 19 | a cnt:ContentAsText; 20 | skos:prefLabel "text (36 B)"@en; 21 | cnt:characterEncoding "us-ascii"; 22 | cnt:chars "01:;DEFGHIJNOOPQRSTXYZ[\\bcdefnpqxyz{"^^xsd:string. 23 | at:extensionObject . 24 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/4c/4c5eb39f8c8357bfa0dbed710af4cd4d.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix nie: . 7 | @prefix skos: . 8 | @prefix cnt: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix sec: . 12 | @prefix dsm: . 13 | @prefix xsd: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "BJ! Demo Help"; 18 | nfo:fileSize 169600 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "169600"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (165.63 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "7Ku6kxF8gWwO9XzAIbsX8A=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/56/5669b7b4dc305ddf8b8806d6aac9f61a.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "BLOX.X"; 18 | nfo:fileSize 32000 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "32000"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (31.25 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "p5G7MkUq3y1uz5EN3CVwhw=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/56/56a09d1f6f345323aa00a201709045ed.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix nie: . 7 | @prefix skos: . 8 | @prefix cnt: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix sec: . 12 | @prefix dsm: . 13 | @prefix xsd: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "@2CLOUD9.EXE"; 18 | nfo:fileSize 1939 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "1939"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (1.89 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "kio9hTPGny+D9fe6uOlxCQ=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/5a/5ab681e2759150f0baef772d0468986e.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "vga.cpl"; 18 | nfo:fileSize 433 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "433"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (433 B)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "e9iCfMQSgvnB2aCEpiJeTQ=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/64/648c2c48a99f545186651d18a2ea9470.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "Icon↵"; 18 | nfo:fileSize 2816 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "2816"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (2.75 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "BS/mdfm9bUy6PAdoICWbmQ=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/6b/6b734b9614c75495b5df4fb1b550fd94.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "DN.DN1"; 18 | nfo:fileSize 32000 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "32000"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (31.25 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "gEuEnH+gD8qKplCaZJxeQg=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/70/709e1e4283845b728a6764fd28056c90.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "STDDATA"; 18 | nfo:fileSize 5949 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "5949"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (5.81 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "p9lKOm45h01dWd8GsxHldg=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/72/72466b8cc74e55b3918f2975c8688c93.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "HBO_1"; 18 | nfo:fileSize 11179904 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "11179904"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (10.66 MiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "YmA3XY7JhAzMsz2Nmm0/SA=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/74/742c6fd3f8035ca6ad256190a99cd72c.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "INTRO.X"; 18 | nfo:fileSize 32000 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "32000"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (31.25 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "pO29MbUfDf6WyrLWXTaUiA=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/76/76e43472adb1529c8d6b57bcb0dd5455.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "HAND.CUR"; 18 | nfo:fileSize 326 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "326"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (326 B)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "zCz53qgy6pqcLmTk1FEWbg=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/7b/7b9ebe024a775505aef3e4287d6706cf.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "A1.5"; 18 | nfo:fileSize 1228800 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "1228800"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (1.17 MiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "tqUaaiHLPpjSPyKaQscsdg=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/85/8531003dc2265066bf85e90d9fc52b4c.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix nie: . 7 | @prefix skos: . 8 | @prefix cnt: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix sec: . 12 | @prefix dsm: . 13 | @prefix xsd: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "VisioDocument (1)"; 18 | nfo:fileSize 45086 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "45086"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (44.03 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "wfnS9OcA2WVsNGobtcyIHA=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/8d/8db968ccc5a95409a9f58d38c9da5d41.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "BIRD1.X"; 18 | nfo:fileSize 32000 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "32000"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (31.25 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "5iNtWiURXrHVdV0Ny3H8bg=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/90/908b8dbf6040586cb02a02d6ef1a3ed3.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix nie: . 7 | @prefix skos: . 8 | @prefix cnt: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix sec: . 12 | @prefix dsm: . 13 | @prefix xsd: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "367"; 18 | nfo:fileSize 14844 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "14844"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (14.5 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "dW1M5m7gsrnZLtoqTUtc6A=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/93/9376b10a7b5b5f4bb37260c78feffa5e.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "HA.CLP"; 18 | nfo:fileSize 18670 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "18670"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (18.23 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "Q65+zSJNn+F8WQRWM94Plg=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/97/97a28db98deb508e944a0a55bf9d2c7a.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "CYBERSONG"; 18 | nfo:fileSize 5936 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "5936"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (5.8 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "Odbpm+RX2SfK0VgUThiupw=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/a7/a7b4a0c0789a53e18ef3b34c256d21f6.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "Heavenly Bodies Browser"; 18 | nfo:fileSize 1031168 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "1031168"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (0.98 MiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "4RkqklhvvjtCHMs47rFY8A=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/ab/abdef6e197145c50a1564e75ec2fa315.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "HEART.CUR"; 18 | nfo:fileSize 326 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "326"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (326 B)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "yhsfXD2pJ81GLabsJwGGAg=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/be/be53d9667de856ea8d74dcfbe4286444.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "AirlinesCodes"; 18 | nfo:fileSize 6182 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "6182"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (6.04 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "BgoQpvfRJ3xVqmXza/E1Ig=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/c0/c06b70bcd8bf572e966bb7753ccc2029.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "BILLY.ARJ"; 18 | nfo:fileSize 878 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "878"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (878 B)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "sv6BVOYdfnL1FnJC02YqaA=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/c4/c469e479cfa452ada259a325f2441b7e.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "FAX.TPL"; 18 | nfo:fileSize 3546 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "3546"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (3.46 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "wXjKBUbNyVBTBLE5xA6GhQ=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/d1/d18c04c2b58f578c9f1f42fb109cdefa.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "SLEEP.CUR"; 18 | nfo:fileSize 326 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "326"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (326 B)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "VDK6C9b7SPDCQUKfQ8loQQ=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/d4/d4d9ccadccb1504a84afdb05c455b12b.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "MO.CLP"; 18 | nfo:fileSize 19006 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "19006"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (18.56 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "tWQUgZbVl7M8sqkrcfsrDw=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/d9/d95f024f45685975826459b738ed8cb3.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "F10.DOC"; 18 | nfo:fileSize 1146 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "1146"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (1.12 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "5sbiFaEQAgZh37AiOV0Igw=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/dc/dcdabde734415889beec4fdb716b576c.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "PODZ1.X"; 18 | nfo:fileSize 32000 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "32000"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (31.25 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "D+dgWt8i/E4vzdkaGblINA=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/dd/dd2c6455e05b53b9b3a6afbe644cc38c.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "VisioDocument"; 18 | nfo:fileSize 39218 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "39218"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (38.3 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "fOg+7e5MqZjj3f2LE+Op8g=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/e2/e217919b14b05a17b6883a0c5602201e.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "BIRD2.X"; 18 | nfo:fileSize 32000 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "32000"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (31.25 KiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "wgMJXbo32xf4cqRQvnCaVg=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/e4/e4650714136c50a4a0d2e2d3caf9269a.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix cnt: . 7 | @prefix xsd: . 8 | @prefix skos: . 9 | @prefix dcterms: . 10 | @prefix dt: . 11 | @prefix nie: . 12 | 13 | _:n1 at:pathObject ; 14 | nie:interpretedAs ; 15 | nfo:fileName "index.dat"; 16 | nfo:fileSize 39 ; 17 | a nfo:FileDataObject. 18 | dcterms:extent "39"^^dt:byte; 19 | a cnt:ContentAsText; 20 | skos:prefLabel "text (39 B)"@en; 21 | cnt:characterEncoding "us-ascii"; 22 | cnt:chars """4262 23 | 7406 24 | 1206 25 | 1254 26 | 998 27 | 750 28 | 822 29 | """^^xsd:string. 30 | at:extensionObject . 31 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/ec/ecfe8e114f5d577aab8ec32e694745fc.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "Newsletter"; 18 | nfo:fileSize 79119 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "79119"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (77.26 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "0J0yf9GzWWfR9PtS6gcq8A=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/ee/eec5009c291b502f886bc22d0eae2a3b.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "Massage"; 18 | nfo:fileSize 141862 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "141862"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (138.54 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "lLjPrD5kKuQph4huoK7VYg=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/ef/ef08dcbec63a516e80e51ef4bd72088b.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "ug.ps"; 18 | nfo:fileSize 1348225 ; 19 | a nfo:FileDataObject. 20 | at:extensionObject . 21 | at:digest ; 22 | dcterms:extent "1348225"^^dt:byte; 23 | a cnt:ContentAsBase64; 24 | skos:prefLabel "binary data (1.29 MiB)"@en. 25 | a sec:Digest; 26 | sec:digestAlgorithm dsm:md5; 27 | sec:digestValue "TcAuMpyt+M9wMD0VYrYJaQ=="^^xsd:base64Binary. 28 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/f9/f9c4ef3df0e55bdeaa28a04b1d262ba2.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "Bill Gates Does Windows QT"; 18 | nfo:fileSize 391296 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "391296"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (382.13 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "xXGeJsBSGvR/MqpSmseGow=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/ExpectedDescriptions/telparia.com/fe/fe7da6d756db57bdbc3f390cb2ac8384.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | 3 | @prefix rdf: . 4 | @prefix nfo: . 5 | @prefix at: . 6 | @prefix skos: . 7 | @prefix cnt: . 8 | @prefix dcterms: . 9 | @prefix dt: . 10 | @prefix sec: . 11 | @prefix dsm: . 12 | @prefix xsd: . 13 | @prefix nie: . 14 | 15 | _:n1 at:pathObject ; 16 | nie:interpretedAs ; 17 | nfo:fileName "MONTY REMIX"; 18 | nfo:fileSize 5712 ; 19 | a nfo:FileDataObject. 20 | at:digest ; 21 | dcterms:extent "5712"^^dt:byte; 22 | a cnt:ContentAsBase64; 23 | skos:prefLabel "binary data (5.58 KiB)"@en. 24 | a sec:Digest; 25 | sec:digestAlgorithm dsm:md5; 26 | sec:digestValue "qU0CCU+JtAvePOj+Vtcgyg=="^^xsd:base64Binary. 27 | -------------------------------------------------------------------------------- /SFI.Tests/GraphTests.Samples.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | using System.Threading.Tasks; 3 | 4 | #pragma warning disable 1591 5 | 6 | namespace IS4.SFI.Tests 7 | { 8 | partial class GraphTests 9 | { 10 | [DataRow("Samples/lnk/notepad.exe.lnk")] 11 | [DataRow("Samples/lnk/ProgramFiles(x86).lnk")] 12 | [DataRow("Samples/lnk/ExpandedVariables.lnk")] 13 | [TestMethod] 14 | public Task lnk(string source) 15 | { 16 | return TestOutputGraph(source); 17 | } 18 | 19 | [DataRow("Samples/url/Google.url")] 20 | [TestMethod] 21 | public Task url(string source) 22 | { 23 | return TestOutputGraph(source); 24 | } 25 | 26 | [DataRow("Samples/rdfxml/rdf.xml")] 27 | [TestMethod] 28 | public Task rdfxml(string source) 29 | { 30 | return TestOutputGraph(source); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SFI.Tests/README.md: -------------------------------------------------------------------------------- 1 | [Semantic File Inspector](https://github.com/IS4Code/SFI/) Tests 2 | ========== 3 | 4 | This project contains test classes and methods that cover other parts of the 5 | solution. 6 | -------------------------------------------------------------------------------- /SFI.Tests/SFI.Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0 5 | IS4.SFI.Tests 6 | Semantic File Inspector 7 | IS4 8 | Copyright (c) $(Authors) $([System.DateTime]::UtcNow.ToString('yyyy')) 9 | IS4.SFI.Tests 10 | 10.0 11 | enable 12 | 1701;1702;1998 13 | bin\$(AssemblyName).xml 14 | $(Product) Tests 15 | false 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | PreserveNewest 36 | 37 | 38 | PreserveNewest 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /SFI.Tests/Samples/lnk/ExpandedVariables.lnk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.Tests/Samples/lnk/ExpandedVariables.lnk -------------------------------------------------------------------------------- /SFI.Tests/Samples/lnk/ProgramFiles(x86).lnk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.Tests/Samples/lnk/ProgramFiles(x86).lnk -------------------------------------------------------------------------------- /SFI.Tests/Samples/lnk/notepad.exe.lnk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.Tests/Samples/lnk/notepad.exe.lnk -------------------------------------------------------------------------------- /SFI.Tests/Samples/rdfxml/rdf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The description of this file 5 | 6 | Creator name 7 | 8 | 9 | 10 | The description of an unrelated entity 11 | 12 | -------------------------------------------------------------------------------- /SFI.Tests/Samples/url/Google.url: -------------------------------------------------------------------------------- 1 | [InternetShortcut] 2 | URL=https://www.google.com/ 3 | -------------------------------------------------------------------------------- /SFI.Tests/Samples/zip/example.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.Tests/Samples/zip/example.zip -------------------------------------------------------------------------------- /SFI.Tests/UnitTests/XmlExtensionsTests.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Tools.Xml; 2 | using Microsoft.VisualStudio.TestTools.UnitTesting; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | using System.Xml; 6 | 7 | namespace IS4.SFI.Tests 8 | { 9 | /// 10 | /// The tests for . 11 | /// 12 | [TestClass] 13 | public class XmlExtensionsTests 14 | { 15 | /// 16 | /// The tests for . 17 | /// 18 | [TestMethod] 19 | [DataRow("")] 20 | [DataRow(" & ")] 21 | public async Task LoadAsyncTests(string xml) 22 | { 23 | var settings = new XmlReaderSettings() 24 | { 25 | Async = true 26 | }; 27 | var reader = XmlReader.Create(new StringReader(xml), settings); 28 | var expectedDocument = new XmlDocument(); 29 | expectedDocument.Load(reader); 30 | 31 | reader = XmlReader.Create(new StringReader(xml), settings); 32 | var actualDocument = new XmlDocument(); 33 | await XmlExtensions.LoadAsync(actualDocument, reader); 34 | 35 | Assert.AreEqual(expectedDocument.OuterXml, actualDocument.OuterXml); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /SFI.Tests/UriCache.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Vocabulary; 3 | using System.Collections.Concurrent; 4 | 5 | namespace IS4.SFI.Tests 6 | { 7 | /// 8 | /// A mock implementation of , 9 | /// storing the cached URIs directly as nodes. 10 | /// 11 | public class UriCache : VocabularyCache, IVocabularyCache 12 | { 13 | readonly ConcurrentDictionary graphCache = new(); 14 | 15 | /// 16 | /// Creates a new instance of the cache. 17 | /// 18 | public UriCache() : base(EquatableUri.Create) 19 | { 20 | 21 | } 22 | 23 | /// 24 | public EquatableUri this[GraphUri term] => CreateNode(term, graphCache, EquatableUri.Create); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SFI.Tests/ValueUri.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | 4 | namespace IS4.SFI.Tests 5 | { 6 | /// 7 | /// Wraps a value converted to a URI. 8 | /// 9 | public class ValueUri : EquatableUri, IEquatable 10 | { 11 | /// 12 | /// The inner value. 13 | /// 14 | public object Value { get; } 15 | 16 | /// 17 | /// Creates a new URI instance from a value. 18 | /// 19 | /// The value to wrap. 20 | public ValueUri(object value) : base(Format(value)) 21 | { 22 | Value = value; 23 | } 24 | 25 | bool IEquatable.Equals(ValueUri? other) 26 | { 27 | return Equals(other); 28 | } 29 | 30 | static string Format(object value) 31 | { 32 | if(value is IFormattable formattable) 33 | { 34 | return $"x.value:{formattable.ToString(null, CultureInfo.InvariantCulture)}"; 35 | } 36 | return $"x.value:{value}"; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /SFI.WebApp/App.razor: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |

Sorry, there's nothing at this address.

8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /SFI.WebApp/ClipboardStream.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Application.Tools; 2 | using Microsoft.JSInterop; 3 | using System; 4 | using System.IO; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace IS4.SFI.WebApp 9 | { 10 | internal class ClipboardStream : MappedStream 11 | { 12 | static readonly Encoding encoding = Encoding.UTF8; 13 | 14 | readonly IJSInProcessRuntime runtime; 15 | 16 | public ClipboardStream(IJSInProcessRuntime runtime) 17 | { 18 | this.runtime = runtime; 19 | } 20 | 21 | protected override ValueTask Store(ArraySegment data) 22 | { 23 | var text = encoding.GetString(data); 24 | return runtime.InvokeVoidAsync("navigator.clipboard.writeText", text); 25 | } 26 | 27 | protected async override ValueTask Load() 28 | { 29 | var text = await runtime.InvokeAsync("navigator.clipboard.readText"); 30 | using var writer = new StreamWriter(this, encoding: encoding, leaveOpen: true); 31 | writer.Write(text); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /SFI.WebApp/EventWriter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Text; 4 | 5 | namespace IS4.SFI.WebApp 6 | { 7 | /// 8 | /// An implementation of which reports the written 9 | /// strings via an event. 10 | /// 11 | public class EventWriter : StringWriter 12 | { 13 | /// 14 | /// This event is fired each time text is written to the writer. 15 | /// 16 | public event Action? Written; 17 | 18 | /// 19 | public override void Flush() 20 | { 21 | base.Flush(); 22 | var sb = GetStringBuilder(); 23 | Written?.Invoke(sb); 24 | sb.Clear(); 25 | } 26 | 27 | /// 28 | public override void Write(char value) 29 | { 30 | base.Write(value); 31 | Flush(); 32 | } 33 | 34 | /// 35 | public override void Write(string? value) 36 | { 37 | base.Write(value); 38 | Flush(); 39 | } 40 | 41 | /// 42 | public override void Write(char[] buffer, int index, int count) 43 | { 44 | base.Write(buffer, index, count); 45 | Flush(); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SFI.WebApp/Program.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Components.WebAssembly.Hosting; 2 | using Microsoft.Extensions.DependencyInjection; 3 | using System; 4 | using System.Net.Http; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.WebApp 8 | { 9 | /// 10 | /// The main class of the web application. 11 | /// 12 | public class Program 13 | { 14 | /// 15 | /// The entry point of the web application. 16 | /// 17 | /// The arguments to the program. 18 | public static async Task Main(string[] args) 19 | { 20 | var builder = WebAssemblyHostBuilder.CreateDefault(args); 21 | builder.RootComponents.Add("#app"); 22 | 23 | builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); 24 | 25 | await builder.Build().RunAsync(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SFI.WebApp/Properties/PublishProfiles/net6.0.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | net6.0 8 | False 9 | False 10 | True 11 | Release 12 | Any CPU 13 | FileSystem 14 | bin\Release\net6.0\browser-wasm\publish\ 15 | FileSystem 16 | 17 | -------------------------------------------------------------------------------- /SFI.WebApp/Properties/PublishProfiles/net8.0.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | net8.0 8 | False 9 | False 10 | True 11 | Release 12 | Any CPU 13 | FileSystem 14 | bin\Release\net8.0\browser-wasm\publish\ 15 | FileSystem 16 | 17 | -------------------------------------------------------------------------------- /SFI.WebApp/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:56686", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", 15 | "environmentVariables": { 16 | "ASPNETCORE_ENVIRONMENT": "Development" 17 | } 18 | }, 19 | "SFI.WebApp": { 20 | "commandName": "Project", 21 | "dotnetRunMessages": "true", 22 | "launchBrowser": true, 23 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", 24 | "applicationUrl": "http://localhost:5000", 25 | "environmentVariables": { 26 | "ASPNETCORE_ENVIRONMENT": "Development" 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /SFI.WebApp/README.md: -------------------------------------------------------------------------------- 1 | [Semantic File Inspector](https://github.com/IS4Code/SFI/) Web Application 2 | ========== 3 | 4 | This is an ASP.NET Core Blazor WebAssembly project with a single page for 5 | running the Semantic File Inspector application in the browser. 6 | 7 | Documentation for the command-line API, configuration, and plugin mechanism, 8 | can be found in the [wiki](https://github.com/IS4Code/SFI/wiki). 9 | -------------------------------------------------------------------------------- /SFI.WebApp/Shared/MainLayout.razor: -------------------------------------------------------------------------------- 1 | @inherits LayoutComponentBase 2 | 3 |
4 |
5 |
6 | @Body 7 |
8 |
9 |
10 | -------------------------------------------------------------------------------- /SFI.WebApp/Shared/MainLayout.razor.css: -------------------------------------------------------------------------------- 1 | .page { 2 | position: relative; 3 | display: flex; 4 | flex-direction: column; 5 | } 6 | 7 | .main { 8 | flex: 1; 9 | } 10 | 11 | .sidebar { 12 | background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); 13 | } 14 | 15 | .top-row { 16 | background-color: #f7f7f7; 17 | border-bottom: 1px solid #d6d5d5; 18 | justify-content: flex-end; 19 | height: 3.5rem; 20 | display: flex; 21 | align-items: center; 22 | } 23 | 24 | .top-row ::deep a, .top-row .btn-link { 25 | white-space: nowrap; 26 | margin-left: 1.5rem; 27 | } 28 | 29 | .top-row a:first-child { 30 | overflow: hidden; 31 | text-overflow: ellipsis; 32 | } 33 | 34 | @media (max-width: 640.98px) { 35 | .top-row:not(.auth) { 36 | display: none; 37 | } 38 | 39 | .top-row.auth { 40 | justify-content: space-between; 41 | } 42 | 43 | .top-row a, .top-row .btn-link { 44 | margin-left: 0; 45 | } 46 | } 47 | 48 | @media (min-width: 641px) { 49 | .page { 50 | flex-direction: row; 51 | } 52 | 53 | .sidebar { 54 | width: 250px; 55 | height: 100vh; 56 | position: sticky; 57 | top: 0; 58 | } 59 | 60 | .top-row { 61 | position: sticky; 62 | top: 0; 63 | z-index: 1; 64 | } 65 | 66 | .main > div { 67 | padding-left: 2rem !important; 68 | padding-right: 1.5rem !important; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /SFI.WebApp/Shared/NavMenu.razor: -------------------------------------------------------------------------------- 1 |  7 | 8 |
9 | 16 |
17 | 18 | @code { 19 | private bool collapseNavMenu = true; 20 | 21 | private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; 22 | 23 | private void ToggleNavMenu() 24 | { 25 | collapseNavMenu = !collapseNavMenu; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SFI.WebApp/Shared/NavMenu.razor.css: -------------------------------------------------------------------------------- 1 | .navbar-toggler { 2 | background-color: rgba(255, 255, 255, 0.1); 3 | } 4 | 5 | .top-row { 6 | height: 3.5rem; 7 | background-color: rgba(0,0,0,0.4); 8 | } 9 | 10 | .navbar-brand { 11 | font-size: 1.1rem; 12 | } 13 | 14 | .oi { 15 | width: 2rem; 16 | font-size: 1.1rem; 17 | vertical-align: text-top; 18 | top: -2px; 19 | } 20 | 21 | .nav-item { 22 | font-size: 0.9rem; 23 | padding-bottom: 0.5rem; 24 | } 25 | 26 | .nav-item:first-of-type { 27 | padding-top: 1rem; 28 | } 29 | 30 | .nav-item:last-of-type { 31 | padding-bottom: 1rem; 32 | } 33 | 34 | .nav-item ::deep a { 35 | color: #d7d7d7; 36 | border-radius: 4px; 37 | height: 3rem; 38 | display: flex; 39 | align-items: center; 40 | line-height: 3rem; 41 | } 42 | 43 | .nav-item ::deep a.active { 44 | background-color: rgba(255,255,255,0.25); 45 | color: white; 46 | } 47 | 48 | .nav-item ::deep a:hover { 49 | background-color: rgba(255,255,255,0.1); 50 | color: white; 51 | } 52 | 53 | @media (min-width: 641px) { 54 | .navbar-toggler { 55 | display: none; 56 | } 57 | 58 | .collapse { 59 | /* Never collapse the sidebar for wide screens */ 60 | display: block; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /SFI.WebApp/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using Microsoft.AspNetCore.Components.Web.Virtualization 7 | @using Microsoft.AspNetCore.Components.WebAssembly.Http 8 | @using Microsoft.JSInterop 9 | @using SFI.WebApp 10 | @using SFI.WebApp.Shared 11 | -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/css/app.css: -------------------------------------------------------------------------------- 1 | @import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); 2 | 3 | html, body { 4 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; 5 | } 6 | 7 | a, .btn-link { 8 | color: #0366d6; 9 | } 10 | 11 | .btn-primary { 12 | color: #fff; 13 | background-color: #1b6ec2; 14 | border-color: #1861ac; 15 | } 16 | 17 | button { 18 | border-radius: revert; 19 | } 20 | 21 | .content { 22 | padding-top: 1.1rem; 23 | } 24 | 25 | .loading { 26 | position: fixed; 27 | top: 50%; 28 | left: 50%; 29 | transform: translate(-50%, -50%); 30 | } 31 | 32 | .valid.modified:not([type=checkbox]) { 33 | outline: 1px solid #26b050; 34 | } 35 | 36 | .invalid { 37 | outline: 1px solid red; 38 | } 39 | 40 | .validation-message { 41 | color: red; 42 | } 43 | 44 | #blazor-error-ui { 45 | background: lightyellow; 46 | bottom: 0; 47 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); 48 | display: none; 49 | left: 0; 50 | padding: 0.6rem 1.25rem 0.7rem 1.25rem; 51 | position: fixed; 52 | width: 100%; 53 | z-index: 1000; 54 | } 55 | 56 | #blazor-error-ui .dismiss { 57 | cursor: pointer; 58 | position: absolute; 59 | right: 0.75rem; 60 | top: 0.5rem; 61 | } 62 | -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/css/open-iconic/ICON-LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Waybury 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/css/open-iconic/font/fonts/open-iconic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.WebApp/wwwroot/css/open-iconic/font/fonts/open-iconic.eot -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/css/open-iconic/font/fonts/open-iconic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.WebApp/wwwroot/css/open-iconic/font/fonts/open-iconic.otf -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.WebApp/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/css/open-iconic/font/fonts/open-iconic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.WebApp/wwwroot/css/open-iconic/font/fonts/open-iconic.woff -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/SFI.WebApp/wwwroot/favicon.ico -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/index.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | Semantic File Inspector 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |

Loading...

16 | 17 |
18 | An unhandled error has occurred. 19 | Reload 20 | 🗙 21 |
22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SFI.WebApp/wwwroot/js/utils.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | var newline = "\n"; 3 | 4 | new Blob([newline], { endings: 'native' }).text().then(value => { 5 | newline = value; 6 | }); 7 | 8 | getNewline = function() { 9 | return newline; 10 | } 11 | })(); 12 | 13 | function createArray() { 14 | return []; 15 | } 16 | 17 | function appendBytes(array, data) { 18 | array.push(new Uint8Array(data)); 19 | } 20 | 21 | function finalizeBlob(array, mediaType) { 22 | var blob = new Blob(array, { type: mediaType }); 23 | return URL.createObjectURL(blob); 24 | } 25 | -------------------------------------------------------------------------------- /SFI/Analyzers/ExtensionObjectAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Services; 2 | using IS4.SFI.Vocabulary; 3 | using System; 4 | using System.ComponentModel; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Analyzers 8 | { 9 | /// 10 | /// An analyzer of file extensions, expressed as instances of . 11 | /// 12 | [Description("An analyzer of file extensions.")] 13 | public class ExtensionObjectAnalyzer : EntityAnalyzer 14 | { 15 | /// 16 | /// Whether to add class information to the created node. 17 | /// 18 | [Description("Whether to add class information to the created node.")] 19 | public bool AddClasses { get; set; } = true; 20 | 21 | /// 22 | public ExtensionObjectAnalyzer() 23 | { 24 | 25 | } 26 | 27 | /// 28 | public async override ValueTask Analyze(ExtensionObject extension, AnalysisContext context, IEntityAnalyzers analyzers) 29 | { 30 | if(context.Node is not ILinkedNode node) 31 | { 32 | var ext = (extension.Value.Value ?? "").ToLowerInvariant(); 33 | node = context.NodeFactory.Create(Vocabularies.Uris, Uri.EscapeDataString(ext)); 34 | } 35 | node = InitNewNode(node, context); 36 | if(AddClasses) 37 | { 38 | node.SetClass(Classes.Extension); 39 | } 40 | return new(node); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SFI/ComponentCollectionAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace IS4.SFI 4 | { 5 | /// 6 | /// This attribute is applied to properties, indicating that the property 7 | /// contains a collection of configurable components. 8 | /// 9 | [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] 10 | public class ComponentCollectionAttribute : Attribute 11 | { 12 | /// 13 | /// The prefix identifying the collection. 14 | /// 15 | public string Prefix { get; } 16 | 17 | /// 18 | /// The common type of the objects in the collection, or 19 | /// if it can be deduced from the collection. 20 | /// 21 | public Type? CommonType { get; } 22 | 23 | /// 24 | /// Creates a new instance of the attribute. 25 | /// 26 | /// The value of . 27 | /// The value of . 28 | public ComponentCollectionAttribute(string prefix, Type? commonType = null) 29 | { 30 | Prefix = prefix; 31 | CommonType = commonType; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /SFI/GlobalOptions.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | 3 | namespace IS4.SFI 4 | { 5 | /// 6 | /// Global properties affecting the application. 7 | /// 8 | public static class GlobalOptions 9 | { 10 | static bool? suppressErrors; 11 | 12 | /// 13 | /// Whether to ignore recoverable exceptions; by default the exceptions 14 | /// are not ignored only when is . 15 | /// 16 | public static bool SuppressNonCriticalExceptions { 17 | get { 18 | return suppressErrors ?? !Debugger.IsAttached; 19 | } 20 | set { 21 | suppressErrors = value; 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /SFI/InternalApplicationException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace IS4.SFI 5 | { 6 | /// 7 | /// Stores an exception in that 8 | /// should not be suppressed when the situation would normally be recoverable 9 | /// (such as when a format cannot be matched), indicating that a failure 10 | /// occured within the application itself. 11 | /// 12 | public class InternalApplicationException : Exception 13 | { 14 | /// 15 | public InternalApplicationException(Exception innerException) : base(null, innerException) 16 | { 17 | 18 | } 19 | 20 | /// 21 | protected InternalApplicationException(SerializationInfo info, StreamingContext context) : base(info, context) 22 | { 23 | 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SFI/Media/ICabinetArchive.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace IS4.SFI.Formats 5 | { 6 | /// 7 | /// Represents a Cabinet (CAB) archive for implementations compatible with 8 | /// the WinAPI functions for reading Cabinet files. The instance 9 | /// acts as a reader. 10 | /// 11 | public interface ICabinetArchive 12 | { 13 | /// 14 | /// Returns the next file in the archive. 15 | /// 16 | /// 17 | /// An instance of identifying the next file, 18 | /// or if the archive is at the end. 19 | /// 20 | ICabinetArchiveFile? GetNextFile(); 21 | } 22 | 23 | /// 24 | /// Stores the properties of a file in a Cabinet archive. 25 | /// 26 | public interface ICabinetArchiveFile 27 | { 28 | /// 29 | /// The name/path of the file. 30 | /// 31 | string Name { get; } 32 | 33 | /// 34 | /// The stream that can be used to read the file. 35 | /// 36 | Stream Stream { get; } 37 | 38 | /// 39 | /// The modification date and time of the file. 40 | /// 41 | DateTime Date { get; } 42 | 43 | /// 44 | /// The size of the file. 45 | /// 46 | uint Size { get; } 47 | 48 | /// 49 | /// Additional attributes of the file. 50 | /// 51 | FileAttributes Attributes { get; } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /SFI/Media/ICustomWaveFormat.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace IS4.SFI.Formats 4 | { 5 | /// 6 | /// Stores the description of an audio format. 7 | /// 8 | public interface ICustomWaveFormat 9 | { 10 | /// 11 | /// The sample rate of the audio in Hz. 12 | /// 13 | int? SampleRate { get; } 14 | 15 | /// 16 | /// The number of channels in the audio. 17 | /// 18 | int? ChannelCount { get; } 19 | 20 | /// 21 | /// The bit depth of the audio. 22 | /// 23 | int? BitsPerSample { get; } 24 | 25 | /// 26 | /// Average bitrate, in B/s. 27 | /// 28 | int? AverageBytesPerSecond { get; } 29 | 30 | /// 31 | /// The that specifies the major type of the media sample, 32 | /// see . 33 | /// 34 | Guid? MajorType { get; } 35 | 36 | /// 37 | /// The that specifies the subtype of the media sample, 38 | /// see . 39 | /// 40 | Guid? SubType { get; } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /SFI/ReferenceEqualityComparer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Runtime.CompilerServices; 4 | 5 | namespace IS4.SFI 6 | { 7 | /// 8 | /// Compares two instances of based on their reference 9 | /// equality, i.e. their identity, disregarding any potential overridden 10 | /// implementations of or 11 | /// . 12 | /// 13 | /// The type of the compared instances. 14 | public class ReferenceEqualityComparer : EqualityComparer where T : class? 15 | { 16 | /// 17 | /// The default instance of the comparer. 18 | /// 19 | public new static readonly IEqualityComparer Default = new ReferenceEqualityComparer(); 20 | 21 | /// 22 | public override bool Equals(T x, T y) 23 | { 24 | return Object.ReferenceEquals(x, y); 25 | } 26 | 27 | /// 28 | public override int GetHashCode(T obj) 29 | { 30 | return RuntimeHelpers.GetHashCode(obj); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SFI/Services/ExtensionObject.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Primitives; 2 | using System; 3 | 4 | namespace IS4.SFI.Services 5 | { 6 | /// 7 | /// Represents a file name extension. 8 | /// 9 | /// The textual value of the extension, excluding the .. 10 | public readonly record struct ExtensionObject(StringSegment Value) : IIdentityKey 11 | { 12 | static readonly Type type = typeof(ExtensionObject); 13 | 14 | /// 15 | public override string ToString() => $".{Value}"; 16 | 17 | object? IIdentityKey.ReferenceKey => type; 18 | 19 | object? IIdentityKey.DataKey => Value; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SFI/Services/IEncodingDetector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace IS4.SFI.Services 4 | { 5 | /// 6 | /// The common interface used by a detector of an input file's charset. 7 | /// Once initialized, the instance shall receive consecutive chunks of the 8 | /// input data via or 9 | /// until its and, signalized 10 | /// by calling . 11 | /// 12 | public interface IEncodingDetector 13 | { 14 | /// 15 | /// The recognized character set. May not be set before a call to . 16 | /// 17 | string Charset { get; } 18 | 19 | /// 20 | /// The confidence of the resulting . 21 | /// 22 | float Confidence { get; } 23 | 24 | /// 25 | /// Gives additional data to the detector. 26 | /// 27 | /// The next collection of bytes of the data. 28 | void Write(ArraySegment data); 29 | 30 | /// 31 | /// Gives additional data to the detector. 32 | /// 33 | /// The next collection of bytes of the data. 34 | void Write(ReadOnlySpan data); 35 | 36 | /// 37 | /// Indicates that the data is at its end. 38 | /// 39 | void End(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /SFI/Services/IFileInfo.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace IS4.SFI.Services 4 | { 5 | /// 6 | /// Represents a concrete file in a file system. 7 | /// 8 | public interface IFileInfo : IFileNodeInfo, IStreamFactory 9 | { 10 | 11 | } 12 | 13 | /// 14 | /// Wraps a instance. 15 | /// 16 | public class FileInfoWrapper : FileSystemInfoWrapper, IFileInfo 17 | { 18 | /// 19 | public FileInfoWrapper(FileInfo baseInfo, IIdentityKey? key = null) : base(baseInfo, key) 20 | { 21 | 22 | } 23 | 24 | /// 25 | public long Length => BaseInfo.Length; 26 | 27 | /// 28 | public Stream Open() 29 | { 30 | return BaseInfo.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SFI/Services/IIdentityKey.cs: -------------------------------------------------------------------------------- 1 | namespace IS4.SFI.Services 2 | { 3 | /// 4 | /// Stores a pair of objects to serve as a key when information 5 | /// about this instance need to be cached, usually via 6 | /// . 7 | /// This allows the instance to be reused or discarded as long as the 8 | /// and uniquely identify 9 | /// the entity it describes. 10 | /// 11 | public interface IIdentityKey 12 | { 13 | /// 14 | /// The identity part of the key, intended to be compared by reference 15 | /// (i.e. via ) 16 | /// during caching. The logical lifetime of this instance does not exceed the 17 | /// lifetime of this object. 18 | /// 19 | /// 20 | /// For an entry in an archive, this property could point to the instance 21 | /// describing the archive itself (as long as the same instance is used 22 | /// for all its entries). 23 | /// 24 | object? ReferenceKey { get; } 25 | 26 | /// 27 | /// The equality part of the key, intended to be compared by value 28 | /// (i.e. via ) 29 | /// during caching. 30 | /// 31 | /// 32 | /// For an entry in an archive, this property could contain the path of the entry 33 | /// within the archive, as long as identifies 34 | /// the archive itself. 35 | /// 36 | object? DataKey { get; } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /SFI/Services/IVocabularyCache.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Vocabulary; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace IS4.SFI.Services 6 | { 7 | /// 8 | /// Provides caching of vocabulary terms. 9 | /// 10 | public interface IVocabularyCache 11 | { 12 | /// 13 | /// Stores a collection of used vocabularies 14 | /// as instances of . 15 | /// 16 | ICollection Vocabularies { get; } 17 | } 18 | 19 | /// 20 | /// Provides caching of objects of type 21 | /// based on specific vocabulary terms represented by . 22 | /// 23 | /// 24 | /// The type of terms this cache supports, implementing . 25 | /// 26 | /// 27 | /// The node type cached by the object. 28 | /// 29 | public interface IVocabularyCache : IVocabularyCache 30 | where TTerm : ITermUri, IEquatable 31 | { 32 | /// 33 | /// Obtains (or produces) the cached node for the term identified 34 | /// by . 35 | /// 36 | /// The term to obtain the node from. 37 | /// A node that represents an instance of the term. 38 | TNode this[TTerm term] { get; } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /SFI/Tags/ImageResourceTag.cs: -------------------------------------------------------------------------------- 1 | namespace IS4.SFI.Tags 2 | { 3 | /// 4 | /// A tag providing information about the resource a particular image is coming from. 5 | /// 6 | public interface IImageResourceTag 7 | { 8 | /// 9 | /// if the image should be transparent, otherwise. 10 | /// 11 | bool IsTransparent { get; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SFI/Tools/IO/UnmanagedMemoryRange.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Runtime.InteropServices; 5 | 6 | namespace IS4.SFI.Tools.IO 7 | { 8 | /// 9 | /// Represents a range of bytes in the unmanaged memory as a collection. 10 | /// 11 | public struct UnmanagedMemoryRange : IReadOnlyCollection 12 | { 13 | /// 14 | /// The starting address of the byte range. 15 | /// 16 | public IntPtr Address { get; } 17 | 18 | /// 19 | /// The number of bytes in the range. 20 | /// 21 | public int Count { get; } 22 | 23 | /// 24 | /// Creates a new instance of the range. 25 | /// 26 | /// The value of . 27 | /// The value of . 28 | public UnmanagedMemoryRange(IntPtr address, int count) 29 | { 30 | Address = address; 31 | Count = count; 32 | } 33 | 34 | /// 35 | public IEnumerator GetEnumerator() 36 | { 37 | for(int i = 0; i < Count; i++) 38 | { 39 | yield return Marshal.ReadByte(Address, i); 40 | } 41 | } 42 | 43 | IEnumerator IEnumerable.GetEnumerator() 44 | { 45 | return GetEnumerator(); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /SFI/Tools/Xml/BaseXmlDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Xml; 2 | 3 | namespace IS4.SFI.Tools.Xml 4 | { 5 | /// 6 | /// An extension of that allows specifying the 7 | /// property or assigning it during the lifetime 8 | /// of the object. 9 | /// 10 | public class BaseXmlDocument : XmlDocument 11 | { 12 | string? baseUri; 13 | 14 | /// 15 | public override string? BaseURI => baseUri; 16 | 17 | /// 18 | /// Creates a new instance of the document. 19 | /// 20 | public BaseXmlDocument() 21 | { 22 | 23 | } 24 | 25 | /// 26 | /// Creates a new instance of the document. 27 | /// 28 | /// The name table to use for . 29 | public BaseXmlDocument(XmlNameTable nameTable) : base(nameTable) 30 | { 31 | 32 | } 33 | 34 | /// 35 | /// Sets the current base URI. 36 | /// 37 | /// The new value of . 38 | public void SetBaseURI(string? baseUri) 39 | { 40 | this.baseUri = baseUri; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SFI/Vocabulary/UriAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace IS4.SFI.Vocabulary 4 | { 5 | /// 6 | /// Provides information for constructing an RDF term when initializing 7 | /// a field. 8 | /// 9 | [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] 10 | public class UriAttribute : Attribute 11 | { 12 | /// 13 | /// The instance of identifying the vocabulary 14 | /// containing the term identified by the field. 15 | /// 16 | public VocabularyUri Vocabulary { get; } 17 | 18 | /// 19 | /// The proper local name of the term inside the vocabulary, if it is 20 | /// different from the name of the field. 21 | /// 22 | public string? LocalName { get; } 23 | 24 | /// 25 | /// Creates a new instance of the attribute. 26 | /// 27 | /// The vocabulary URI, stored in . 28 | /// The value of . 29 | public UriAttribute(string vocabulary, string? localName = null) 30 | { 31 | Vocabulary = new VocabularyUri(String.Intern(vocabulary)); 32 | LocalName = localName; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /SFi.Formats/Archives/ArchiveFormat.cs: -------------------------------------------------------------------------------- 1 | using SharpCompress.Archives; 2 | 3 | namespace IS4.SFI.Formats 4 | { 5 | /// 6 | /// Represents an archive format producing instances of . 7 | /// 8 | /// The supported archive type. 9 | public abstract class ArchiveFormat : SignatureFormat where TArchive : class, IArchive 10 | { 11 | /// 12 | public ArchiveFormat(int headerLength, string mediaType, string extension) : base(headerLength, mediaType, extension) 13 | { 14 | 15 | } 16 | 17 | /// 18 | public ArchiveFormat(string signature, string mediaType, string extension) : base(signature, mediaType, extension) 19 | { 20 | 21 | } 22 | 23 | /// 24 | public ArchiveFormat(byte[] signature, string mediaType, string extension) : base(signature, mediaType, extension) 25 | { 26 | 27 | } 28 | 29 | /// 30 | /// Checks that the provided instance was correctly recognized. 31 | /// 32 | /// The checked archive. 33 | /// if the archive is valid. 34 | protected bool CheckArchive(TArchive archive) 35 | { 36 | return archive != null && archive.TotalSize >= 0 && archive.TotalUncompressSize >= 0; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /SFi.Formats/Archives/GZipFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Archives; 2 | using SharpCompress.Readers.GZip; 3 | using System.ComponentModel; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Formats 8 | { 9 | /// 10 | /// Represents the gzip archive format. 11 | /// 12 | [Description("Represents the gzip archive format.")] 13 | public class GZipFormat : SignatureFormat 14 | { 15 | /// 16 | public GZipFormat() : base(new byte[] { 0x1F, 0x8B }, "application/gzip", "gz") 17 | { 18 | 19 | } 20 | 21 | /// 22 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 23 | { 24 | using var reader = GZipReader.Open(stream); 25 | return await resultFactory(new ArchiveReaderAdapter(reader), args); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SFi.Formats/Archives/RarFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Archives; 2 | using SharpCompress.Readers.Rar; 3 | using System.ComponentModel; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Formats 8 | { 9 | /// 10 | /// Represents the RAR archive format. 11 | /// 12 | [Description("Represents the RAR archive format.")] 13 | public class RarFormat : SignatureFormat 14 | { 15 | /// 16 | /// Whether to read the input as a multi-volume archive by default. 17 | /// 18 | [Description("Whether to read the input as a multi-volume archive by default.")] 19 | public bool TryMultiVolumeExtraction { get; set; } = true; 20 | 21 | /// 22 | public RarFormat() : base("Rar!", "application/vnd.rar", "rar") 23 | { 24 | 25 | } 26 | 27 | /// 28 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 29 | { 30 | using var reader = TryMultiVolumeExtraction 31 | ? RarReader.Open(new[] { stream }) 32 | : RarReader.Open(stream); 33 | return await resultFactory(new ArchiveReaderAdapter(reader), args); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /SFi.Formats/Archives/SevenZipFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Archives; 2 | using SharpCompress.Archives.SevenZip; 3 | using System.ComponentModel; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Formats 8 | { 9 | /// 10 | /// Represents the 7zip archive format. 11 | /// 12 | [Description("Represents the 7zip archive format.")] 13 | public class SevenZipFormat : ArchiveFormat 14 | { 15 | /// 16 | public SevenZipFormat() : base("7z", "application/x-7z-compressed", "7z") 17 | { 18 | 19 | } 20 | 21 | /// 22 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 23 | { 24 | using var archive = SevenZipArchive.Open(stream); 25 | if(!CheckArchive(archive)) return default; 26 | return await resultFactory(new ArchiveAdapter(archive), args); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /SFi.Formats/Archives/SharpCompressExtensions.cs: -------------------------------------------------------------------------------- 1 | using SharpCompress.Common; 2 | using SharpCompress.Readers; 3 | using System.IO; 4 | using System.Reflection; 5 | 6 | namespace IS4.SFI.Formats.Archives 7 | { 8 | /// 9 | /// Contains extension methods for SharpCompress types. 10 | /// 11 | public static class SharpCompressExtensions 12 | { 13 | static readonly ConstructorInfo entryStreamCtor = typeof(EntryStream).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new[] { typeof(IReader), typeof(Stream) }, null); 14 | 15 | /// 16 | /// Creates an instance of from the supplied arguments. 17 | /// 18 | /// The parent archive reader. 19 | /// The inner data stream. 20 | /// A new instance of from the arguments. 21 | public static EntryStream CreateEntryStream(this IReader reader, Stream stream) 22 | { 23 | return (EntryStream)entryStreamCtor.Invoke(new object[] { reader, stream }); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SFi.Formats/Archives/ZipFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Archives; 2 | using SharpCompress.Archives.Zip; 3 | using System.ComponentModel; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | 7 | namespace IS4.SFI.Formats 8 | { 9 | /// 10 | /// Represents the ZIP archive format. 11 | /// 12 | [Description("Represents the ZIP archive format.")] 13 | public class ZipFormat : ArchiveFormat 14 | { 15 | /// 16 | public ZipFormat() : base("PK", "application/zip", "zip") 17 | { 18 | 19 | } 20 | 21 | /// 22 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 23 | { 24 | using var archive = ZipArchive.Open(stream); 25 | if(!CheckArchive(archive)) return default; 26 | return await resultFactory(new ArchiveAdapter(archive), args); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /SFi.Formats/Modules/LinearModuleFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Modules; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | 6 | namespace IS4.SFI.Formats 7 | { 8 | /// 9 | /// Represents the Linear Executable (LE) MZ module format. 10 | /// 11 | [Description("Represents the Linear Executable (LE) MZ module format.")] 12 | public class LinearModuleFormat : WinModuleFormat 13 | { 14 | /// 15 | public LinearModuleFormat() : base("L", "application/x-msdownload;format=le", null) 16 | { 17 | 18 | } 19 | 20 | /// 21 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 22 | { 23 | return await resultFactory(new LeReader(stream), args); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SFi.Formats/Modules/Win16ModuleFormat.cs: -------------------------------------------------------------------------------- 1 | using IS4.SFI.Formats.Modules; 2 | using System.ComponentModel; 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | 6 | namespace IS4.SFI.Formats 7 | { 8 | /// 9 | /// Represents the Win16 New Executable (NE) module format. 10 | /// 11 | [Description("Represents the Win16 New Executable (NE) module format.")] 12 | public class Win16ModuleFormat : WinModuleFormat 13 | { 14 | /// 15 | public Win16ModuleFormat() : base("NE", "application/x-msdownload;format=ne", null) 16 | { 17 | 18 | } 19 | 20 | /// 21 | public async override ValueTask Match(Stream stream, MatchContext context, ResultFactory resultFactory, TArgs args) where TResult : default 22 | { 23 | return await resultFactory(new NeReader(stream), args); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SFi.Formats/Modules/WinModuleFormat.cs: -------------------------------------------------------------------------------- 1 | namespace IS4.SFI.Formats 2 | { 3 | /// 4 | /// Represents a format for Windows modules. 5 | /// 6 | public abstract class WinModuleFormat : ModuleFormat 7 | { 8 | /// 9 | public WinModuleFormat(string signature, string? mediaType, string? extension) : base(signature, mediaType, extension) 10 | { 11 | 12 | } 13 | 14 | /// 15 | public override string? GetExtension(IModule module) 16 | { 17 | switch(module.Type) 18 | { 19 | case ModuleType.System: return "sys"; 20 | case ModuleType.Library: return "dll"; 21 | case ModuleType.Executable: return "exe"; 22 | default: return null; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SFi.Formats/Modules/WinVersionInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace IS4.SFI.Formats.Modules 4 | { 5 | /// 6 | /// Stores the VS_VERSIONINFO structure. 7 | /// 8 | public class WinVersionInfo 9 | { 10 | /// 11 | /// The buffer storing the bytes of the structure. 12 | /// 13 | public ArraySegment Data { get; } 14 | 15 | /// 16 | /// Creates a new instance of the class. 17 | /// 18 | /// The value of . 19 | public WinVersionInfo(ArraySegment data) 20 | { 21 | Data = data; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IS4Code/SFI/46299fe4bce4000cc9f89de7bb2e7157e6195abf/icon.png --------------------------------------------------------------------------------