From 88e49b8a6acd09c647809351bf2679920582a429 Mon Sep 17 00:00:00 2001 From: Neil McNeight Date: Tue, 26 Apr 2016 15:31:47 -0700 Subject: [PATCH] Merge branch 'master' of https://github.com/McNeight/SharpZipLib into McNeight-master # Conflicts: # ICSharpCode.SharpZipLib/Tar/TarHeader.cs # ICSharpCode.SharpZipLib/Tar/TarOutputStream.cs # README.md --- .editorconfig | 35 + .gitattributes | 67 + {Documentation => .github}/CONTRIBUTING.md | 2 +- .github/ISSUE_TEMPLATE.md | 25 + .github/PULL_REQUEST_TEMPLATE.md | 4 + .travis.yml | 13 +- Build/ICSharpCode.SharpZipLib.nuspec | 25 + Build/ICSharpCode.SharpZipLib.version | 4 + Build/install-fxmicroframework-43-44.ps1 | 11 + Build/run-nunit3-tests-debug.cmd | 1 + Build/run-nunit3-tests-release.cmd | 1 + Build/run-opencover.cmd | 2 + CONTRIBUTING.md | 11 + Documentation/SharpZipLib.chm | Bin 0 -> 1263536 bytes Documentation/SharpZipLib.msha | 20 + Documentation/SharpZipLib.mshc | Bin 0 -> 3067295 bytes Documentation/SharpZipLib_VS2013.shfbproj | 15 +- Documentation/future/ARCHIVES.TXT | 1346 + Documentation/future/FILEFMTS.DOC | 162 + Documentation/future/FILEFMTS.LST | 7496 +++++ Documentation/future/FILEFMTS_ARC.md | 98 + Documentation/future/FILEFMTS_ARJ.md | 71 + Documentation/future/FILEFMTS_DWC.md | 36 + Documentation/future/FILEFMTS_GZIP.md | 30 + Documentation/future/FILEFMTS_HA.md | 53 + Documentation/future/FILEFMTS_HYP.md | 23 + Documentation/future/FILEFMTS_Introduction.md | 137 + Documentation/future/FILEFMTS_LBR.md | 44 + Documentation/future/FILEFMTS_LZH.md | 42 + Documentation/future/FILEFMTS_ZOO.md | 40 + Documentation/future/FILE_ID.DIZ | 11 + Documentation/future/README.md | 170 + Documentation/help/SharpZipLib.chm | Bin 1581877 -> 0 bytes Documentation/nunit3-test-results-release.xml | 904 + Documentation/opencover-results-release.xml | 26175 ++++++++++++++++ .../ICSharpCode.SharpZipLib_Adler32.htm | 283 + .../ICSharpCode.SharpZipLib_BZip2.htm | 148 + ...ICSharpCode.SharpZipLib_BZip2Constants.htm | 239 + ...ICSharpCode.SharpZipLib_BZip2Exception.htm | 134 + ...SharpCode.SharpZipLib_BZip2InputStream.htm | 1077 + ...harpCode.SharpZipLib_BZip2OutputStream.htm | 1993 ++ ...arpCode.SharpZipLib_BaseArchiveStorage.htm | 4517 +++ ...pCode.SharpZipLib_CompletedFileHandler.htm | 29 + .../ICSharpCode.SharpZipLib_Crc32.htm | 270 + .../ICSharpCode.SharpZipLib_Deflater.htm | 619 + ...harpCode.SharpZipLib_DeflaterConstants.htm | 226 + ...ICSharpCode.SharpZipLib_DeflaterEngine.htm | 925 + ...CSharpCode.SharpZipLib_DeflaterHuffman.htm | 970 + ...pCode.SharpZipLib_DeflaterOutputStream.htm | 662 + ...CSharpCode.SharpZipLib_DeflaterPending.htm | 97 + ...ICSharpCode.SharpZipLib_DescriptorData.htm | 657 + ...arpCode.SharpZipLib_DirectoryEventArgs.htm | 571 + ...de.SharpZipLib_DirectoryFailureHandler.htm | 29 + ...arpCode.SharpZipLib_DiskArchiveStorage.htm | 4525 +++ ...Code.SharpZipLib_DynamicDiskDataSource.htm | 4518 +++ ...ICSharpCode.SharpZipLib_EntryPatchData.htm | 657 + ...arpCode.SharpZipLib_ExtendedPathFilter.htm | 381 + ...SharpCode.SharpZipLib_ExtendedUnixData.htm | 1032 + .../ICSharpCode.SharpZipLib_FastZip.htm | 784 + .../ICSharpCode.SharpZipLib_FastZipEvents.htm | 775 + ...arpCode.SharpZipLib_FileFailureHandler.htm | 29 + ...harpCode.SharpZipLib_FileSystemScanner.htm | 582 + .../ICSharpCode.SharpZipLib_GZipConstants.htm | 138 + .../ICSharpCode.SharpZipLib_GZipException.htm | 135 + ...CSharpCode.SharpZipLib_GZipInputStream.htm | 420 + ...SharpCode.SharpZipLib_GZipOutputStream.htm | 310 + .../ICSharpCode.SharpZipLib_Inflater.htm | 916 + ...harpCode.SharpZipLib_InflaterDynHeader.htm | 256 + ...rpCode.SharpZipLib_InflaterHuffmanTree.htm | 277 + ...rpCode.SharpZipLib_InflaterInputBuffer.htm | 783 + ...rpCode.SharpZipLib_InflaterInputStream.htm | 786 + ...ode.SharpZipLib_InvalidHeaderException.htm | 153 + ...Code.SharpZipLib_KeysRequiredEventArgs.htm | 4518 +++ .../ICSharpCode.SharpZipLib_LzwConstants.htm | 135 + .../ICSharpCode.SharpZipLib_LzwException.htm | 132 + ...ICSharpCode.SharpZipLib_LzwInputStream.htm | 653 + ...pCode.SharpZipLib_MemoryArchiveStorage.htm | 4524 +++ .../ICSharpCode.SharpZipLib_NTTaggedData.htm | 1032 + ...harpCode.SharpZipLib_NameAndSizeFilter.htm | 379 + .../ICSharpCode.SharpZipLib_NameFilter.htm | 338 + .../ICSharpCode.SharpZipLib_OutputWindow.htm | 286 + .../ICSharpCode.SharpZipLib_PathFilter.htm | 379 + .../ICSharpCode.SharpZipLib_PendingBuffer.htm | 348 + .../ICSharpCode.SharpZipLib_PkzipClassic.htm | 540 + ...ode.SharpZipLib_PkzipClassicCryptoBase.htm | 543 + ...Lib_PkzipClassicDecryptCryptoTransform.htm | 543 + ...Lib_PkzipClassicEncryptCryptoTransform.htm | 543 + ...rpCode.SharpZipLib_PkzipClassicManaged.htm | 543 + ...arpCode.SharpZipLib_ProcessFileHandler.htm | 29 + ...harpCode.SharpZipLib_ProgressEventArgs.htm | 572 + ...CSharpCode.SharpZipLib_ProgressHandler.htm | 29 + ...ode.SharpZipLib_ProgressMessageHandler.htm | 29 + .../ICSharpCode.SharpZipLib_RawTaggedData.htm | 1031 + .../ICSharpCode.SharpZipLib_ScanEventArgs.htm | 571 + ...pCode.SharpZipLib_ScanFailureEventArgs.htm | 571 + ...Code.SharpZipLib_SharpZipBaseException.htm | 138 + ...pCode.SharpZipLib_StaticDiskDataSource.htm | 4518 +++ .../ICSharpCode.SharpZipLib_StrangeCRC.htm | 255 + ...harpCode.SharpZipLib_StreamManipulator.htm | 336 + .../ICSharpCode.SharpZipLib_StreamUtils.htm | 293 + .../ICSharpCode.SharpZipLib_TarArchive.htm | 959 + .../ICSharpCode.SharpZipLib_TarBuffer.htm | 685 + .../ICSharpCode.SharpZipLib_TarEntry.htm | 616 + .../ICSharpCode.SharpZipLib_TarException.htm | 135 + .../ICSharpCode.SharpZipLib_TarHeader.htm | 1246 + ...ICSharpCode.SharpZipLib_TarInputStream.htm | 755 + ...CSharpCode.SharpZipLib_TarOutputStream.htm | 583 + .../ICSharpCode.SharpZipLib_TestStatus.htm | 4521 +++ ...pCode.SharpZipLib_WindowsNameTransform.htm | 320 + ...SharpCode.SharpZipLib_WindowsPathUtils.htm | 137 + .../ICSharpCode.SharpZipLib_ZipAESStream.htm | 214 + ...CSharpCode.SharpZipLib_ZipAESTransform.htm | 265 + .../ICSharpCode.SharpZipLib_ZipConstants.htm | 696 + .../ICSharpCode.SharpZipLib_ZipEntry.htm | 1306 + ...CSharpCode.SharpZipLib_ZipEntryFactory.htm | 477 + .../ICSharpCode.SharpZipLib_ZipException.htm | 138 + .../ICSharpCode.SharpZipLib_ZipExtraData.htm | 1055 + .../ICSharpCode.SharpZipLib_ZipFile.htm | 4628 +++ ...CSharpCode.SharpZipLib_ZipHelperStream.htm | 687 + ...ICSharpCode.SharpZipLib_ZipInputStream.htm | 728 + ...SharpCode.SharpZipLib_ZipNameTransform.htm | 318 + ...CSharpCode.SharpZipLib_ZipOutputStream.htm | 957 + ...pCode.SharpZipLib_ZipTestResultHandler.htm | 29 + Documentation/opencover/combined.js | 1301 + Documentation/opencover/index.htm | 140 + Documentation/opencover/pic_branch0.png | Bin 0 -> 264 bytes Documentation/opencover/pic_branch10.png | Bin 0 -> 278 bytes Documentation/opencover/pic_branch100.png | Bin 0 -> 264 bytes Documentation/opencover/pic_branch20.png | Bin 0 -> 273 bytes Documentation/opencover/pic_branch30.png | Bin 0 -> 274 bytes Documentation/opencover/pic_branch40.png | Bin 0 -> 279 bytes Documentation/opencover/pic_branch50.png | Bin 0 -> 280 bytes Documentation/opencover/pic_branch60.png | Bin 0 -> 280 bytes Documentation/opencover/pic_branch70.png | Bin 0 -> 275 bytes Documentation/opencover/pic_branch80.png | Bin 0 -> 272 bytes Documentation/opencover/pic_branch90.png | Bin 0 -> 278 bytes Documentation/opencover/pic_collapsed.png | Bin 0 -> 184 bytes Documentation/opencover/pic_expanded.png | Bin 0 -> 186 bytes Documentation/opencover/pic_pin_pinned.png | Bin 0 -> 374 bytes Documentation/opencover/pic_pin_unpinned.png | Bin 0 -> 374 bytes .../opencover/pic_sortactive_asc.png | Bin 0 -> 316 bytes .../opencover/pic_sortactive_desc.png | Bin 0 -> 263 bytes Documentation/opencover/pic_sortinactive.png | Bin 0 -> 269 bytes Documentation/opencover/report.css | 208 + GlobalAssemblyInfo.cs | 45 + .../DIME/DimeDataSetService/AssemblyInfo.cs | 62 - .../DimeDataSetService.csproj | 148 - .../DimeDataSetService.csproj.webinfo | 4 - .../DimeDataSetService.vsdisco | 9 - .../DIME/DimeDataSetService/Global.asax | 1 - .../DIME/DimeDataSetService/Global.asax.cs | 70 - .../DIME/DimeDataSetService/Global.asax.resx | 42 - .../DIME/DimeDataSetService/Service1.asmx | 1 - .../DIME/DimeDataSetService/Service1.asmx.cs | 93 - .../DimeDataSetService/Service1.asmx.resx | 42 - .../DIME/DimeDataSetService/Web.config | 84 - .../DIME/DimeDataSetServiceConsumer/App.ico | Bin 1078 -> 0 bytes .../AssemblyInfo.cs | 58 - .../DimeDataSetServiceConsumer.csproj | 158 - .../DIME/DimeDataSetServiceConsumer/Main.cs | 142 - .../DIME/DimeDataSetServiceConsumer/Main.resx | 102 - .../Web References/localhost/Reference.cs | 50 - .../Web References/localhost/Reference.map | 7 - .../Web References/localhost/Service1.disco | 5 - .../Web References/localhost/Service1.wsdl | 84 - .../DIME/readme.txt | 5 - .../example/Default.aspx | 12 - .../example/DefaultController.cs | 32 - .../example/Example.csproj | 119 - .../example/ExistingImage.ashx | 22 - .../HttpCompressionModule/example/Image.ashx | 36 - .../HttpCompressionModule/example/blowery.gif | Bin 5954 -> 0 bytes .../HttpCompressionModule/example/web.config | 40 - .../httpcompressionmodule.pdf | Bin 74114 -> 0 bytes .../HttpCompressionModule/license.txt | 20 - .../HttpCompressionModule/readme.txt | 65 - .../HttpCompressionModule/src/AssemblyInfo.cs | 115 - .../src/ConfigSectionHandler.cs | 22 - .../src/DeflateFilter.cs | 77 - .../HttpCompressionModule/src/GZipFilter.cs | 61 - .../src/HttpCompressingFilter.cs | 44 - .../src/HttpCompressionModule.cs | 118 - .../src/HttpCompressionModule.csproj | 133 - .../src/HttpCompressionModuleSettings.cs | 124 - .../src/HttpOutputFilter.cs | 119 - .../src/doc/HttpCompressionModule.xml | 334 - ICSharpCode.SharpZipLib.Samples/Samples.sln | 149 + .../cs/CreateZipFile/AssemblyInfo.cs | 1 - .../{Main.cs => CreateZipFile.cs} | 27 +- .../cs/CreateZipFile/CreateZipFile.csproj | 65 +- .../cs/CreateZipFile/app.config | 6 + .../cs/FastZip/FastZip.csproj | 52 +- .../cs/FastZip/Main.cs | 14 +- .../cs/FastZip/app.config | 3 + .../cs/minibzip2/Main.cs | 2 +- .../cs/minibzip2/app.config | 3 + .../cs/minibzip2/minibzip2.csproj | 52 +- .../cs/minigzip/Main.cs | 2 +- .../cs/minigzip/app.config | 3 + .../cs/minigzip/minigzip.csproj | 44 +- .../cs/sz/app.config | 3 + ICSharpCode.SharpZipLib.Samples/cs/sz/sz.cs | 38 +- .../cs/sz/sz.csproj | 39 +- .../cs/tar/Tar.csproj | 56 +- .../cs/tar/app.config | 3 + .../cs/tar/{Main.cs => tar.cs} | 20 +- .../cs/unzipfile/App.config | 6 + .../cs/unzipfile/Program.cs | 15 + .../cs/unzipfile/Properties/AssemblyInfo.cs | 36 + .../cs/unzipfile/unzipfile.csproj | 64 + .../cs/viewzipfile/App.config | 6 + .../cs/viewzipfile/Program.cs | 15 + .../cs/viewzipfile/Properties/AssemblyInfo.cs | 36 + .../cs/viewzipfile/viewzipfile.csproj | 64 + .../cs/zf/app.config | 3 + ICSharpCode.SharpZipLib.Samples/cs/zf/zf.cs | 26 +- .../cs/zf/zf.csproj | 39 +- .../cs/zipfiletest/app.config | 3 + .../cs/zipfiletest/zipfiletest.csproj | 44 +- .../vb/CreateZipFile/AssemblyInfo.vb | 23 +- .../vb/CreateZipFile/CreateZipFile.vbproj | 54 +- .../{MainForm.resx => CreateZipFileForm.resx} | 0 .../{MainForm.vb => CreateZipFileForm.vb} | 6 +- .../vb/CreateZipFile/app.config | 26 + .../vb/WpfCreateZipFile/App.config | 6 + .../vb/WpfCreateZipFile/Application.xaml | 9 + .../vb/WpfCreateZipFile/Application.xaml.vb | 6 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 71 + .../My Project/Settings.settings | 7 + .../WpfCreateZipFile/My Project/app.manifest | 76 + .../WpfCreateZipFile/WpfCreateZipFile.vbproj | 174 + .../WpfCreateZipFileWindow.xaml | 23 + .../WpfCreateZipFileWindow.xaml.vb | 76 + .../vb/minibzip2/minibzip2.vbproj | 42 +- .../vb/viewzipfile/viewzipfile.vbproj | 42 +- .../vb/zipfiletest/zipfiletest.vbproj | 42 +- ICSharpCode.SharpZipLib.Tests.sln | 31 - ICSharpCode.SharpZipLib.Tests/AssemblyInfo.cs | 28 +- .../BZip2/Bzip2Tests.cs | 127 +- .../Base/InflaterDeflaterTests.cs | 155 +- .../Checksums/Crc32Tests.cs | 34 + ICSharpCode.SharpZipLib.Tests/Core/Core.cs | 29 +- .../GZip/GZipTests.cs | 201 +- .../ICSharpCode.SharpZipLib.Tests.csproj | 93 +- ICSharpCode.SharpZipLib.Tests/Lzw/LzwTests.cs | 157 +- ICSharpCode.SharpZipLib.Tests/Tar/TarTests.cs | 389 +- .../TestSupport/RingBuffer.cs | 113 +- .../TestSupport/Streams.cs | 41 +- .../TestSupport/Utils.cs | 22 +- .../TestSupport/ZipTesting.cs | 4 - ICSharpCode.SharpZipLib.Tests/Zip/ZipTests.cs | 1224 +- ICSharpCode.SharpZipLib.Tests/app.config | 11 + ICSharpCode.SharpZipLib.Tests/packages.config | 13 +- ICSharpCode.SharpZipLib.sln | 14 + ...pZipLib.snk => ICSharpCode.SharpZipLib.snk | Bin ICSharpCode.SharpZipLib/AssemblyInfo.cs | 51 +- ICSharpCode.SharpZipLib/BZip2/BZip2.cs | 17 +- .../BZip2/BZip2Constants.cs | 27 +- .../BZip2/BZip2Exception.cs | 11 +- .../BZip2/BZip2InputStream.cs | 457 +- .../BZip2/BZip2OutputStream.cs | 826 +- ICSharpCode.SharpZipLib/Checksums/Adler32.cs | 76 +- .../Checksums/{StrangeCrc.cs => BZip2Crc.cs} | 55 +- ICSharpCode.SharpZipLib/Checksums/Crc32.cs | 68 +- .../Checksums/IChecksum.cs | 15 +- ICSharpCode.SharpZipLib/CompressionLevel.cs | 19 + ICSharpCode.SharpZipLib/CompressionMode.cs | 13 + .../Core/FileSystemScanner.cs | 152 +- .../Core/INameTransform.cs | 2 +- ICSharpCode.SharpZipLib/Core/NameFilter.cs | 95 +- ICSharpCode.SharpZipLib/Core/PathFilter.cs | 59 +- ICSharpCode.SharpZipLib/Core/StreamUtils.cs | 53 +- .../Core/WindowsPathUtils.cs | 12 +- .../Encryption/PkzipClassic.cs | 105 +- .../Encryption/ZipAESStream.cs | 34 +- .../Encryption/ZipAESTransform.cs | 64 +- ICSharpCode.SharpZipLib/GZip/GZipConstants.cs | 26 +- ICSharpCode.SharpZipLib/GZip/GZipException.cs | 15 +- .../GZip/GzipInputStream.cs | 63 +- .../GZip/GzipOutputStream.cs | 95 +- .../ICSharpCode.SharpZipLib.csproj | 57 +- ICSharpCode.SharpZipLib/Lzw/LzwConstants.cs | 89 +- ICSharpCode.SharpZipLib/Lzw/LzwException.cs | 81 +- ICSharpCode.SharpZipLib/Lzw/LzwInputStream.cs | 1116 +- .../SharpZipBaseException.cs | 15 +- .../Tar/InvalidHeaderException.cs | 12 +- ICSharpCode.SharpZipLib/Tar/TarArchive.cs | 426 +- ICSharpCode.SharpZipLib/Tar/TarBuffer.cs | 278 +- ICSharpCode.SharpZipLib/Tar/TarEntry.cs | 261 +- ICSharpCode.SharpZipLib/Tar/TarException.cs | 14 +- ICSharpCode.SharpZipLib/Tar/TarHeader.cs | 525 +- ICSharpCode.SharpZipLib/Tar/TarInputStream.cs | 261 +- .../Tar/TarOutputStream.cs | 180 +- .../Zip/Compression/Deflater.cs | 168 +- .../Zip/Compression/DeflaterConstants.cs | 76 +- .../Zip/Compression/DeflaterEngine.cs | 485 +- .../Zip/Compression/DeflaterHuffman.cs | 293 +- .../Zip/Compression/DeflaterPending.cs | 4 +- .../Zip/Compression/Inflater.cs | 506 +- .../Zip/Compression/InflaterDynHeader.cs | 248 +- .../Zip/Compression/InflaterHuffmanTree.cs | 49 +- .../Zip/Compression/PendingBuffer.cs | 82 +- .../Streams/DeflaterOutputStream.cs | 248 +- .../Streams/InflaterInputStream.cs | 230 +- .../Zip/Compression/Streams/OutputWindow.cs | 40 +- .../Compression/Streams/StreamManipulator.cs | 89 +- ICSharpCode.SharpZipLib/Zip/FastZip.cs | 352 +- ICSharpCode.SharpZipLib/Zip/IEntryFactory.cs | 4 +- .../Zip/WindowsNameTransform.cs | 89 +- ICSharpCode.SharpZipLib/Zip/ZipConstants.cs | 219 +- ICSharpCode.SharpZipLib/Zip/ZipEntry.cs | 563 +- .../Zip/ZipEntryFactory.cs | 205 +- ICSharpCode.SharpZipLib/Zip/ZipException.cs | 17 +- ICSharpCode.SharpZipLib/Zip/ZipExtraData.cs | 264 +- ICSharpCode.SharpZipLib/Zip/ZipFile.cs | 1770 +- .../Zip/ZipHelperStream.cs | 151 +- ICSharpCode.SharpZipLib/Zip/ZipInputStream.cs | 324 +- .../Zip/ZipNameTransform.cs | 58 +- .../Zip/ZipOutputStream.cs | 373 +- ICSharpCode.SharpZipLib/ZipArchiveMode.cs | 32 + README.md | 71 +- Rebracer.xml | 108 + SharpZipAll.sln | 73 - appveyor.yml | 160 +- 328 files changed, 124411 insertions(+), 10927 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitattributes rename {Documentation => .github}/CONTRIBUTING.md (81%) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 Build/ICSharpCode.SharpZipLib.nuspec create mode 100644 Build/ICSharpCode.SharpZipLib.version create mode 100644 Build/install-fxmicroframework-43-44.ps1 create mode 100644 Build/run-nunit3-tests-debug.cmd create mode 100644 Build/run-nunit3-tests-release.cmd create mode 100644 Build/run-opencover.cmd create mode 100644 CONTRIBUTING.md create mode 100644 Documentation/SharpZipLib.chm create mode 100644 Documentation/SharpZipLib.msha create mode 100644 Documentation/SharpZipLib.mshc create mode 100644 Documentation/future/ARCHIVES.TXT create mode 100644 Documentation/future/FILEFMTS.DOC create mode 100644 Documentation/future/FILEFMTS.LST create mode 100644 Documentation/future/FILEFMTS_ARC.md create mode 100644 Documentation/future/FILEFMTS_ARJ.md create mode 100644 Documentation/future/FILEFMTS_DWC.md create mode 100644 Documentation/future/FILEFMTS_GZIP.md create mode 100644 Documentation/future/FILEFMTS_HA.md create mode 100644 Documentation/future/FILEFMTS_HYP.md create mode 100644 Documentation/future/FILEFMTS_Introduction.md create mode 100644 Documentation/future/FILEFMTS_LBR.md create mode 100644 Documentation/future/FILEFMTS_LZH.md create mode 100644 Documentation/future/FILEFMTS_ZOO.md create mode 100644 Documentation/future/FILE_ID.DIZ create mode 100644 Documentation/future/README.md delete mode 100644 Documentation/help/SharpZipLib.chm create mode 100644 Documentation/nunit3-test-results-release.xml create mode 100644 Documentation/opencover-results-release.xml create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_Adler32.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_BZip2.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Constants.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Exception.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_BZip2InputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_BZip2OutputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_BaseArchiveStorage.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_CompletedFileHandler.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_Crc32.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_Deflater.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterConstants.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterEngine.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterHuffman.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterOutputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterPending.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DescriptorData.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryEventArgs.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryFailureHandler.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DiskArchiveStorage.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_DynamicDiskDataSource.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_EntryPatchData.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedPathFilter.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedUnixData.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_FastZip.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_FastZipEvents.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_FileFailureHandler.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_FileSystemScanner.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_GZipConstants.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_GZipException.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_GZipInputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_GZipOutputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_Inflater.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_InflaterDynHeader.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_InflaterHuffmanTree.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputBuffer.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_InvalidHeaderException.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_KeysRequiredEventArgs.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_LzwConstants.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_LzwException.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_LzwInputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_MemoryArchiveStorage.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_NTTaggedData.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_NameAndSizeFilter.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_NameFilter.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_OutputWindow.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_PathFilter.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_PendingBuffer.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassic.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicCryptoBase.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicDecryptCryptoTransform.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicEncryptCryptoTransform.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicManaged.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ProcessFileHandler.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ProgressEventArgs.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ProgressHandler.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ProgressMessageHandler.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_RawTaggedData.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ScanEventArgs.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ScanFailureEventArgs.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_SharpZipBaseException.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_StaticDiskDataSource.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_StrangeCRC.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_StreamManipulator.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_StreamUtils.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_TarArchive.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_TarBuffer.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_TarEntry.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_TarException.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_TarHeader.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_TarInputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_TarOutputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_TestStatus.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_WindowsNameTransform.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_WindowsPathUtils.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESTransform.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipConstants.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntry.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntryFactory.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipException.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipExtraData.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipFile.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipHelperStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipInputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipNameTransform.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipOutputStream.htm create mode 100644 Documentation/opencover/ICSharpCode.SharpZipLib_ZipTestResultHandler.htm create mode 100644 Documentation/opencover/combined.js create mode 100644 Documentation/opencover/index.htm create mode 100644 Documentation/opencover/pic_branch0.png create mode 100644 Documentation/opencover/pic_branch10.png create mode 100644 Documentation/opencover/pic_branch100.png create mode 100644 Documentation/opencover/pic_branch20.png create mode 100644 Documentation/opencover/pic_branch30.png create mode 100644 Documentation/opencover/pic_branch40.png create mode 100644 Documentation/opencover/pic_branch50.png create mode 100644 Documentation/opencover/pic_branch60.png create mode 100644 Documentation/opencover/pic_branch70.png create mode 100644 Documentation/opencover/pic_branch80.png create mode 100644 Documentation/opencover/pic_branch90.png create mode 100644 Documentation/opencover/pic_collapsed.png create mode 100644 Documentation/opencover/pic_expanded.png create mode 100644 Documentation/opencover/pic_pin_pinned.png create mode 100644 Documentation/opencover/pic_pin_unpinned.png create mode 100644 Documentation/opencover/pic_sortactive_asc.png create mode 100644 Documentation/opencover/pic_sortactive_desc.png create mode 100644 Documentation/opencover/pic_sortinactive.png create mode 100644 Documentation/opencover/report.css create mode 100644 GlobalAssemblyInfo.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/AssemblyInfo.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/DimeDataSetService.csproj delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/DimeDataSetService.csproj.webinfo delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/DimeDataSetService.vsdisco delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/Global.asax delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/Global.asax.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/Global.asax.resx delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/Service1.asmx delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/Service1.asmx.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/Service1.asmx.resx delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetService/Web.config delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/App.ico delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/AssemblyInfo.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/DimeDataSetServiceConsumer.csproj delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/Main.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/Main.resx delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/Web References/localhost/Reference.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/Web References/localhost/Reference.map delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/Web References/localhost/Service1.disco delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/DimeDataSetServiceConsumer/Web References/localhost/Service1.wsdl delete mode 100644 ICSharpCode.SharpZipLib.Samples/DIME/readme.txt delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/example/Default.aspx delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/example/DefaultController.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/example/Example.csproj delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/example/ExistingImage.ashx delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/example/Image.ashx delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/example/blowery.gif delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/example/web.config delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/httpcompressionmodule.pdf delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/license.txt delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/readme.txt delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/AssemblyInfo.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/ConfigSectionHandler.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/DeflateFilter.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/GZipFilter.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/HttpCompressingFilter.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/HttpCompressionModule.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/HttpCompressionModule.csproj delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/HttpCompressionModuleSettings.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/HttpOutputFilter.cs delete mode 100644 ICSharpCode.SharpZipLib.Samples/HttpCompressionModule/src/doc/HttpCompressionModule.xml create mode 100644 ICSharpCode.SharpZipLib.Samples/Samples.sln rename ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/{Main.cs => CreateZipFile.cs} (91%) create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/app.config create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/FastZip/app.config create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/minibzip2/app.config create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/minigzip/app.config create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/sz/app.config create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/tar/app.config rename ICSharpCode.SharpZipLib.Samples/cs/tar/{Main.cs => tar.cs} (96%) create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/unzipfile/App.config create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/unzipfile/Program.cs create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/unzipfile/Properties/AssemblyInfo.cs create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/unzipfile/unzipfile.csproj create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/App.config create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/Program.cs create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/Properties/AssemblyInfo.cs create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/viewzipfile.csproj create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/zf/app.config create mode 100644 ICSharpCode.SharpZipLib.Samples/cs/zipfiletest/app.config rename ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/{MainForm.resx => CreateZipFileForm.resx} (100%) rename ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/{MainForm.vb => CreateZipFileForm.vb} (98%) create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/app.config create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/App.config create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/Application.xaml create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/Application.xaml.vb create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/AssemblyInfo.vb create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Resources.Designer.vb create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Resources.resx create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Settings.Designer.vb create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Settings.settings create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/app.manifest create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFile.vbproj create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFileWindow.xaml create mode 100644 ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFileWindow.xaml.vb delete mode 100644 ICSharpCode.SharpZipLib.Tests.sln create mode 100644 ICSharpCode.SharpZipLib.Tests/Checksums/Crc32Tests.cs create mode 100644 ICSharpCode.SharpZipLib.Tests/app.config rename ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.snk => ICSharpCode.SharpZipLib.snk (100%) rename ICSharpCode.SharpZipLib/Checksums/{StrangeCrc.cs => BZip2Crc.cs} (88%) create mode 100644 ICSharpCode.SharpZipLib/CompressionLevel.cs create mode 100644 ICSharpCode.SharpZipLib/CompressionMode.cs create mode 100644 ICSharpCode.SharpZipLib/ZipArchiveMode.cs create mode 100644 Rebracer.xml delete mode 100644 SharpZipAll.sln diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..92cbdb1d6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,35 @@ +# editorconfig.org + +# top-most EditorConfig file +root = true + +# Default settings: +# A newline ending every file +# Use 4 spaces as indentation +[*] +insert_final_newline = true +indent_style = tab +indent_size = 4 + +# C++ Files +[*.{cpp,h,in}] +curly_bracket_next_line = true +indent_brace_style = Allman + +# Xml project files +[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] +indent_size = 2 + +# Xml files +[*.{xml,stylecop,resx,ruleset}] +indent_size = 2 + +# Xml config files +[*.{props,targets,config,nuspec}] +indent_size = 2 + +# Shell scripts +[*.sh] +end_of_line = lf +[*.{cmd, bat}] +end_of_line = crlf diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..87a3690c0 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,67 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain + +# Force bash scripts to always use lf line endings so that if a repo is accessed +# in Unix via a file share from Windows, the scripts will work. +*.sh text eol=lf diff --git a/Documentation/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 81% rename from Documentation/CONTRIBUTING.md rename to .github/CONTRIBUTING.md index 4ca8b7040..f54527ec0 100644 --- a/Documentation/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -4,7 +4,7 @@ Thanks for helping to improve SharpZipLib. In order for your changes to be accepted you can either sign the [Joint Copyright Assignment](http://www.icsharpcode.net/TechNotes/JointCopyrightAssignment.pdf) or add the following statement to your pull request: -_I certify that I own, and have sufficient rights to contribute, all source code and related material intended to be compiled or integrated with the source code for the #ziplib open source product (the "Contribution"). My Contribution is licensed under the MIT License._ +_I certify that I own, and have sufficient rights to contribute, all source code and related material intended to be compiled or integrated with the source code for the SharpZipLib open source product (the "Contribution"). My Contribution is licensed under the MIT License._ Unless we have a Joint Copyright Agreement on file or this statement is in your pull request, we cannot accept it. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..5a6112fdf --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,25 @@ +### Steps to reproduce +1. +2. +3. + +### Expected behavior +Tell us what should happen + +### Actual behavior +Tell us what happens instead + +### Version of SharpZipLib + +### Obtained from (place an x between the brackets for all that apply) +- [ ] Compiled from source + - branch: _______ + - commit: _______ +- [ ] Downloaded DLL from GitHub +- [ ] Downloaded DLL from SourceForge +- [ ] Downloaded DLL from _______ +- [ ] DLL included as part of +- Package installed using: + - [ ] NuGet + - [ ] MyGet + - [ ] Chocolatey diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..d97ce8065 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,4 @@ + +_I certify that I own, and have sufficient rights to contribute, all source code and related material intended to be compiled or integrated with the source code for the SharpZipLib open source product (the "Contribution"). My Contribution is licensed under the MIT License._ diff --git a/.travis.yml b/.travis.yml index e62d2d72d..cb7ed1974 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,14 @@ language: csharp mono: - latest - - 3.12.0 - - 2.10.8 +os: + - linux + - osx solution: ICSharpCode.SharpZipLib.sln -#install: -# - nuget restore ICSharpCode.SharpZipLib.sln -# - nuget install NUnit.Runners -Version 2.6.4 -OutputDirectory testrunner +install: + - nuget restore ICSharpCode.SharpZipLib.sln +# - nuget install NUnit.ConsoleRunner -Version 3.2.0 -OutputDirectory testrunner script: - xbuild /p:Configuration=Debug ICSharpCode.SharpZipLib.sln - xbuild /p:Configuration=Release ICSharpCode.SharpZipLib.sln -# - mono ./testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe ./ICSharpCode.SharpZipLib.Tests/bin/Release/ICSharpCode.SharpZipLib.Tests.dll + - mono ./packages/NUnit.ConsoleRunner.3.2.0/tools/nunit3-console.exe /framework:mono-4.0 /result:./Documentation/nunit3-test-results-travis.xml ./bin/Release/ICSharpCode.SharpZipLib.Tests.dll diff --git a/Build/ICSharpCode.SharpZipLib.nuspec b/Build/ICSharpCode.SharpZipLib.nuspec new file mode 100644 index 000000000..2baaec69a --- /dev/null +++ b/Build/ICSharpCode.SharpZipLib.nuspec @@ -0,0 +1,25 @@ + + + + ICSharpCode.SharpZipLib + 1.0.0 + SharpZipLib + IC#Code + IC#Code + https://visualstudiogallery.msdn.microsoft.com/site/68c1575b-e0bf-420d-a94b-1b0f4bcdcbcc/eula?licenseType=None + http://icsharpcode.github.io/SharpZipLib/ + false + Compression library for Zip, GZip, BZip2, LZW, and Tar written entirely in C# for the .NET platform. + Please see https://github.com/icsharpcode/SharpZipLib/wiki/Release-1.0 for more information. + Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team + Compression Library Zip Gzip BZip2 LZW Tar + + + + + + + + + + diff --git a/Build/ICSharpCode.SharpZipLib.version b/Build/ICSharpCode.SharpZipLib.version new file mode 100644 index 000000000..6c4d7b5a0 --- /dev/null +++ b/Build/ICSharpCode.SharpZipLib.version @@ -0,0 +1,4 @@ +nuget_version=1.0.0 +full_version=1.0.0.0 +release_notes_link=https://github.com/icsharpcode/SharpZipLib/wiki/Release-1.0/ +copyright=Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team diff --git a/Build/install-fxmicroframework-43-44.ps1 b/Build/install-fxmicroframework-43-44.ps1 new file mode 100644 index 000000000..5b5dc0dbe --- /dev/null +++ b/Build/install-fxmicroframework-43-44.ps1 @@ -0,0 +1,11 @@ +Write-Host "Installing .NET MicroFramework 4.3 ..." +$msiPath = "$($env:USERPROFILE)\MicroFrameworkSDK43.MSI" +(New-Object Net.WebClient).DownloadFile('http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=netmf&DownloadId=1423116&FileTime=130667921437670000&Build=21031', $msiPath) +cmd /c start /wait msiexec /i $msiPath /quiet +Write-Host "Installed" -ForegroundColor green + +Write-Host "Installing .NET MicroFramework 4.4 ..." +$msiPath = "$($env:USERPROFILE)\MicroFrameworkSDK44.MSI" +(New-Object Net.WebClient).DownloadFile('https://github.com/NETMF/netmf-interpreter/releases/download/v4.4-RTW-20-Oct-2015/MicroFrameworkSDK.MSI', $msiPath) +cmd /c start /wait msiexec /i $msiPath /quiet +Write-Host "Installed" -ForegroundColor green diff --git a/Build/run-nunit3-tests-debug.cmd b/Build/run-nunit3-tests-debug.cmd new file mode 100644 index 000000000..753b1a6e2 --- /dev/null +++ b/Build/run-nunit3-tests-debug.cmd @@ -0,0 +1 @@ +..\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit3-console.exe /framework:net-4.5 /result:..\Documentation\nunit3-test-results-debug.xml ..\bin\Debug\ICSharpCode.SharpZipLib.Tests.dll diff --git a/Build/run-nunit3-tests-release.cmd b/Build/run-nunit3-tests-release.cmd new file mode 100644 index 000000000..f52a8ffde --- /dev/null +++ b/Build/run-nunit3-tests-release.cmd @@ -0,0 +1 @@ +..\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit3-console.exe /framework:net-4.5 /result:..\Documentation\nunit3-test-results-release.xml ..\bin\Release\ICSharpCode.SharpZipLib.Tests.dll diff --git a/Build/run-opencover.cmd b/Build/run-opencover.cmd new file mode 100644 index 000000000..ea47a8049 --- /dev/null +++ b/Build/run-opencover.cmd @@ -0,0 +1,2 @@ +..\packages\OpenCover.4.6.519\tools\OpenCover.Console.exe -target:run-nunit3-tests-release.cmd -register:user -filter:+[ICSharpCode.SharpZipLib]* -output:..\Documentation\opencover-results-release.xml +..\packages\ReportGenerator.2.4.4.0\tools\ReportGenerator.exe -reports:..\Documentation\opencover-results-release.xml -targetdir:..\Documentation\opencover diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..f54527ec0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,11 @@ +# Contributing to SharpZipLib + +Thanks for helping to improve SharpZipLib. + +In order for your changes to be accepted you can either sign the [Joint Copyright Assignment](http://www.icsharpcode.net/TechNotes/JointCopyrightAssignment.pdf) or add the following statement to your pull request: + +_I certify that I own, and have sufficient rights to contribute, all source code and related material intended to be compiled or integrated with the source code for the SharpZipLib open source product (the "Contribution"). My Contribution is licensed under the MIT License._ + +Unless we have a Joint Copyright Agreement on file or this statement is in your pull request, we cannot accept it. + +More information is available on [joining the team](https://github.com/icsharpcode/SharpDevelop/wiki/Joining-the-Team). diff --git a/Documentation/SharpZipLib.chm b/Documentation/SharpZipLib.chm new file mode 100644 index 0000000000000000000000000000000000000000..a3ddd7b2a626fbe3a6ded38ce139edc98ba3b8fe GIT binary patch literal 1263536 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 Exe;-~ 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 =GdCFU2mwX@ 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%0DkYxBJOs>phOD47Kz#s_i4E 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

C5j?Lz?fv83g+ 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%0DH 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 + + ICSharpCode.SharpZipLib Compression Library + + +

+ + + diff --git a/Documentation/SharpZipLib.mshc b/Documentation/SharpZipLib.mshc new file mode 100644 index 0000000000000000000000000000000000000000..da397dd64b3bc1eaa3458e5e3079156ac6ac70a7 GIT binary patch literal 3067295 zcmdqIbx@scy7ftLcZVdny9al72u^T!cXxNU;O_43?(Q0#;69tYZ=chB&dhw>HUCX& zZ!VHbQM-zI)>`-PTDPnO2q-EL5D+8~bOw{4d@wqn{+P%30o$r~hky|E?anhX?!e z)dXIQR2o963n|Lbw&8V&@Cm$y_W{-dyVSAr3xmxMfLY^dc zcG;0@U^40VF*bN!`S&R*X&Kp=svmSEz^fIn&Ar&${AKwj+8i#_{mg7L z!vg&be-rV}fr}I_tQG8sfM0>a#-cn1z2&9@j`1S|3+~9G4!?s%EzSaDKkqw3NvW?U zXlJKa!QNS~96?oEoU1}M3_!gjV^)J|mD#7M6wAOhoKf(LMm7P{O@igd(m}X_N$iJm zmbWI^8~k{*lOvQ7>-lo2p~MZ$>%`=z){}fZ9o~pjc6=~b%aW+I&((OTqiKQQFKNzu zCr*{O=X_%5=%}$)zQzPox}G4^n>FmHtolsD$XJRn&ALNBKpw0i3U$6GBfmOI>z8Eg z2;nHrUu8@j&}M8(3u;wD&T|#zQ0uY^;>Y*w6hb1-GhM|jxbyDKV^?Vm4cA63F!gh5 zs~G|e#Pu_5C}RQJR;8!Yd*bjJJKPboWz0aMDANU^Cn}}2#zvW4ZmT*}W8)Lqm&t7c zcwOcGB_^O?tYd2}V5M)M_2)Y^6KhEmT`hjVWccf=kh7kFwY`azB@N(H{hvOQNEG_k z$7jg*K>L?jue@%#%7WUl;oT0Btyw2zG%UT6EoOlhvioyjrl4qDcPWBTVGtQdY)*89 z$1SyekOurT;0~Gtl~~pGltro*$dTyx%N57wx1hKC%FgG?1u@A)JT#17UB8+&gLp>- zyJoGo_FSi3w%dL`#|V?hOU|3*EKm$kr({x~^YMQt-IjzVMsMjAv<+QdArJ7w3-UoR z$;fccbg_~6+_+#PH<;TT=`WbIA=l`3%2j!@NH1e$3Q{^hqWQU%Kk&!J-d-Q2Bjq$} z+#;e;y?KtW{h(M5K|I+$0uHm0!{rb!NN1LJL7%AO)_poH#6)EVf>B1cC_~93CwLHD zjH&2t7giK_E>To*;MGwde�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

MYwnuK&^s20or(s&h5A~5z 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

Q-&Z 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%0ARF{;#Q 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

7{W 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⪚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%0Ax90_HRh%LenXSoCUb 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

(zKrLz?Zuws;KiI&d7q$wa_n$RNqq5 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≷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%0Acs_2RbeghpUT5F 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

j5;?JanuLOD^r}#(-$$dNzMM0XB3<|6cH0aD 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 C$L)Ll~s2T}@4mc1Kxp)N;N zZ&Y5q1!by0eG$Z^BYi`c)(H(sfu80u##7usx^mk0tp(fLeGZgXo68s2of=inrp5V} z2Mk3`uhSfVuh0XY7~tU_KsJ;1>qu1*_0&-%UN1MYg$u5aE@D6?~G? zzW~Z=m0wJxj?5}@1h*%G7cXr&l%>ue`5D3S;teD*!1o*(7Wty?`N;VJKmJZHO#+&7 z)i4_+gr-vVV2&SmsqS@n3%g>A=O3BuiNVZk$F&Q)a?2CQuJ42x=_*=VEz8cG7+>o$ z(%S~(x7kjPCZSnk&oP(&qK%XZK4d(EW3G8`gxB@n#G4P6jRto8ZrRaJwM-i96nUZU zpLL~s*%1Y=c>ix!+ZU}YYN=Bs0cd4}3Y?r zEAaeZ>W}rdOi8flpbd5=j^dtzYf+9pue5D<18j|Fc4m7h8V{t~XzJz3U!9HZHVhB+M z(QubTN@+46QZ4j8_E%R-k~1TaIr;@BYv&0d{SV@gM|%_>l2$0*eaMf zfCetlJA<^Z0A_~tN_}nT8T1@?>ec{Kj?Q#THEk-Ros9Q{`1gL#0~B1*!REr7ZUBi;^3kH;PNYmYjejVyT2kU6AkcJ z8$cU088=x&^OVFI5yp}D$QD!Moi9PX?)tWS0AD^{0*<}b#je_WdM~Q(#XPO#We#C} zmN7WGW#|5F2PS8z&`Rg@y%@-7Mrc-9=69@9=G#H7-x=bC9l-_fQUp)9x!n4^jwOkb z%XwtvkC@A1`>%jCa)O>wC=Vt(k-*ZR5bef;GM@$dZ`nVCh%f!qJql2H5?&g-%~G@> z^A~odm;B$E|4vsq%U_q|x9-BV0qq1={O zmM!Y5iSX~GzXO*Z?*!AnR?XG6zStSZMQ}7YX+Gt$5-VJuM9xbgT;6`iKioTHuI8Zn zi>!Sg^NY+gw0~*^tgo;?tthr>Xx^*RdgYOU?h!s{k$X+05#R7KcFh8QN#Fl)c(3!1 zH#`d+i(kR(3z}&=i!<>pe^XCsGT2^}dekvV9}s|y>l63e`)Ij`8Q>c^SHRhe)_Xt9 zE>wKK$xto?E=5oDiX{50)s`Zw1$hFu?w)0@Aws}HkoYC(1jNBM&!#?KQ_TP93Kw!h zV@lq`+X1Tz7tUp$vX;9B#VfC?Is1bv(~)(T+vBQz&|{DTu^9N5L*7q>n~C*1--)go zK^5UU@Kx-TGe}YoJU7Y-??>pAQh}04ag44X4AW3fF&`UTBK!o-DeJ7lyFRZAh6)K% zd{OniD(A*50~0{ed9S6W>Et>K$(m!-LH!*e9AH{eE7CTv*+icEJv)#nG1IEK5eeiZ zkntvC+NO%<9N0{kjeQGP6Fc?N0bT1v z9+C@qC!=PjD>rla;>gdk&N!JrL|zMv<9FvL?x`o$#>I@kFFitYH@baw%WeVv`J@d3 zmVs@Pp0rKj-k~ITF;B%u<y+PS)hb7gKhU`KjgmD2|FgfmtLvX+2M%M#=Gf}+ z_YXdy;S#ecxB~{HLOOQn+41(bJFKQt+y?&DpTAn{?mh~jxoTAg=6#z(G^DHmp`&{R zr6J?r>pITw_cP%7RMtce6eH-?9NYDpZu2@dcfpB#7ou$>7K&zF^^&^7P#`M*hD zZ+`t6+Viq+ASh#kRfkHmu=rMTAMZG#hrw6Z7|tRfAwXDAD7Ni#0hZM+TZUE@e+M?@ zunQbbR#uN?A4K9Dv}Z(}KBRwSNYLaED!&M?Qx=Thrp$mh%L+J7xJtz7_96(~$CA-3 z`BN(3D}*%6g6hvw%OD2)NI4tN^?f0xrs9As^}I)aPlKi!W+Yh)>o4Eb!CwEejcOI% z%2*>^WyZOpB8#iI#N-juf)ayJu5(KW6qq>t)Dfx--;RIrWTlNj%#0=xyJkn8yo`jw z5PXetMfG%8@Du7STszW&`w!L^A~D@sRVJEiY8Ey*=lb6PyV1!(mSh&Loil~_JrsjE zGAV})7i|pfO_t6a(^{v&@MAAYf~|7tiM5vOblQ$(zLQwG*4cnpj-`7J#L@wAV(>vZ z7Ub4Q7wl%xCjWcEZ}kYzzUuX`z4|!sj%WATEjSG08-o~zct?so$*2x z)SWArcXS<$bG~t}ZM-ny zAslS&^90=3m6zsMzq7E2Gm{$*n4+FH{RMQq8dg->r*d-coTJv~f18H>!luLArur|D zrxI{~_Maca|DUkwtKt7Y)_2_4_y6G~+WDP-`>tzj1N0rFk9F_|JV-h_$r?+lCdbZ5 zLms;fFbvjKoq>%UvsoB3bE{LKP-@9#``Ukc{z1NWh=LQW#>3Efq8$0Ld%|R=Vpuj| zO*!*FKTbCz{|v{(GC^Wpm6)rX3x^Br+4F}4$n87jgO#{p{go&_6o&X8LL=(%J~wUdA;O_kK>M;R)U1lQmn+oTfxIW z^+ce7_t7KtPQ9t}7{%czV|9mQ276G&bJ_8gU!HS!T?pY>TaXR9_V3-sFE-IgR$n1FdYJr+~5Y^-DG_I$K9qg~F z|B{%Tv`vrXBfw2O8s)djZm?_7f`Pj@kFfAkZ()KhW_|r{qi{J0&p*4%8%Xe2GZLuK z2=j=j?PT)}go2-~f2@!31T*bxBqo&7fW7xs_(Y&83B zo}e4fg{f%KN@#DW=0 zqCBV!2rZ2Hiu7XbFITB_Z~DCH5lmyB5jYltcgT7e-CAT@NSO=Z5|x0l#DFmK{$93h zTCX5(b!otPVIugtQ@^ec7z*a#cwdGl!EhG-EDH$#$DDF-J!wRRVVC7dikQjusZI4d z7ypOR{af*?a6CZ#l&!OA^!82qY-4ikCA{*G_ygY9-LX}QF)aJ{9iL2gm76oQ_{RAd zz4Fw|8aLmH294tnjR1a@rUktXJb&tMqCV@!f2I<(FDz$h7lZ0$^Cq*SI*JPLMfSly(>VkoW(fU zNVNHrgxtrMegKenHs1+}jl*9f@M6w5+xKQZ-cXJibAA9C21)gOHqh}+BZd?=ZB{{! z=wO{;)!9v>$TO#zVWWA`-Q0{W1Bx%1Frr8HToo;rHru(YH?p=h#QPvp(*CFld2V9) zKVDI!Or`K4VeV=O={i*d)$iv=(PFap<#M3}l??|AH$ft$rZD2LKQ7#@bT$Ag{Bhx& zVUOjmU2ZvVX9kb6FJrDXXkt=i0Ud*Pxj5kVuw^XWT$P1ATZ904Cm7=}^WnRNZsXz= z(dq;X{~l~z2$+rOZv%m00=P;Ix663=-t336C$1G9PNbZgE)vi&(hT*=DTv)vQPub&ofOYjiMZTe6|Rf; zhi4I0nSZ&4%o2n9cCVE$4J&8SMm;+E16rm_uQ0GN5=qHzPga8^x)+&b{Wr{}#h@gC%0vK+ z##FT1@{g1_wvBL^#vnT?BGdU-z-nS{f?%3U;wT?gpL&#hD3Eol%c;!OguB6%vd5B*yQ^+1Wh5)6*O5 z#-1zQexTjOBS`PeZSh9-0jPap%}v|mgTnOkdWXn&&D?t17bT3s=teQJR|grk z4Er5fJ6K#fqX{B$P-<`z)Qea3r^T(D@2Q11NpX`UM1}Q{ANZ*0dxkrMq3GmQ5?;Ux zJK%`{9y~W#Gos=(;kYJPBb*l4HErZBEe8Gbmgho#n`?k6w;~$W8>sfp@&}XZ@(5VK zwuHfPZ)&vYx}Gfv)vVkeL{SYoGx0H)pw|W2N`2|Z@Lj9R^U#TH5nWTRFs2BpK)Pg? zf)|IJ;^vU#2@aQ}H-~=DZaaLPyPz$r&`aSwF80iEz?xkCMq=CPSe$ z{-+zI$va&X1ppNjfWGsepPl{RgUWv!{=tYfkrbUUs1pl(v6G3-Q(qC;3 z!&^!!H?1^*$ig}ffqKIR)`bHRqB9Lcn!(P)O#EjF!@5^XBfB#a(SZYOnHH_uj(ii( z1ibib4CEM>daYDNVT$Ke!gZJH&_3X2v` zIaEvuWKVQE@kRH^bAN9YwVsF;yte#BwUNvqo&KC?vsJ&1~vS1}&AYD>@0RRxsaO-r&GHwn1?| zm*vMimNKc}x-!GkKGI+^Fm{lUX+tulPG12!jrk#Le8Jaz$oL;AcdV)% zyGgqu@Ve|%0<^(2YCGEikv|fkRUqG}S_+{HAL%)dpn666Lo82nP6wYxt`hcVER$ZO zyyVnJWODM86R5lPTiO6H97S4jZysYca6G4+AFGs$#ClKcv)eQ?!wKV^DaL;89^?k|YQ!8DZcA^%qk#+nzCqaTLIk$r#gL>Uhd=UV% zaO=#!R$4NrEi+kg)h#et&Uh`0g`WkYRuEQabknlDDP3||}RYZ}aE~V+)UY_JyIz7yo_#l63 zQz$K8eAxJT=rs8ZFII+0t<`ThIhNc-JmgjacSrv%@TGIRYJ!BwCR8gfzGEHrO9rOn z#A^aG$7S@H$2DVzt1q|)?m6Z_XbAM%pWcp@d5CfoV8Bljjt+yW{LDC>6FP}e(05BW zmmDiaHFPkO2*HU`6dTx=o&<*k?XsZJ=*j}t@F;f$i!_;V?ZAklGZ#aCR;1u&(59x} z8T56Vr{BsvhgN&TZJeil(wIkC$miFLCm|`2u`Tu@5#!_-1O&>qkM_5ZRfC4-h_ICv z`pOrqdZPJR8~VI8%Q=v$RS$o>USDJhqOp{P(@{M73(@W zeVrf(_8mg@Tj5z9qYd>A6r}29W$}(HSMcLh*`tt^;S0IIxOA=O)3U*RaIH7J{M^Gx zu7SU%RHtIQ1WA}hB=vnge^o;xH3Cs4+56h@Med{(PWH9i!0eqeSx1m0rT2cek5Nc9 zzYnx5CX&{mJ7O~6Aj~tU^m_hNMSl@+OH6M}Ki5=k9ygnjm1}ibL3x?Otv8$JsA|e% zdTC&R5bOljZutO70PmoXnrUo1T~vRSD|IlbCinJc5)d!@wEw19)vS0}?%~&Y6-#Va zh|Ele(}U|1fiXCA*PQFlM|9Z&7utx-_(;}$rgL*ZGmR0TD?3`Wp8OT!*u-09=Xw@zM~Xg?oK z6c@pF{C2EGu0<|W{@pSfzDz__3<lxYn-!R37hl(0@gMJzF2LBHMAt=q}km4j2s z`t5OHHMKiaWnYOAuxYR3tmi*P4GFx8R@>@!3AU zGc6_i6I!xuzD(2?=;?mp2k|_h-SGO4#$KJi$N9X~$3-e_C)uA&t8wa=bjJ{3V%$Vti94c>m|8J$_J>{5x2vAC|RR2FIC6@mrv=ifU|Bq5) zL%IF8`$B8OZm%7=`x4|0Aq0bK%*~j(xxr$083Bc|54wHjU#1S~%&G|TPx!7h&i5=xjn|t)#1puxN7wjb~aPrt-?z}B=xctNM@o1!k`Cs%y zU^sSFO=mt+WX(6p#Mv}h_GT>$7R8#4dtntLD%xx9!D0F{g%tbJl(=ir3eCLWe@Uf@ z_I3;1XXH|xYKAy~RLc6s|5qwm{FO>r0I5V~I8#4qegJp8>{EMFJX%zWr)Un4N^Jiv zl_-b{9A1+kh7H~L?pd(Wp=h?+Gsq64F;4l;YFuQKOEHvY#er|qvN3vSLZ+n%7y;-9 zpugw`JfAv;;16a;300bzD*G-OIKjd&vrN&qX}V6R#%w)hfKqCz0VpLFgd0&Ocq~zZ zl?y9WNpF)!KMF8NoKAb5$RA>b0k0N+C~@FOc_z;SA0;9$xZBU@5@ZurzU#&9v^y@G z{2Vrv@Guz3Q~aY)X}_2CQS`fGqkMLIt-L~}XKJ3Y!UX}ke-dn72OCWx0gS?gC{zK( z$~%<5Tn2`qEf82z7D91fK!)F!r@*N%^j}&DR_O4%G`F7kBe1rH@sd0DW(VFCe)k4? zZMSysYqk0h{+M*YOo~y{Z5Xiyj)JJ6>HB33!?o}^*tL4EzQK89LR*Ve^R%P-(-Xkr zX;6m=Z2HvFMz>EV3y(08|KyIDGO{6KSkC@>JO_97f3D@eJK%}(M`1Xap5myRRG{h{0U)UzRK1-{P|^zbpE1lG%4 zcry|=tm@mIH&T<$*@t5@wuf8aH*?-$F3RSv9E-fnF~tZ;ytMMXU={K1_+#yh7JJD{ z#_vQ~Y*Rzs6@2Mc#Fr2`$+R^K+Say{b+$Z>U5a*?rLv$zV)Qrq1&e*PAJ`{~=9oBT z-nYm4{)`L9cPcn3-wLtW+S%V&HYdpEvT4Bm@)Yh+(?ahUU?npg;_sfwbT{Ga?Fl~v zU1GL=CS;4pczc?+207!g#&kVo@$B#dKZ3!6It$M z#I=9-Be4RyVdRE@Yh|2K7A6-TLNr;WU1c4Fe^SIH7rq`FAeW#~8VVjsG6`HjF~ahB zS01g%!6{%(56m}v0O{tcaKid2k~`hs#CP*E$1zNd={_d;vEWzd89zD!n5eJd zoTm{Kwp{G704MMf^^Q9RfD*;YkZ<}vYq>s>w(68)H=Vm!{;9KIo$uIk1?sCvd%~Pl5Nu`4O=|m5)Nc2P!min-0UB!y%am`$Q1i4`#-L7Te0T ztp^N1Ni(A*k(;$gCgd(46bfXfQ()F>5INoz)_ue61aR5GcSIuP%iXuSUv#O1qkcUq zw-Kjk95fcN9C4}KDz|r~$$%AZx0AeKasC3^)tkY}#p_VnZLxR23}VnYxL$<-#14R_ zpPrVS{LR_Yl#ss1#%9a8NgOWWtu0-8@b?RWK*>{Csa~{;VJR(S!umQ<>8+ieVx!uC<>st1gv5osZXf zG&tRd7)`jIXB9azKQ*f!JgK02W>y2C*#Pz72fq`KvY=kfI3=Ypsffday`GX6_WHbn z8(wcpKTJf<^10>tHSk+o3r_JgR_v~^ZTjU1=$9|Mzsm-aFS80Ok|U2EArE61!}GNlb@S$c zT2{+>Q(Xruv@avn6m%Bq|C&WfXR*G7WkV1vl~I#k99_tR_~axIVteMn2!DcFQOa^3 z>UNjOL5Xd}CcIHLjMBf-wySKhH&?^1b0I>Uz$o%FV^xZfHw2J$>T(0wzVU;uP~?&R zhQ>7roeK#gzI2y0c4EJtVCkLcD{UGWn}2KlqPsrRhUn?0cwQ0k2>V1IZj2#{)kk!Y z2wbKK8gUpiu)#C%s?c2jwM-EV;NcLY&(ef$F_)WqqO?oNKeqgkKq@UD*O5FEc;>e(jyr?jS}rrD)!qg%^U#e2{{(wI#_1m*f@C5Y8wBpC`YlEq zv|TL%Y*wHERQ8w}yQ(qzcIv*`0X$Jr1sV$gmF?BOA6XlOd2O@%#VcP$#bx`7j-v>=8wnp$wkV96ML>Sgi(K$ot=}zJ$8w9U;Tg_WC4Lo zlgG#ey#Pea^86qcTa5uI+_Ik+nfZY=it>)#V7LKT$!*ef630@SY6sRBMAZRZay|RI z;Xe$#;Na|PhFq$|x{C~LK_9wm$+#Fo+$s)%;^jK={#`yEVTur!Fj~?J1!x@3LY_Zz zCIM%7_2x&WvLtbKbH7jWp&R1+5O1n{l^xXr`wl)!V=0_3J(i+ZOO8()!dU`%?krt6=m#BXJWrYjs{Yta;|20BRyADAImK>~VggpAz>#5txd_=kWDr!#cGG{P#je zI0Gb);)jKY5#vEOrk!Bc9MpS6cOo?{LnL1D==FQm$paVr4!qBEnzhEI4dZbi=`ULW zyD~`w%kP1GQ2TVEi*F_1!i>yZ&$zN(0m~T3cLcMU*#mss0(xRLS?SY(d@00PB+#(m z2_2p084N9y%Q7=P-QUBbF|P&q*70AwaQo~-C4!F@BL>C)hN78XT7U2O4nyEUo%VDt z(y_dqmrOPzmYX^X%Je9LDWg%^Cg|=cL~MWanh)OEz52{8eMG2*WFi=v+hjKQZ_c%z zvYc+zKtKvc`-|1YzD|F?`M`-;i0L~i3tJEtivHnMEc-Xo5}AMOr>mrKsVU)1nGi-r z$X~S;v2FFMnJhL(-)o7LY(7~nl0$79jNHilKKfH>gShq=OFlyvUErFNkw!Lgl>~|h zkQ9ninY+;4VQwq9;FS1(-8{mN`Eop_<4nQmmPs44;_nFU`?TJiT^xn%CYiB^bJTyT zp;0yXhwyA;reJn%J%>1k<9I5HPt6wle`(RKl$MfdzB} zEQ!wv?3v&@3PK@Brs}FW+4Ov6v;r#Pd?%Im};kGZQ@0ES*|d~H3w^P;^H>12I95Y2lCz25KO6e>leAfj-# zgG0y0%MHU6f0)Au{7}B2RkiQm`uL1lnGM^sV}egqwGCjp@o&1NP8Pw;qi)y&j>fq5 z5_U9c>6kaH(5g;EqZ_C|E`A@T#3H5t8XtES=x%q(!k>R1Tnz}fm>cy;a~}1fscr|g z;V;4ahguycE6%sd+jn)c+1CaZJ3={I7#QUIYo}X=#Q6^nYsPpD*<5XO{H;|60Yh$T z`K^{)6p4@eBG&2kwPm@yzEnl7G?*6kyz8d7%!O$RUWtzl!eTR0ANWS=)^H^I9~yfA zwiZUs3{b;wv4vy{s@PWMkZ=7-E`Xod;RJP>2{eTr6 z+(nsuL&zh(3=M}5r_?;Q^U?}r^= znp+^{8rx%(J(BxqaWc{^u*Dn#`#36?*Ewj(=IigJ6l7Wh?&WVKcDC)~7vJ!+vFngX zWz#f)+Ma#%M^7J-Ga{G0V1;Y4tY?Q*iImUrAFi1WxZUamgRS(PHhSvs{KTSo{;*di z(uBxpeAtin<+DA~B?VI=M6C*w_^~9i$b8-}kIfA7E~-FNLXj_ukGAW2D?=A4RqJ{$ z7aOQl11x&Tl!&@)dd2VVnGLn!o_C&;-= z;*Drql8!0e7;Et(Nurw|W70~Wi{+{&`%8LOh&8c`(|490ozYY?uEYMp_1t47i~osT z`1>dh>)55Y1F#F@fOR5)|BFZQKO5X|fR+9894;3W|JyzFKY?xb-Y%2gv0=S zfwr^iq3RMHS_OTd0o--`n;Fa@YJ_H6#{QKqddHppFJ?Bq>;2?KT4XlYK2K*pdxD>D zJ*O|CfX5MP%tN&y>akp$=(ctGr{9#cYR&Z~PtA8om;xl0Bs(fXlK>eKr(({4gmIBk zzCQA+@}Ln>%(Rpg;5R=IcI$lAbDp?QV{@)Yw2^Ok;S^TA;I}T)rKP4v7hqq+27f+& z^jfghOPFRwcdNW#?*tpGQ|7x@=@Uhi))w3sf>RXW5s5+c!zg|xLWVp^k|ZK2ffBJm#6Ms?<2FwDG;LQf&VUB0fnd}z z)+1TOl%?NQNv0Y+keDJzbl#uYHbiV1JCC_9jqSKOwc>ZWVw|s@9BY@hN;c#%eG#$c zCHb#jZehg;$tF8=`D-EF$NcHrGPndEe-Au-Z6mq#$UB3nnZ(%^cF zNH%tb7R@QPI}QD~>Cxp2d^%ftBh|MDEb}~B)LLV+e6FF+y~V6xm*Z_xt^*!_4OO_rcs4%R@UOx|Swucwnl zSVvhr3yqUhk}F^NcW$$b2o8n-t~`eEIa&{qD18LQjpt)e_ppW76$;qjyvbKkl;gsG zJ)YK=00_f)l>K;Zj(-q*;_jg_OqEJwRo*drpuWFd`B*R@Z<6zBt~SiZl5MYjG49%? zMAOCSDlca~k^;{g>^1O23E!OZh*J~GqyZau1fA>csN=kGrKH?YmE3UBZCK!2Sc+ej zVT@K&I%~?qf|gaPmnEInP%PVzBxk>%-%ZpuU6@lZ-EfLG-XFZlzWePDch8OWg|4#6 z*sfam;&;~_(3^?0HPcO6d@a64(deVx%9X8f-OhcTw=T-1*YDcoGBH^G+n9w(5+AP; zbWl`TkPJVI>8T(%^s`V;-MraTA_$r@Qc<{pPy`Iov6l2T{0! zsv$rcvoD!(@Nse0e0K_DM+Uw!w5gcIS(bMO+Wgou;1l)|HHct`bYyKaD%s(CFX zh*c3o%w>lzrESO{(PfRd*$OobS+NLKdW{_0#H(a1`UiL{6T~gtyp z`hpB<2N^}DQlvA|1=V+(+NW>7{_+}}Yn!m3rswE-t8 zcuQ=M>!ODIpv)nmMv*CYgQ4~ddqvSSW<#NqSNIMpWiE&qw3$tTf_^W%jM{~j=XJ%R zPs_6c{BEJQ%;?L8De7YMf!#iVZw!s+6oRRb*T#dS%NwzIOC63dbJFd&AMeQDP}7a; zk2fT2>%%NXFY&Z#L5qEkg{ZIasn)!D-Um7b(*`dmFa`NyX~Q4o55A~lX$2<}|ImHt zuw;$7jfy-)dOkkR^#pgMR1kKq&CSMR~ zoh@6#G~O&Ai-c6!KpxwBHV^T<6jRKr3W5EJgAqkC6gO>YAr{~jFGLkYf{)}If>SRG zsl>)M6u>xv`>b<#6fxs(AxfUVm}m%hJ0SxsnwEx?JSVucHsVScsT%Bl@WTDB%*nwJ zoMvXUv@(OGMCpL8UBb=iNgY4TnM~qCwNgN_{JK+P;UCrI!PjtA&exCBaju?}$y?D* zI{yP`)_eI=6R3(c{{{B%Uu-mDL97UXn$W`kzf=?d(QpGXrv4ulQAb_-Z})=6huvB; z#+NtvD?&&VJ+zigT#jw5Q3oIe0-M?>et|L2g$1X@)7+-~lR;|bW{AKHz)XNR4}FB; zoew9cbvthz3jmL>i9Wg;xf2J}ffH77wg6MABt%8l+TyReMhhK7=Y{Syqn{~VG(D8e zWm*8zs)}ua?P_>wCdV}PAi!!(0iMcK%(LtYUz+V>gafeJ`~JdS*lhvhMgvQ8D;5n||uX#Hj^FAdE`{ZZ5yGlf|1AJ_Y& z2?R+`SuD>U&L%WbW62eF(pri55u-vV>{a~TmIR(iZ}A&oO0>z9&=pA-uAx*&6UppMDx>&FQ&A$fjq5AY?7vA)>k+mFRd zlq16~J=6277^*~@G^wmzn3LgA-6U@Wm1HYBn3v1DyD0YOS;ZmQvT&+cocNNrHIbd}<$7XD=4NSHi10M>Hi1F>ud z%Sfz~(a(J`;G3*|T7Jv~n7<6o5k2I;$krM%_DzAbzZ%Q?{a)aknWFakgI4#Aw>p_= zQNBKki>tRCk+jy_`34u5owCK?A1@-p+Qh<8#G(>UCIDpXwy0nr{3f31yhH%mTCPmI zp&zqswJM{+A;D===jGy46y!F}pFZ48oxN2=-?H6Wb-05p1uxewOU3?oc(+$9cXc`5 z9+M$_SoUt~@|Yp(c>PA~HS8y8BMF}SrjaVCG(l^G`s?ZR)}q(@qd@#pSf-{d9M-tW zr1Sz{e$kgOJrT7ubSeNl#K&3w3W;Ni8GAM9gY1ov33Rh+p=hq$(tt7 zFQ889`2dRMPtlpCAacP-MmVS!A|LC3&N@l*mRz}^|JCXH^#C>n2Z~>qXOfn+1>^>_ zN1lI(=kNQdUNqFB-t(;lL;Fr!ZC4fIAjc$KXf^$qk0EIvz`iMLwE8UE_E#m)vwAnKgUge{QRTvMF;_t z3DP@pOVKFmjSKnOx(p-Zd^xbIE|!PKg-zm5!VCOt$r+DqQqpnsY>k}DXl1L)+VUGQ z4!Q7Wi^}Gcxs?wN_B@zUs(y24ctuA2P5XsEsG97`k;1gG?Q~b0IfqT-2r2>`kk${JgFyO&c{B|4{q>|XAoPWgBMy4N0=cUQ@-h5@t zT`82!kD6rKYYV6#mpZ4xwO!XbHr57YOn`D)B5*+&@Pl%PO4kiabE3|+@F?+#VK(fF zq-wLsbF4OUwEcvnxPP0@^KD8kwlJhMkx(@PoePu4WShHsi#wugWicGezHT5pQ~lFK9<|xx6#~N~-039RY%gc5swp zzO_STXIO#H482_CH1@4G7S;%=d+&UTs&+nodpW@5NF+G^!1F%aE@~~#!b2YkEa0Zt zfs3Qg+zW_g=I-Cvd#>TtHVADd&be}*tV-6#$s;rjP+(k8CY7breR{OA*W^;<4FdhkF6E<>3hSVWv-*Dfx|tWf>_vlKvq?2vtpt)loCCY6091VU`f zTWDA6sXHhmJWzxB9_lg%yT!|AWjX_Y}gUuZ}{!o4A zk55c65fHOoO?3QW>P=mH9K+>m1B+I>&)CdwJM-K_EpWuIvPvga&vank4Nkue3kuFS z_w%u0-$bbn{mz6T_~{(ufeO-)w(AZw5z6nGL-+=dR(-~o>{H~W2p&iF|3@2u1DpnU zt>aWWKmeipjJhT7jvK^A*zi?{NPB^J!Dyqlh9xRX zlz>N%0?~e^x8Q2|ui7^Pki1wS8st#9UuIXDa3Y+yVq6wlk(b{EwJ58G6-m)V!YT;L zAP@FZ;m*eKMS9iPk*Z@<=aYVX#9r1FH4apKq z8+uyYx8He&{IA75@=&qjM;@Ph#L+wP#>xx(RpU@|a4&m#dm_yaMi z@33kRmrXdp7QdnDVf@LA<{JTIM?WoF3E|16;}-*FP8jx(c1vAA?OV{`(LZsA!$ur3 zg5-e3zsXS4DX<`I8>)h>#^VmBS06EeETAJfiA4PCGCYud6SeY~iTgGG1K={;lOc{7 zHm|J4eM9d*eUg`#YEvF;k9g%Jym47Dl5UsmeW#MV=@7Z&K5>c!Un}pc&@Iwr$|II< z7Bss|kO6Oh>GF=;kub6-@U{4$*o{`4h}?J#4A=JnI%hT5_Nd$`LZWU#a?f03M}&kX zMDxtIldAX*T+OP41M+6ige@_v0)CC1)my7c*dR9Rgpzj$ReapUXgw5Qt2ber-$|Gn)K;CE(};LDl2xF;@f7yZUSTf19Sp#wJp?vYTXU<1A< z#b&~1-XDDJht$F)MnO^J;DzKv&WFo2;ze)yEUcekYF&O}v@KE88h!G6S0rNg{a~5^ z3(GaHQ#Ygb6k?>_i&koPmslzE9-+ zT|eg-H9HyFB}>pZOMyu|`VeG@oI|JO@~8{^R2|?QPUx;;zC{mTBuvt2J7$}lFuK|T zGE8(=*|<)NfBiN*zg@+23u43>73!U}*au=}Yj2NSCzDaaCSx*Y0bUA^GGztxwP_pY(-ybAlsNH`5?W2S%Q@)MV~7Fk z%1obbq2lIVHCrFmx8yc%@S*aeF<3L3HIYvpmHg=1HJVjRbx(T9URATh?q^h>l%i{+ zD~3fmmugPMhnUbLR0}3E#l6%yRTnPauR%X=(mx-d8rfwmzyOy

qQ2?It~x0y`p`c2;c$PmS3@X2ef22Y5Y9`RIkZ@QB&S_34_AE*+Y-%$Kf`+m zrm)Usw|FKvP-LmyG2%(9x%f~(i;uFwoY|y|%t{UhgI{bnCQgSXLoOW9+@xi{Roibp z*KC?QF7v>2r`lp|acJqwybjIS>ru2DgE|GJVc%an0SlsxD<=%-5M(8QaUTs4QJ(|0 z$UW9LCY}>D=+X5h{ebc`D*}hEFN^!b{j7dm=`h1$G_)Sd(@v)gfFj`Xoxy{s`Q{TN z9B~}&k6ZhB(yY<(8#S&taG3#Hnq~i(Dpy9jf0s(Usb_5`6={xXJ$mb)o6vM^Hurx| z7*<7TXb^kWV}{rmee$dvO(;cqhKHm2GZpR#OtCSIlR)L-yR+-E4xCo$eG?$5#~T`! zGrr(?aR`Ts1F|_VSoDLu*8PIG^=VlRz@%g)N+V_vg#h(W zh5S2turV8O8O$*TL@~larGMl=H@6|qC3DL-a)-lB)6@;R{9?D4L*yxlFrK;S4Ap}U z#8%W4|Lu)=bTP*}-)UCWE81vj@~P}FN_V!fCMxUs!(^;6%;A84A>%0pryG&BV+6&8 zM0D|}JIMIg!sn3K;ZJs_j7NPbK&vm|+X2f)EK}LpyJggKmEcEt<=Kz zZ~4jv4AGn3s*Mx-`S*1^8XZdec{eFE#7Xs=I zTWu=T#4|7Mn>ww$SD8_&js|zktj55&VTc6zFUC>I@pZ3Cu!*%~IH#kFtR5Q?)D`OWT?Ar@-Gl*lJeCP%E$YadvD?SXz(%sy|NLl$T`2LI;36~MNzW7|b4lYknn zrdyPq2xcczaTA~Cb*ZP*W##-<_sVJGB=u`NCJ%!G^2TK+-lwIyU%wx>Yydvh=uut> zPgc|78D7New-pA=hS#M)0Y9_N!CIQv!ePB+cHhfL$ePYS@%0vy;FO->{S&zjUJ&9}2D z&AUQgP5#i5wE&`i+2yC5K&J6<06?B;mMTC+U%X-G(iG37HZmAt(P^enX0i_`W?t{G zAefzU$26SfO@c-yAQZNCa&-lMrJgsH-QMNST4a&p7PevKPQ%WxYT)**unJ70oVD&m znt-Mqm95>p&8hv-f`TS1{utwlC91KlG*|cBOokglSAA}(3E_S5e z)e0x)2%keoVN?mrG)^&#my;a~2EU|##QRds5S}vL1Ly!_b-NQ}(eMVE6w^6J*)#wF-!l?KKk&nh?YXahhb88#FJq#?9}I%WxzktU=i zeUZm3%4q!1+H0#S;kcksX6uKghpP9E3Ejes869kT9UXoSCjtW*7)D6t8AfpxbZE(&8h7(vS&q8&^R431nAL zM>LRHyj9FPsPbVnV2my`g$0}e4In@oF%^*jR&R^5RRGa}z+N4~blc|c_-~=t<42c4 zN%!EfY6K6kxw|e4BFfJ~z3+g!67itF(Sca-u6ctLf|<#TX{4oQLGe#4SSi&r=PQ_X zh3JAZqoNOY9DOHpv*r;J`5AiPQfS3FDR&ilyl|ou_`^c5_}hEo8nOjy$fX=9agnzg zlSiaTp~GGki~_?t{>7+}vp@Ejdgc6!-4zEpqh~?4b(nxrguT#B7=q1nee@uwVi$sw zs{O{tiC)4zS-IPKu_qX?L>kn9GN0%lq;lqzW7=3^UkfeV!HH~xA;`(Y;(eB4w_xh_M&psozbk(oi)uxjuK6LfVB!=(W#ey>Lonq%d-v{5&q=0h)$C;LQ4%M=1-d z`ZTf*(H9(mFK(17+Cij}L%pGz^>K4G-4pz@)&dxk*pfcW?Hf1Op;g|U^D}=aBow!f zhj-sFSw1yO4`yNc+$%$@No=Vg3r6K95L*LgBptcJXhQNwbp65;ucP+cZ`ZwPkP?c^ z)bYulqD&>iLILdHwPGlaf#{D+E*?VZhSX`lbaQgyq66fQvY1tm^#ckp#FC#I-!~ZQ zP-m;sh?IZDY`63pExH68qV^x<2dinQt?Fp*NMS$T($1I~93NxM@EAVaM{OcsL&Iq6 z4JIXMN0$^)8&AS7WZ7LEUG;Jw1;c0Smnb zKv&7?I_uUxf(dqWHD_4*f~Lsdxraw7>On^^j!zt7oIJP^6HOtpSyHx^?N#i}q?$FI zNktE!s|1+u6hM0v^w%pH{woW1R;ZW(W&hJMuJ6*y@Wsd$Rf^wV=Dd|%7sm?bM$F7F z#F2SNaGzX-nY0e%3Y_Z>jcfr`C0>am7JL!4P^maIG?B8dbH-k9=t6=^r#fiBhZ(Ru zz5@Bm#8cU`^&m9HVde}twWE0f$_c&qLowD-psEg|=3=sA()HOzU7ZVY$-rgl2x%_$?Q=#}_NXLu&*D2j1>8l6Q6Oo9D>jp1ba<^ai&#pZlRfnzj z)V;>F1VI<|ydWxbUg}N#vkA)Sx?~^HQp>ANdH7~Uurs#NO@fXT88Ne6 zxihOQ3-p`~Dy~?W7Fux9PZ^n*HjvZXDeG;FD(tzLhwh?)IuafJWcAkIbH1yvg|sUr z-qSk%g)>&xr$CBG7=!0%41ydxemTk%ha?CKGJ{tYAWI$bqKWza1cmws&uI7c{kgOa za`|>N_IFYOLh>KwrZmUkVFA0D<#Bi%MrKabAON1xZ)SNGaokGekujAG{?Oi+#oByH z#MGTdThEZ;awws6tY*@wqi+2R2a5hOD;JLW3Gljy5~Pm&H;JD7F-}8p8ut4_-5~9YzpXYzodP`lWEx_mCu1rGP#7rv&CXl8`bjvG+IU>yn$BN`EG7t_cw;Gc%R2hc^7o` zcQ?c`4}ytg+Dc;iJbiRu9esR^P=b_P%D1VG6VZPwMlL7aOsv&9xDC)#Sh4ox~t;*E&m zMGsqzg5Ne;d3(E_U7&saHs7(8{|746J~q@_K|nyD^*3->e+T?d6%JqY*X-E;m)X%& z4FL!oTC;;F{;(K@c}HnbntLv|E!K7PKvEj=62KZfCn{s1JIeoMb}W#Ih|;vGq|zP$%nri`F!+Z+0PAJW zLY1h}=Vbp!5v@j1RGI!sM9D9R#C~y*F&W{g8k8yX;t6sL7v*5JcF6_$R2eMXMMY4?0^o`_zw6L-pF}&hBEDnMZ4;72> z!LDi@h>kf4I@sY86Snit7>GxpLc+BsApptXgp<~mYz4_NT_K+5#A6XXxshGRBl`Z=`6z+xoi3`srNt*_^Bko zJ6MoY<<}-%%PEoBX7UL?`DasC4R(z1zLddBn@jH%z$S-4`=|n%0*HsM!j80(8WROef7?;Z?l>?5E9sxg)tBsAR z#OX!k_n?k>eNCP5cRx|tCswltMf3*IU5DB8>XeD^%+LEpaEtL%ZzO*GWcrguO<+UP zS>*&z6d~aPrFwJEXnNaMkEygRZngRbhG+_JF~oO#LW^*HM$o$CYds5=sSam&a$Fw(BI5bsuo>@iMA%}#OJ4LFn{1h$OZ(e}*4y@m_K_LmNv(sq zc=)1~_huvfsn~YCfO7}b9B>oA!gUv}xZK(&eN0wKo%4?;`{F8$+~Q)>7L*08@|X+^ zxZ=Z;wtW_iO7cA-p*@_cG)4eS%W#cJfsD5f>Sg!)PrRM{2V{QqVu!wOmb1k@e)cn! zui*7grKKQvV3kitdUt!GiH-BV_hth>k9SBcGgUZjsfmwYl1cVVKU=0m>i>ERykyZ5 zS?3v$R}p)l@Ou$>Ba=^2hpuf`bCRcjis%FM`h*~F-l5SAW`Xw##qg;?sB4UOt27< z_LPdc0$9%tSkr?cCr&IjMSv-_%Jn1_-Z9xsh5@ZRr)#_B^C2D!U*RCiT-9PHJO6PA zU6c^FXI3i;NTD_kz+EV%lz)R@ufd_cMglN{YG5E)qAk|2jkwOhe#&JbZF&_tA7@q3 z_&v3_#eq@b{g%pmMTv_^y`#CA6t~`IS;+mzU1)O3sE#L0E&tT{n`>N5!?JRJGAw`0 zld9;J1*1Vft@QAEf>F-Eh{3 z6vKVeoakF^0-gQb;+BQDBcj@55-fE%w&P)n2-CSa8iu|vNkdd-pxu>07fP-4(keuI z7+=W9uUAiaHD1T7o6PEB^AG(w=S#_pG{(@_t zP$>b2%`>BM9vt6Nhv7D9J2|r@xE1BN!W#K|{wSFDMZy0wZ1@{%RI7Cwy{&_jsk5`Cy`7w?i-o<3imQWzy_1Wn$$#=1Z_1ba^9rk+7yjElrST!Z z*NXAwU+fD>OG=-gK~ZelC~CnQ1cKvYXfDQkZ1w%uxSYH;V_Z&CPO9EUc-vJSAmylk z+}+PFKg&iRf&rl(Ew(mzba!-T`gIjAs7-i9B43ivmi+VLyu&p-0Lo-^u=Rq>O!aNs z=e&^uqC7#_LU7hSb1w;{8-W5zNjF*}zbKVd1=eJLuinvVmq|ANLN+GSce(-5?)M%B zAH%H&8#8LTV(C)ZQr6}h_!qwUZZi^~cywKJF2(Bnf{=i~>*O@(zTyemLuck251O?! z3BPbucDGj9!-8;HU|5biSQv_oX7Cm&hb`|{r7wTAt0|hwKo}k#ilm`Xdb6|RqChl? zJiJaeKF{D;W2L7U@Xz8uyr^VhOl0n(Vtr*7%Ui3sf6700c1L)UGn|F8fOpvLumaf} z%sYk7LPKKuacOAI!`e<}TgJ))%X}};lU(vOY{mf%TGUgUJYv6qz>5&cY5nG)^3uBe zfcoqpG^*lRWUh<*=^rJ?(iMyQ8hak6ncpk1!>|!@@-%%YVlq20S1$uVYzrS@nB4mH zP(~t{L&&@-=oyX2;gHxwAQ{TBC|z{aqc15kev!BTBC)fPZNoH-+!^mVew^uTr4@CU z)3;b6$8CQ;uru9lZ&w-ZHR9la5%-;ea7GSACXIw3vJn%B(g8*{fdT_oVH5Jagm`lv zTmtF|L#CQ^)i@Fu8aCT1GoFwu+809K|khiy{4`i)R zr52x(&IcTRE6LDJ!47Lu2;EY>%bkC_&_$GJy%ya%#uvL`n}YV7{P%~KZ%&>4T~VjM zw#iaS!~hLfs+C@n7mP}lpC826-HW|^w=m$dK5Z_rHGD0Dt@t_rnq;@Y${oy@Uey2N zS-_a{C@G9lzjQIh|I%!{1+nSv&|iH=`esz4v+@nWl#5bX!+wU*F>T~ z61&~-(`xfp@sPid@;JERc2T4CHZz<0JZ;OMrI1S#ZJvYo?J-tY>6x&a&Xrt&WCv}k zuGrWHQT^1k#{YTm<#T7{E{sGv!+O6UUly9Esjr zH{ItNr4}rAzkUz#Dd1-d;YUCLy5*nFB8hf4^Khwb!mfBs!?)6rq$-w(bEAnutRtG7 zCKmP)Em5}pyZYSK{7oC6OI4wts8}_r@`qyN{x|v05!}v~g|p2=x6B@7GQ*O;i%*J(eeG z{eYarl)ZwIb(BcNEDSM3>}&uB0Tk?&BIhbU9C%EoW#nc-M=zbkWX7)2N;AV5F*g_I zbBz zZqiL{JIYe?aS4_T;4#A5(s&%@R25yhJ>Gm7m|sZ-_Oaq)D^>4|p15okCAP(VGgR42 zvB^ZZDZHtb+47EhJ}HrD0T@C56tD!-f4b+S8Hv zmo0)hMlk&1F2C3|2MYh9mh<5Tzl{+L2k?vs1ds@fNBft4#RsFsZ`4HfKWRYuB13hX zRPSIdKx@W-Ae#f~UefwnQNDdXZGGs1oNP0S67?5A%}0ks=p&Ow8XVp*ReUgUNGM2~ ztyi$b9ZXk2I?}zLyypb#=Qe962OntgHHKq^iOL=E{QAN9gEAnzJUFiF?M4RF<|Gxs zb&|`><>k-KvE*BQX37e`I&%Y4G44fOH5e^#r9YT33Yhv~WyDBHV{Xrq6qOD=w^HW! zL(Q3F3T!^c(t*(GdkuFsM=onNM>CE*E+bR69sqM~=eppsy6nUgi>Vp$OZjDA4(ptd z4K#$%xv6BOr|R=A+@bT&!ZtM*HvQe>pi-SPH#HBo7P$BdnxrkH zQgV|6sNBMwyg$F=|&@j=SN;bnO z47^cY8H%N@R#VedUVa6Q=(Vn_{XeX|Q+OnB8|4|hW81dTLC3a}j%{{q+v&Jt+crD4 zZQI&P&+P7ebM?(Wdr{B7uB$Fyo%1^!DAyC8!2em<8QY&R?*Wya6(A#!{r|DD|91w4 zRFtxRHT{2o&jAL8oxjg6YAY_7ZUqU#ZA;p<+!~MoZNZVS%tR#!j!FeJ>k8XCG{C?x#cW|RPl(95 zX53S3ENr39#Wb-pUL!~u2$z38N^!g$2W52}*;7=z!y;xk5>mQjw>fBNoZnrE^J5f~ z25lv|peuzcI(0WC)Noonszo466|kdM|HJY|5d$8><#+64A&WzfK~naxKZ-%aH!g75 z+U1LJP~GViKt|q)OCk)TE315Jk^NU-{nsp{NLX-r_a-sBIhIeUCx4YwGlAj&1U_c} zwx7R1Lu7i{LK1f8@e0CUO$kqVa- z(T7U>I$iiyV`LYA6ek5B#bZr+JelmRUzK(uOJcJ%H$4_H0eH-TM96dgx+`jV1CtH$ zb6{Xav2#4Vv*vY5xaq;I_&pvjZD1}7P3TPFLI7@RmhKBTg+}%RRygbdyt(arqEkvL zhYj%dMCY-S!a;T4PewqP;hYvb<8|Mf#7UnFsw$gC@&z)oBMaWo7H!_xaQU~aJQRMW z=pA7YM0Qe(G16;HZn?2g>Hat{FQVeSsr3E=3t5nH9%GA0b>)KkMojAahxocneJGGq zI9fy9{2xwy1qMXi!T{7b0u`(PYC`o|h z$IZYYDQ4~0eZL-5;jDxGk5hk+$V`w6bQfBp2iM_@ko+3duk}5%fgFYLbjYjmW1~QS z@An-8RXrzYl+2G`I|=XC1oS%H0Ep&$T$KybTQbj_hmBW6M-xTi?KejbdGPisPCeI* zR)(sC)fAs|(lM8qPL=B}7?+$vQY=$4&>r75mR`_`ZzpJLJBQnTBnZ*fhc$$ewK`lT zm9WEUMCznJv<5UZsNZq~w!8{i-K09L52CijW29)mgc_ucK_?yaNHd?)kAvQ?w98?+O z(&wslR)#2dui|?vc;W9=_3Mm}5P;gO>=2eIJ!k?LUw{0Y&Jtf7Jq zNKBJ-+-uueVnQWN{*J(R_@b>3w1d*XT+PQ$J<~#K^C-kEnPAxP2sZSV zj~MEPh*wA^HByp#ubE7oF+PDB!GIqN%n{R`DH!YFx+pnEDdstklgzLfpCGE;&0KOI z@XY@EA;sxm5GA{DM$F@t`OIzFhs1)O_LDta#qWkuWVLw@xokg=AZX!!INxyD(tx3p znWJ*4RnhYtdI3)RRy{)Xw9NddxXcW~zf2=l#20z3S5mHeD1N^1l7WsQiV0BuP^n$z-k(;$Gv^G#;&`>4qz$-K&iYd zTy79~lDu`xZgZiUTeWLP4gw_uBROJ{x0$irolFw^hBC#JVPI1_gKBmUd|99uSP)Uv zsR5?KLTx=$*gW9U6m*PQd{OFBNj*$>1DGO+^8{dQ7n-R;HzE-}&(8~lf+w0KORivL zJs)N49tObi$77;#u*m@NQIY0J0LF7QF=-ivoO{} zhcaB_Xkm||8!#?bQc1K9Vn%>AVagt3 za;TV2{-bAOwUO9 zBb3CK3W5`b24A@5XutP4iYJ5sL2{E&WTzM{GQ$?$ycXtJ4>IqGs1o}*5X0va#h~^J zE@R07d221f(Ns>lZaI&fX2iX;CKv*^;OmLjZDE?-LWGZBH_R;@0X<~y7!l#A9A~WhM2Kb0MLM~=FqQs;%?q;7Csxz z8hjPm3WSP5VG=Y&hyCCa1@LClma=x}KxGxd1Bsk|akcMAtcI0G#rILp|ax`I0UEC?)X3}aG0{ZF^sX;_zk;M4Y2@D zw~$23G9!*>c3#Iu+9S4d+Se=Ejrlf(!9OAk0iz7KkcD2x_QpnDV8de z6cK593O#cc?&jj(G01w+Ox+(y3YmSP9k392sjSVTsp#igxLhDda746>*UcN%dO2&e z=B@T+3;)~>$n+Gl=lF6%bZCsAA1`|Uc&T`Gc*cmm;ADZ$lKOx(6C6o|U_uN&-qv5f zVoKEq5{MVZ?TLc4d5P(LL>{J$v$eG+l*((MZ4E#Q-@-3hS;pZa1g|{`NhqTsH*Mm1S_K8ibJA)}bcZs!yzQ3O1>EezU86O+a zMYaT3Lm)9-^6|#NWDL!pa2swadzcrP$mmBj^1^zzC4O%9>c)LIKH!n^VxN#}$= zJ9~`6pXVr`;YKyx&KOdyv|86QfHQ=+aI8co;541XL}aI{t9B0U2d)E6h{!iIg)H%o zDr#6DQLmDcLmbEEo zODxvaso62;;lrEpUcp_pc?y$vr7QMr_uLO$|Ae$ehbGX=QkH=}&*lNX1V)$vpXC8j zDu>=1DDUA79x60eObyy49Y87V#Ec0rE-^Lf-En5l%2!$lSCkG2jgetE8b>Mm_GjC;$})saZV&4eM8OAs<=oeWm(LNTLlEQr56f$&atmL zZMtm~zE}=Wg&lxG~q{ zQ&JE(q{o8j^$;kk_DdZl;o!o(iX8HWaDcHKzah$mC|5;Am>wu^iJdn@_z^LPve54l z>bELc@6c#67b50rA+dB|Z;cSsvURl&??dgvS=18lHpBjS(=2SFWu3IpL%0i^;_`yG zqxw0!(-=>A(X{zCskpx<=g1|T0qW32Y9}>Acp%OHhcfAM@Z~K62ALxdvw6qSlr?Ic z2Y6beJ|eb-iAzIpJty@$;*e%VTm9-fj&B6Yw8ZF|Lkl>fX7gTU#kvCpXf8^AK$wta zQC-Vtr-fc3E@-qyfWE-9P!2IVVZDrwgeSz@KxoPzr(Ajm z(V^gKdUWj~SY?BkucbA`mgXx=_dUEFy}P{ea6==BLlpXcWSL;=UeqPtpE=%0UUV;! z8XsRN+4IM^iH)!Q1h$+o(o-ng$FEU4_`#9WHi2EF%oHQZ$fw>2p-2!m_pz+__luOz ztTAIA8?T)<5HmL={wj7*%}$^{`&?f@zUl7x`5~F z^N)e8t8A;}z5h(Q;E8OXk;(me2BhJ< z3q&IrzfnB0uA-M$suBV53Iq^vJxxRsDgVn~RXzdaueuMi50WEF*S1-c!ew!7I`UC` zJ|A{z5)gpOngAe<`m3d@L+E}}D15LK)-(&dE0Cv#MQrm>L9sawp!da`HX~Ci8>k?q z7Qnap@&@IWSy0+*3#t%juT1q7B@1z@Pt8kYSJ4g?4coU7E{11!V$6Fe&vdOxf)JfG=TvX-{>2l z;+I>$*E|$xorV$SrbTfA$U-^6@=X<|qYuW2j-}f#H*>_YMaKOk$Wxjy4YNAs&_Z?* z(qxgV$fu=6F%BlBA z%rtZOO#Yf9<~av_1YunqTcRdk@7;vt1d#kOLG0{m4%Uo*Cq*N_(t#39@a7LebEq@^ zZUg%KDwr*<--O$Wc-JKv=~Qb67v|cFouwEZC5vJ-!n}ZD|0bBrVP&-Y`#tajzIV~v z@2cXJdIlpFpO(ct1Ld99OoURQq!F1I8iu17n8ZN(E|DsJc7w>~fY9>89?~#2B~1_S z_4{qxMaJKFp^+!(^5uM5Fpcq<(<4LG@TXOMU>Egnyq!h6k_)?ZDhj4sU5RrxKN~Br zNj-Sxn1^%I8Av`^xNjfuC{;x8!u{>9^_{4Ur$a-hp`a+e>AeiFH+Yc`2wUr5ADbX8 z!cQv0X!h>vsRb7Z*90i)W z0ngaxv|7j{Tdd?Qp%LrLCTUhY$n;98KUp=dMONp3M#4oA2KOJ%dzeOK zhMF%{6JjMncS=!X&_SB>5qU;)s~4zPk0qhyCvImq1Lm0ldd3iTDl0wJvFQF7-IWt) ze8`+64rV&EX~rD)S%SIrqH)ppzL6_VfYRAi>~;S5<)e1=SZu3?=@tTN7Sc z#%pIO#6}?mq(r?EhZs(BMi+h&g85RPA7T+E#`N+HVzY;amY1IG5360@G5EB+2CW)# z!)@pi*g1`7Rbc#)bWyQv9b1LaCSt_V1L?UM`QM`NIHwq+huy}Sb?ZwhIE&(# z`$W}1Is(GN)^2)Gzpneq;ZwU~eZZv%Sxk@nB*f1hsDK4SCBuo!A!ZKL6Ho-HXk$0L zhtd^(wJ?3$22#p46)`VAhZrN%;p_gE36Bb^P{i@@$!Rn@rL>wS?b9^vuR1^Dm6 zTJC`2?pNNsbS}dbEVIB^C<6s3?qRpDN@`{(z`9*zW?YM1~{P%CxTMgn!c1b}({i|14T z%3IduA{`{o46t6H$PL;yIG;l6fyf=wU`1Abp@~{dB9&-h$@31}@BYqlqKyt5k_F4| z@ud+=kSMf%mKMpN*Jj=U)b;{KKyAn4pn_MQmdS}@QI|?aF#lugoa-7$Z88#M6^z6Z z8~VvKAUyNX^|5?@YV>`*Yak_zZ^u@JZr+9aK9yy96>FfNZE} zuvNA?&od71`APKiX7KTZLgq3uk_l-Z^%bXiFW{YTX8AAfl2K`mG2+^g$=PI+G!;wo zM?c#GW0*L(Qz%0_=P;fDE$Q;>&KtwXnCA5yN&}j}Z0*#XzF!Sv$Ushj729q+%?dVWftIQj=~+zmWglSzCrPP%}5(JHWJU_RS4`MQEoljv%iNRXFr+7i8-3RbTf z{y#!e{nuPyU`TFRiNpRsAGbSKD7|>{MweStZukR`Rk3WdowAB7Prz>N%`{_lJ-qaDc4$)y#^Ll&8g@Vd!b}dqwz6; z$zQ{R@8mb?tcptX@A=Ej-=Fl`!jXY~Ztu^J4zwzh{Ka?OZdgZ6 z-PWEoWL?=f;sOSY(npJ}WWUzTWQ1^J8I1sbVs=ZMu7%EDmb@1s$~AG25caOwg!0zA zH@RNhV)!a{Zr2-xszn9kBp`@%VQosX`A|X*0n*@+tHB@i6-=4O4CH(ZsdK%c^?>-T z1}H%Mmdjs<{4r8e)CKV=0fH1P23{G_Z~iNb-t-dO{z0X~FFcvkdlf(O?c@dC0Au|n z@^)SPA`apineRLVWgU<%t+t_$WCj%)vhwTc7D?+Lb|I$yABO}0Qgfm@A}Uc*DDD6_ z*VqPrLwO*r0+u|1OlNKnX>LL;@tR(uRi%JSrbqY#@$C#9qxS0W4!$(hhh|ulw{Olm zHF04CCWRZG1>;=hg6{Q|@3_eIDZiq%ZRLQt6G#)AfrvU0Fal%3(m+zHvB37^&<(0B z*0mZF1UrMDFfaqU^+KF4>h4I}9H~{K#f2Zu06-+*Py^CL!|Dk>6B;HbUfL^o*mj{e zOp~W?A=oF*3JIYta!B`y+0&FhhK!JLVzSTXcRe^mhyiWjYixtS2&uPpBlF-By8!io zeKu&0KrNXA!1mR;9T*|eNp z*@8L+f$gO%qfk0%^)1DU7eVglQmGfK`61AQpXBh|ShY*1x?QW$h-skn365qVR3DnY ze<=&CDXeA#tY`}u(tix(8t068_)pp)4F1(B*p_55&$W~H3=j!75Q26r3L$HYWkv$4#nfn5TXpkhEi-D#YfO&s)mw2v8Ook*@LrVNvD#or%U-0 z0RKVZi(dl;Cub&gqNCAXE{XIc@MGeB^~k?^40W&nn?j6B9?rZwRX3#vdA1h)`B5e^ z3wAoXl6kRE{iBXgyY*ZS;o0Zd{&XN&WST@|ZH&~SRnedS23=&p_`_isM3H>$zMUj~ zFh=I&pzV*uBq+8p5m!XYAv%$B^Wn7oNpejDqqkoeeCvE4?G)*$Ir^dBE)(SH79VG; zNOQ9gdDCxsz!bj!eEpjRj-IqVNaSpTtiEppHDk4_kJ!*%2na!zh=CiUFWhO7{e)Zc zUE*w;Y2H_ke1n->iG|1mkHb%bp)D6xn+1-X+w2wg4C#XTQ#)9zl4zfWoiL8hS#{be zhoG7fY<~1LrUDf+YKGFHQa9tVRcP(GrX~nsnR(Jvg)`Qe!RoP4UB#)}(#)_2($;Ch z!_hAC6Huv(Kv3ajjHG#?i$seasUOCiSsl``8H{GF0%HbE(mOMGt(0yH>|lgE*`<8l z-(U30WOas1Ya+j`n9U9C9Iw+5rk?@w(%b6bIUgsE7Vd!`@~$hx<&Of(8!)vV!i_*T zZq+$=l$%HKs%+!?gCr5Gh!#NJ*P0JiP^uUCOzQwLJSOIgoYmk_qoe5{8Bu%}8+)ac z?z>Q%p#k6srUMp47FxSaH7SBd`0%Jyh+9X^nN~??_HfkvmV>D$YTyKB1YbtlswG@Z zv99yW3aH);uESn7Zhcn4YDHDWQrfcd)adsPg3_5vm~SQB*u|`PsG$#!)hD}^P5Ns~ zz`HeB|B-osX5fSPf262 zlSX@6+}KLZPNJTgbcc ztQMXBjRl;;z843+GB^c(Fvx8er<#}= zO{AxuIP2RgK$o?|*I@lxMc8|3=&1$f=w`Q!S0b8ouT&OQ~q&AJkvpCnvu^A*yn^N zPU+qFS07NVwUZU$b@XUSP8JL~T_Q^1*L=(=r^xVM+HE%^#7!7#!qVt^FRmhe=x2}XC!K3;Bm{AwWVIDVIQtIdu=4O>hUrUnbo z@NSZ?Q-f>-#F+ywc!oxlWp|5-GHDaKWt%JW(V@uY%dtw3;KU283o?hLt7oEALuoqB zn>@ponK-wx`M$~i>&Jxip};Kxf)ZjfL!N3IP;z4!7#j-!*pX6oDoBQV7Eo;3L_G$j ziuf>Pdrp517vmy5udHa&;Jj@|5Gk5?@)7eXgR6gC5xgQZ5b(o4*irYPaZD58(g;x5 z!w(Z^KAJT>pJ0DPDG}#etxuBXf3PF-Q(M~OLCp!IP(p zAOThO-(|0x%OM(nn`qHYuhYKuKgD{8NWyV^s1!j$km3C(w(Ro5TeLdr4be*3>tr6p z1>6K?hsR|!)f^>Q5IR@TA=uN-S(G@yT&CIL~og+ z@_4XdbRT2=nv@KwPv2@r?DthLno6mMp`n2&V-45ykv-jqRes@NEh~4}rzFdU($Omk z9jcHMfV2QT33xf1_W5*3WLIK~akNq11ihMW$6)q$>zTP;y>hx~d8Ove^J)mznd znb`;(+kwv%78$UIN0SlsV3I;E<%ys+U;r0RboiSl*ZMp20qB?a$=Nn&V=s$t61+^|@+ ze(|<%lDR+ZrIOg{=mafZth#J0y_QyuN@O!DQy>^EYKjAET-L9Qd7oIp@YmhyIQ1%~ zJg@vK4@R7dLpPDt0ivPn#3>aFB2~L~{X!lm!(P}RNr;s4SmB|=27IzF#ooe`%}ipA zw&nz-1U=+P@T~>PMqkO!FV$qFX#^OVdd*Z>_GrZznqysAe5XF%2})~>0i!-`H(PMZ zsvmAcq;d>8MyK;>R#wxPNGq*%dDG_VJWEE02)2jXz}WW|*VgENZl zZl(#d1lDg@;}z;(4IDDKU7!Ui0M-bMM?}XGa4kjVU{0!`l`gRoJiV(Cvr{sAoCwwz zM|HE8A~?i`>44k!GyPjKGf5;Y0BmI2cG=o6O3)UNV61D$NZ%0%;p?V1lK^fevK1o0 zw!TRrU{!d)3EhR=L)~45dOuytqx5?w zW*)fK%Rdk~$_VyM?kVi*s#tq(eig;cBiz;G54TlQ=f~*8ZPhCvOl+ZtJFC=e7RPL~ z*rH_erz*0;vndbzqa5*mc=sjx(;&Zhvn8G_kS0JPA^ACfYj2*xzxN6DS+XDZ!`CB{ zPi$;K9?j&7Qe(y6L5m7#&%H+7{U#Z={6ODihI@p*N)s~hsd>|z!3)hIMCA^WwFneRJ!1vY{1^mw}G*iNLtOPb}DsDSge%wTZ3EWbai0$~t6al*;bI ztjCai)nu%KWaH(3X=1+e#;MFgUW2JasX4pjLaYXlBlUtHZrtfAacI@Ql7VS+W;%(AQf!s-?C zQ9OrnLUR{+PWnq+9BPz!n>5Su{b0@HUpB(4!te-CqKV>MCaB9M5uqm*<8&EM&2jPu z*CkFv=MU<9)K=`1xP#_=VU<@es1o|1F*U`}N~&k(@|{|H<{iS&oQu1tu+l73pJuEW zo_+hcp}d-7sUYr-n-A{+51wrTd-97Skl?-?p7LhJ`}TmmJQ4`{RLQ93Z8umaj10w$cfOkGJ`SxFfz(Yb1P$dD&ROvJ(q?X1Pg zz7!?U--lxG*Vt^9_zJ#e=64fMHAHYDcr$8K6+91Z53NpmUCmD^rp$)$W-NpmCb&eg z5Tb*(4O!yiRPE8Zy*4T7w7hbn(89-3medlj;UeUdFG=ubFAGGP&yDRDfuNzhgbWp_-NmP`c!jAe265I=ipxOfXG2S-p*?pNB(+^~#Y^^Pga&Cq8HihA5|7H8SD;qz&XGz&X1bFMunv@193bDvuoExM-TvF zgk46lnHgT;6j4*w?=-TZOfdJ)m~17{-#Do2c^2(R6ijwN3pqHFQT}^Qevx zNO?S#b|HJBI7cQtz&8QCX?Znyyir)B8zNx3(PRfuYK1%S#( zQ##0oV9bZ;8P3NU)HK+eG(W4X&+`e9jx;dHU(oox*l2qe-uszdJ(u_$KIqo$Qjn5& z^n@(F=2%o&I*?I6QCh!722BlS@Prd?nxp9Y1#RTrdd?u6n7NsFF8tH1618Jc3=XBf zCxm(>zVqd=3VYnbxLAsW$6#A|zoQH8gn$6{sKCP%!xDesN^t}%zLaYkyBD6|5RGB= z4Uc@7c^mk!jZ`X_df8?3T{sQ5IF!Tzn+1Qb=br44b>`OukAi@0wkb<-Ge1|F6EDrM z;#0;mXIo=;6Xu_oSSqu^x#~JEw_kRS;i>+CkBqVg&d}#S>kvNPCmFLCJBS#&#f5bu zF@nd9jc$>Z=+DTu)8reBtATC zl&CIs~m<&-=m#KmB=2(NiK82oY`a0LcbY;=@ zx`=o29%|jcI8Vg+zC~>}ZY?xQX{u`)$ERYLvJvOl@T#5Z0YM$5o!<8#ZO%{Y8AwWr z63!zg1Drg(otXs$9tW-oTXep0K78)uGn~-=Bi0bAZRjbP(Ebw_*Jp*sKSVr6o(tMX z-V}8#y{UWxp7$Z_7&{k7AyRJAK&4rsziTIzN;ZOgZdLCPB+v(&O6&&yB)eQ|iW}L0 z^Sgh6fX&+jZp_%M#KIR8j(HpYrh3v(iUY`P@x~>FVa4ihd+`0(TP@s7nD!jEmU~+O zqR<{q_1GjwrA`kNG_H^@_KZ+K_f>EDJs@a2u6{%?5&aX-17sk|8GBZW{X04VI)W+I z%JQ-GGE+&%L+2y`Nkv)<)2VssAMe{MKu$ux&UAcOhACFvvwfWOWC22Orbs{x@1w4` zd3<`*vWmci#b3iJj)KBuhzx3n=hgURfrfrV_cm4jg722y}$ zg#Rl(2;?h12*J6=c%W%%#0FHoX2h}U3K#$VQTLPYlM@;f8>yst%el~L|9b7H$^OOi*~4u1yo>nHM$K}8N3dT7@L;c_O;&MHxC06YdOn<(fL zdZ7EaAPEBBfQf^2W#*17{QiQyM&0_FMZy_{y&+F4tiO01Th`4X{|IF}XEGp?vy*AA z)Z$RPFC#QiPe?CQg5`>GB*BjdD=!e>ITyiJ0BV|&kM~|@-b|VuBDoz17DJMd!}`Yo zk`rRgCr1HLjg0{wgCYth4*0s=ig&X_C0a1N9H@SMW_mxQDSmj zQIK$mH8GXRotjmnjjJwhUSl#CB%$1xZEnm&W}qZ7(h#s2z-&d>8_K*a zy4LB5ks41%OT(WpwypL4hQ39A7{})g9=H^Q|b2_jFwNsq^Djb z_z2gG)WZ)tBF-I~T%AIR+?G$JuZNy!p#V*giLe>&A$>iDrf(i9hRk$McO9HjLlL;q zg8m};w3M&u3M>F^fu;`Hw}CXSVk2K}+Zv@2;gK-=7lUa-!NSa&DK`BjfA{}^+sdRY z1_xo4WmS?wsulhEH=kEWPtucT4>Td_oazoHfwuO*jdeG6M?;D>&YBIq;y8i5NMGE^ zav{Vj(3e$7HOuk&q;~$y{{YPr6hGTI?wR~B*3IL*5%3pCljF<|1|md{>;LkU_nRE) znNB6ezR)j@NhLN_&ATU$9?NAjVOG%<2O$3N=l7Yt+SD18&I`^^gRjaf7y&B0(*kZc zqLLSCbh8rqMYl`dQn=AQ#-X7Dy>qA@`m4cr_>7a9uNVX34D7EM1K@HJ&B$P0zXJZn z=3>%tn%EZ5V7sUEL&Z!C5nr3v_~-=+Wn!Z>{zbY!rLo&35$@8i2-&E(dIt-ag9E^& z<*d#o!Z0CZ8BT^oUS&vyLGz!-QiW2_X1Af`L_HMirThDH8IAzR}^gXV))|hAsj=) z*|lu|E}1k7k~$T5K7id*Yqyr-S_dC=mAmPojjJg|_u^EIAxr;riF#m);Ey3iS31tq zccwLMj}95{X1PhAyWe!KsER!zuUv+O7RPOVe5?Dcx^@~LEx#C7%wD|NH3Q+ZW$yG3 zOiz!j_;B#D#u$Wo9sR((w$4V+fT{Su`-$scO-Iqafz$$LTyl)LPK>X6IS5@_=u_jz zK;b5@iQ{>$cHw`g{5VzXErG}d1J~ys&dFi&%ciH|Ly-nX-7_tTUe|J6s;Ou^nl*YX^g(NBYS!pQSeX%G%cY z%Cy$|$^bXLE(+je1dDl*_SSuo?_-kKXE4XP9Gz-hC2po$aFtTwAClU4J>D26PR7zl zdc`?C7-J!2voS8pRCXjU(dNze{luv#1kb$@Ak~7*vdmfUJ{~`BmA-ecFc%w?Q46L? zhqYX1QA}C1foWQo36${;b%!7t&FP?-H_(w-yNzUabV<_K*eIrI^57X)Vw3-Bj4s{T zny;pUBgq#n`_O-=Xy5;&1RJz($f zpwQYRrZjKF+^rLrM0WC*w&EL$*LSKTeg-5Dvg3r!#V7K^d!=~9{5v3c1mT?YCFAn^ z$}j@-6$4lkV==cQpYM;82`;mYgod%<&>Qs@|F>hn3g8$}-q5_%q#%h>79UB%DJ_Aq zlWZ)fB7TO(FO-XgKL+wP$ZuE+&{OU8GaN zp0UXF$*T8e(%ECgTto3qYdA-Vhnw5sD=eY)mIZ7YkRH#ci;P@~q-b<^%JDx!pu3!r z{R{i$RkvbNqS6<-sC8v&tdT^O>%4)`ufZ0(oo8Fy&2$3o1=zH8a5ehPGcoT&!Gxu9 zoL3^)^u=xB;sSrn0{RM;Y{T1u!6D{^EO1|L(B2YLB#;vQQarg5&yd94W2wL6e#;{> zeGkPzRi4LVE{a)3arCv`d4_474WaS)HnDG%X4f)Ap0Y3Q;Qr^R)sh&GwB5h0Y^wRm zH$o)=Smc6N{PoG=uV})1*a-SUd|_;_q%C&I(WP0z`1fe`2}iq~{J;`1PYS?N(O`{pzvkNYjAU8ZRY;-3W&fi1~iZH=@l%sUZA;p zfN$V`oTAwu-;V*`os8nZ8y@g`_Jx2Y|9GPbfF5>ps^CwB2MYkRx#9ro=wCuZy6r4{ zZtvD8Q~izAMy?D)ij!xVz@mSE1H(mQXC5UrRsWbu;( zbrls$8bf21B2fns)JtCJpMtuhlpgs-lonQfyi7umD_Ry)E6tATzaF%=-K7&;+`Kl3 zS)t3}hU-u!s8XOgmZAo}>#3r)Pl!EWQJk_r25k8nG3~~ezCV03hZJzbjjKxm_eS!N z0|SmqG^dm!o0?=~^;6~R1d(aY+PCfL@O4`vb?F9piJ3&myD}B~J~sB<&Tp|GP?0yf zY3+~M>N_5w+S7e{X-(Zl^djLS+K*)6ECC!b6&a)8zWy?l(n?JD01;dh3&9U=bEH|> zCQ?*So*f~S;!LbxFtckU7)0#9W3M%6Vuycg8nb#G*`bSMuinxdk${V4*M`TJeF22= zH36i+Dk-Ho5BaF z0a?yVXXQVM{8?JjYSw&SqEprl}Jt><&<0S|gYIKWAbAhWCsi*H(p z*b~TnQGOPM&M51tX;lboiEFS*1}o+#+{PK@HbUJ(@RMkI!{tx2^H( zUHrAHcpuhJS3zyfM$@o1$ADM_GU~%#8vbwh*YwZXU&7S2iJExiKLDF zk&TV!i7u5P?_4BE`H+JL4r$Wi&&Hj#bMHzz(a$(8o#pj#bb4z2h*|77F=$`HPLt)P zaxHWq!%SlLJS-`E_gWi*d;pPIe4j9Uh=6Ruqrzq$F9YQOGmY#OA50wbU zIBP_UrUNBq=GW&VAaOTIVGgaL+>%?aTy!yCJk@GAy%#fEt4SOfJ3$g7P6hPCx&1@lb&Ii+di>A*cf61^?eW z1eX8CUx4&z{;xwQNi_YB_n*XI80}*n$Snjopz?f>*x7z1r4e|JwkN&X~s!a~Jdi!`l}jJQMF+QwQO+o3ZNYIFS+Y`FQ!M?Va+9pXwhQ z2`Q6jqWVA7hmq-``JzdWgCPt1!bE6_5Hk<^+W$j+hyqX_K7FYV<4QUIU-cm?`TwIn zq<53vt1-(b*UpwL19S-GE?A#yhCO|X-B#=@rr#1GYE*dm`I~m;BkwvNNnE$%7k=Bw zEAEU!E9T#&2c2|aHydZ$oX!C728HF_{3Ptw*gh4W)@s~q2qgwW2yi=B0zb0T2CbWx z?@3~)o6oaw`YnE1+=c=POYK}FqEPk5t`VXD=N0C3Nm&XPy+nlB8k09%0a-%?D$xmo zDfVb||9>=qo36br~duV_hr(GC9AeFzr)54r&=;^(l&b%gL!`Q9}) z7!R~w5+7hgj{&>5q>E@O7z8%|w$kT}F z{Ks)}NB-9D>Q4|7M9c^IgHFlGdfvQTJ9T1r;W7*W!C>!vBT^;Rs~=|CiGTPS-k}}z z4Rf#QJEmC%WK?apegE1atfwrcd4CrmNlATh_8{Tdk0X2=!UcAUY>@9uhS<{Mn9*R- zFt)Ua6i2d5k=6K&rsH8qkIr?x$T$ydN>NNO@p*oN)wGJC z#C%oWP3(lCPW~8#_sP&7=*qP8bcxU6S7;YKl;2gbEAP@|P#yUiU`>bIT@Z7^P(JgGf*_6gcwHrvsZ!8YJ!n-hp+*-Cgar`#L3n%nkuJ%El#H+J+)0csFnLbmccqBqph+ugF;) zju~VoG$#Uo53wOP8KX#yu#OXQu$$=yYbp2LoBdfMlggi%p$+OOMS#>07sFQqPfH%A z5(~l*FRTMx75sK=QkAKGF7^h?GIlswQ-t;B5%?E!AQ^2)6$XyUe2-17Z4n?eaM59D z1T+H&skRP~wWR^)6JWDJ(FWhFX`haib&ZO|*gP}wGPR-Pml)%a?n$*VD<;yHSVqlg ztxJ64~e=VU(a@Qs6)rx|3%t6e&_w~+un`QIB9I#cACbvZQFJl+iYyRu^QX9ZJ#S$XOF#p zXWS3g-uHuy&wr5byykn(`C{kRG^H6xYA007cHu^a&5lWFjEAjitShHD} zDk8YK|JI(MpE`sjK%c1aYP_f@;qmdVjL$MZ*-l)GiZvhDA$eLcrH5Gg3&qlr0`SN( z+i)Nfz>G*4LkzM?S%B~2-UK>@e>xb8p)+%zvOP)l3{(?#kQ`pL`r#JP)3{n%mCQFY zLx$25Z_*GweC`*r^tc9Bhro9aFdI+>!0LV0Spxs?GTh#TLrg7Q1bbB5d#9Hl@8KA9 zk#enT`Ya3F6S*`E`7JEkyCmWb9B;=+wAhM2J&+Z}R5YF#$McMC^T-Y^O<|Iul?m+b zTF!05IDv$UZh0jM_+4>x2p(Ks7O1!3fTe}xSFTLoFmo;R>;_NXO`~w0U(?W;QPQZT zk7=5)PYX4pgEamL$Q1z@4I0X)uMzY((W=_usd8FjTXP9GE_GPJNYjRd`+jkFO)yZ5 ze;GiOzF##%(4i+VUw@_(0NELRX@=WJU0K&yDkaY!iZww~6OE3{0tEcsR*#VPJl?j4 z2;P-8NBZooH#^hi-~~wC!;Ig83pnkoAIwZgu+7p*8I)4s5V~TBFyndC4qoi!OzJnY zu*L!&S1F}u9*@aq0v=PZBHa3SV4g#?%M#a^^t8$6C@IsFwfE-XAgT3c>9g`J%^1Y} z&@jUf;Pl^Y8$py_j3BI87A2pqP4Y64Cw{ z`AFWvyLvPdX$rNA{bD6^J$DaCaA z@eu6rO{PZ0VB>ZwP9(baPE+Ga`~OuLtu!H1^#GL-0;n+lPgI7Zz1|N!M?D<@L&MMa zKT#PeC)0n`h5XgTKVCorz0d!c=nQsKny0v5k@{SrnV@8g`84KDs;ByTliQ2? zKZ(u7hLeQ=Dr4uBy~{242AV6uP|f*tv4zFgNF-xx)H8$XFpR~icNU&X98`_-az`z z($7Q{&FTYe2ncMsb*mGzf`~`VCvP3Z_eZxKZ&|4UGtO35l=lW2;kc6iwZP_FO@b4GokTW7- z*#R~LmaIUsAefoI0)T7`J1QpsY89dI0`17wQim>5Tczr^HPC+SC|6cYguXaLr?{U6 zZ~0owcBFJXo*3LEJ*$r91V_QS$}UI?$^k_JVu-IVn!+Ic_17Rjp=b;Vfg}TGL&geM z!UVl`z#|omfWBidrwbQXYaK-*l?mYvSG{rUHG<*PT~k2aIPWf%fWr*k<^9*+Ua!Y! zerG0Kl{V~Q93IcXGC$D+9$nxRV%!!j`BG^gdqJ&rxqP(^PJf1aY|Q-7+ALS5Jc-~z z1}^hpqpZl)1V=9;j*B56C8a{!dAraG}S6{EKX?&qzmJ0ilFaHG_-Cnef!W-&Bf$?fj-_7U#ZjYb$=C3C6Crn%4a$Em5t!qDpE$t1pVqpR+^}O1B%K#4$#t}K(tcYW;QyRSB+IQ0 zYTUpGaCvb_p-TaD6*qqp(6vGh4zn_u0TJ<{lK_0HyFSxhx*aYBWYns7X-2D1l|bOS zJX=E~ewQe(LCY<(k;yR1f+Fg@8rRq5L(=d@akE-4KuBjrw5Yl>;?ibQX8Y{D9%fg9@YV1^$R`DFJ zpE~(>S9VjK`!5w(@VKEE6tPaTtRS^Q+o{VG)$KpLbretdVCTN6IO=phbBv>hghhYX z9abf^2(@WRY2(v4gIZiTS?SQx8Fx0!lsZ#SgBAUG_gA}4kM?MJ=hJcpsF#)EU z7-xsim8^fWfsRL$e(#r>R}DLOsEr+)0xIyJorUj9+q+p%c}W{bJIABw>*~$aEZi74fW{CFc{R2Jeer z*VH2HC9|-Yv2<;5NnP`emWHvuP9xIl0kXY)P4_Mhg3JS@jx~f^@^ylL41Ep9n0$WUlztaUD1qp5YO!qGHA!m&5I z7>hS#|4uxwnzz{sb9?mLaRCBn3$gZksd1G(u7iSQWu(()(>we>t%_XZD0^r?6QT!@ zk@z1BAi4fOBH}+wNi?Wz|CJAxRcrrv+tuEzm&F0>XR13K;YvrrS^b;Dl>q<^Q+~}f zzLBzC-D*xKz{IzuhNpwcpsS2`v}5qSX1ZgtqbI8-vZe%zn1Brlf%{;G&1C%GveW0I z$gAU4ley?Snf&^OuV>HA&z)@ou;4Nj(GJ+-?O zqUK#>C8uVS-daX^{qNtG8H~lj08L3cKvU9~oAgqZU6F~FAJCMXOPe1G^EqPtphd1$ zr5+WU+0{3n1FRubxH<{Bb3I133J9NwZQGDv?ZS}DKc9WS(}rDS?9X4hFYXalP(H#V zNOy_oRO-}Jd|CZkt#6Qw`Dd%+SI05>f=VV8ony_f1(hQ3+Ey!Acqr(304{Ye5Sjs> zZBlYlY;f{J!ovUH84r1#HC1s}zDu$@gA%$cCX6<5PqZa2MphNj5b@GA{(Z}gp>(X$ z3BxEhjYuu)HotL&O(p|N90UTqO~--KDM6o|$W2?L%g3PV1j*>IA0A|}l1*R|9F$*r zWAuo-D$^?~*;4=Ff~rZA*p;lRcjJ%n_S2f88BQQkJO8lhV$g~zSL*h85oDEZF+12b zZ2`OuCLU-1(3;6*s?tz99=o@~YYp#9WzGZ?%g)D_aagSMOT8q5G8n>=Vw1uy))#|P)g0}e2 zcjK2Mm}0JU{CnqTYKx;up~<_pg33XYiGL$0DEQuMd?uxmcrN6>Qc0N_m%r=!vHK!|JQyJ8?6F z2R*b*BCAT83UW~ID{`?E`m=9@`rw8v-xL+Fc7FBjf%V~&aBf0_k?))8^_cD=7e{;R z=>wfeLvv`)a1`Nc(2mZxW&wU2R=sfqQ*cG4FyM(y{KLh2c)rt=fh#rTUu+IPII^B| zuVxLnRUxt8woB`{2{Q|Z<(T0je<9{Q8kLTFj}B%I*EEhdUAWP=7JRvAyfst5(sMz! zJZfPiALYK9h0z%IF+6nJv=)BY`$kd4+4|zcvp8qoyZuJ!~0Md*jIjbou)?S0P_s!;OJM_&I>sFsr zv|L)4r6SWtyO3A1J|B!MogwYe%G6e6I7mtQ`B#A}6VAD(GFKFiG(#SmkX0AW{Vsfl zoG9z&%A~Fz&rmEC*jhUCd=L0CKwCJG+mbaw&a>Ha2j^AH>J04yj&Nk)zc(>q#9wL+ z4kwM)nVr{D%>NWAxMZ%&r#RlRTj#}_<>VwFF&qk@lh z-7(_NFz8?I^1DS0Wx2vK_BX7&Pm%nswC6kq|$(gIF%WO1xW6k2IYG$ zDeh5BKD)+ic*ttluJNFuZF|+yaIhza2cfBwD!mw5(Sd;}n;7orvz3a|csvKpv#z7e zvx^p(=GeNJ&ysq-I^tIbatE?@WUGgNRSyS6Y9kh{n{%3&0=G0$F7cH_uBVduiDy%j zr;nr5tF4kuc6qlM$sgxx4MvON9|;Nva^*rOcd5fyLp%EFz;_JBe`I+hV11W&-xBXw zztHo{dqUqZJ>SC`6Odz3n);t|Fn& z>SF^a5A<`)(J{$}JZsNF4itKuRf8#lzd=Jv|BFW|*cD(M&VLgpe;1qn6N>{V^5U;1DYZEL$J_sDaSR~+ zJ*0qv%(5cIChh)Wpc$$*gJ3ad6UYbc=P-@@=0a>GWv_NFpG*ip^Kcjq?3LT`-NX%< z;>38#8aA}H+2PIE*u?nbeP?3+X!hX`I^mGeB zAAy_|16z7C&!h+0?%d5(ppvA>4%5s+%=O2EgM-SoY4Pihogj47rd~t-U?d&b1VX}{ z>c#hS{KIcukRb7TM$GQI~?Ht{Wf$&4jWD#f^4OOC7fcfHO)fH*4se znc0mfXlT-piv%pHp4e6VJV%JFq z=V-zGS=A2t%5T#_uzUo29EKn;@+5pPNqVV<2XTZ+PN*4iw#PVuPTyA%bpAjw`0&+( zrKl_^Q^loH@(vNe^#mTD(xlIP0&NN6cbo)U6Uq7t(glt8T9RGIn4NY4djy9E@Xu&5 zlE^0$IONbUPxW>-txIsI%`R5{_O3-_0vEm_GS{DV-mcAm7H2r*A`9jy>M0T~Gq9jx z*}@7~DWRZFAua2L3th zA$_RW`<~oIt{mNHaSorAIkDtoUC#`Ha>Fz=DUs3($m5 ztt$>4PMDE9E4}%n+b^(2tpRP>Xr0!Ow0O2nAK zG}dJWYt=|}TqPx`g4h^BtwKRHB%6k(FQIi)ZcqLR@AGIalva%*1Yv{GKb*R&Z$Jh} zDIL0n3y#VFh^491jC&)iQVoGqz`7&V{JWkOVFe6&`(iEmfMbHAcu5))MfZhAUG26K zV$%djtvLJ5Z;&{n94WZ5rVXS)5X?RTj_8)bVe;0V&x;G6J1Wo{q+n*_TqOBa{)rj` zg5QZ9n#U<^bL(7l1|hP8y!qlrTWhfo_u%c19^~2cA*;LN?HWW}iRd ze%&?IQg?d3Zs+jvqSD3g`s}y+YMH4}Pbc}kl306T^18<8Fiy)ZCX23;H;ZXxmbnBw zOiB2$bWWwFjECUdFajJx3U#r-H)@zhVy)>@%ExKIc zTPVSgmX%+Q?@sQNad_gDKvL1`XNz6-*4kA3la_L$qsO|Jk$bp`uoj%GM1NBXZiU$v zHlSm93e{%Wa^v2EMJ}%H2$6}&AKx;gZ(mhqOL$eL`DVU=;Z?~178dir*z_^sUBvzzf4) zA`3^a>@^D7W@?eUcw1XU-P!L9wj+`J1Tod|zdaoh-5u%(P7Myg{(^w`CAANGbbnx1QzB@^6M^|q?u*DfnW52kqflaWF<&N`Fb)(MWY#gQp28NT zMdoaMVKDsVGbOv3RYvQi?CSnEFXyhLN)>>6@shk26=@%#NLLV=H%C1x1F!HFS~mLB zu1LEpmvrh4^&@Ph(1U2S)=pT5pac0kNpk*;M*pc&cb<*-T|>!r`}n_A86g25dQVN5 zAT)pr5e(o%@c#e!(En#P1Z5RC_-CK-cIff%r~bd*&$0%l*u5Lk9-cVQG`fu>ThnMC zdi5v?Ci6WpG%==Cf{>635X7wG^lEW~=Xwj7UgiSMpzg^U0Bk>S+o5rXj6N0r~-)Eu*+L=S!s^sScYg z9)V&Q`;J@dHuKo#BYE{k1S)8TK$iVQ1#qUj zsT)(25|vkWQ3|N^I(}n0pI!%SK9-nGR)k4DM)_A#elO)$*AQ^7nw~JhoK(4N(n?34 zpi_)}|Ka_?Ee%^fl3>H>+zOwXoTdb9mzutPSOOlIYsfXZOB{b_FBxSjv|=2w=cf_3 z-Y`4;cU)(Ica2jiLGCg8pq1b&DJEN&k`?k~#uwrMTa^nJaD1J~D=3z`5B_ouR@SZP z7KNT3e5ANmV`|-NB1DIDr{n>5gJCK8LVhS9P%VDTQYr~NxqfiOO$YwxA8Q)R@BCy5 zf;lr*r_TEQ>0tX<`&(Nes!pM)B5thE*9~=%yn0wy4s64lQH;$*k4(en&h^u$#lNK- z0Dc5g+5{9q!GlZ$ExF7N`35h@v1I);1xL;~O@Y7%mu~K7VbLDD^14I_9=E4*p0uf zlA&<~0(3csZ;-#eQ#f33B@iT+YUtgJA2in(z>qkm_kDdwrdRYQN4i+()Zh>oEX{DB zoJ~Z0-A@sL{c6gKzZ%SijwMqduM($k5Zrr;T&#)S8i=9}wk^veM~2O7xKq5tm3xAL z6;w$8d}=n_6rfkNV&NiTW1bgBTVrdV^P{Qjy{wiEvUrSi6c>2ZcesbN+ky)+?e1BH z&N6M_NlCryCa&MQWwkC~|f)b6@tunQSz79AiK($I4jXcIeYN4%;o3?xUF@D^mzDrH^8Gz)#;Q_7w zHakHJRopb1;k=B%dwUWAA#)n})?Z-$Gxuv_HKmY9^@sa$heWx2ucj>qK=nuMfUJoA~(-1L_81${8TOT_&HAk%90 zh8yOOsP^A&ej}@VDkWgE@d>?y zvd!pucAZY)PUDCIa~rf%LtHpXQrcY09I1n0S9W&mPB ziDa^AxU}a!K-7)_ZuMJNu=k)|_u^nixy^4cvHY){X<;CL-j6*FGTDTD)e1-U0hR=+ zd^D+406ii*dud+H&dP%=g{ZDMy!=8xP#V@BlZ1&Q<=Q~Wrb`Y6bpiHZD$*gav*6U1 zh|@sb$q6y?iebVsYeFFE-=0^|nyTcfTt{Fjf@<;5hJ{>h-fVttiz3$L%R%VpH_4h| zUrrF#T>5k9boh-R?ywn!_n-zYJ)?QoQ7@va`|+{)=241$8yk|V4zU~Aw((UCagP$N zxdYB>`exi37n0~Q@GK^eH;gAEH%kF)5g%CE@Z7|S(rkxNDaSJoEx}p33eiaIyBY-i zI&T;8B8F!+OgUdOt&gV%AvAF+xE>95Dx;!m4)~&TUh#k5$E?S5Dv+QgetQTpKde#w zVS7`KShpb(Z8<4^C`MD`>5OeLYJM_hUXJ<&W_fr1W$ul@Y}9;{3(nKDw486XD&Z?x_xzDubXr_@1r|@~ zfrD6#VFP{lH(viVn!5eDFj0T3(N)EHofM`8^PKYA2C z>0I1pMU7o@E>i)}0=B5jg_XdW#lmNl6~*XUsXLT#H1XJ0=PbKYkxFf6mGWC5E%|Cj zs@@+fL(&X3C2ZW!THX8W7)~hZ6$M>8s(d?E{qASK39qTevO1Q296{f8Yj#)&tJpxT zKX=St2+Y&L#feZvxnulVj}Tojd;7P8$){AA{j=n<4e%s%00)!*r6(b2BxddSpLi0^ zW~hIK3Z5wPKi)aOz2vk0@dEu>|5zjj#4d=0u=<^2*r8aPKVui{t6K=4u?t}&C*r+m zLA?ESgAY|*9aEjH;5h1$O6--NZOvbGmk1AT2Dfa3pLP~D(oAN$$N>G1@M@#E(^4V) zThN`YYNLL4SvQ-^hV;+=2L>gZtis+-0*uyPBz{gQlC2Ch33%)F&#rzmE2F-M{>j>Z z^*_-5J9rWMNsLe_gFQIQ@HxJ@1P~)qB~QhAQSA?BrKP1a44tLj7v3;l$%|l7zN#dE zng^m_yt)627%{v&_Jx@wxEA;$?5Wx4t>Sv`_cWrw50;A;T|}8c%G>mcdrfU05_TY||-iwc_M$=4qlg9k)chukUStJ3( z2$p03F~Unsuuj*R@s1ng8zhxZYYXw78150_Uspm7upgc4yIY{!PY1o_FujEY%0;1@ zh&v3Ze?S7x9!NGn3V_$1r`rZDnT$;^SZ0u_Po`0K3+dh%sHts#%@4r*LsgNkeF?vgj{9 zc0`Q)R}=%qbL559d#Qkv6|z$gY|G_*d>fuA`N|~EyT0@kY1-(3bT}Lz2@@%*N-)My z@(ukm@=YjT{NrvLqgAKVoAc(5HFyI$`WXv8r?%OLu;>AbDNQX} z$XoQg^iq38-5V(h9#=`+*~7tuu{ZNkN0*|EYDWF(@mE$N!doySniB)p@QuIxh@N5p z5IOED(f_hFz^2hRa#i(z>1I?(B$a)<=wQn1T_ZGT{&RnB}1*Z^Yy~ zjNL9`d*w$tqZgn$Iq>t-#jF5)gi>j>3U)VRh`v~=LVChH6Opm-b_k7>Qy?BhZiC`C z79~SC^#sqAv-Wn+hx6a=_HH^-#|#-uvJ(ws#^d6J)}Xj}wp9RYV=`m}c;Yv?dCPed zz4g-kl$rKfB8pLST2#%tScXLrs4ix#Gn*li zldWgUdUx&q&2;+dbn#p6fdf2N1FdV}eOnqK@=5-zt*fnr+KZ=OIvM~Vkz|?8QvZ;N z=nC(eHlDhUfW8w(KsNwCh@`(HEr?aW!Yxk2hX!z8Ic{CY~p^L|cn_D(>a0u<(oJ7Z3Vze3rXTjGy>O3W6i zJ3Pag=IChm7AYM%+@_MNJX-)jnsxrm-Sgd!GR_Bn88{_F@oe$Q_OX`>f8r7#w*ly` zLT%|xM&9hN0_=_NTR%;W>s9~S8;6hF$6qOzdUlk^#Ox8$sDdD6pl+z|+?GI3V`-lr zuV51~Q<-^a!tK62Iqt`G(EWyR1e8l!e%QzN0>OI#2-1VqanyLzNnPe5pY8^rTT+Da zbzGc+eVz>yUcZj;W`>1`+w*Cg&ce)1x{(@?+lXed60PU=!lX#|gB;hdNgPGmDPswJwAI7H+Tnw3`VwC2 zsn!(Do=hD!RslRg!ex-MqWWZ3EQ3e(Q!wjmcR!uJrl<89H;?K{@Bwk+dByT2N>sJC5Wk)9(^S4vnE}P{sv~K;s zm+gAFNI*vEzx98>(z@AnMmn-G0`X#-m46GIsD^$S#8DY`%;I~(3{UPOt`mep*2cz% zo;?&$7Q45_`k2V~T4RJm!bj<9sp{+5cF@5+FYUiP4%iIVPb$y!j zF+(6>9rQI4=InI9U`?q94$VoTiEnW=FD+5okZn$;vmgJ-X{ZinQ4iUX!RG{?zJ(Eu zb7eJP?jf`HL}UMwL}J9s;&i1kxaREg4|?)qFy9obC*0`eG(r0^Q{tV>zVMAYWajD; zEiFe~ZpNVIYMO>7&g0n!@PCIiJ~hX!810`Ofab9M--k3LjU;XUGhzkn0qI|{VYNi` zk9SPX!)B%R+lL3(GeC4S13IT+XZ1}=mJmPVHo+y9e>sQi_3BP;*NkC_&yrB^1$(D> zMZYn8iVnSyILnbr9Ih&TpjV`co59{2UBLO*hfSI^7N1BqZKU}~aZNCUA6tB2M_@)w zs`GlC!;B>uK*DC6_s%C%-;4|M!hs|B)rxc_D@OBDh&23X&}avxFQQ=5F?fKu<6sHT zx_f8bO>_6k)I3-|SGvmCRrO(g{E^Imu*m^v=V}pWL8}B@`>ro6dr}ra3u06u{1=7o$0yHg&goO)$x{K!C|;{NI>Rn7;>KWg zZR+I%t|Ki2DZ-{#ERhftI0<(-K4#|{KP!3WzzH8F=y4?a9e;Y}k`B+Fj<<9#-|1WL z$C~FYwwEV?P?-|pi{WE5FR>+fj(N~}H=iV0#(MXQPusk{jBL>T?g$%e%L`DlI*7U8 zY0A|GkCP>&1|_1D$LA*X$695OWRI9h!S~JyjqQW+BaQ(>{;3ynA}qB=BmGUU0Z9q) zMTJJjEVs}8Hs#J)Xifp6^b7((XLEx$tQ3~lK0L{1H6JCpwvnvUdOMEzy0BRv;_sbO z{NN>(Q=RR!Lk~zZ2_I{l0iT+{hiC*l{WcIK>H0`hB||cPytPGXFqrk;K-MIRpuxEql+UN#Qz;2FKj^18gLJ|XVVQOB0RLG+IYs=`9PBrHw81(fF<})!rdqdr zF-)%!sWhy6%&|h5&RkqYuU6u`U@dWLGDp$I-nC|(eToyRzkh!mi?Nb0qQ=!0-cWQ5 zOuV(rUf}44ckd8qHjoOAqvx1M8J2(>MZ%Ncr;)45R-nnOutpkDqT`LBBA+693kJ<2 zP;K9AyI6oI_p$mx*E<2mu!ZL8w{l1EK(lk<$EOtxwkV;ME2|Z}{ommF*X^aPkTnK* zYp9@gEX^ol2qX1PN_fl91|pe?hAMqJv2j22l}>-e@WV$-A7$_dLOeRZkukTPb;}=ob*^V&9*J zcfqNSWiUj`${n^^_QAO)yYJ&u+1w@EtsYBG1XDsko~cR4pBY-rr==K0`BRv$EELwx~h*cT6#gE=}A zSNqsY)WW5uCH@uIV1#vjj!Xu?@Kg_upmqdKlvZE<(W37D6#m!ih*Ba5kQ(;Opj3K~ z3|OkC(T04Kl=NMrGM;{38^*7l{c2ej{uzyGpQ}DVhWhYbW&Rf zY*5c|a#=nv;+Er3^kb~GT89hoD`AAmk}8z-FKq+5tcLim)A5QmL4#$|aplm<;X$BO zfnGW%H?>ggWSKWpYY>!djOiX}a66ocj>qv?F$p!f|yCDA?&(0ZNPKe}31aCcMz;yqXc!s7}&INEY|>7*j{alGoz9 zKW%>r&-SPsjMz_)a}*O*vh{czx<@tuHptqo#-HKpZ^T#4sJ0^1A5Bdo{f` z-1NJy6JVkH*AoW)2QE#grXNlNgWlM)u2N52^Mgg2+kkZn8@_UzVk0rm*P{7&moU-2 z;pH@5NBdfO-~ZsPbGs;V?p+hI5tn!pK5gY_J&H@9$%e5mrpxM_uu7=vpviHuB{<18X_OdKJ=5+>@_Cn{2 zyj!t8ySCtbdLFO#+@)0Fc^wusm*?&(`J7@%nf3wVdA;tHp0YiJ{-|qOZ4u+I$9La^ zRoRd!;DZRhk}^u{@f|8&50e0T_Eds})YMlYcduuw2rBAX&_Az3 z!FD!V{~82;{!D60Zi9hyzNqPmk09(+xpjejl9ra2b&Ya$r^osT74pDSv5qluRpzdj zj``2){;nMO>JCahgI{_yeMhwmSKDgHTo&ig1!u`^iKNP=iuc*ZxeBWni23GG*4MDc zEsqUe?b7M8otaj-;dM)GakJXCm3||WE7NfUI@>d=%AY?@{%t<%Q*~T~D-V9E4j+K( z_+K7nB#jhIZS4OeuOlRx;ji2fbENynJNLPjEsXlFBJ1D$MQig)N|NDXZ6u}z86bZV zu7xrX>Od?dWxtr3OB>Gp84d+_9mQ3XOvFNR&_+YG^7Wrp))PQF)aZ4^=VO689h?^< zKv6T0rp#D{1~``t9X^DHYCd3C!2ofFt-L5>L+KWd&9D=cgl^77cTEEFlqcx9<#;o zaGA?PLqFro$HgvM`TX$q>izV$!s7TNV*pE&bhD4SuzoLWRUf^a+1FCoPJ+&9qFpFjWLI&+s z0GP8H*0zfN{zqT?gjpt~?R@E+(m<9N@E!!a1PYeoSsW;9_#+cp0LhgHLJf-wMA@F~ zA2q)RqybX1wvu=NgQLSW_%DN_V}0OKV@uA*K#7tIgv;I?kG?mkHH9XwOTpRZWVcgn z=ta8J@TKm#A@xG)nT{TZj9Pj*@(wH=5%Jl-HtCM{cmG5$hzt(4UT=3Vc@`Tb(Z6&@ z4X|0nh3qM}T(wN1I`>(c;a{smC!$*K5$dni0Uy3`#-fTigCs6HVC4Tfg;5y5*ooxn z$EzwK)8I!%r3pxITtPYWp>U05Eax|6x#=qtcPviJi#*yPs7s8=D+sBoMeeRxS9xo- zaX($zs65Q&OZ6tgT4}FfACyNQ3vXTlJ-Ca`fO$1jUyg?VN;>g|+DWp)$=sLHHLD7K zIYNKQ>}z*6H`s?7RHvJ6AF`sxFWd%fU{~CapaJk4ujl$|+KqmQX})wpq(Qy+Trir< ze?ZV+CGg%p_@vUl4e~1$8V`4M_i(i7Rk%dsR5nZ*qNc<3`zDJaXO(iOK>K&_QBi86 zMTHzbac+%1M2k9eYsoikyo+-3e!{ebM!l4OEF*Ww5E%()IzZhL!HlJ9ua|%BXej9- zy7NBRdY<^3Ja?5*FxE(m!-hbxB{xK)xjM&Q0vQh-sR?>)VE8@w3OSA626v&mz_>BE zvO6QsBpLOjLi7@kB9~^N!@c##PK*XV?HIa>nN*V$be)o8r)5lL>J74G4sL8SA7C=_ zmVy3!lJ~%n0$+;}K|GXRm$J_9>a8sQwSPQkbnuGHQ>BIlsHgyv9MD*`?5ox$fn+PY z$RJjPkDHNVB{p#8kDR>hoQXMhi)0|jRO}7QnJQw2mA?S6%nxB!zz=L?x~8L>{vAMf z_H#(%B9eu_-TSRsX>j9Dsh>CuCChPZvxm-H5hE91NCUf^hv4;VtKC{cWM3H}N>-?` zaCk$v3h~L$sENFeoH!b8ZKpV5r%6rbAF70-9wieaq?=uiLxa(HpRmk#Gqs4aKSfN* zw_aO3IRHw>=v-Vn3Pkx`$^?Iu9*G)ne!SmY)HZJ`prRr#&4ikfC~s?N!#uB7M-;xD z7K_{Ad9|i)US3{+L_}FrZ6^2&ENnDXyMw)Fn@kVc_72DQs}Q8j;8`zfv(wJ|j2=;l z;kRa%oboC6N>z|vf@AS6G{?lGh+f}$pgFfi?K#j&v1H2^1ngH?91kIbw zjnTh4Jp3T&^~^4YeXR)z&X2ga{W6aXf?8xK`=_yx9hF&RFg&WmhLrkr;3{weXYhuZ zb71W5s$gZsH(-E(z`)7@=n(b!y2l6XnCb&nbl+r9#)K7H;`q4Py+_i7BE%Q@&}*ZJ zfb{XUwazo4^volnG}Eor$Oq%$s)An83!`{%h_b~~D*~D)!yFyX)3^uFP6-XcsDtq* z>3`Q~yuZ^@e|c7}0GJ&WZz5el*8&wMXD1r>_fy;+o2CD5b};Of(D@lO`0_Jq zfOZOCc5q_8puhe#J6r)~NA&e;(gz!%giVmgr`fS>uvX9m$cZFX`q_?(uuusO%_v@Y zXA4}1$D3eW1{zHE!&Gi`?+$C8Svn9XZ@8dV*`)R-Q`0n6)Yz8EEQbc?+#v zdge^V@jG`KQ^@Rl_^I3XmQ1fbk5z z|6LYD+Q{WU&V917a{bjCrH&l`c-KC4$A2+8pe2#&lRU*30M%B}3{V5hY19S{80Q*D z)7VCiSW#H9r`p5bQIFARp#7lxZ}+lsMnkdsgHjOTEV@gi6L&jXTO7AO-XD2hjgX$q zdGZY1T*|$b8lm`#w;+3oXGzstuac#rt(_hNeySOP5&`;9H zfYAyY5|NORrlMHpI2}KQhXO9(%;GoL9h(K9bYvR0uiLLzKBDpNJf!+Qd0J0sG{zto z+1cA~_tjBNuXM}I!ZR)NBX;Bx%PQoE9+d@Q>d@Gx>Q7rid_p=bZWltwIOiuCCJq|1 zAitL{{V77d23<%viJI#?)&z@`Mjx3uFaeyO>2b69D!Jp3s4Zx9w&?c2;Cdl{dh>3>$I+3@+(>qHdRU~ke3Tb z4z##pY&UH=1ghoCrs-{afhM)zX{wD?SWlP7uwRm@$sikcZ17)#BP}1R%VsTOH^?}i zn$CGK;S@GrG@H^y(w}L~kibSky>Mm!Fo1&rPa}{9BITn$kcVv=_}?b{dMAOdkxy9E z$Pn!{BTD0)Vn~enb4dCigjsOlK>c-#EDxgI7>P-G&w8YKh}Ssi)z%|0JwmYV zg6iHf4ZHDh*h4?7uIPmIxMvZHZrL;7P2-$!z|%_r02eRSb3 zoBPy;Cu-RFlg%yi$5HbjUKrbB823Emx{2axQX=8B!vHVsNg(cfp%)ea-hso4WcU;G z0gM#q1fWC=$}9C*YHPD2KLvCS$MfgmmDr-V$eAQdb| z@dgeWKp@)Qd3I?6rZNl@5KFYf=(hQ}S9|6=3gJ)J1yM#{3afbplthlbFOqZKEo)#r zOF9HQ7MdD+Ng7m=b(!a@5yV(h@qN@_h%G?xCSQ%O!?fZ2*v=1}Ndx*f?dgFM5DR3< z;J_#r@R;v$@2@TI-@xk$)iOr^U>gEP zLHQStJ3RgDt3=GhSf$}>_~%dyL41F0aGb=CBU5Ji4al3MR%kq`!P)J!5Ljopl{&cI zIOC`E*zH8e%$ zx_cLDV=$L7aGKY&XVTcefXYnhaPR#_79YtoKUr-&W9)X?SEMko&|P+}$%5*IW( zTTe4L{0?9(zT#C^5Z)+R3(U8ToJr|fq-L1qM1tY{W*8hu4*>ri4Id>eb@9S~&mELjkk3RQj1S9jxGdmsXBcvXm{6TX>rD zumw;4JjC4V;y`cdY*yTm+6-#%zn!=>T4mz4b(m0!=bJyDE$)=RFx?5r-s; zbxV5IWCn8Ym0#Ly}-@z2Q{W0UwyRobqBx3NMve_rM`%V z`*R#T1*s_+|CO>R6-ro~0zJVN6YhH*VGA%}0T191W0SZm%aafWQxh03g%xL}IdMm) z(3(sawfQB%5zBRqr)$T5rpVyI4&oGi$`t-^l3*FM3Nr=38#XW7=1r(Vrp$)4J)r|> zM#wlHLHmH;a(hkAMdMFRqB)QMH6e5Y?YMyNI2GSLN?q|rKUEYR|0BcbJ3hj-=s`AD z@};e6f1*b#cTlaT`)_M~;li>&XdLI4VV6af83R>ay!F;LB3@m*Nu+6(hivOg#fdlA z>D5O(;tp2Z*LH7{%Y*I7pi-m19o%`-$ zGixZA!;in*)_7oYyVV9kr-3o?!Uljlq*KM!zhm(;;uHxq=952W(eOKDqvo_Ie4X?R zM%_dX(tg%fy8AMQ8&aED7aX8!_~^L==rECxva<9PSfe%$!$AgQ_^&PrPg>^wq9z@$bvk1#(5rY zX~%DLyt2-{*EyDSR9j>1TMY=D9T-|VB!z+)(Jil_WwzogQ5TXUx}e-B=C=S?Ei8!bj&vNb`wz%u(+D6x`_o4_`{*w zsN#f_$|%!ZrQ_5rqq&&I3yynld7ks+|N0w^@$3WyKuJomwsENr*$z(wAMbZA|A(`8 zith8@`n6-HL1Wu?8rx{l*tTt3P143T8nba@+iV)!PWGLy^^EuZKYJgnv5xNZWQ^aO z-#M@OxlY{i?u}uT98l&fzv|S(1ZU~<9xqg?-@!r8JLGdrN`@o>CUEvI{C`d0AYf&1 zpmzm|dByPmGJ%Vasw22q<+%L$6#HOc#(Nt*AWi_7z=_BXorn7j`#d;z2%mV{(qXY; z#BWOs;g{T`!@|PkYkA1qZQG#*(x#vyLu91E*aah_ecKhc%R_*zN{l8*8mfqf|Arxd zg_Zz1e>PegNqEVw4k6v|2t|>Sqxl_=7v6B6vaQSKNfP;d(@|1XCQZ2ZcN4gTV-y0} z_2IXN9~lJrX^b5F-%_u8q3f}kGCWZYh}fgwNseTIFJwZJA`F(r2+D^}X= zL6I(B=G*NxcI(|;HelF@*;4Dtf9-#$rWwf|Jn-omM?dtYm1L1yI;s453BVcY0Gv^N z(UD3>uC<@B0Zc65B3c9G!eM-bG}a!mbhq|SV~bsH?GLY*B8$xpy0F1j#uDhh5XD@` zMV=!;KB<&GSdP?}i$ZSyIxr2+f8wKgw}NHwcH&wYiXkv0=0pRM4H+6rcIfw$lSuye zXz*ZKT*=ZNS6@hC7_nx~d=A74n|JrOUt{$gnlE1PJeXl=X?SSFpYkt1ofY}G7}Xd* z^+C{XjYCz;aT!=gnrouCw+*y&OxFvZF~ITO=9Qeb0(ly1jkmF;lGfNvTc1DmJ5yd% zB&2=k?iQgJ^Q2?Fa_m-eK-Rae>@Po)JhfwoQ7;%8Cl#)_uTqp-wDa!b6(uKVE}_$T z+?&7|E7Hh;GYVQoso)v-Uh%q>tErKWXIi(bII5QlvZ68;p@i)GBBguLdc3?ttU;Oa z@JcXLHbyS?v>8T*V}O@1lk!AI$ft16ACuI=pCOsUImt=h>J9?vIRtQ1Nv^$5w~|XB zvjX(@jEoJ(l5kwz7$&4Si`63~-Juf;u;wRS)4Op<>z8{CK=cd&vx)xuRCGRyhEPFi5rJCeHbu`R!7BMTBh475H^-xDmegH#+P{r zOTRaR@-jwaRRwaWO1481KhL}VF&ZA(r^Sp48{%i>R)-DQfZlR%Dqa-1Xbh{MD#>{a zxoim?A@X#uwqr7>{IcDuiOgj%aQo*E@IUQB(VVE6_3hoOJ};J)Pg z^SD(&)pl@{A0~Av%yj%Y>>hrPZ7V#`2q_9H7=U%qM=O~Ms`$$LD)+kzc6Z})@na`?S436sYI{{8Tyk-Nut~W} zi8o?2f?)K@kz;PH2?Ije6};BMYUYK0W&iODjqZMV)IuxW@>09q+RG8j84U(QmpiF2 zyUhKG10d$OA+6)t<=d=<>rMF%feF0n*$1E7g&Ntmna_krqfqegWB&h{+3z)0J=COi z7I@TK1CRPo|HY$T)Wq7v+2lVdvi?zD{ubA+Je7ZZ-}eaH%|IX~=q^4CVzm^L5uoC* z&0G9{%F_*%evDwKpjb}@rdeQPOZAzYS})QAz!zSrCf|Kk@n20IFnGpC^AI=F-G2}w zO@us52)wBZWC!ELl&HvxA{PJthA)~gh>U@VBcJzF_;IgIgAjPl4@*Aercr&6VYyUg zDj@z+7!No%rxpqYgWsK-q!eVih-M`&$6i?vTc*6WXY0yYr+v|Ax&8V;pOG|9M z4|GNDv02$>GC1CPewRmlYmQ-eT}e`wo5BwnBrZ8EBr9!&3DZBNkA;FIKuh*_k~&lm z_`#~07JAC){0ZZ037AI_Y5gZxGcB_{Pi!|2|Flh)D%w7GOBax^W^x#p6Ha8W5l;s1 zW-B&p6dw_|yt8LaIDyfO_6X-n&-#ioxtTFjipKBVzfkhTaY%?h++gqYt{GZk5X*o% zDm5WAz`D95r6mz!&uL(VA_$ zhOjex)8ie2&(j;~_$UD{y(~C*0Jbq`tR~=M?e`isqPFk*=Igh6q=V3j4!Wx~GSI5N zk;r z*3~(YBDBOLdNq~2=~{0*im(tnc&+GXi)cFob0i_A0qL=9SJ~-W8W`L$45N}`fgoX{ zaFh#=*Pkt*w8oDd|MP0EKMfc~@BY3SRClg|+g#g|M01RhEf^J;i$7W_hXahKOvQSl z=;#_C6nX|V_RSAzLNzVOHe6fhW(fVPv+J$mOjcyNhrj7ocnA$vY#sEn>HAi%Xt58sl&HNQ^3MLKgFsT1}s?)D(yP`IvjE(t)ul{=d0ny_5aW!HI zi^R0%)F9l@Vr4^REJTUz_`>4zMG+Q{G0HMohP`iaE$d!>t=Hv8ONYpOGV$-Q+XXNN zL|g+kEF%3O1@~DWMul`%L*BOp$qFct8IVj|F6R2JwdJr(316h;kdSPblb>X`;sx(T zi*F^Zb9}53EzTj59r~|9r%)hx&xKW(%poZd2YRXCp*dXXRn-unynSO?Sr3kD@NuUP z%!H`PZSfFCh0bJi<Ndus!>1Vd#VwNRCRw*<6eW|{aD zKGsO{KaihM?Q}RBx;#~bNsupQ%^e!=;f!^re$$=8(haR{n@}du+nV;q5#OcXHSja0 zfh5YO$7Bg8mL|BmTW|%JrfiqSd1^x_Y@(4dIhAg&{04!<1D@fetx0s*)3@su{ZdHU z01v52XEm8%PL&CDMgY>3OjT))y|lH$>9;Hii|$lek0n!LwH%LN^W-=)zQ5kV9e7E3 zz_DNEC5Raj-htOLk)AMO@gs3?cjLQI*oP?=_w<0JoCjf>IS=r)W&dIBuBWKh;B)`! z%!LwsjJ|E{}Zl~aCJR0Oo=qB|L z!9;RlZnzQ9<*Y7wkgR0*DG^&HzNF-nCy`#|&qsT~@V7`vR{{C?k(Xj`ivStQW zcFG2-+Sv`^tYF~ptCTLDa~Mmi$SV{1uEtzX$Z^z$2SiUKI!eccvw+}sK;2BCKM64u zN0YW2maWpS-AGypA(yZ@RCglHm<5Rh*tiOU;_`LTOqIWto^$dXonb*@K#3hdsu`Z1 zG(|)&^Cx^>p=Pn%Fytsg!*1dX5w{tbTuh>^eXBKoXtgg+1VXqUty|qZy5)9yZZIve z*=3woMpVxHc7iT{7A6OnteqSFfT;?ZyhU~PwMuzk9LSZlV9XKQy<+}zaiD}rholem z7&QN79;T>;lf9kOf7E0kNE`ocE(l`v{_!0H4l}knP~SQQHv%TXq;yEUac%1E>jH-v)+4caJbGf7;nq=CW7y+%&2LXv z0%J24y+c@l7PCI1%xfPRIRGIQt1+V&f#xi8#?{F<9*#Q1R@AeMn}K?2vKxk^j1~nx zY1UDnCLkK8**YVG3*nuI@(0533e4D}j9g;K@{~t)wH{(iy`=c8?XyQ zsP4`E{i2N8UO`hPQr9-5O@T;F5!p0p!QcTWd_%{leU{1UwdgKILu%S{ubzJTz3gO0 zGju(1X7-ASZsGtms9+23h3}OkR9mxMH#;>VZLTwE5@`DMY@TL;y~v?|K44R0)#E+s zc!7Uv)YJB^U`@sT`uSg4L#o6yLts=vyA0rQot;Hl-mx z&7YE~APrjP3ro<}h2wUBenU5)DU7h)aMKePj8j(q-aBA|+7b7n3V|XABe}!F>{A!C zMKkd#>OOn_k7$i^_9J@8clhy>(Zal~6zWc2yVyiNyc^HkMxDQ!vA}mfP7K1QCB-t0 z1eE?;V;kcR;6Z=%!0O!T^W?l+4zv~tpgUSx5*qyi39R?Ql&MU8LBwO6C$4V%Wxz&Y z-%Q%IYV^s}S7mEhD$T{5@t2Gb_INm&_H^}*HyY=CODE=jJ9sdJZ0``BbhJ7aSedEh zH*>{#_iPdl(e4b(cJGxM3AHj3Q&hZ zoU_7?23Bw<&J-qTQ`|bHYGj5?Q55k73%@sf>gSbkgfByvauJ_dUM*(HLQk@pu|F$- zAkKboe>@|UOKWP9R4c+*A1pXDk+ zWI%GUxe!%P9y>+%r62Mx$=&(@e*I0 zEDF3^UoyH}(?x%az5O7MhJ{x%EXu9k9t_as1DsmtsY;a8P$P%zterfoP zHUI=pt#9q;g46JE^}xWb@rm@%#KFAF3Y=0^WG;*`Z=Gfa zeFuq#+G9qakCbZjwfmaX*IN#r^#S+G6|>Tba*EA1r|y0vOchh(Pu=wy$X+nTbx;RR z*sJe35=-!z;>&o|e%l^UmIzj1J367~nXVbvQ+?0-(8Lp@4xq49nCb`3mVIqNcP z-$2rn18rjGvo=fO!3fUwit(S1$zCK{TM`p*I!A|+$E>~I)Mia6b~5`D zi%1T6?BR;G<>BO953%6GbHD^4b8 z#apy*hq*HPQ(cU z+E1bNV4<55f{b`jf+X~@S470i^%rK2hjiHLtwAECcwSM2+Y$O-OL_=HNUKE7QgXHE z^1|3;jiDuTK^2j_JGRdY&YEiu+sYH{UDykb2b&{gA}`cKiW}6}hm6c?pvXtJMb;%} zDTq7Jzkhea*Ire-Qzl68bk;9AJDrD@Hzq&fX6$?(TmEyw1>9296Gg2gc*Xxj@Ll2g zK}#*?8P(KwJFG|Veyp0+zQBrN_eS{7g71P2CGxJ>5Cw(`T>r&TLEOUD_&*sbNTu5R zt@1k@R{!|^MHBxYh(LHU#7AoudPB~?>DMGSP9zbUUoTCj!j|q*2*F3;$7qj<$w$62 zHf+}it$}nz>^)wbYo`eKzEpZJ!-KQs3bPP2RHW%NAjf#itFu{ZMBsekSI0crRR?k_ z#itQ>WTC3bNYoyUa11qIQ-Qov5!DNi{hr!d7DHjw<=TGfz8~BB?-s5-UXF7vuFpn5 zZl!Y77u@kD$TvFuDP@Mg@zg?(A>jwED2(p-TN5-^PC*rJ~-$(OPd*hv#^~Ify9ENWm(ZpnT|F8?aF!ew%kn*>x*(la8006iGq0rwt$|wk9JtZfIt4W=n-(*WQSzdu{3bb zbGof>7PE-90qyvhO=KiimI5xDBK5P$&2hc(PyTnBr8m4E=?|admHK6Qa41hAp)y8M z;=p31Mjo-&y7w*;7~|w~&g-b;F%W;H{Cl9FlpAx$1i7)DeZ z0s+D{;TRVd4?o)>X$!Pig$i8(3?QJd?ZAJOy&M0$n}!dtZd4!_!g=*kPKN031HD>i ztLM9Q3ea^)>Kanz3@T;*)U z)D7@72Gs$R08C%JCha?!qn|d-f)P;QHnn+>C}MFqy!gze7(o3B*S={7E2WBJ9s&xN*62;RC1mT{wGvzkgeH zI~h<16RhBDEB^~)xr4Ll^&{FZ$Qd3{O5~$1cw$g5DKmPRFiLm{3Ts5wxH$3dOBgfL z={_S?w1PT0DQa?8yqIh3v+-Qgbox9?k5BLOga*)vKBb@06uE2Reax!5>nA`&s=fsGwp}E;r zu3OiN6vwS~FK_eiZ)P5~B4AZTD&F&ES<%mb&9mY&#@lagjqhXD0J~ z>6qH9g=L!8t{GZDQn4&ZRn^2WVEJ&qDi-Ab^mm@%W3rw08>9jE5*z(v>sMf&5W8+U zFa+{GPoP;~GZ#lwk&C$l@n4ZD7|{@Setw+OYn&FUS*4=w2P;dPCNr98TGcgiuF}gC zy!hyhX@3LmALTBZ9k)_^(!9gQDP>%H=HxFjV2<7j{Nty*sNF2vLMUuR`%u?^iMbH5 z_K3lA)z}em1l)v492)xY1!{-i-fE#yCx=htNtZ@eFTw9|#eWVqLo_(lO z!i4zCAgRnxptiOJVVqn4NK%bt4r_6= z!rwIc2lL125v|*uX|rpfb577uA%jA>nP^j~p{N1x2@)8dP=ll$9p{8bgB_pQ9E0~# zZKo{M`InUD4g?dAW0t$(k(PYUBJ-AP^Fc_Z^Fah@Ne8xIn0in$zAOu4&a-Y2&2&Qc z?@J*;Q@uAxGu$3}IufiC!SFN6g{TKIg1w=TKa14^DWycmXIw!Y)ITayl(v@=K4#4* zyu=?AcPv~hzd_ARfQJk{NZI209eTwIT#(TB&|orniaak{{DQtG_V_~f#OX2x{p3?o zOQ}38ZUkwAjs(M2@z!jnButb`2nOks#Vln;DB7GI><>2YDQn+xz5(^dru>@4tS=a! z1e}~P`n+&BOmUGh;CS_kZEMN)C6S!mHg=gGV`HsMi``Zw(HUX>a0C*nerDNlGE6jQ z(XDw9E0k-bE@l-!o{tbDZO~N4(4_Zc_%OQvYGL8b9x3lR{yd&vC2*rt0vB}a2l~$z zqfdz~C=O^bc!8OM;D6C#NSHYPB@zEq(ZWYVkAQ&6n%`1E}1kr^$N|Y!71PAzhWrElB{K7(RtSYOoDu) zckJNCdkuX!JA1SB$$;hud|q^aZ2n$BtRnLD1JTZ3@`nMFcrp8DfD_Q>0O$VBFAuw( zbP54RLksF8M)fP9tl40)*TTf4Hw#l_C5;N59bckz5j(E^&)+kMv|uooPdAngTWxyh z6F&Wf-@r`kQu(YFbFp|D5)(fTj50{tc>!k-^cLU;7wqH#8AM{@dJHO0?`IJ0^0XlT z@_89?*l78cdvljN|02qZMD(c+$906%Zm2vOxivw4Qt7_gi4e<>mr0j^(61-+EM8Sd z3H^hS3WL=^|DyGY^wXSxH85Hz{TC=e6TuV@w>#`ms4Xc;ospZP&6r|S)S(~_>AoXl zM=jMFC`L2!2%kCaJWHa~Ox4x)2WT}6?=zg;MIe4!bkX=ErNU>U{4ny9UWG+RRe6$m zgPT!E&rP|^y>i3Q8Bfl^RQdeGn8VP58sSUaA7d1)K+;ijDwj64vG*>f*CXc#;6_epZ=f*0_2ZWLcWRDYur3G$KrNo9D>TtST^zsG2%&p5bblTxLG{$264&O_c! zg7W|yzibwG78qHulQSw2I5G8(96GnvCeo=cPQ(!n=E6{YpKYDLxe3ogxxau@UYm>q zw?$|AEF+$TJH*-k+81_5xt3V|m}5DKHEu2Bl*u}w+Qs)d;LmGTAgb7~ zwF3!SEMdg(ee)HoDS4S=ZUoIt?%VTx-V!y|;IK9)+#)U)VO9I>gu+S2wCq$OeV8E& zJP>cd4*W_oT_?8vu2tbN&Pam2dk=H)s*(a)4S~cTNJ#@I+;ORAJ4XAVz=cEU&tz86 z>ks{&zc9WNOC*k)N!SePWVb8^+;q*^pE}0M>T(u_{t7yZT3+Kml>y{ny~ok0%R+8o zr{Gx`@I`JAMJacKQ5N0E9HT4W;t#Uj^?YUl$F9Kv+6#eT)Z+3j4kCiZ4HJpLf+`CXNb>%)-d-#!JI z&flJ^L@Jj*)5uFfnoS|caxHQPn%M(ZWEYmUYv1LBcLcb>D$qy5&|bANsR;6-G#rTg zoDc&ddOoTQc%@JchIjbVQjTP2VLxo45NLrlwrFqsG9hqu?-%oXa;%2D=)&tD&r}~2>lji#X@qV#IGs!GQYLrI1TmV@j59q>SLA9__c}K z;=dVuhC{{~4{Gd7C?pIp47H8n=vP{rx8t4m!go`5vf^LR=OZna7^4d=eJ$!+a zlngTLdDFRVQ6m9nC~FXCk?hN`K8~WyG2J=6AkM18H1;D$tE_vPV@}cdp^Vt zZ4UfT#7rL@+r!eBq_Dn6I$~OM8S|)3uRDu&QV><0fe#+>fL=brgIw}-g`Nt1Bffl$ z4d>NF!_PnzOKiJX1yUXO$Vuts(1%_jX(f=aIii;RG zNk}WG^LNk1g~oy`yCEtk^3sd+W2N7VEw@|!4oEl<)O0&!#o2C$!u#d1r`#hj5dF=Y zMwIeujHHv2$BwfhicB$1F>1}tz9X5OysdF_h z990a={*#deL`u-#{^01*{~zD~7v*4`PSprLAk`|Am??A&ct0zJqUy&G$;-%gWSIZI zv}z=3jc@oouDnD47v&I&2S}#=K{?>c=RyCAadrtB~*y83i#tyk?|)gPB>8pHs~;qgDD9KJeFzEci}=Zo)@L$cHa*WZbR**oQ+ z0#FW4@07#$e^Cx+iJ$X6A6QX-F8~`d1dLpeaSo5OLefw~U9VK?7g1pMZP$SIbA?*J zkYSLn%Pa)N9pt0{c?NgdoolJx6NxrACL@nK|a6u!Z(LcPyL}P%u5@u&44Dy&+gOQiDA@K!hVy< zrAnl%H$|xnA6{!TNcQRa=GdoG)wM!jUVoEGz+O}yD(;I|6+u4X@YV*aud^M9DHZ8!}+9>Vqxki|MM6s~b7 zSv?)!(NF(6aRT%YlncU1%N-$8Gn+H zO1}7ev`_)y50vjm3uXtU9PTFQ462Lt`~eiOA|h$Z>BkG~3Zs$1m>Qav@L9nLb+gKI zs?nsh4~;XGy7)~D3Mn@Z zxx|iN>N+^dK&KyKQ}P}ev9hx{g^6iKItMw5z*m=&A%L0`KfL18JXdnyxnv|a^gJu- zU=tlzPKP}BV z+C&(gaC-2^@i;}-E*}+F1>dmcjNeodQ(`?_)Tc^+K?zb-_^zMDB8lkVI9ml1f0&`` zih`PfMn~Y|q%>Yy!pRn7D$V=~N*@`1fyDDA@-ATYdghqCT_(lh6)w$U^$~VP2s;`) zcE}cLVzJ@c<*l|ipNJ?tjNFQ6bQCwG$P{Q4QTlX5PhHp>L#p-oiFKd8_-aw7AV^!J zf3HFaSZHXACr--u{!Te`U2n22^taB<$lJY~Gx<3OK0!NqHfn=52!t$| zV21>)APK!$xF2SOAaw_zCCt7aii(^2x8#}0*S&O$|4ojX9gJ_#D2?Wo;J!NEIbgu$MLe zJ;@>7MJ&CpnX#G-K29xDv@t#nJ_c(z%Hwa615>h2?Zp)|4g2)C8e$j|x)bl!=j^2MBL2I|aXY+1NbDUbE>*WH|9cm1Yg|H^txe#8WK=cW1FVFw(7vU55l9;v{*D17{>KdN>e0 znNKa9B2VypGDo-M77~U&9*0;UlH`TEUij<*{C7^Kc`ZH7IOEOKh2i0T`sa9|poM3a zJNyp|`&b;Qzkq!FZSW#cY+^a5+yl(kw@foMxw6A%Z|V6_s@quCmtHlGlL$aqRTBDS z1N{Aaj_+)8zCjCm8MR?awlZ;n;z+_nG$4giit0=oV?eL^2iwquhs{XV&w)7O^=3T~QYAG-)5-{!;H4aWrh7XCPDTX!5UJ7qOf zbxW%&t70-+n?W9tXt04*hCPFbC#;u%EY3k*cr5T)gP3Yn$;8}jK|TG4hps*RPv^R@ zW%04$lzW!BrwyjuXPToS?|R!WEKS)9!scGxKbw)q2zGdPzb>raAI5XO!T)o1k?o0) zssgknb$I_>Ql*lKfw8d1e@0zyNW}l`L%erl{_!1C|KC8wtK?LSp%)4*EROcHPVaio z{+9ma^r9(g!l$o}$G`YwH}d_^_TkrPSKqHFYm6wDPIUYS8@Vkl*>$~zs4c=13&~=M-iElG5|z00obJ`07T@h#0n}KQdyl(1pn)Z(u`d}lzGk? zEl|w6o85k`<_E(k%+IJwh-#QXP-Uyldr;++(thUcM>(voTE;X6t2IDB5`8f0U2{=0 zUVurQGv>cF8-)d4YVZSJue2~Yx(8cocr0}3VEV{-)_;Nj4jxdc(#@O9>m5X!+R^6~ z#DPt}>oZib_$j^Gi34>ps+U1bzV&>EMk6d!; zhU1CmrTH->+ekKcYHK}?VU3*|W}F&Iu<98*s{6DU>*s3D!$sm}8YNKEkl z_@d~V5!OlfZ6L_B{X#uM76{!rM{EkQ`&zvTFX=7Uou0D6><*%#@^agLAi^aN{-HZo zv5NVF=;-s$iispH+?&Tw+g(W)MX00jK4E!#m>0I7Z&iKTD6f{FUYG8RTNJ_!(iwY9 ztP+*!Eq9KuKi6sBu?WZA5g&w341Pqn+plsSZ^H6#AG6H0zfXj*?IiInK5hP8kWepm z@)H6J5~$>l4O6ln83@8LqSZu!VS!NiN2Hzoz@?-fJ|3~OKCk?@eZ%2E5JgUrTG0Tu zc`vjr66p`6O65&HPJx9qU>sTu{fm2kq9OgLq`zkl-P~lV!@C_&lP-WrD5;&illQ5G z*M5+yN4Z?vrF=3qUeX4UaV`uJyrokS;wWw%$%Q}(od=05iLENKyjI^Ld(5As*PJ~a zHimIOE`oVw>kwL=YK=QOm~ZFBgh3Piql83qgx3bDo6rKWz@?;Jmb3NIe!ZYAE(peH zkx_-4(q3z7NDE=K6?JVUH62}_4Eg8at%lYOUlD0P1@I6Wn+|s7$N|5Q!~24#kGo_v zSKVTTOXUK7Rx@o2Vr3khIfM=!S6eju&(|tz)?***7G0@|YGs)nigsnG!^OAqD%`d5 z@LA*=VUc>y!~Z1jeQkYth5j8P=z*H3+tZVSC#Dxn9Fv^NJ5DyKm6GCEX)78*p*4Y9 zw&^?Qol*3-iQDYTEK$@oQnGcvdD!N#@~cd=$4kAy1(0~{%XN1S@V6LyO6Z4b#I>bh zA#``Q8KsJvOp(cLCRq|uB-*Qvwxm{jXO5#TNveE?3&6jMD7}3J>t69r)hho)&-TZA zK2(zKd+VGz)Z`vrtdJKZ)2dW}Nkv8N?qgqz8;9rwF0dal)-v5qpAM}Up1&zluiGtP z%9R7|9$CY7egcm%LSSeiJ;~*j$c%`dp{a8wmj(a+y{bFVXIB^fbT8k}?@S!RzXGInY#D?Y70&4+^?@_fbn zyL~hQ{oSGgxpZ(>2i^(6as89(wu!EextK(h))Yd9g5@RTZ|29@6zhvSuG4h5X7cXt z!7tK140`E|=gIINCfsgjT-D&yMuLl>cbziVNKR!>(40fMEWm2H*6(06ju_!J$az-n zIv)uC3|#2#S_fAbEr!3it*_PI!J0iD9GCcTP8Cm3^R473hu!-y!}wru-RO8@+8 z21u;zug{VXKAMn~yKq(?isB8nQ$I@=2#pAT)eNd;o@$1{(~DNFmMv0AKmp-2=Hh_7 zEsDKlzc9KYzprV*^tJW{eRhZE3Ro?-0jX`F^pE~-68bIxmD}Wu)q17IHe#Mfd%|q~ z)BfU9am9($MWGxMBNYtV_}sa{gva#|?2T!8oKz}B@g_y|Ox8oC_@1%gG4*mRFnwS? zk*T1g24a?rN{iGf%TcfU6|u6tHur|S2o}U}b^Y6iO1>F`6^(?AFU8PeCdlLYnF_-z z6mw>)=PI^{_O7DrR+4ufWqSN%iH10S5EmTXd`@+a)WPzMabLdEKa>X!XcMKbkl}}{ z{qJl@by;izOQ6b=1CFf!#sdCc<^RJtYEzq(zr|e_{@XvkW9nzNB;2TP9n&2_bEGz? zW0Uwq<>}7;pNWKUb!u7RWSv`QU{f1G?N(j0PblnL0S;mjiE<4n^4d#lf}8;X@u^c{ zaFZvGXO44K&l>`-Yxhi1+-XXMsc3RlhuNOtk&>ts{c?=#`NLjkBIV4?f{;nVVKrG6 zA7rG1Kc!7#9Z8RpkT>9^N|S9Pe~bD4@#EL&B2H!s*q|={d+xZ-KNkU%U8Sj#ke`B< z4=niZJ-P+9WqBDOdHMJr6kPPm92EHk1dvt%4fu~c_?@Az9P^?T)DbrjRE_`#QCUUs z&OxvnS~ArF97J4_T>84+I|qS}O}SW2TucyIz@(B=$8T~r+I({usNFsN*;v-N0VUD&>e?9 z*dDmB(5R^J-+lY)T%c|kS<$&gJ-+TKSq=ly92SV)X#t}b-@cCAEss$xO=yhKvlqOw zsF!0Nm|Rr!(6SM74P--_a@o8jlP|F5pQCduc80yQpg^sCmc$Rl5fV>4_{at2Wmkh$ z?5;fvwqBTO2HCoL8qN^UnA9sj^y-aEzee}RHZ`Ba@5QzuMJbaYnB+iG z*yj%Z&w6bxlHMx?I*;*2eBklV^M>gv^TvVEB4=u282H{z4_S0?(s2Z9#98zneFHMp zXmRQOL0PKb>bUO7aDg!U!pft$(#Q5>3b_pkt;M8eIqp*~r>{Y1L{0ITgMlh_Pl>#kHL3;;A7-IB9IjmLR1lrO{2enpEyggXlx;Kx1^16hZ0sa}8T#6OpjeNT3EK{3~ zdCh4bG96oe8+=cTmX*m3+~5D}Qa>FcU9e2C1H#merogK|oL^X1IMle7dIc?O)D7r5 zG@-5J6{LFc2n6?d0RFvtl@QA(_h}gWa+uG?3{ZR?J8N}AU(8|xNDUWikLUSQf6f5JRgVc&-%Sl&TgSa zu?d|dIVi0TN;<}Vv?wCE#GgW(pxffpt6QAsua7?)0GY7F5_8|Tne~zr zS7lq>Pj)k`wP}F?gF^4(eEK?`{p1=F>c9<7aA9St>zF zd~}jyZ2PhoGctN(PG?i*LkjFO?n`VM4{~2j(hoOi zPnFmLBZiv}IoHL@8Xk=&rAvdiXYiW$p{29waXP=zypyGsHMNMX0ey>xN(|}KQk>oB z)mm^+)H64N`PeG9T)0lXM-fCc^1DN#_i%&Wuy7T|?|JLVY+%XliXBR}ZZ)j^j&HU0 zs#KrHG5>OAQM>KWqR@R53a#%c;!v(I4_Q`NOZZRR#5#0Kf@PFY&_@tI9VxHsYBcfk zx^L~6@bHp#_T;)+KR>!{n|9T~Lfd=GWoKr6j7pwO>FMIYa-<_z!!B9)!o{jwihr$3 z}EK~7hJ4+d}L)!nnK<{xs0W|}V1j)*yb+Z!_U8>G8Th1gRh?@)uU)t^{0 zCDQb*fY|fwEhFW5?4!wcM1U_TcYyqB6Ax5k1y+7`a{$!7Y;9>wc=R+@o_{3)&*xl` zA0cn2rdfQP>mEO-+y7|(zAI8ah4l_CV?9{4e#G@1_4gO@+RV&-z>Q>uLY_{l6dh7Xzm@Xe;moQj?os zPf2c}!Z1SK7Y?B$fQn*K3{X*QzyAB;A?a8$7N2LR$o%gEA8#CZ;6L5@rDdBkODLDI zCFbp@zK9@wMv?02ZQdy~Re9L=vE-zLD)Cp^XPRdnGmwfsP zr}o0pP*`dClA@o?0C|zncYK@C!+R6f-jYHoU_1wig+^Luyf@2;SSj@X`IG1E$Egha zhcXEXi2yB~c-j{5Qfntu0ugZ?4|65qL_#b)FwH9KxONsNqv}YJAWw?ek*MLOrZ+Pql!CD0z0C9WOLmsd zK4EQ@zWn}Wlsq*0epeYhGx`yxAeZ%{s3s$sFDVZegjZ_p}%9JCE=S zq4*?Q!;ym(F558Z#cDBIhPr=0Quq{k7J(&CHn)oz%R8cvt8Y6G$DVOan|AVMcX@L0 zjVE(MO3XRHyOi8j)74Dd?#Po`ZG^3X`Z!xHN@MOsi0$hSvRStc!E%LRsIf^|bHj~nHdSe0NOEB0 zm=z8%C@;}8hjOew<-tWRfS)GvvhujSSAM=(V@&3cDkqK5<;SF7%3#%kz|L~Ic>Lpp zn7e}HKnaSYy}=_GsbM*GIiuG~*G$yj5 z8p4z6Ca0i3t7{Gh!k{J3@IhkrNu)6Eje1~mbJ9UI%1UeJ-Izh7fx9))jn0!LxLp-w z4jnoQe+XZQka<+v-y<()x1svPQP*g5^JWm8K;<_DVIhR!2PJHq)-u{ob}N%L=)8v# zM1%rqDQIM`wA)xjhkPrjpH1eC2~q12l*<(4Y52m- z9X(y|d*$D{S>6D|pMDAA0xnLy4_FL5H(-BtH?c?ReE49 zw@sXliEbx-dZ7TTI&m_V^lW|9F&hrecQ0~Vi>e5#HjBQ3gN z3&otF`72ijv0e>`8QnN>4Ed}v{|IMR%hpae2hDc=fHaWcCg)T69Vmcg5YE@yp9V;V zaQUrKP{soCWBSYnUN2d7Ue|$v&o?{nqh~TwwiG&Tu66PpwaH0JzbQ2&j>kYhjbo(x z=#hWJapbp?Bg2q6ab$x%f&E4{>-@dinHCZa15DD z6+w(Fv1RVJ%?0}4W9^6rOOkqm*ZXeaN9VFv1Vmb#&ySlHYp_w>V(Z8IfZ=H8Un(P{ zvXpoeB5Z$HS|N*b{Fl;8CfT98kQFCN(x#IQJT`Td&-ao}kd!wn}RCo%)L zXD!19t|T$1+?=MH!^TB;2AR5uH*0BaIWe+({O8P9v}&vUx#2PYG$i9XaymotraJ{9 zT|GR-xp-QAPQ+2hT7eRYg+!~08XbfDJ*sku5VV5kw21`@LiXDF<01{K<`yqneFc_u zz5`Uet%zxR^-zwerjb-q7GnVBOCj78E~+Z-%{~?si2+U8i@eD7lwUT`0N}qj0J}f~ z(D*un9+ZH=aR_ajgZnAb+Lx3hpDmP1zkEPmZC}H!x3d-2d?3^9hm|ys_J|i!ryR#@ zb|T_UW^L{(Jq46>f{T~(r`i9**;_>A)oxkaxVr}@xVt;SJvf2j?(VJ$Zo%Ch5*&iN z26uON*MF0@PJMO8-#JySJ!sK;*1G4Kb6&2pp>jWn+mT(3v)L^6CdN!JKdtJ^7!2?DtxQ zdy)GwTVMlF1vUWw|AX`3eFON98=4zyi~gpR=f5m z4`mdnRydEEvO7Y`S2 zrbmfI9$p;$1}kOOpJGAqlxgbI_#ry&sG>+=B2>F$Yb)<* z-XS>MEfTOM{;6b;vV9U9XBsmn6}wN3la%xSm{;{L(?J8lXTWq&KB0@oam3|Y<;_!e zBZ^@-Do*08NZeSc?V5fxJZ78_q%n0gj1KL-QvY79Frl=bfrJ)`6T@ppbI`bzd^Uu) zmGZFJWtbtwC<4c!3{#}jgCZ%nw+Nr`MOu>jH_()5m28=$Ly;%$exfY+FVn$?KX#9^ z|7|*`2{?B@I6_1{E&we<6arQNwZ`u+)Nq9wG^M;*Q0g&0eF&pYk}Yp~7dzTAUjFPZ zXL`Pm6y^JgB9|!Bw@Rfdr2VKGUV#r}o$~i$$)kV zl>|wP&o%w2VdMAg`IX?y;x1x|#k{3*T90>hY^X+q($EcdR^7oH6s^xZ**zqwfF|A+ zG?1hMgMQ;FPE;~7EP8W#ZO&CsQe-4kJ%t>1k*;&C?>T#I-cxXDXj|@VAIx+osvmscmJzIU;Xm(x@-S&bZ)ETx;Qg;KeQ3Ql&0H2xz2LwM<#Y~C#g>SJ zN~GT2g4qeQgGrS}{DJY2p~JRDHWEPfLK5IAXjtr_J<=%Y623qrCO{}=DdPBHt+$$t z3H!bUpzEXA7ePcU(uA~GkgZ)qWBa!730ivl@|9~zLeXjwf4z%{AvZhhXVWvpLhvh8 zxY5^Ked1BOQF2{R0au&}br7ZedK z^7Nn$)FC*(=)=>Nv(JqA$&}1I3L27Oo*%w3_55UUoJz^RkCK<2p(^_1Px19nbIZE$ z09Z2Q6B`rPl>?G&e$uFx!|hWtEsGup3YSG64l( z)qccXf1)RoRE8ZTUaGN_Iwi&FVNqV>KuBFl`a9m$cWRy&NWH-amTvW(k8?2>+<*e0 zeV7O+09iF$h0RG@(-jzsatX@Q+U>vhGY~tkLV(cZd}0bfry?mk+_)=LDJ_W`n)~9)lvlW6(9xlapH{-*7kd9-4GWOVu4LT!0}Q9pzZb@?HJsIM7|AidsBZ zC20H4aiClnFS42DbTuBTaS%yapq}zb=-W9yP{!ar=m9JO#GAnrn^wRg0F{gV%Z;p> z?5_e)Kar{xj*}YWZgc&<2pC{n-9CW-z%@55i~5ut_UZTe1QkXnI2R=3$g=W7JvT_Q zpNIHPL?vKobUL+bwr2suuGtJ2dchoz4dJlaL~M1Tm0N9R9qJ}E(}=TitZxdf(YAZ^ z(iK#DN}bXsUsfA2_0%FclePW z6I?-mjOR2}hPB;~3qEOYv~J0f*V99v=M*I07Pt(+GAB#PQ_0$PfByCm$PW!%25bvy zegvRcb%>{iM^(HoOr2IDj42E(M)m40zUCLzOC=r3f7>!yEcaWz}W`^Go zpp5gav6A|h_GW_j&bqvY6OeifaXq48V4ZG!S6OhZA0WK3EzCk@$>LYPeIx!(3^%{e zJcYSRB;wIS)=&DoeijdG00cll;s26>RJJs?`%esqvv0rt4*jO3%76R*MN!sc zy;Gr(g5c<2zsS5wHi-WuAd3owl9>gdP#Zc3Q1p`=*xvytRDauk_c8x%zhCRPj(%tY zoec2&m*Ta8r0d^&c)q~TbetFTeQI@Q2^V2209ul@Y?d7ke zo4vOrKTD3Pz{tcs(Ik(%aIY(;a@deio037+HL$C%HJdT>p0wdcO1$Bj>Gp1Bxgc$ z8lvOL zyTBJ_I0|6)YY{zRqx>`bm)`X4T?@$t`f*!Y@v!nN|7IX%fD9zQgx)dc?iNIJI88?# znRA)YTpFz$=^ZprJ0?)8)HH*liP*xrQfJ>9bi~IdH{Xn1XF%rc;U~0=3JiWm6p!8z z2CpX9ZCg|?DY$^D7wGS+f0lo5H-8q?P<4`@qBo()9nMCL@sl(_!|g&@DxNnm#loZ& zzVMGK4!ZhQ>5ygI>EaP?OdV$A5IRd|&{wjIxT$)JN?Y)713dJp&XLwF6?^QeZ9My6 zNfi=q6OK7Fd=0J>hxmFq&!nP5Na5MYwTOYIet0ru)?}{Idbw&@S%i0dL)k{W@eLL^ z^6>o0$Xo3Q5Q0RzLb@iP(lR93gRFGqVK*(#YQA=RRWMZ;f4SV*N?`epo_ymt{@Dci52{83(SFr7$i}%c&Im(rvZjMAo7QRy<%bD z%0zs-8(up>)FYWn|JRV;lS4LIMfHOEJLK1YsOGA?KlL9`5cqZFt;Z_c+zr*pyd=#_ zNV~{3}d^B-yO)-hc9+tZ6R(>6InmaCwNfmBTSydq$}T9>~W z|FV)Wh(RENOucV>Ar1Pt4_l1Al@`FPRhw17is^7BCd zo1Xa-P-j@8#D*JkmAff-QTK-nXjKZ@03AXblTf`Iy(>mn8i~irAg3b}0|7@3;ZidR zpqc}a+2HhEL714kG{=Qmg^0Y2sDY}z5pL(RUj*1}ii%@t?_(S^s;a8T{< zGM+NN4mGq9aDbVs4CAsMoUEt#WJ=%PLmA%3VMDK~8_~bP5(=~`ZPsPLPhJ$}C!lfe z8pdz8a$g(Oh-uJIvAz#-%NPy1x?wZ4#Vxw1lGE*%RW-N)ogEBz^_IPiDNr{Z$M;gD zk1VKBizL7DzDQ6_~&8hSFoJZY|EamwCAoRl4yb#ko|j=gnPp<_EOJNE=FC ze^{j=ZG6_Xohqt%vbOM|Pv6AJj08%RyxiMWLv;sBWB-;an{fJDIs^-am+J3(WTc0Qkdu3|mo3Y)Qz3=|wL-Y?nF2j{*$FSK*vAir^pf86iA zYP+?igw?^!5^z>e6I@sBeX_yJ&K3K@J{pd042#@O<3ewp&O* zUMqaz$iMD#9LOCcIkto$T3Ll9s79iKHBWouY99~6wwXJkojY=QzUgw>44BBRL@JZ$ zsf~4z)%U|k_%yP?rof0fhb&UZ$PY6k4>scQObwCKs&ahJ)Wi5gN`07 z88L2GSt9a<7!q|4jKjo=1^DYyx2C8{u&}7=YJ|E<-8>8X4D!MZpHpbw`w ziHSl;K>*#x&>G|(o8I?-TwGR|q3B@3CZ`m?7gXs|FyKai5ATz=pSVY>AuJeZY^7$x z<%Q~dG-P;V3^+~ztZznUrs_Cpr>KN>Cu+?@{)2?m$}jh{2nlOHmd!in*td3@ zk3?XsZLbqK_5LmhhbgoI1i>fmApgD~=zNhg2m%%a9w3|`{C|)Ll%4b)oc=dJg@&oN zzZ*hodBeYbM?aj{Y)W3fNk1XcSJlF%cJ7ikw0!cT;u6LC%EF49JaM2_R{RrwKl0?( zrQsoF7f3MP_DkQ1+`*|^;~AnO1nJ*0ph3CLxvHzGtG-_KXPuM=t!}Hw~DtU51^?;(7vEX;+1Vy*;Jv?pJ+b zuIkyyfmxmKtQxw_olxky@~9t!87WJh*%ghmZ5mDjb45R?ZQKDog+9SjqN*~EyHBO_ z1K@#Ne2OT=QTB6Z*DnKkaHo&92nNneU-&+PRFHq>-4P9Ag5Vrb>1Z_EUz^08N_o}a zG(?x8=NC!=9W6;D!By%M(Tqx2bW$Vs1s1;s&NOXlc4Z@NDp=d~5O;*g3yPsvCYp3e=2k_nfHDxw=R;)d_H3S7+7f zjvGVxZm~azYIyKHL#LOd_>FYR_!oay>}8A)X4{LTwdnP=$2{`mrQ91QvMzRSjE&m6 znPr6ZBa#tz)OKUbNfnn71QSz@Fs~5TH%atNn{#;Wf=3AJ0hPhWI)~wNjx=!c6uG9= z9`V0Gdh|_JMTu%eu-x26HUxIJ?tzIFk6Ya#U+p|I|lzulGx(jq-Yq(-t4;h}PHVXeABmv93@~aw-nB2XwZeL9e%%iN^@KP&96R~Fg2`Fnlgqh;C8myL&!17< zl!*2m+c3h);8^R36~nSwxu+_L>rSu4>iZZwPdH8tC&g%xnZ}vj%^w}2WNqKBA*XeT00XTJF29 zP2ifL*29?wBZokHBObbdXGQ$ZQ4Nm|!x&8x7{=|1kt{!KlK9*!!|jNir4b8zTbyhS zssQei@#FLoz4Ddi0yVonR-h>^S!iEq%qyNT8_Av(2o8uhh1WECCg)3h~yj!g%+TT}fR^0*61WR%h^v1*!cN@;MQwfEEL z+pZboD~q=`owN{s0lfK-MiC6Ax+TrhHHGONn;1S+zL4KDmwy7wzR1?tGpD8U=r-HP z6zJC2S>P*ku_Mu><5E(k3xKGtDEumSu)tU2&N=uV?hX4rzj8{(@)#R|C^r99Kmod{ zwID#(r=q8P^X7zJ@nxD`k>AF@7{%$KwTR&=Ghb|xL2PSUiOqo83E$hrXfH`u@Q--L zRhZ52`JG19He}hp%=Jx){01S^V>@11U?aRrO>BC%1*Ikrvocxpj{==PtlOJTd}lwE zhnZhC40_pCCDqvGB6l6Rf}IVelgW_oJ|SZ?LKsFWN{CHgB{qlm7EHu(-FtL#X%-yP z-wxH!Qt+~Y_UX`rR`L(d(NCJk8C)gj&+}1Hb0|#6fuU5mXsTHe&MU|>&Q3+f5^`aeNP6=^faCg! zCq>AsKm{q~C%Zz%Vw!sLgj~k>=$|I@w6VkB*rhLN={EZ36)kIDmS^0J#11K zjJZ6p%Ajk8?wbE6_y8KX9-ycy34Q~>2QN7PH}HY3p_A=@1U@hmZGwDFo&dE=Z1}ft zs|LVW;=p*-%{~*NnvWx{OPHsg<*Elt4aW7Pw0dlqtZ)#%@YF9T=8G$}9h=`0J~8Vt z)~e6vkS+b%(n>D`{kXK<1oBAL1m~a{c<7idqczL+FFXC3153IMq&&@>e4uwXj zVV#kwSsr%)&mdAW0$Z`F2vdT_5ZE(njnB+O!TC4wV(e*la3(5>xx+>;fKs9H3VqVpPm4kbhJAK>!u$Ec$c|2Dww&R8K3Ua z&!B`ZOIn&^|0duhYJ?$#(Z)s*S6iiFbXl%zo>f?eG%+LrIvAafsmtEAS1=5ZQeNbT znM%b9t^0A=z*qX2P!(79M&=5x`%kKV@`mEm53!_AdHaxJu~g!Cm`~y~N*782Dk<3{ zxSpTHI15*P!#UB*uMADB$Q$(ZMSBu#RV$AF8}5}jbb;_ zxrNN9V)ERd5<(qe8cKl@kpdyWbwoh84uKj`i2mH$KnM(fn>}+Ww^>pjRjFM}Otam!PklCY_GG{FKOai+2c6*%X7- z&nmbbys*8QLuPT1_8_8rzi`CI1cYd3ovP=2QU7gCf^$nb?C421J#WES#O{NF>9cUjisV z@wjzGuA8d@s07Z8DFvf;-xc{@^S&xMSrRc5DyASCtE4i#JgEnph%rwG=MbdY z$zQJOLeE5(eRMq_Sr`qIV2)B@QO(O=3qnQCBjHqwh-;WoVg7hW_4-4D$U#%^GVI1UEnoHTluVMMK7) zJ3r(1ZufBbqb5ARpu_Ar$r2Zfs{=F(fzm+@MQG@<3LYPlG9Dgg zvz*WB4^y5hx7Z8%!~KtX*6$sLi!T&oG2hkQsk}Z!mSdSl0$73s=ds-Se41nrzB4kZ z#qd^6F^$&~$DBVk6zdUQosVVcH0&%Xo@MeKPCW<3vWwb}$om*rOrFXNl%t?pRI{v# z-pRCy8V68Hkn;3lOZx_D+5=Xm-6zoM2)_a<8O zRPkkkeJx1Xu624~FNdXv&omo@P;IjIq~xH)&J+O6CG@gwfRx{X9^IqXUBz zUoY2weWOyv_!s)UL_hgkf)f)TeCi9V@#UB|UW%15Ncj@01`auL_0F@)@OeE+^R|Rd zwGt)8!aj-r^%lzKY&GOxn{v;CXVE?i;#Y{#{1;l_>Gt$Rr`~CbRMzNl1(6~-*Yx6= zAOZ$t-5t5s_4kGC335U8!vZmw^)flbMRE+*Z5Sttfy!1iP99jn#{t- zgDM;!s>HbYv^pcYJ+oxo(FmQrW5OijQ8qFsoR)+*JD}qa&E_-2v17gLBDVR zN1XqCEGF2u4YdO=W|seBkMQ5IsLTAHsOtOueSZg{4RiOueOoo3Y?hio{G+OeWpJ6% zKg6xqhMf?*D5V3FaoUEtd>`RUu63s5`(#A$PHydg#i_<#q&P2RFt3iN%__Y=oS3QVz3siIfaXd-V_xmcpT9`=5DoaZ)Vk}ORx+J21@sE8 zZ!%yrWyqhHuOwP*tE{zp?va(jPcEI>(tUGSRD3c3-hBP+KK%DgGoFiQ_-tI18m& zr=BN0kxxTSaBRS4AMv6qO~fZ;;64gRaM0XFsN_#);@zG+*>_99Di;KV=v^aX<|Rjk zmFk7tH@AYVSfA4FOWfA!>NPr7@qT5ZIh4#=804(p2|)%RgW)C%RpZ%8u9b-JCnM#~ zs!4Q^p?QpSFA{d$<{j*$$~Jx5@&hHr2;}HQVrSJ{-Oh-!f2;;DMA@|VY)t!|nF}m- z@KwB`v9PJJWidxrq6T=LVyYm9tlK-57|(Av@^nRO)+E@TW}N-=lAjc??-Qtmd)gg1 zjA@X6oKQ{~cQW~>J@ESJ7#F10?Fv730%W? z&N#N;x*yOQyx3bTqjK-{OCy3f#WbpGP;T}O|_;5%5O0(mrnBOzgY|gH)=j3-v z9Tuy|$T8Ji61Hc9&lqWRI1LDi9IBw%zM4pvf&FO(eA)&3&q*EWn*FBkgFwOWLfE0B z)@Ql$dt;+9A6cl;$qQsu&USA`+(32$uVG=j42VND3#||uZ1KTq1&1ZLqM|LPpziuF zjJh#hYhzzpq%$9+A#m3rP04$UZ$J$ouH8oWFBPkm!Y{`(v_mrQ|Uo9@8>%Y z7xG|%G0XqC*QyxdV?ruRRA%})TWYSRlq?wA4*Bt(;i~$eDHSw+O{zrmVE^&gV-un| z7|hu`AM7-J?aNrQyQ{DM7336N7X?a42Yg#+PS;o}Rv#R)#P>T26@G49$l>F-ltHZM zcm@vZKJ^5awWuDLDFs)gmp@h;I>SA&mH;LQQIan4OPSeYIjtK8^VFbcSq4UodadfT zc2o1Q_OV{Av^N~v*N_BEG3NVi+@J3c`qe{?h@LfFQS zM=YFm$TORw#BG#MC>Pj1bZA-E$muR21At>qE-}>Ka}6Ljk2l?F8P8;8A;3V+`+OE& zO<|pm~%PQU}c!18%t^)mSw+=e>o*DXf#wDjc?P|ja*#*_GZrq zVaSfVNKYMhP>OFd0`6SdN~G~A+2#-05}+9^MktbJNF0!`2xmCU`CLL;pbrrxuv#*S zF$aZ84{Eew(AB+kO))c@P~LI=o8R5Ac|#%^uP=ME>L-z_!-|~N+N#1Livt#oV}^94 zJs-d<=y6)$Qx`$UVW{V~VjpS=Qql|YkX=OX{N=FO$bUsGm@w6wwT$!rs7q>0in{Bq zeGS!b-n0g&feM!m+7^=%CMxstHa~FTM6__>|EwBQu zo($Y%PL89-q9-x=KLhkGyw9QtOJyeqOslb5Zu;(x7Tl5TXtu_M>jdbD{mwsRb#y|W zvsCcwfi3xs-D$a1?1=cb+B1~!-vJ2|0fL<$jdl~-S}o@C6uy*_&~l~%L@Gr;;<;~& zEqe5J6T|d>vE~0ZxuIHXNn`$5L5Q|xg^8ON^=g6Zh%bV>n=b5PLcXsr>!M}aq9ePU~C~v+UtNx1qC#xbeiFd^dX3!gk((9!bL5}c6vS$nVkI;ggOqsh2xd}MbGV0&NIjXo@jO1cILVr z>-%Xa~12vdvjn@Y_l?nywoX;FBqz7 z-M0rND&|RcT~P*kOIk{#0Ep&U(W7~1{3~FUIR38)zUaRq_&4cq3`Wl;B8uGjCX3Zo+saepOW8ry-~v9!EtYtFVBl_P+DS@dTV9+~?G4^SQ^I z+l|KE?^K1rg}(Y5V5zS5%Om+WKMK^7)%W>`!AG$;x@D=3qTCI3L=c5{=Lw{v=V80 zjfqr8hvJMP+xz8EsQV4TO7;&*vN!_?{8RFst)QrI>G38q$8w>$ENUQuPcUK=jG*HG zyO>HEQ*{q06Vgg%!sAYh;NF1Aa7 zWSE&XhM_-#ECjq$NJPkMOH08|@jzi7L$Zsx+Y7&pl&(<(;{5`S8}?%<$cZ%+r|z zS*lND3~r=|iM^~c&Aoy5tv_C3-{-->b@z%UL>DeAM62P4^Y~iqly4|J?p!bAN3rx@ z(5hG$)|YD@DbI&9?rU8QEL0T*AHw6EKYv0U`L>>uEj;Hj%y`k-zE{=?ZiRsp9q%5< ztS<~woJyjZE0n1u#~(&O3I_!7hbP)J+mtXt)5a(bmyg@U{t}B3oYD((D&bxr4~cMpiRdNweG0QYo}k#P6&OHVAFZ=73-9h)DkMeJz`9=R4E)Ms`~V z9-2ZvOpgU3w@8;2OP{I6%AyR+F{^_SkA7h$Ti-|Kd#j#j(8+7zvm{8u2m58`6$QS7 z#o5k{TwAR*LwyDU!67DbcMD~vpj zXPW7;{?;?ptl}kTZ0muL*T>dRS6>;G>UbStI@;E_n_-&Q1XTp^gbgWpk;JrzYbC~} z@o6C^n9?yZZADfDwv6J>i4l+`b%Gg6ma5uG2t$G?nYpDja4-T7!kJDP<4tUR9{t2^tAxRz9w$5uP3+rGPQ!g}k(ePxU>a(|soU?XUTT49~2p751L9 zQGF~$2Q}FMmY8ufNI%Wa6bqvK#w=ZgrvUfc1(&v(iw(s{=v0lEizp4X7*3Cum2|sc zH`b{QQl0Sx!+R1xRdS@rW9MH<{P0^lTFBYjUty_7rbVk4>>jJt^}y>MKZOwvRuk*j zQNe(O68fUb`6_LVL))U|dPA$L9hLBwW_pBK@%s3oJEM|OrMRKK@>L3OqQ98Xww>ya z54E=7R|ih?Srvfi{^3%;Z1E4^xi5I<9{o;k^;{YUPV|>Q3Ep$~=*`ZnR;VTFy^8lA zGe6MJV(G?O5&w?q{UmH$eeE_Q6=&nROGwM#&ma3Vb` z2PO4MN6qh$?YiTtM;CUH#vD2~uDrd~JLh~@mOE#pqv~JTC1j+W+n+bvB`u$HuQ<9~ zAhwY*QCz`c(8jL2nM%CbXG4+WF@p8r!kB3VXzv;te-~O?6Yd+Jx7fgXkA;*p$#hSb zPcyM+W$Sw&&-z{Pz+3T6 zG@^wwb?~1S(T4QXA78Y?vD+Y)NI|iaq4=Qb|3e)-wv%{p^uQ@jzMHm(w8N+Qd3|PH zJ-!GDUm>kw#xHjD4joME7%znhk@9r!z)S7sFqu81uQcNw%l|3>wL3BP=X)BG$;>JH zZm2OIanAV0bO@3^Ij`rc!doR(aJUj}hl^Q2EhGj5qClj| z!)~_TrpIuqg0<$9M!m0|tPFj3me~gZ36sX(Bz&GBe5hiw>e8Q&O28*dlXG(;kK`-` z>&#ESIyk*?>t>GtK|gpL51^k(9b=`JD5M8ArW&e%>{fus@L&ljGK?|+V}0s^J1|4|*}i>Om;G?qO!4Jxvl%BPT(KWZf(4RyS{zQ_@Bsu-x}}8fm9eC3(ZI0gNSpLH^XkN6sb{fz-#ZPJW2|p zG$FC$reuPK24_lTR}2my2daR$o&Jt8V-gvE=SNke7fc2F%V`lMH{uR2YK@CBi2L;I z3pj`tSiK(t?*)HBmdAf$IXgv^W*(>8{jaA?s0zInUwOlAk`+#nNcJ;D`cRy_mXuLo z&){g6w|<`QQy)@iNKwjBZb;L?*nW$mlnSk@`=-V2I4nFiWr& zQhf7M^bD6V$B-7jmy}QudYNLmGsayWLkKS@{(cWzq0>W`pR0j?ltWcxX&YvT4EGy| z)qw~=Q7?mo0%>{| zHIw5b7Ao@5+slPS!RkMeP085XKzhECk<4tlfyQ6D zwuU*OU?*B^6^kTPFKmsGG^7EqkN0R^)rpxji0aMJ6mU-fUZ9RC9mT=oYq0l=XcdfG zY(W9T-4=1}FN(PYRHVr97M-`!2{*@^T{%-b6CT=fU}jr?^O!yIK)sp&=I)(+@Y(q{ z-Fa7dZsL&->{g<6M*5z&=N=*ahI1`%)J1*9dsLKu8kA*Nw&(Rx&EH%VK!kcnRO=vFpQ*;lj?6!;=j^c}N6qmc9ys>ikTS*Eh{#1p+f{yr<1Dl`Z-vPvX)6ui2U1#9vRB(L#rlmd>H#EkO7bJ}Ez%zhLOtC_6SF zBTfA?&#v6EoijAB&oEIVymXX3-)k0*>{r1pOKQ-q2$qQEue#3f zQ8|nEs2m-uE+*KoVxtCLf0o&&kdRpz0iGGHy@St~I+6e21q{uCyaBv`%N-DtWx;Kd ztFtwla)Pm~o8jf|il94TZUMZ&Bn}tQLxA>0Zs>DA+q=wHon3naT<{W_{eG$p+Sg%j zGvX_}p}&z-#eVsI#%`_ijZk?s5?^r3U5^;`2AdidJWWYJk-rYCS|7KSo%AICxEu~H z1Zv4&DA_jmhw6>Z^%E~exUh`U;sv>`-z6WciXfT)AuqY&3-_rKmDu8m^9PkR=0G*h zyl2;fT5QZy5arq_nXc|s*;M+69qL1ije-Lo!C=p|pJ{kg5l3YzL_U9gN>E z^zQ%3B?9WU+J~a%o%}?27yaWl_!jdvqMZo>j6|yL2UDkG+b-vx@~HxnGIoUD}MfWfgkxl1%4Xu>H!jR+SpUT8^ij9HT7S{Q6c^IK#A}3{e+Y{{AAkc zACw+)>tc;}Zn7az;5P@)?pbFyETmb48Bo}xIJ@2uq_8-vYpJVXnF(W9`ald4e*bY2 z<)Gf#d7=#_-p``3`Q8k*Xo_VQ74}@1js0dksA|A;X_obTWuKXUz&Slxo}sP$NzQ3P%D&=Oq}hf~?NXV#9ibil zO21v`q_Wj>YutLMu7iE?jlZ)){!OH5&P#7Asa3icYC*mH<5Qn^`Spue`&a9(8$Hbh zZlk@i$TW3*vV>|h2(Rx7^xp`tH9jL(OMfHSDj_ZNIS&VH*K9K2$Hl#P-k9 zY7SZ5J!A%)OY5i4Yh#(&PbW(&DU1!w&tLA@<~7XKAUmScUrlALVk>vQPah<#EK!u$ z#=Q*=Z`%^(-O)djEr`fl=hMm0Y9d0Up`tDeJuq4%G4K@&c5PcIz8BEoWMPCe&%R}S&SCEPcF*^=q6v=9e3AiSTo2s% z^Bra#6nFVMO&g&tH!3*nb_!^e=gZnUrPIi<`KQg&mBc4vlNbzlvL#c zVtk02(oN^n`ah(<@m1){!u4Z_#eT_!=lVzHQCYvHN#+2GWz;O5H!(nPwg$VIZzI;d49JdT4+=bt@*%-+L5~S!?D<5v{ zT!X_$^Xh=g9!=U9szjb}GnRdEKA_Cc*tanjEKpNZbu<)vZ`GX0Ri}aDoJ4CQ#g+z| zC0cI|&+tCgOFvr<@~oAW`f5doKv2RHx*v@VY1c>+9I{`n-!tB0mj$;#E)x5fIZKCx zVV&IC7-4Ii;*vt@%ic(VP=sm+pZcl$1Vnnk*u(aQ-%y0?UTS@B zV;DG(;~+80E4>Y1-)n+$nA-FM@ZRqz@?&}wfo!@)m_tM{8A5#Ea^EcL{!zJl4~9QuG`MjAx))^9u`TU7$FJ~4SjKi zMeGva$$%5*{VQS<%58REP!(^+wM^m{{m>{;$YnrTbCvFkkm*;U-7Ln<3JF1kev~E7 z7+&r?nca$mJg-Ue7P5fJ?L`Gr?`I|{H2bfL*|sVqRRRr}q}8bfTc3R7XY_N}1yWrf zz*!wOpqSt>aP;ycqtElfpZCWM?L%Gp1mrR7*Iq?6C%0Vjhv z@-OL2goevE$)a`o7h*^e&~zy2k-I0pwu$9l&Qz@j@hk2^aS((0)-mo>EuQ{EZS~hZ z(ab}dJ3{Wohu(o^yzeJAmtjXFn;$l097nbQr2|rAs3p-8@wwDwbvg4ZT+Y-}=R@$9 z*V1j~q@dkC#Zcir-+w0Orypn=|u>G&~i2ux~V9@6FcQ4qHb@{jND4|4nrOBS%A2%+T1jj+UGRqP#e}{+?ab}&#P8)&W5(IH8&8jv`WK(sbv@e;!vK=R zYNOR(Nn$doo-!*R{!>>&0c#FnB4+fvuU`o>)RO~&mXw5oET7&mS4B@N(T540kadgM zzrQOd)ee-W0tf(BuNFKjFkBI_g4QgIq_fL1^r@XZKQD)gD^G^5B2Oc-d{IDa&+dsw z&z9Whgr9L_*Bb%?fKz#Jq;fz25N@H?__^Y;N%_Emu_Fxes|9iBQ`lpv@$yQo&F}Hv zu+^1xya5Z&I(JD$A(^h@1az7nzhxnGVF~(AZ;TbFnTNiz_cSbk`qpUzXIJVDB1H3; zPbV>?A|k7g2zguAJz}=+&O$R?<#lQtmrtsZeOWHJMIE(yrqQh1m`y z06C%F6M)?J9{~y?{I+cMUkaiv$vXv+Itid4259Xn)qH~S$VOp?AXvM>aO-O7gS&I1 z!uJUCkd~OFp4358IUI;8QAkyzqv9CqCzL%TeA+^ZzA6NP(C2%>U-^V3!!tI*8)xWN zeb&s+#Ix@pGP*BVeUphOchBr-LS&n#l_71*fO#`wB(mhDzW1f}EwztOp9h3>m^}d} zvV%|KR(fOtxSD>{3uprO>xqP9^vNZqA@(2tc&Ca+knsUa#s+%>u7a>lktWJE&;gG=|F*LP7CjAa_fSKmootR9Q=DOY0UGXxVkZ#F&C zt$Rm0qy6n4``OZ&kA}L8=_2d+wNS3XnA?Atv9HogEqP|br=xxfroRo(yrYjjxvs1~ zbe}Z^u6WldZnuMTXGB+{dH>jY0(k;SGF0M7J5jpG!7HO8GA)QW2AYr@HJIy z`>3Eqzt{lt^!|hR7rr!>4j;1Xwz>AhbalKN*FX!EYJEM4PTRn#DUSvC;%@Pg18}+M z(k*iLBzcrttEV!edfBb*k4uPrMGk@O^!$RfsXn}!k}S$lb>aPO!zOW`R6;VLk(d^% zbaR&15;q%Ulie6V7S3a{hlv_|gT6t^A=L>RJ|DKfnQxM1dH%Z0Z%C`|u4OorJnFX& zw=l#x=qwB-nG~zV3!iby&tDzS*u%69>o(lYlk56^l$mYxb+Oo@?G6608RJRcuTo?; zjxPww^(($)>)r`WnBc@uosnUkfr*|isfqQrEf(n83;x6Xm;O<7K%kHX1d7v2%dASh z39t>)42jG&A>MuY;;Vag9)%Qn)Qo^LKkVE9VNfrN4?L+UoKXRMxrbL5^IywvdSp}E zqFjDnn0NsIM3ePsXO{g@{ZE$(P_qUfOmWc!3=z=|6g@x4iFgXYgOxTfn3w`7S_kuO zc6HmzmJHC5-zLZF;Pq@QYuot0G?rXk!Qizh(Gac4?)O#pCa3any~d*C86Z^c4nL6| zOMB?ow%Fzl(B;N1sJw}D$c3J(0@=T$vJ(#WHcWY8khS;hpLfejX^ky#SP*|dEO4B) z{^+V5L&^|vfws(Yyn{Q#pHn4GRV9QAg?6myoo5EJe^-^m0VMqabSB#AWMOdG0`^cb zPd9gq+>B`;yib-KD{a{Zq^C+V=`w&aJL}g$qlVO*J^tVNvfe$)E@NPDO7Ncg2+JGO1x#sm}FnAqkd6Wg|J+Y{TiZEGghe4TmM-q-uAqqWy} z(AWR0Px_#$tA2IgnEd5BYw!BR3aE2Sm--&#%q`!q7lF6EnRJ)ON;~an3!G0!lAoQv z1lDLP@1ILBxNt0ixw%_k1BMv0JOknqy$M5zfFTAX#r{?RG*Wz3E~Z+a*n|V8{(T?1 z`T}<2Mhl_I=$f@y=B@-`_F!sxGBZ}&N(i5|=WQ*<&I>H4HY2oM`qS^yvtnW;yr@;S zm&KK25r_FPpF9a&Nt9RdANxUmwuxZwvfkrH*`Nq+_Oytxh~%L)~u5VK|75zIiBikQrCq3!lZ-G^X zjr&qvzBeX)RrV4s>{3Bm`{Zp&i6nfNvbRfA*x%2aVOHV4*DH@Wt)ez2aJ(6Wv4&M$ zbb&ZE-3a}$1`Im%tVEa5sFxd52)FLVSMU3zrY&{;NNtmC{;1AxuOB>A`bD!pi)s4u zAme8H%K6U@rlBZ6t`yM0e5L%aIvAG!WWurT8v3_$31$fX$GfNr2uEmG&D@RoIu#l6e(mFJrN_(7k*=u6bmiO_thICk*bnrr>ajB~x+&Dl3Aa+mjqw5d~N33*@=+kOCz%hTvQPSK{w$5XYBOjaeTKl5s?5d6j`iATrRUcV|%lLpm zNr}4e)P=0zMt|%6Wv6p_Kk#f6h3ovVpS+j&H^Q$o>k zii2!HmSK46sSw%#R#dMR6y%&MXvgW5^A2oM_yViFW-TA({ki?F~whJ5U1=78Hx)Fao@J+jhK%OsWm}F@-V^Dee>3-@&r8QLR z{R-th0~{EJ&y6)xM&|yt8Z0M*Yfs2g55U|@YJO1t+ZTM;3+$=5jCsUo4;T|vXO3<{DssS2%s_fSBWjE;14S)Xa3<6(=hg%*tIDpJ$#a)brC?|f|MX48xr>8E3jQZNT;XH?7(I&vHJFpw1BsO@DtSy= z1c$7g^()w*_=1Sj`=-`{vNt;-0T;ELMN9j7rzDDBL>(bKAlrIi zAS7?g3aE8i%}{>vCF0zS4(JlRuE?hIBG7J?+UYS%gJItT`b@HPs=`Qj)JKPb+duz+e}&9ZuSZF?N6<1KkyU zBD&4Erl56?2gh$QyjSDay*CoYRM^EDWkkbncSh~s<**8udJP)Se&LyL<4@6IsW;Xg zOtT|LOQdu#AgO2KsRloMJrQpsUs%&&laWr3HYhchVZ~|(xLR@z)3D7775oLmNQsFn z@ckSy#__s6Z%d*Kt)N@%3=v;rw+oes+(zf?PeoHFnkTW3w2}lXWLm#rT4!vo%JcBI2#|ny8Bxq*|wyt%f z{+YfpFg1_z+l}S&duI;$_cX~06ml2l&5E&A8^?|9pq7=bxTUIVvGXJei!RUG;lZ&S z7pUaYi5{3;?`i^u*~hSy6GZq_v+XDigtzSc4~E+rk@1|+#s2(Oj~!v3YJCfOkYp@P z*%?*SZLEul&3+B?fI<7Jfi*FjVjk^R1Cr@+QIM3PpF}Oj*y&z18?=6wyw-68jZ+*V zYx4~z-wg}bq-x1yn^B>NzR6GT=&#(wZ;rizAPT0(R-Y|okZ*?iwa)8^y7}bSwk~iv zI+WQPghhWiarigOWSpL>S3ab}OexNN#g?H)*<~FVmgwUQBEoSX>|#P@_j3e_OYF=3 zYK^Nnt*yo3@R)4Syi{92kVlO3o4ZcTXmRj{QpLG(cVvj+Ej5(EJ)GE<0B6rsG&G?w zX;8K4N8EvVpXqLiP%}w(M&G#KN(V;RgTBN0j6ySwkPebqL#bJ=u-t+^_yw`2t#~KX z5P!~C%d>44(f6}<#pjEer)<>$PI@;~mG9cf0+&d_0g0ecLZG>#eFDh8@Y+QLuYr0+ z?Vp%bP8iH9JjW?49dalv8{~b`~B4C|+fppx5D;(Vycz z^d__C16AK&ACtZ zy}RZ4kC`jEVw?r>g8!Vf)(v@nh=HCJ;X@NmU5!&H27i$Ry$9;MCi?w4v_D;k+g~?tKW+f0n-&C{LBQAnD%v9S6}HzJU?h4>1n^ql@*$fz zm*ST3EDD9jBwF*@lz|yWM^rzcgvu?69|2CMT&pf9olmFJggOYl6~Hn1CHmRmnAf@2 zh%`nRl@A5QsaXtsHZg#ekbIUQ<)JjeImYfx5yY$TUQDS&(M-|4KB3f-_~wY|&TZe0Xx#JCf73>O@VOg@8>5hEZgyv!Ra0n8^%2C^PXVcTgQSuWj)8 z(OZsuHj#&mi^I`xC$w%fet3cme5GyckyD=mWsFmlZOF<_zg+80x(2C%5N8U*cc`|S z1IW>%DOWxd`}*(|Olu(#V@I*e0_nHz&cli-e3=*C@C1uGEc+oKQ3o<k) zLQaHIrG{pFhXEzz$e5A{=Hg2isu?Q7pHEz`m#PAyG8)Obk)vQf(lnH^kdGbBx6o_) zlbwqY)x1uoAnk{o>V8z;Uj5hb+NwV}PTngUN?Kr&SQ_*Giz>`fbFz#)n-Ay9koP&; znU4>1G-0%~<&`12IT-bFaQuXJ-4Sf~GwZ)`KSQEFHft2;>Z`K)^C8q0rSFQ38eNq3 zJ7gv|5TZp$e#_*ULNg`>68BlT0ZvZl^u9Hxv&m=Ym2akH!>-dEpZGVmU43C^8Ki$- zax7I-1V27JvW-?$eWOz0!*Rc6?ohNR)Mg{{xWCp*YU}ioXdX*tjSw3*)hoVKqBv5g zhI;KSq-&uuZ*~(Y=P(nj75*iB5zqHJ$ykUF6crDU1oP^f#5|EenODjvyVLpU_RnO# zxs@cF*WY)zhmIh&qmdd`PsZW5zfnJv_II@xP>^Y@}g2XZn=POF34)bN4)IZ{iN z0YpZz_MwGz;aH-RZmLbvMvixx_>iep)!;&U>6i~J`|h09Oied`Wh&@9e#L3c=_A@ma1(WOSLb!CcgKNRAP$ndu^o7ymS{GfbI7E`LBA|&@#7;=9 zIs+y_Q#H5`^L9X@?%PVZvCb@l>jtJuecE7zSbU>qdK}YG<@ao9n`|{;tv6+U?9d^&u|A=fZ2{|n-+1};h-d;>_h^rh8!zK zCVkP)3YZ1m>JX_qzC-$D3Zr)^S%zvi`RkyHp~ieLf|LlOp1z>C@VDNd-N4pyp*y#w zUfQ5da&tal=EfOxec$}Vf?AB4l-58V&imG$Y-^{$3toQ>x*!gJ&1NS+?83Dpb~Yv= zM73o|V^6aZ&64KenGcF?$_akCF^DJIbC>elVl>kBuI5wJ7nOnx+h9Jd%j5o%+Vtwh z>S=%Rvm-|N{FW^WVWtV#yRjKTs1y%{7FCAZsB&J}{C*k@tbA?c)nt z5+*h0*(zTF`BWv}JONRpC^ZM4YF) zWreFd)hc7}10uwB!_z>-HM2)t?{`rOhjKM#*w&k202(LN zpKq$YMhr-kHu(sk*Z)?+lN!Qt*8nAa7?AGxFG@Jue^SDEq0;}BZt2d{f4rT5SjYb! zdYID>61K0?e0rj5d&&Q2=-~nwdSGxSmXiP5&_hD<=fz6hJ{fM0-k#?NSAUwp$K&>P zMu`iuI4TV~s{MFb+b}}DJrPs{0Nc0-a5fz`Zo&bW%_fy^5}VWjQS^f<(%ipe8$X>* z$*7iDPoK$08yjzpHZ-QRnHq zkQ+-$6k3>Cq6iIGc&2xQ!hQuPgR;!pWT<5%oJr6}a=qmEv(~4!0bS9b9iVN<6&Oe# zYCF`{X=KPxG?J}h;O82#;*4^WP!f>#bNM2{ZYXe-t1zcH&b*z(*@yajFsNCTf^Q$q zx)`V=n;fXH*ag6BrU7UhwiNbOKAFwg6a_;2W6N9G@i1i4j%oL5yuGW+kkr_|K(7VH zgEcTazw3vskSAyijiPs90`*Qp zrABny#=Mfh%bJBBq8zbwiUR=55oL5C52kS6R-;%=-XO@g1jAf_2m|oCfp?h9E2VHs zB6$Vplz;T-zeUYbC;b*#>A(a?m@xFEehRertzbgKcA1EO4{LDu>=;|&tm{PKq=l}f z*WXdcf#s%!<}N`^AodPE`}jXejrTN07eG=2EcNRHR4q>frP&Sk54t7tE_nsr)*j>K z0^^Ku`AwO@t6PWd5&3vJ6W5_V6VdNfBXD6WD{xE0%QtSWNTmU!T+14ng`#{=*u-cm ztVGi2NyqB@48b6X{@mXzZyU`}Cd!GdmFOt!IR1dZL=lS(91mVUK$OOob;Q%`v-oeL zjBCt;eqMU`Ax_OH+w6=XP65OVZ(!kY!T$Uu9MsF4|I$34!DNfoDK8WjOW9cm={~-g z9jDwsesyXOFw%lDFp(y<>959IEKiy7jZ&Y1Oea_j83&OMAhUS>c;vEaotho(n5bq9 zt4+zS+ia+AVkLE8RIe-=c`&gxhNe#vL-svy)aw>1>YhZmN@Lhg1QY3(_A7VY_<-t# z3I{n0=)0ID1Z-vAkfK!%r`XJA65LAE3h!_8JXf)ZKWU6mh8C|WGP2^-IPlMvm9EO6 z`1M#eC~{n1h1|xTPgcDCu%7)0-)9pvquwu!)CZ`W!&r0-#g*QIqGhugz6*UC7v9bZNR{%SiV78Wb+AMULYosiJ4p2rg z@PKkBvwA`l9-Q^3CKWGcg5RPz$EI_8b(gR809^nzxh+bJZ1$t+jOYfsebdNHYjEbY zMu14&f-XSatUD1Ocy`qxyeb6@U71;bv>)-?)(j|HEsNf>=bOl}T^4Q9D?^5k%EV#wa&yEj0Oz7P-=qjreX_sccz#|_I=-J}@;qLb_kBu~@fgNJ z(;Nz2Ua5t!NqByl9rxzBnu1?%f=$cfLk~R$vlp**j*D+q3Id@Y&KHr278?lTfT8HM z@>;baA2scBADn9G-4j6K;}>u%*hqIa4+*Xh&JScZ6BT}n9nZ!SR+lIq!pnqJ2U6Ov zk@uthWEK;Sg21nO5Up=rzu|yXM}K}iPbK2Mo35xgo(Qut_<_c*2ffD18h}0|_e(ds z1VUYaY6`6#35_z|9~6x*tc}@}X9e?RPwHov%axE}Ma!sB52I0x^~UaFAv|8_TEBa$ zcwIf0y5p24zj^_FkGaA-ufpWvA`-uF?mWbRNbICItkt|?EITG*24ABis(_R9@;~u> z-ZnV|-9MFM^gMzI{_HX2K8PvXoc*?nx&D1w*rq-Tsm9|Q0vp9N8~gx`Cml$iy<)+c zv9un8xVJVPwI*-C)J`~n&n-tPaA!2;HVQS5gDrbQLlrBP5XdTpq)Y|z!(|e$t1iTI z)V%x}RrWqBzw85U_AW?FeajZE=p{NY5v>UNThJZA3Za5~zXKMP>#K_P%6UKQ@i;7U zEMJ@$B@ACxx&xN}=Ci?6v|}#t)egS1j(s%qPiSb*6(fhcuWJ7LAI=+j59<2;2dzKo zMflYNeUrz~VMF}Hvn$kOIMeoF0@N(F-^0U(qM7TujHmu+#j8!sZK_2(dvpIh^)K%p z|Cs&`rML{Ghiyezax;rL`k-06;~szZ&bUAGwsgHk)oNSG=F*%3a6t2PwoFYDPP$E? zH?`I*A%Fiv_|L@(EHq2J6=1O<^WQ~7*#DCrLuWMiZ*TGM?;_*eWkG(mlQ$AaRM6hm$B56=CXC2n0jqW#RFI zMn@f`i#`kazLw5y0$KZ)9}V|LgMkJ%G!rqg4Hjt;$a?)9B5N{NPecA9_leiB+8G3OC1qH5-#`MXuf)#pu(M8_ zT9a_ehAYLOxL~^3ZD9^uEFT6ho20c3*jhuc6r7RWuKX@btmfq?D@Mn<{N`mdi28IV zdIA)*Msfp}F=%u{Aluxy+<@S`KPgKytri$f^&W%aE#)T4l~m915;&xFe9JrkYqq^SpvuklsA1J;76dewz!PU*euRby0i zLrk1~ZIrUWV)+Fk#TZ6bwf{X*u2iC*dK&}(41ok(xn8u1HdKdz=~&Ct*NkbLlCmOH z2OoiUs(~-^=QC2Ki!g&JcAJ`G<^Du8dgs@V=5frMk0*PdgA5Y?ZF|V}b^@}vx`zSB zE`gP2nt(?jxAntRG``rMb*|>abm8p_4#b3D8Za+Xfrf*tjnkuW_Il%RbFVHpUamVM z0i+UG6Nr6o`Pj@tRJEo+7*aIVwS6{lNuWr7vmp5R4#=>5L%#=shBv%hT8q+<86nP>y4Wi2HU$rECKmd~D{oz_!@$cb>%O_4tis zKU5=d0YZM1r|147Gdrc7BL&=+A%MYg`itC@m3(q>8%ZF^Oj`?i)O5xk)w08#;bz~? z1_@27AqPEm*|Lk7#*kaJ%ZO*9cxKBLvXs!Q80FC^W9g;RMF?;kT$*&frDMzap1@gs zBRQ3Kp)h{;c=AZkz`3N--z2B|(>hmqi9vV>230=K6f^`jF z{?vTViFLGNRl1FmH(r8{x%;nVD z;YR0x*0NJ}sB@BPP=7$$k)ib}t*?{Yx`|+pkst<-?j~9Ik8E2QP_94s4wu;}qP}DA z;ZdBBDs;vw@tkmd#yfjyQ7;TG+4{B_bYU}) zg%|jEO|;rS#&NFlP#Zn%)z)s`g~lXDd2y|e>lpgYDXr!KFPgqJ$$--8a33BoOK504 z$mum`sp^C2oFORt{bO?-aywq*LznAi=8x*rqIaqvZ>dAs3VEA#Bh_XEL|POKL9!2> z054~@^_>uGu_pC9o62#9pioX3H`tTYQu(Uc?gs)*L}`_@Hu3tvqIi>N&Ej$ulR2E+ zRIAiZ57uH&n)XwvsbGe$Cy=y+@-*V5j9yY&kJ>k}o7uwtANwC`@rR>DSJo%i=9bJfie>oVt!vDc`qESiakYirRu4z}PbtB#F zcOks8C(A|`eylgS852Fm*fcgxYWDDUVjgC2;wSbsq&fpxh!Z^>)iZt+2ge}nCDHQS zLDFfWSh%wD@Jm*C!`g*eI^(i%DFH-G8@e{5PIL$>^s@#rHUu!HrN-Lx2z|4%r}T8q z)&BFMP_~{I__R+U0fv05tsec!LvM$szbb?Eogdes<|4N^Xla>L{CmLK$-*02>A_@R z{jP*y|ELZ~)tlZmw)#9_evURcz8zV7H4@UU+yT1!Z(tQa?}hih?R-HCL9?(%a%!8_ zc*ewEUl3H*hy5&r@Jb(W0z{?aww$ve7h&9IUQp;dtz~IyClq*RomtqoYv3e0$U9{P zY-Bx67MgJTvlz4TX#=^JBGj+H=8B)n_B7niwJ9ca9k=dk14Mrj6*&j0;RQ7fcbmz- zHje)MFXZ*-+00F8L>~k+5D?yfmnPx(PnsUCr1HN_&ooQvKi)yjce(v9fO{G7beCF| zIdErlp|AQxjiN=q3~fx2=4Op+iwr-En(t!=R#z-eEeVdghCk}&x@G`zSRToYc z-@`zHodMOI%`RM7i0G)1+z9yfcziz}Zg5c?5-Q4UFmobHExq(RAP?&>W&{!wM9O_Y zJkm%538{L{bm;RV?GIO$J}*JWe)(v>pDI5$cio-2l>7Q~Qd@8066$~+(q0&`0@>X& zAWDMs86^SqJz;VAbhAEU)(cD@N-t|PO|6*vqwWmsvHf0>UaL&ijJPSf2ZoY0jPh{C z?B`N^Xn@g5&sia=WY?ZM$%nb%!bk(@F+jiv6|v?>Of!rXyQ~8F2Q(G?n0=L zso1E}R@0=gAPhK1`B%2U4FSy7Y1IDaA+F2@b1c3B)qvDzwh0J1eu9V#FAmHf&4}1r zA#m5Ap1foju0Tu#(HLepB9R^X#VI1GeNVUrMmTc)be}!Y1A9+mrJu83-8krxX9Oz1 z)aPkeJF=oWTeriD8@T+%%s-H8XP1n0$3I%-ZIyX%{kIQ~kKaWMVY68mP5u+SOKrP_ z|LnK*`1xm$+v9P#ZG1FmKpd7$u?p3GIa(C$vFccAE6AAP1(7`hJ!PGM5_Q0OPkt*F5*)=;*4^<;gWejwQB~ctfGiR~3}y`=xR^lVQfO zbR#S0W&+wj*yhhoL9oR|mK^Nc(ID1^b(xcf`|6}C@F)y+A}ztXb(=3-JjpL!pe^$* zpAZ%wtFcX9d&4H6qmUFJw~yRs><;uo?gfalTL805cUThQQRGze65pWRJWD5G=vWmv z>0HRN*4E(Wm%{fdLuPv7(q#uqjb1nYmT}KSPHy{6zQlpTD1?c9`O+$+7!XGS<`e+V z=d%SWg}0_He9A^pA)3}A5k`%nH1U6p9>-frbSW)x#!r#&5m{qq-`s5NqT0?8?)i+v znsbiid6^@Y{eHsDDwKH*jqdU7fz9sCJ>X-9I~j+F>W{|!iv+-e{xtY+JOUs4hXge9eY-uack z>F%4962

lk9#J5-DhEVAC9eG*1&oWqv=v^GXwQb)C4Yy1vQ-UlvG;cV?tEqg=51 zk;~_R991Tl#5rfN5YRmKBdaT`W~uDu8y7fmhnj=$%aeW6who$!lZ3X^IAhu zvp7VG@I0#tR`M0E244+axP}H6&;o_U8&(1?c>cCPG5fI--#S_(3L|p9@I%D@S$v&i zpRNG%c!uTB#8;?`cTd=2f%lJzbZ4N&7ixSS_32Gl}d^hMa!1=kvqOt zm;!h!%d%GoOqGdqpwk+h%+|YIFEVK|-0DK_ANbb90$X1))PB~s0=lBs(QY&*H_9^` zef!1;jJk17)98U@b=um5`>c0#lq?~Jy08;x#T<=eg!PJ8YY9%riZgkKidGrJZlA}8 zR^utc4@IuD+?)j28Nzfq%deAH1ep-#Es{TLXD@t}*(_E{^(CJj{6-yq2XwkYP?6cW z(Wn#CFMlnrP4UJanO`J}n=Y;=B51Hp@M84b3Wm?-H>K=K=2KY?XUo#ux3NOpF z+WXT6+Q7RPP*=Voad_l=6xkEDw6>P0@h{Sd3!DAgnAh4RQtG(UilZ!f_>dIx>+(hQBYsbtuNN9*h;Fsk+`E`CokEP#VOsc; zDjSb?JY~};^5pOZL%hqo$6}F2wa%;Ckn+qemK4F5o9w)tt1aj;J!yTLtjIT5QR91b zl3&^GT%Hr~!tRkM^wBD?6I9~dnQjD9o4jwUdh1mra;#XQ!YOw32{oYoqGugJT~r^uu}<__2`INZ)&i* zst|@m-hhG{2=Ys9RTf-oY~asK!1?mE+fnbN-3E6wEEj>?ow~%%>0)&B*;YH=pXi1Y zXF0(6a@%|x?ZHTeH{g7^p`H6g_R(x?pWC`rqOlKfzU(`)Gai=S@Wl?$jJ0DcMaB75 z&iIg7&;9t&es%`v$(R6oGA@9dlth*kkiTZo#5CxuD^|lK#6M`t5aT7IHka-_b&NG1 z0NM~Vk_@3Aeyiyq&QA5we$o`3W0ey$g*jVjz(OlK&3XVS`T;{7$QjGU0^xAEG;gkA zuJXK;rL5#kt-IwAJH7hDYK|Lgb_#H6+{^8WHr?TExr;ov#eU(G)q91T%C4(pv+Zoy6glA zO$35ob)2fBLux+9EBJ;ta5Li9cbN>Y8R0+gG)0PiBdAn-f;?yS_7Tjk5E=s)il z&>h=doA}Q^aC>V+eV>g`1Da-{Q+qK(n z5LxVpa9Ra_ro>n7M(ECL4Q3t`eq)OYQdbl)Io-N+nxQyyz+G}DPn)&&f>qW>9DPD< zL*B&C-ZMA&^C32UVT?PVV(I%2mfi%SXsxb4q*9vI4tBhZeTbMcwPj{gJFBEWl?@u^ zYbB)P*31~J1+8eHg%#@Oz29NbKgMWRShP(uu_XG%fh)`xKEULlBSFqU`yEfecC*_j zCkm^!vMzJAw7O9O7G9@$E!6jD4XbxdTn&xQnTenJF}xd%IQz7U%Lb?S^r>974bpo6{`ap&(NrErc!>`d3Jp zF1`T$7#l!8_NB&~FQ5giN9#*NoFd5jb)<#eD{R)GL`bMy&owY+roSM1yA}74o(5OF zw{@PoA=_Sr-PAzgbA2a%amogHabk--8_VrhR&UiF!()YL;S{&A>lBXcf!3vo4a!=S zI-c@o+O|4}kN^>F$;k7`UWdb4NP=1xysK}r$5DpAAja&u%MelhAo?r+-YCGblKf*8QT9=X)h!@MOfGd>Le%4!2YBQ@8lq3~^k=hnjDY*>hPM?f&7i zUx{5;qCBr2qze74-n`SJ$t(+x!pquuDI4hx?)wI(Q*U;8X}G`uYyaS?-8Z1~Fa)z( z0l>zKQkRdco_)&k2XmqK@6Lybagv_hh$DzMN_Rk zOpYhNC>Fe#4~#&#(_$H5X4qOqecqixo#H5crzBz2D--&_F*Yp7sfgT-)fHB$n9@{;gJS0N^Jp(1j{!F`g4l*reI#o`=6d$R?H zlYxqL3I4;^ei+--WU9)dBbeOwMYiS?GZOvD`zP{@-8F_uJDUpAmIt`Wn?W6c%L*XX zC8TA7ZKUAMBq#8t>>86G*Y z`JHl~n;_J@FqYiSC~>URUh3af8i<|CWKVhHs=MU(^6Nd>`>GDWDsAg7DOi0gxlPGS zS}pu{1k43MugXbQ%5m1qOco`fhW1K%KMVP&Q`wM2ZBkGdoGohyvU#KTJyj{zb4FfU z7}Y|QAt*AshY%nipSP-Y3OTvg2(t>yRB1*|P zTIYy3ik{E-J;>~1j=B9BO>8LbXG7YrDfVI4e$SrhFTqb^Y$x_`gzp4Ha*Ga?lyzHP z!BI#3zdTS=o#wHApY1C_+2~!-Z3P=kJK+5e9`3lBCI0>g@t=z{L`88G9za;9_x~N@ zDr912Vf&v$TtjdN{&p}tt-b$v2mc-7O8s-bS`~0;9k1UT-vmIvtuTQ#y8c|1$QM(R zq0%7n^|6J%|Uovi=5xLxK7Uk@7jKYg4qk=(qK$dLoXr$D6WS>QB@e}aEVPg z#O6|PCg9%kPo);`+Rro9uAiaX&VPk&GnNkBe)E2YZhyT2D6Zf7dq`1c0E?n|?|f+S z9}#fmcNxjg)tUVGX^b5FM`?FlKm%|ma(vOVaX5gGDlL0ltRfemBq{1Ahb1!-MkEO_ zOXx3$CG8#+e-@DAO}tYScqs_nOAvbGUOfjVxMK-XZKG;9=u&C9eP_N6QK6ZcMBIdx z`3frRfG=>4NuYNF;ILrboCr_MEFR!6Ibd0EVM`V>_(+!oymN4X+F%m&+B~f`1 z<_GbB@7VBi*z!R1ifyqcJo!3VFxOS^V`!7bO~49+Iz}M5!M*kQ_k|aK17Y=dsSZx^ zE!?-3Q5~0tKBs`d2Jvx^iEm6FA0xW}$~qxn^A0Nb)rq5)-8S3kGi*!P00Riy5)e$W zI?IMno6TPEtEccvd_nr5jq(G6v_WxWq8TtJ;`Iu=I-Um1iB`a#l5Q++ijs(;CXzEh zcs9PrG2C_zGT=gu5ojqMsdnD8sAe3`3fF!o&se<&5Lxegvh|HfNCNPyLaT2ae5Tbr zAk~lD&?plgm<}R=%a0_IsbbAklw%CL#e0EOEnj{bacGwN-_9B{4=KHa(y$3chPupe zSCKQ279&e53>o`(lPB#52e1%A@r&YCrZum%&@vXM_1QkdKi~nzcexx|HC6yGde|Rp z(@|7G6tSg3QFaxX0+kch5|7=^YBjx1cPEF`2T^T}c{MGYA&SWg)PU*NjcXEF$h(iq z9@MYV8P%`cQt3aP?6e&>2k}viPO&cJEH!CC)3ka?=|wS8K#WJV06mLi_2SC|uF{Lv z!Y~dSV@Y25Mn)KH2;K2PJbQbF@y9|Cf(<&K{WmLuJuJVyZlRso+4Q~o=?2e>QbArI%*VVHk& zwiLYjhpvBfwi8fm$pYI(cy`Ov!HpsbRmbnbBHle-cojT58LbCz1Zk-$iv1s3hZ^_q z)K|7-9YOYO-N`dsuEICpeFAR-Pr?0=uLuqX(e_thuVv|bS&$LtHe;2X2KA9-B7_i7 zDQf2PSTdr_5(iW(~_p_x}mnuF;z2Hle8_B&sfX zx_TcqeV_SN-V}_uN|E+li56=CZ`VnT0i@fWE}3WboJt*Hf8{pkO~;gl@_JfND_a5#5>L{H2TN@8? z+G2PDL3%1CW__wD8JCtsuRYM*O0}$r6dzZ~=GUHJa)Ye8Ci=)I5imX5^LBXaOR`RS znaz=z7d2K#iqfm*?KeULz8A}-V6JH2jXsn;21$QFT-GUFr3?3Df04|D7|XwYdTcsM z+=#B`R3ww9jrR`&O`beA)8bF;R7+fVnI?QVnQP#XN3AAn!*Uxg=D~!wflpFNLB{yA0PmnRd48vj{~G9(}H@KXix3%yZhvAVeoL^HAqwyagcF+Fw-t2vAZ7* z-w4ep#-nX_QHUS>el|`u(3&5L@~d+K?7hv8ye>tC1s7&sP$Z*=dgIdXsc`)Tr>nJQ zQ>R!O6{;J;9GSbb7tkz^&fWtXlf=k~5>%eHnXfECT6*IXc=eP@1mGsG!qn7q-7z3H zgYC9H=NDE?zuJe7CCeAH0BH*-`#iYfZ9l^2M~#2h7!-2-Xii z$?_zI^2;^RCU_l{p%yGnujQFDh_w&D-ejTv8YuW2uix%JSHHSNuJI9b!p_cCzuPq$ zgi0Y{l6tgS88bGA&Ga7^-ltlv!4f;VBlC5(PU@la9&xN`%bqitzeE1Blq=*Me76OZ z@>hHyAm0BsT+06{<^LHr#Yu4LZxPQC8vn=p7vwsG^5F$?fR6#Eur48@nH)gTNG6Od7Keg%oQwW#Bd(Es)WjvFUiHA>h2UK=mvKSugicZstt!K$ozj;of`^so_oX)H zCzSpDj^Sn$tZlia56% z#ZDfEJh*KytY^@~#$+IJaHe)hQ@naVmC$*}=$Mz|7Z=--5wX4e@ySi?QAgJ8_A_tC zDEP+K)><>W)<~SP*PoBhgvu$2n)Yo!!ox;CLj#Khfv7l=0zLYL70bL)0gVO%UjSF_ z+s<;TJkC-~(sY%S78vrP=T3kqFR~?+Q-2%p_e{t-d3NpW?&i?>O5FQUFcIlIr?m+7 zT?v5VCD5Rs#fR2Rg7OFvm(YZQ?;h9*B2ZbL6ilf<%bB;x6h#TfjL5|qAoaG#!&L;Y0lq2Wu^@MS~>m;FEr1Zcy5EI@>^fRI6xxOI zUt-#?czUdy2@KM^?Q1*Xf>7jJ`;Yck5EjF+b}$neiYF~4?kXNCfZ&C-u~*Zz0$y7q zSeEkweOsTrV1@l)fda$hC`u#l$pBW`W_MW7d=f@aN0dz_P}j-hJI|%uamT|?pHvks z?Nx=U4EiBc^jciM;gF4UVp+_)kNh5G#&DeKSN2F;K#`AM{zZSzKu~QIX^*0nQMQz( z!MmVT2$^K1<10TX=xeSunZhWsyB+SYR-!Ql4+z}eIj>A{m!wqAu2bL~)qZJA!<-(B zYA}jXP6s%o#@0>`eTPZ_Zt6d%Og~e2 zt`UcvckF-=kgmNeT^pWQ>@KVS`7>&%QUR5 zN2Fx0F)^qOiR*Qgocv*g(kr!VdlSrnk2c=XGs z)Lw?<3~e$he~})cueU4O$j`=j@bJz@Ne#HcBq-+JU!UqNCeSG!}K#3 zLjm|bWUqyA#}uyLF1D3$oAtc8*86l`mv?mSbRQ2R{xrXSyzzc`yww2X=$k?Qzua^5pLoF-TED|8aamxDkk)64$hn_5fx+HSi3*T*clY}mUTYQ&s*~RHZx#omI3hj z2Kb=D;p6}vZ{aps&T*~%mg;EQ09Hl){jj`H-#x@))r~1HcImmkFm;?CGcM9r; z5X7F~Jo^9WI2299dF@+Sm!Txdn4?m3a0#H5u0m>%yIn=xhra z?{hWj;FbJL+F!^v6apt2x=_tlUY~PFKAw2<0k2QgXek?=nX3MgeMAx57a@BIz%mA#PQ9>_XD4g=bD#605T2w z6Pad^ILQjCxV;Y3v2EL^ z*tTukwvCEWu~V`0J@xkb))?Jur+aNYWm7=LzFq+1Om--{Xt|BsZ1p%MDlrOv6PQPh|rV!YLh=E8@CWvK3VN(jnUy2S7#-^KnU%4Bv$50vWMc)n4ufDAf!OEN=L`nt zzND?f$Y1eM@H|LZT_|s41hXx%{D{ze6jO)~twX;LU_t#W8+-ToPevs33SdJANf!Nx zA?NsMML>zOO7I%L_q!A9LF3Ok2)wIdaI$BenV8S~k>=C!7^V?nxuy4|PT-pb8>$kW z&1W$9uc>0w%$T$7y}$hILEHxB?wO|kX2 zk715JnsLYQCk0p#9C@BULkb_LTWUvwEAw55G2+!lrW}Sl0#}wi^XoVDZWB}W=26}br=Efl%KfGU?^Z8| zXffjxfB?mjZN`8=PIo1U6YEz};k;RHwF=#L%` z6|TIni{Y0`1Ufd`bS&YD!IT;YRyc+6{!PhhLolTsHa7AY{s@)dPJDzKk=2EGi*8FZ zrO;Ujk5T1j>;HV-S)a}Oc)a`^`?bOFa}xLBDkFyI?lSz;JEZSk1>zd-6*$$X!Af&O zh}*mQW=vu_;LLGKPh@wxTJ$NONc5QRbl5R%m(#AX(vi2Elb z+oa{n;7nFmA6cB$dwFIaC4tD6P7ATS*b5{$9k%`Z?%mBPcp}ag6D(QN7_1i@eX#@F zi_T^f0y8SORjQJDyo0e{_Yq!M94=b|rh31zbms&O08Oh~+5$}s;p0dGH8WN(VDR3L*dgGLDT3|MkBHR6_myQ8KwPm%yC&z^p5X8&D{YAXfP3o=3fdJk3%M}u60|Sm1<##va zT-k)#L|p!epxX9~5GoJl1}Ag++Y~VAP!*%%#BMp9$ZV$0W@K5CyCNDfj=3nl*xS`*&Ei4uwxJ&Q+nj06 z3z<=zM?oF8(HJrpt;Mn!Hh%Wml((mH$dAjD18sS5W>PFewFRfbH4hXIQ(bJzAITWM zEtveoi_=Q&E+2SQ^rU_W0?nSmhyn;|IhE_M4y;K?!oe~+X4S3AM-k6+r$&v9j~s3r z?)x2dg7L~4DjYm%mQ*7U8o*Vf+;p%IIIv8q9P}g+6XiK(pcEvp8WeX#uncV44dbtV z5$RD!ej$QsaN0c0^L>XipilsQTCV=8f`eZQ@GT}9O2%Kw8(uqs7&8GW#lwJW%}V^9B^QNB^quOqUD+Ps|v>~Re2FK2jA<8CxJqMixH7FM?h zH|8fHdjOU1qjvD_7w$gFC0brD9-oj^Z{|49Np$%tIgkyD-J4sau-7jMVc*Sw700o) zllC<>6{XYCcrLwf$geWf1bq*UrZWKUDt|t2_{hupOUL<-8AvuCZE21BukqFP#`O4}#`Jm|4F;cSaJ%uC+rDsz zzrlJB0vi1r*h^02&m^3`31%S+3e(9`P!i>bmAYWXUM+zY#x<8{-+lUxGMv9#+ zuVw3vXDM5GIC{$sY1JH#qyk^aZ(sjSY4&56yUrOJApewNvOe*bUJUr*I2SUaUI1LY z{)x3Zm4$jWt#Rm6eQSFmlgeoou5jXC%^zH&HTA3e2NJ&6DKvQ>GI+p`ydLBsl3U;h zM46tpS5wGp>e1I!xREoye)TP?@0E~HBlJsyzYR=CR9mBl^jAs-s4&<(g|i&1&$5K; z?^GlkdX=z!7<>_wZ;#>|=GE8C`*a*_S-w0+i0a46`Z=sMLDM9#fT z8{AS2&$s5kS}J?k-u3?bn#4R$g|7{;CK>tP>&e2_c1|Y$O=_dP>Gwb5(SN>wsq_17 zNMB!mUXVht+Q=80Qr7sk`>VPD#0YGLHoDbyfw=-$6Gw|jyacY~n!|kPsn>n%U#hH7 zXp*(`XBh6a={!&htz!=-&S%Kq^3c}%4XU^?oRkx#=61O61rlPuu{NBRt|dhB({`w< zlW`mjWw7ngtE4zbv50UeaaeiH5RbCrq)KgT?L zw_q%+#O3m4^1OUC;QX`CxkPk$#~@^h;rswFG<;y<;^Jc8^o+!HN3T%Ql!ejsP(p%w zY#dSP4$ac*Sv~+e--#KRKcuL-8=DlXwVg|yJ4=m=NxpRR6ATZ!n1MiMva{V%XV^jn zep5T!lf<08+Cv0bOuEpGOa^{W;wnBK&>(E=bz#UedK(-aWlBsJ1Nh-X7G+T2iu}n@ zf;49V^<+Uk1p|yJHzhs5dZggCojbKico;>=_#->Ug6#~cS_pMl7e@8HhS6J)t&1!m zn?^qwZ-ORh7P_^bpLj2f3clo_-7WgmY?@(HWbPC8M~w&APx1t;FF=Gm(q2Ci!bOBl=3vXI5R54QbV_z2LJQ+>myE!yX9U!$`bj~ z$Qp9o@jka+`CZ!Ux97uDV>=|zK^UQHEU(D!AZxUC*>y*27Di$MW?M&Q`|EXzJjT6@ zv2Y;MQ82!nY%$FQ`~Gwo2&xRj9z;6iO-#(nA6KG))~}a%5J{jiVYd*KO=H|a--}j2!ts{kx=#QwMU^{skKVzlH(!25QYn>Aesf|HtbAwnA=8^*D$Mwn zu>Vtj-AK9%s#?Ju*5KCPiwpvk)0)JSBI@)|4!;A5tP`!rz ziarlV@2;uUMim1S@ncb=$P^6ppv%oK`rv#LXS)%d?_BN(2*nxbt8@m|uujBxCcdBa z7yx6=<;F*PEui|WYRI|nd0QoY&dWI%tDYA`Y5P_s^xCaM^~Lt`lr8gl#cj7d;597O zTz{n=0B86>nu$zFB&jjkiP8G(ehjQHU$WfFvr8LN!LA zj#fq%%*bftIM|=Q+Ojz;Lja7ntCc+{Ts^B)Kr0oxhq|I<8pxyusz(67YoV-uZz48J z#-NrXATET+J4J%4lyIQC^8$nIpe-Yy0qYn0~Z0`!3W7veVua z*4iqUnN3(?3rvV_*8o7M*GHHH;SZ8ruw?lpTu8ab&7KzAVgedefvZ~fcdE!vPu-Xe zR$$VKZ}$l1IAw`ptO8&+@Fn)_a7Wa^F=aFG#p-K#H0)#D`JU|uHSygBc-TA6MYeui z%x}5I6=Tjl;?)&fe|&x~p&|d#0tOn2uS_~z_knH81ZM;V4`;@9pX+NIHDos{YG`z{ zA&DJss@G0OpyX7;I`m<#soZ68j^ilE25qL`EOM*3Krs6Grf1*n9|6emP{yh=@(W># zvdp*q;u@9k4al$NKSZUTGroISqZj@D2k~u`E(m>4mzNOb+<3{}-QLOL_7vnC4w-LY z>GB@F>035ZP^^31Y}z&eX~HL_E8`I(`Df|&;&cDc+@-Yma^j#t6UC4AbOvnKEu|H( zlq5qe5<~NIHMfYiTZ%E zn3w<0Uke@$^A0Myu|hOfHc|?a)|<6?_HLkC%X=?3NB@tH-4hvq$z%f1%}D#BW^Oxe zQ#x@YTcw9&Ypka~3OWE>ZRD{{MYn2J0$6S{z=QYp=uvrAYrHJL9k_z!qNClN+~}N* z+v08gV{g%LGhrbIQeby$t$d|YlQv8O14mPgk$p^bTC+nL0@ZtYkz zcals$&~}^@{W{WTvb$xkj`jx`slzhclWn%vO><$g zGh@;EG0Z*R9pL3xI%wsl2l$CAq`#u=r+pAjbW9jv1}$()rb1-lfxQkwe~N&oJY>EF zSb9aMzdTdA!5pt5KqUAnDk5QqlrKzqT<} zTXL7EFjabRP^$!X8SF`Rqvyl}tByn*`G!JxTz_Syc^iXxb1=E5OokCky`BSzRBY+| zq7ePT%;PJ>1IB41-@z>(2r7x_J9fS@tw`Lo9gZ6yI7ac@_tsj+177(ws-y;LN{=V9!S;n zPo>=aLieAlrB-FQ;o`BTU#ux+x$3ZY=uP=H?QxNv-z~u6u=M#K1o49q z2#EWCJG2Pf+1Ob859V8n-0Ob^31q&De|x9DU)t`o-TM0XfaZf|fOV$)j=j9(Y6%pP zoZC&fGQ8BmsiA<=#L@!L>0^rC6)pgD`m0gkC!r@8_99~~*9&!rgcjf`i39Ihdk*HW zwGMv(#+4!OgHEy)!IhuJRc7T_@Xh)gNd5^^SCT12)|^nPIz zQbRobr1%vPqlIL))YOoVAE@i9dCCjUI3EVb9FHKQVmP5CRJ$M^T+RFY9e1uV{O}sy ztpp6|G8d8nU*3W8POtBE+7{=D%@a9PBDgilhkLXn324yRUMtFShh`a*eD7j}fIg_e`jeo> z`-+Z2@<*KrnnLda z@U|-%s<4aRLF<8Fde~j+ETX}3o?9^oc9eDek3d3GJ&uo9(zOcZOmsf%S$34J7hj`?sBq!!jZmt{_FK>AS6YhAWP7N4x{aWr58N6;188l~hKn)HV9>!u7h^0_ROD zi`1UtyR&+0jvi@Z^{n(BnoRligr19+%e9vLs`%%87dPbbK0IgdQAiO}yygXnYYV=ui}P{u^sr~VkLeeWFD;kd}99{BCyXw zcuWcVQJ}($7s3+X!OV#wz~3){zpXNgs^9SO9&uQY!St=On$Eo=t22uz;o5W#@a6YW z_;8L1MFqarH;oxbU+uy6a|>lZ!a0TaXY4?6V3hx!0=w8!9GEIfjIsm)ShEz`d$c$) z8uVCuMpv0=8o=~q4-xx3cQVr)mE5Uo;cbA2;>@n=hrg(rEobmK8>NusZHnf%p@95o zZi>i?rKjI)5IO2#MQ2*pl_>cGgx@^Pynp??V^hYypa#f_LpTQlmSs{^CCk=n9Vv)aIlR_6$~x&BOv3*u}>QJ4l|6g zigdEG>Y|lPl1l*X?m&obFpBezU5KH|2z9$-op`vC1(J_v09(3`&c@2i9Q*D&UhTyw z@`USRKVL`6LepocMaS=zqogEKMpc)wL~w1rJ%NQ8|?i ziEfZ3)6gk6^)^sbFd-eYDbyv!W1aDAk2pVsK-2n0LB0YLR=|j(Il~+Zj&t?0#?+UV+?+Zt?ZL{7*|!bP568g< zQ89bgKg|ex4scKSba8;RkR(V_Q>Y1ZVH=$(kWAZTh84;cu2sb3TxA77;%zb zSsfLA%DuZU3hh$MqGle^o$qa7gAAgB?v|Z;ulisE1oR-Q^G^JtNkdxSxmsZsL7Dq0PMSVTM?6iV@l3_ zVZq*bRLB+olHnO1Q98OfSQ7%Ki8De$AX?~7rJq%Z;Eu4-;FvA6AHB{Y+adt_?k}dq z3`P(x6o7q~2uLwr{P0=Pl$r!}M!-Fvk6}Zm+cp{ontI3cMQQc&` zAD!VFIPK3wpxi{bT7fxPpvrrLX%KHyhv*OJ+tHjjk>=h9`u_JOtOzPGF5l95Qj;N9 zaNwkQc;Lc*^WM^3P7ZTUXcZ#Hdyu*3by)FwcB%>gkKyrc7-#nOd~@Q4T6_P!5|6`2 zfx@xFwACYi`GX7u>*sn5m-XxEA|ijEhhe#9%@k)jWc{+1Ky9%OVge#17F;Ju#793f zDNJF|fTG_4`a{A5@umh|)98vxsRBKu!bE+&>PtGaz;z+j-Hd&jH7-xK44Y{X=R{n(Y64T0d;{P zPJrtX_v&PM>F&c@U69k+gAY zm_^#GE8@*n^b_CQQ{ypWZ^UMUi(?$c(c(5}-?`~EW=)5Do_PxjK6!V1 z{=gF*DA55Cs7LkqgIoDoYs`|C9=^!GiswuS&XWH49;Wpz^ZPpv-{`q@8X-oq8Qb6aYPwKsES zOQD)w;@&!4+B_gAt|*oby>2eL-MpZ^kOPoR%sFa8Ue__=oDUaKC^lRZJII`b5%Ny&xPK`!KS8oR#fib?mau*a^sP+?kgY zt6M$782el?VZpbN-*}HsW{Qx7p4Bi0ychHW+;Q<<#u zehy#2Y~a8$J18u&j(%LgzcGxNm{@|IZ?Jt~4igdB4bINZLz`->!E)ij$Zm|4?H@@c?7WTTtOuf)6}h=TZ3i)C#w^fKL#98=n;X>;N9) zVnu%EnKr@6u>WKVo9EMnc)`4v5^+1!%%2Rc`;dxEX__}!`Dz-}zDYZJbK|~G*K@mK z>Al*t!t%wMn-xe~1e1?I{v+gTUf|*1U9ZJ5&t^cS)^s~4k=?}-6ySgsTlC!RPz$cH z)}(&QiH=>d(#Cil2+=`XEbrjjV@lyy7=x`34aZl}NU4}dfM~Qi&+a}gq@>ukQ$wp` zpP306N;+NR#KQ9`DH|J3S2-LeaQ>5DUl(ePwzo)oD^k@B@cZEd_#poP{E<$idcPeS zT4eyoJxF~pN_ugkLi6QgtrndxZsAEZ1CwsGSX!&)4%jHlYH zNchjpT{U3dMz`+ju=P|%bhTQaT5dEsH%DuBtRrZ4M2hF8WjbrDtSswpucU9pzQ}lD z8eX}KIEB+f=G;RKS<4&~A3>0|gPnD4npp9(Tk=PLtSO~lMkwF_733O?z(|=V&L!NN z?e`_@+*?UiW?4N$!S+D(=_XnZGNj zTJ+Ii$le3L0mQ!ig2H9uR0*GQ87E_(jEbjYNpth+g0(}KA$0fn?8;KO>Aw0f8SI4# za*I$-JF5Yuhd`AAwLYnjKb+iJ^O3%zk`U^Uy?8fvGDeNCh0L#xF<^DJofCnb+N5fT z83|8POqQQY4>i>RMCqmGr5MAVlHOy>k+pKZ*f5(%%TlfiIe&Vj{4ecd6n=_+9Bdmc z7U_+0`%Lzz5f^d>IM5R+s$9_YxlnjvDS5xT0^$>tHU*dkxkR^q?VEsF&I8+Ua@cc zeqQ-r!Ptro|1@G}AnFVgnX}UIj{}82{sKzycS3QZ%amnA;7c#?xWdHz323lbvP7Pw z@w4|$eaie{D2NY3&vYHq65?wE2;u9gf@$IaO%ghAqI&~PZcIi(Xd4dUYNMUIsc-E2 z4rV-bH|`ws!i0h)YMeY(p4X-CPg$aFjo>5u_1rZbLI_>Ar9X0cxVcHYZNEf3cnaas z!czeFb|_R#pFag7s*o}zX)Nc2%il34kUy9W3PbK@7g`e)rGpq(sz%ELL69u4PD7kL zwmH6`#ISbrd>s(fYOtRXN&?e@ubdLhhXJ<-h9o><$Gp^Z@!_S@)A6LF-v=qprGsR7 zB7??dY+KRGTXqOZ?LCmhOog<&o_Sa$nJd4pN( z1$pjrb_WlrMy*qXT$$=O!(d;<&)5IUe*IJJ1pGI93Shs!2M=RJDYcSP=0(*|a=;6| z+1T(L=Uo*mmk&XO=KVp7fq=$4IP~+8wA6~Z@;ss#3Ez}XFlqzDQ*GubY@vm8-r!N& z4S6v>+atLyTgm?xVwE+~oy3%s(;NcQ{ibjT3XE9rU__Dn`c*7 zt60~~fav$Ugx{2f%ok0r7Oi*WM%3x7!({O0G9&@T*t?&4Q8P@P^L(+^?4ujge_Z$U z*o9j%2Nr4R>DeT{du$udLZbxU(-s<0nbj+H5!+0>p_@vr0Cf$mA~C|+E?#8q)8OOL zF}p@x^E+1*f7dwX>|;W7Owc-xijhHlp={Z>+sWY*e%xr?VAiuPcut05@U={-%WNby zyFm+}UEu7Ymk(<1JAhvMJHS*cPaNsq%g@p$(1>_paq4Q~dIiYDg+;CF3pj&+Jw1Um zy8(gwi8?UR;s}dDfzQK@A&VYj7PX>>Bm&V))hpi3w?H#f2h`0wGljr?qCl}kq>=W_ z__D*!36+RQS453N{gkF5cloyBU3Wvdx=Ryf396PNqU4|b4y8;Cm+UKM15#@wHWd~0 zO(V?`IwvTenO4^YZGVi;bNQ;Pm*YeJW6pDjw+Ri!bVYgd2%2y)V{{bIqdX^_kY+)#NQ-%q88S_30P)5p;~znv zkWS@3O?*g&v)zn={rznWy<}ly_~7i`oxM{bR(qLL%LAkNH+=9Fkw5^h&7+Pqk8d>z z;p0g!*z@O4nOPxzmPD~*&mZgi%2Y=plvt0?B=l`#@lX9F1;fzCkQA`i__!VT{CVi5 z98!kP84Pl_nW#`R4pme64`6IZAqX;T>YK+nvRt_;Xh`5$;P!}ii+wn{GuQs%O^TKs zy>1?=J)FU1kOSOY^$uzR8#eG3_D{^&GU?ldTmfYux;NYqXtzCkY3BNSePZFoXJP$* zvx%Z5WZ4KCM&_Owx`ycr0r}IQ7Gm^KvZTaRK+R-@>onld#0(z4PL}sh)>inaz26R=kTFfhIIkHNAn+Z3-qOY7Ywivt zmSk&E4kp6iIVM2B0;7g)YStu2a?~~xj>CIupn9!RyYL^!1&PJ7TCA zb0LmU#g`%ToB4O=ZVUNm^GsCM#m4)60eoIop8%^vH&!}P?7M1ZAN5Q( z0p7*90L-|G5(0rV1gl*r9KMcrLiv9vBP_q%e%9cRZ&|6O(6wA92aYb%{ZcyolLpq^ z!>KR{9Gug=vCk1OkfJMBb0sj@3HSk+VQo9&yzU2{^VdGjt8sFLHtWPLAplq~!Mr$D zj}a!^S{Mnr>Zgj zFVG`|O~f7qe!KRU4CR>FiFi#ueFIfGRah8Qm6kp+q&lhR3U|fMMfPe49>8Xplw(hN zlyWsfZMoqtYC~LGcKI72T+w)n&M|U5#8yGMvEi4~T0Ws$XGVUuPVZGoU0#ZYw~NP` z{4N_kP06oWrEN3Hx{qj@44n_Ywjb&)t@^qs+EDqIk#R4Xf!5|DM%y82YQ$Uz{~wfx zA*TL{7T~0V2k6fHj|&(P6Kj+IZUG~Sg8k3T; z?PN_Ng9$cE9G%caq#RA=(P(ZYHZqQDTgBG6w+v5sPk;r?T=&5At#lHNMuT-LgoyNJ zdUpEG%<<=SuWwU~?Vz8G02N(9%W~a0y8jqPlsMp;b7F9r?Q+mOf>j>Jq-a}atKuik z4*=PGBc&h6^h{+vi`ut@sM&+cvK zZS?n6;Mkf;cw1ZBi_8+*gE5OP->+>+HQ0s8?O4PiQkydMCISG>qiF0@&Cb%gdCoX* z$|^XIk}-+(nRhR-<)L={cwbX3h;i8)(NEMH$s){ogNxrLH$+l^H7mELHEh2*%2NcS zpm>h!l03tnq;*Vvpw1@!dIEDH`~`5$iI@BVDv%Alx3u`(f62ZQSFhYKG-?1-0xKP~ zaj|&xQX#PHv0d$|$a~yK$K*qboW;uuiPUG4;6q{lccsvC*2M!dSSO}_GvAelKm8T} zize~Tm<;3m=JW-(HCvY7j?nj(K5E7T^achpCqM_B9TKnO?So~(xn;$PsYAwGKzQaY zSg0T*t|Dn}kf5QK-$|o0+!pUMLj{+5<NH% zJg$E@+AYb^iJKBr3JIBaq;>)S4tmw9X_in|;28x@(9nL6$c>!8eIJ|ZI7Wob?Qc^C zX{_S7mdzvHXYAPU=(b|OOJ%Qnz*mj4K@AfjQY#vH2Cs41C}1e>J$Mj)j7d>7SL|DW z0Ssdu>nx6T|Va-o$Mc(U5~xW)EtGP0mexQ)w~US~W) zz=h^AeU?q(UFey`-8@Dj)=XONi#SBHh}s*!4hk}$0rDWjMUl^$nKJWjUWb=of(_$5 zI%#;kVqc(+5-DB*8$OKg=Ibh^*7dOt=!QZrVu0}|3OM4QHY~aFBHgeY(7(hpyeQ`7 zP$T5ShEXqX;;81Rj9T7VACIbeqB7zCS3FZn3lPsVIzZag9c=>!l^h{v|Bo~5Dlt@Q zUr8IGTD!k(SbVnDB{V=AR#l-(ld43a<5aZvtL1KxA0R=RuJqJobTE+}eu%-OrqZN` z$ojrp6#9&!`LTzdB-H{q{M+7eqk>qOC48E z0*7QU>Gcwz{5b)#Qs6-ZuX4HKY_RIiDSlkF<;Gr~O6hspnj+lYd1$X|`E!PmDgr+^ zLY(-T{N7G^0}^9-R`=s2H`(&TIaiZ9dxi!JTnjY)Q7%2rsF(l;Y_VcjMYnU3xWUp1 z9n6a))-ZMH(v3gP7Kla4a6!_&ui|(wk|3|13HPiX>=jy!?EW~mNeIx06&3m0h`s3W z+RY3(xJOS{XDVF+a?KKD5zd zqMaLB$U>r6(ephzK*MxwIq0{`x|3=3-9P4;XqmGU*?Q4-+Ae4G`{IAhGa~f|(}m-C z7=Jh*wrDqUn^DtHl2nql`FT(A^zskkt>Ez+&~jcX90?jlc3nr)z-87M=Sr}zyBO1- zrsY8SA-TOmky&QUjU_h`^A17a`~KY)+*h#+ea9Av#9|+ zygqzr;_@V_3MW%FDVH~%oo-PYP2MvAXm5>=!BAYzmmQRh9QU7VgVr==1 zf(nvmYIK>CNKO`~e>0MKK5Ab&@<6Lw=HE+v1Eo@8vf0}}-={)2St1P-c>ZOMO2*(s zyjwC1tOYV2VriQqdn%B5x#3p2|h|EVKmJ~p0GTUWew=KT&pV1 zSnedy8d23ZSO`O+6{OPF6%^8*$8GF@v`dKG*zfY$0%_A@^1!h-NTbJV0gu6ik6Kpu zfj_g0w!EYgavvvLO=9?lDt$f{>3ZCx8ekY&LEQSw9VciEw#Q$$8+Y!~Em!&QFN8iN zk|6y82Y(enJ34dP{{vE~#HDgzrj$*nxgV&p&(DzfeRO8>Ol*jP87OB&BV&U@+KJfAf^XOuN+4>jva7f~zm;az_wd6r z=acFeG3WZr$N0+lw7Zx`V$dSLZ4W~wkIXKcTg))LV*eWjcuTJt;bHJhHl@MZkiPBf zOwin^&e6p!y|2n`8mz2SXZc{?8~?vYKR+rsdKv&<`3AsO{(sz2{Oc?K-|Z;UFG&9R zz8`E7{oDKZ(6YgS{>cmeiVy@NgWQzjEy);d$SsithGNY`YsjvCp+Ax*x_%Ud%t~T1 z8p$`+HTtfuuV=1j@Xe+1K)rdth*qByefD9${ig2g?T!C35i++BGdUtW&xrM+BiMWw zdLTe@G~&MPv7hU-r4*~ok4e6!77sO)6tit2QxU&1W0nW-nLp1U_r^$RPDTb0RAX3| zxtwuF-|Lj{xR2}oNBiS*V4%6OO}n=px6R(aWr07n`@MME&T6&9p_Do}J0A>HVxG!= znN194t*DWxEBvmclrOqp7K*M#ZZSkpKWJ+RvH5)R;JKEZi9{najUz&XQ98XpqOy`08WM>S~Tlz=I0& zMXh=k2KJV_^@I=T1_PLQjnQ`_gRw7SMN|G z1g-zk(;s8SUb`_#wOPNWPb%rj&S)Yr|G9F6mK#`YV?~hbXGH}o8U7o?rOtCcMk>MCiI3^dJlny8XT#p zlN=hm3*sfmgj;Znnkk=RF7On8O^P*2qg(^Jf!P-bn(CCcwD)gRsI6r}kO|^P$WE47 zMdg$)AQPgKax^7V*#z6zdbys-`J2t$N~doHXldNj_?yv(G8>6YpP&yYET ztH2R)zu9h}iYK58Yk?$-iV$I!cdUPM&Dkv3<^R_$=PhATPVRmHsk&0IP8H;68>IUL z$*+UMI!llBV8DA7S=W$X>-qzFoJ)0-EOyGkWETV3gQ*mj}j zCb2FxnsPI|?g-B=Cx+{Yl>o$Z8iCRxyzy_EI{>?gf!>HK6*4JyQn2| zR6~y%eicC|GvDMh9O)`H@P7*N$~hngpU@a)q3+#*9djrj&AC%i_7tNemLB3#%#oa1 zbYu9Brb9yR@jXoK?fnK$lc3KpdGk^`j^1D%6DQ~@jpQJvG7s&he7O1&#K2tS7BQ=H z=z~S-&vWBVy9gb6BzJfpQ3hp9zcIloHC?!H@rIL;Ya}gBS~Xx`^w`$x3;#_BTVWD% zgr&%51&_R@*cwHa|KS%*xZM5T)DRDXtgazC{SbM#eTv9qr;h#XM;kfC9t^KxTD_4e zG?9U2kQWUOSU#BCZs~&Zg?d4bCRl#Yocr!18e469EsK+0X@0;4km|}dBJpIL+jMZh zb;wrR1uK0YXjB1S+Gy2lJ-flyU{$Rbw2JPax!NwwX`De&;$wq67l8U1!d{d46VXd0 zXaHqzz`UOA8O9iNexC*hnr3`qUxi#@b7N`@U1*DawwW(g*3apMGt-ARADMW6(RGwa zCK!iao8|XFCuC`!UpnDdbSCJ%U74Bk%!yQekQ6&cg8CK%mVcy$gWzEb1SB&2<>D?c z$SxZ)=@t#?27sd#DkX*XwA2hDOq1UX(9)O^E*>j({Ho1^4&=|Av%2!rB>;JKzTr~| zOkLC#6VwjK4Z&L%uY6VkRmy)+wpm)EzXILu>?~r2LNwp@NL@F~)!ebkl@h!H7;m}< zy1=fl>2Z%kci{Q)5xkZ87z1>gct&io$LQ9JjSpN`erBEQlP@!c1rsd|AFn7u+;_XT zNjw1-RZXR#lhFFc5KK3~XJR2h2g~<}u4#kfZmlBFe;qX)N3RpKS+B6It<%Zp8}0|L z?o5ZA6^ywkb}Veis+{=@jR@j6kaK(q)NKza>ifljF(AB@>oIi=3NKjWVp2UBvVkVL zLDHC^cue0=jI;=x$YK+TIS-TOSK-ghrep3YVyyih=AUgZ20aAV=dph#C-rSBqbLlG ziu#X?M>36qM~GmcqI^i2vvJ5vAxQk>X3`5DJB;RAaRM?r;RL6vL-LMb;RIVzkB+@m zSixCavjPUHhz0=DgQsxUh`}W2bG|LWh0g9W5BcU(w#e=@L8b&>O5G2grRCdgASK9< zkKZ1$uWOx9&KU+pe+vw5eGgPAGTZU`NsIT;8s+yLMD&zW&G7VeQbg1$wanZG4Xrx$ zdo-o!$Yn*HxeX?|3OMn{mtT_>eF^(VCCi z$Quo)Yp=P`OY}-1qs7*k@f9h3@Z6v2^V-0+vxd!1ICA7 z0w5r^|Lw#fV&P=}Uv@{9Wf=aM8jLn*|Lr~ecjD)q=B>DADpgCMx}<#|X{+c3`d|p* z-{ApX)Dkc}2;-anzr;_e1{!Y13lbYfYhW7jgBQNg-2MRWdzr;NcAHaG%*mdfS+NbPl>*cMe9Ba=+4FRll^h-@re4&3@MqFl0_|YD^|uUa<0cKkpWI z!p@z4(kG3ATNj0^8zG-U3mn{JhHL8J%BLGH*oZIb8xvaH*FtByX7R7^<*tBW4zJb` zmLk9uGbpFU0InOHvB)v-fa}ICLG4D%Z$i<2O{^wn14Bemdq`PSTo;_T-bXQa%P)t$ z`WWM*tbi%hDT^bz7bybG?6l&|fle=r10!5IfE0VT-YGY%y`{v!HD~qJ|VaOCD zjbFK+3#snwVZ>V$u5_Cxfl{6X0{<33J}dbG9;aq=-ka1Z>%oT9wSF0l@ zEmg;w)!=P>IpeO@Y z1(}LNIdeC5brd}XMz;#w@C>bxT!qDz1s%Qgn|1NpOPQ-wg%nA@>0gqW22^a}w8Zck zQgiOVwgh=;4RirF^=^3g$T)H zx|dqTmCS(s@XGbOuf#86Kl3<@);q`hvvvQA{m>t+fnHz>p41PSBgIlztVk&{{zInl zc;EN5+wW)@;-*XIe0w@AMH*j_EeB{B;>3C)}%Tl(GFgF#`E@H)pY>w=A z&>d(}t}g!aR^d)z-=ni+lqd9l(M6oRV~mjvd8U%+A9&mi;@-1GWSN%SR9#A;8KJb5 zSC%FOj$TL-WaBw!-|O2dhsD4`ct1Di9K0I%y4L=n5I1=x3<-cKZ(tr+JB$&+X2@r> zo^ZCn!4p-n%pWKAg^BpUaADYytJ0YG7mSkBrh1gk#K~-abEjU=>1`bbjw4U$0CHsY zRRt^bB`o^r5}4>l8ybkCzw1QS`LS95DXsao{aPd=r9SIeu{0~s3+F&~3*#EC!npF6Y~u`sz4@w?Q|W7mbj_VfIS07e z6$s(K7ZK&q9m$G#Iq(Y9vx19m$iqr0giO8`$aA2P0le)FJ89_(l{M7-sN@mMacZzx<>F8g{A{OaQPcV$i$Zu6k9x7ml2`M?#-W~gX)gt7{P<2cXO`D~uO9+aG!1Yz9N5$ey>o>52VIwTmFzEH{Y?Z;bb0m0$m27{)<4ywnj zbl@x=uaGg@zcb9sXGk*YuM;*ITJ!4SvM)Xs%Lv1ysZ-x*GqmD1R3}n-wq0}9v*t3_ zv$|!hX6)!2cIG3gx_K^+t!z3NM`Cbdx)$F8WOr-`T6>IGf=4wLkL+iK#7{ofx5=0$ z`{Dko@{S;~kGZw!Euo+vL-6+{fa(STl5+AlVI_D;9arfS=J4-ih9A5k$ z`39cyyl(x%5;EJHA~gK*D=@#pvabQ707Eh3e!|T|JcAyM<8k|!E=XpW+keu4qfE zhG4;8l85O(B#&T0=}|Uv)bf8qp`-Wwukv~POL`~yBpVI;TDFn!`Wj@j*~b%qWiJ+4 zd?Hy<0v2SVi{))5p?*-tV?%kTBqe%Wj&fSj`GOQds2zBxkkby*;T;GehzdFp>Ul*e zK1wjg%A_F>VAYSv($*2tsd8+48brvVTam7+450tOmf4%4W&s zOYOr+{lXMcZorFx09^!VsV=tnSnG;GmqOIg$Kw8O#!}@e0IDul;6@<{VE}U*lNang zU3I&BI34S0dsY`?LP4Nl&f}aW5fjF8XVA@iND_kBdq72d?AvrcH(`+?kkVUcmg179 zVG~`la~5e-2{lI}@V^JNOYE?wk4+}2X->=_s9pZHODG+z-cXR?$`|xA^tjYceyYL^ z!iBEvXm}5Ew5iF+&-{dRggs#+v~XYhIU+p=WzwB*7&j*v4{DiWtckX}j$%XL_yv<# zubfZkH`^vcnYx99AKsqPcR9sbz2BjhTtNR~(4uWiL zyh>B(3AmO`z1|pcrxPv)LEDr;^=%QUUV%%?-C(}vF?{hD`s8r`T1%?{uT>Z)R_~Nd z2Wrj~Or3wTCakjS1mCm;ZjIF2+BDvBA;Tu2@y4uA9cpO4SA#H;Z}ijkC9>K5Sein# zWxPQ)6d$2^&Pa{}F)h~C6}wnv&^hGtAh0vIzbDv|+nq(Lf_2sl=p>GbUA81xF7opL zCeHjnq`hNzC2H5U8QZMbsMxk`rz*B>+pMHw+qP{d72CGatM=19`q^)Px$n^**0}Nm zlCh4=InU$dK1)@a9{%$91lhdW;wN~q!0fd(5_nnKtr?rm4#)E98z7Tm#4Ly@+L)r_ zbjSJN=Fji;q~S}xmJ5dEWVSTus6aj)wG%4XP6&}bl3U+?`qasJLa13{My8m@*B|La zienY75eaO|33)|J=OdjcUAkLrl2!X285doY&X|0z8<&edknqg%wV`E5ZqUvMzFH=8 z-JEAJcO7>~@;6LUUt>|xdaLw{@f=OP<|b!(e=^7V^>i7%J^vb&&gvzBBHpgZTS|CX zr9i}XH8V1DkEHt@vs+s(on(Dw?nmQPpWW&}gCUegHaK38dEkmJsT=lyeZ9^XT|&_r zZpMUGHM%tlet{|YlTxQvYEUbT%r~-n;Z#Wth9m$s(4IB;y!)elE~$Kp=Dc$l6hsn4 zdky3~P`42|Kd+DxOVfz87e*yWrsZ|BOywUiWKlTzg@cn9U1gFab|+l>6`d}53-?wVC!2$Js-g@ zl4FgX!~!HqH1)$z)GTMyh#J5n4H-Tw*4AMBbIUV{k8TfweV0Thsi!b_MAAJD+xz?{ z_8Kn{88xh3YKml`ue@uZZ~Jw?`2m9r3K%%K$pZP-5Y*y>ZfRb}6>Mfeu^s7rNoee; zMQT@;ZF1?OnhRhzv9$E<^y6((39l< $GL8+vC_k_2Mt$e@c#IU{IrC|Ta>8z^~ ztW-@@8H_1QgKi4rCvpXe_tb7y0ab=&M+K>5d0OVO;l$fxtJ0AuvRzfHUj8I-5_GB@ zwJe1Z*P)XV1utEorwR;eN@sp)@gOiY`ysOeiH212lP3LDg8>=*Ar#czyO3JoC^F@s z&@vorf)y*?02+j44R4$Ie_b_Dt<-pfRI5^<@e-}QUTGeOJz~z5RJ%v8<@~Oa&HP=( zH4Uw-n&G<_1TNFnLz`l5+g=HhJSyR(lq$tlUyg$YtegbFypd$S^ulQTnmU1|RY%<1rbLnj9YZ59LbVI$EQPgMR5gmel`pJ19*vH}k;=@iz>4;m<%>BR4^$B^ zX)p6IckKS7E#J5m(eeCCZ&eCg`mrifHkq;So0$jF%($KeX7rG<1KR)lei8;yCPE_f z6Jro?Ke zEN7lczog#|#;Ty#tQi>iO%f!r!;ZS>*=YCIOK}pICnB7@ZOcf|T*05zm66QVhgiDn zjYzW_At0EewX`UD))&iLwtc!gLM+!_I!J03UWw9F~}Z%>X`7yl4V&EP3@FuGUFA_zVgj*H^z)qu(9i&4)Cw#w+L#))$W_? z1W!HPTfd)RRA~t~0`2+*C!|2o^?t9E=dAD{jChBd+e^Df+MF$yDpc1O{C!Tu#N>|K zj%;1}%D9fIGY@DsOm7QKmbz-UhYKfp*nKg2dg)(r$E;Ut&xX}ATSCtf2T)rqSt1_% z8z$=JUpz9|Q$g2$5Rl_h(?p!ERg*l1?yxX>;EE)K5*YYl-%=nM+EVRUiGMw-w2~O< zQ(CVmSO`m#JHdj6F?dw!WfvB?bLGwkOp4yXROl4&_?0Yc(&QsP3n{d;j_+(9*j-&8 z(WyRe3_0QsW$-4hIvV&dJ*Xp~hSmAiyvVd|!$;-$TPxn67{~{$f20-U;QkL9nA7W? z<(d;N_nAXdY{~6>O|D=<@x!)KDnUAKDwx&4J>U*;0kJ1|U&MSpoMUxtb#LLl)P-&T z=_}k^f~%iecO7uzHw1!J;UoQ~o#;|6p|U0RrA(2lyH27`_KsE?ysRl{mr;;)3d=@D zd<|wyd!}p`-TmfSwa(p>;18+KL(M9d!6>ka+iL(l%c;({hpLvYxt!Fu$6MPP zpIi-UlNqjvhkKk(l$}so8s{L)H-A=Y*EFUAe5(yR=JR3V$$Us7kl@z3iNC>Y3xR@5>U_Kr$flWa>n7tn ziTeR&?GA%l-F$~aI2U5{YbME@DV{Xdn(A)&@P#(gawIv;3=5a-ZXBE`M!d46#CE)w2IY(3>X^2eh+zX< z&@AUyKQq;Bre~y)uknk9L$iA%)RhF0( zq)jwaS(tS6ql@DzV{>PUdg(74Xdbq&`%iec&SK?~oQ>qFT0&jnoo>6gsQ1cyUu|

7jx33U$DP$nc)N?o8OEYe$Eq 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�RQb)&1zdj+r(AoEM$ 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%0Aeq{ZU%D<=!u5ZK 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%0D7H=}Xow@=H#OM2X!P-lRzj# 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

ksGndk+rOVVOrp z+?Q3L$=88(J^rmaF|0~`@B4Lc^K``l(uA76%E4}j+t+dQV-^X|OO(nF?}F%ju-}M~ zqSL;s7i3JN9TwrKVQw?Z9So7F?TRsvFSdxb0=S<*R5d(rc5`nyUwu}Au0_ZUg$(A? zA=(!Q&oxzq%}+iq(%Lv^n{Av41H7yeiI3{K>9Q~0-Z8@(qGbypQ^Lu?U6Hoo+)?G1 z(Ow92eosDIpt4qsjGRWl&CReN6?7Sz&oYU0t<`9MRMT)n!E36hp8*T=PeDZ+(KdaT zX}G)jaL1e{1)3Up7({JC^CaTvuS=^;zGzDWO^q~3qlOA5xdT%pUi#Zj5>gNup_-=eQwWcbx_z z56}0O^WP0}|4Kd(RZzdx%78IXF=lS6g2+lM$pxvpFI2?BM^d3Wj-RE6ZiHAe{`7&9Ny)yb{| zC@IREo?Iu+V`pqBn85&`E?ba#7-(L!C;3x7z=71mVMa)LciYck2<(BVFj6IJU55o` z5yR5#FZ1$lc*(hZcZC+UJDX=Z!19PcP-JmxhRCn8!mTYl;Z+Qm*BuqirVjbpuw>csFot$?y*x0gKSi@Ffzn}i9A1%W3*xEt~gmFswYO3Pk#7r@X6?v^6!Y-Gl@!9pffr*B{ecAC&{u#*akpn?d)%0Ox)6Ti!5HI zKFsAJrro7Ce~1SWt~sDY+YDMqWk}QYy#>-EComnXDD*&jL@Ig^K!fMB9RGSj0HjBf z!{lzYa39GM^O(+XXjn}qE)p3`*(ES)j1m}Hz=o^p3e6|-4_Hh&jE)UV#~zvPf*+wX z2I7<(uQ|wMmPv?q*}w7Mvj#{3eOT&&;F}26iUyVqFEWwcvHnHT07u7bS;v}_?c0vq zc-c-yjA_H19+i_=7?kMcjRnmAL)u#f)U|F|x4}JxV8PwpgF6Hd9zt+;5AMM=NN@-c z+}+*X-QC^&pNoA?Rqd+#uy57V_qJZ=SY!0w8Zvtr{Py#)P~awYrFB+ZQ@`^dTUK4g zB-qL0e-V-$0CyB3KaGuKVDqpKY#t>3VITIht(B3jft}rd)?tOMEbUD!9Sjs4EG>ab z>_2J4J`G!KgEkPq%`N`+{!iBkWO+Rf%omiXMI1I)4tR5=s{B!H0&UAftd#_&A0CZ= zZ^L$yk`}PPhveCLctCu)+iAg0JL&L}7N90~ngCT@z>eY4&g3V8uS(DR?iWo%*@TEl zRV{OmmA%BH8UQERCuK7I)K@nuYI;b|e7_ff^~`3Q=CZ}>aVulNX{4d9=M1@a}9mp(5}N3dmm&2;{y-!hLg9CD?sIN}4q!ky; z4<2HOL-ucq%&5fP$8e<)im8XkSQsRAJ*6e4q#GuKY&J0Mp>GI_Gn7J9(nk`4@H@OD$Xs;gSi_Xi+>sOXhY@ z5>h<-#zd-AO0AhV2W9v9W+OXw@MxUjzS~`mJ5?|dV(^dK@D{}=Box_SUD$Y5d<<0k zC$!5Cr1JPO!e9krxVLcmI>J9lzZo}(GSV*oUY)Z(V9 zIYNC(Z`8_aQL0izqrkI;X-`9GgAjbmzKYcXxku!HvI}mH6WYj53)6+Wz%*i;F4TFb zDNuG9C0X;Lu5y}Zi)GXSWMz+x?Q;i4`o@qNvDwgMTbS{isnNfinsla7OWZ zO`!4u4pcQ3pb8r-XPx`!W9!anHv9D;svYs!76YDx$h&|=myf>eN+QlefCIJRBR?NE z|8v<=2{{R4YE0;8QT55l&bTEcJ`Qt90Hem}!vG||tNf(>Qp;Jbi8>6$o!8SWY-qDX zD7|ckDGfT?M6eB==zh+(NuMhvTz_Npf~#vJs>dU~CfbRCWUO@9TLsGZ1XUhwgks)2 z*7Bv7V=XUZzt!T9l(&{?ZEG7i(-@w%86vV5x<@5taRA;{TwiuHvndVK8eu%Tnic%8 zdv_oCzQ;SU8b4S zydTymwwnA@R=som$S4_z-f@d*FuB1G=GLs2zXrj$hBN|1d%R14v+i zKj@si)B3BtLd%IYE&wDj_8X;$?WVBnq^ne;Oqg41{)@{rnAokviV?V>L`XSYN-7{J z6OVpPrw?9s9W9#f)9Dv?25u;@vL<_Vdjy~xiW6}n7QISPG3+#IikB#aU{=ehld?pV zy(mk%*evPb!>h}b?eNuQ3RGcZO~3Mis<8A}kihyO3s^rqaC4X-&)$Ish*rt6MyVP2 z0`x8jCC~s-_p(NrS+<1jiactaB|sDQ{q2itdFmCcJ+y5(80dx){v;=quw^<@ii?Sx zYFT?QZn6Aw7T4Ux8x$pzjeI?J3b^>T@J+W<~*samujro z1uPD{Q^4J(T+~rCqha)4R`oL}$bIf2P!*tr>Qqq4}%V zVt?mMeqhnB-VZ(F6i41-OFTpW#nH!p%HH^B!hYMcFcIZT#=Z>D;-GAynf&eM9SEq_ z!IVG6HC{AzWY#+h`S0ceAq}uNfWj@t<;o1jj%{XcL40asd<(EV&FGJ1_#y8};l>EW zVD}Li-j4ZABGv;P+2fl@PuX8ZY`%SF#Y9y*g+x_F(~w90i^7`B zu=>>FFJd1^zkhynBoO3R&wz@3wev&FyuWtA zwnphN6qaKk@*cW@17x8z9lLzbQulf!E+6Srs4 zG?7LY54z|D{6F^&pwZ#8`tYI=FggSRXimQW_2>XPWBikO0XD||bx!#2@9WZ`7yUKj z2?kLJctz;?7RW3A2xK1>%Nyx^36`%k4nuJk8A?oE8%886h;!U?y%hIu{;ZX5^eH&Q z@|W8}2AGIcvfb16V4XA&{PL{gTj@c;@>P;PtyZozfRzK8 zs%7D^@((FsWFQcfR;Dv-28|3um}MaY^VEU9gnrd*<6Jf%s|W&q!zRcol7|lmSVg+m zbSCaRx;+V)JXGQ1rOB`Vm>^(rU4b;FbNiu}QYSEhQBmwFU|I_A3s4l$E|dOh#~P2C zbb%tCY`2^S8`W12^EH-3s5U}uI3n68TGmM4YKlTCuGNyolsdZRC_+A_{9=muBv6Uw zlJlg5>c5GBCGnw}?m~l8n2TM@+>MrH&jiw#g)rGAk??h7pka%SR0NF-bBx^TE~%l| zr}H(MR1$YlWcB^`sCW~PfK}vDUf?=Yw@VJNik#1wy}Pt+H3fiN-VCS!kc<2|5Cr5Z z@(h2qiinTaMG?pRo}Bx@Sul`|bUvX%)H!k72KwUn1#9;|mtxFD(4-rWsd?y=uS5 zwZ}j)5MOX|cE9oL&;~D;W=-PAg&AWM#`B?bVgU9E?T<-~mC7Fv0s;mACKvm!2)6{4 z>Re~@{@LN@muRk31|1j|WGPe1&B}HMc)jS^rNxGviyoDig}(W#f18p+ku)<=ri$_UR=AdxaT=z$-#lF7%qtO8u1@I zc};O|7=YX9`3s!gvM;Mcnynb2&V(PCP4(({IiME#HuR$}34`B$vU#InYwY=mbVmG}N2XVzKjSxi z7DGlLd4DLM2HYjKkew-}W2R7a3FelvHNP%jxE=4Q465Vz2x;#)MPMT6GI_d(l%sgR z+{VgHfMaacgmUZnh0{oy;Jip!GxV*0QM>yBb6Nj7W5`-)K0`ZWBEf#UbbQmWe}Wsi z`e%6Wl+)4V`(?C;x(79{p%JsZ^wo-KLMHWn+6*j#hze4$qu8c(6?mTE{(MtD9`399 znqB9m`St+widi?+xyZXdhb9z!^=Kx<%7oP>WO5Ua*@BH7 z%6q?wWme{$NwSB*+!`0w>}_xABqf&kDMqbU)PaFyWYzn-v4z*$;({AA4gRXm*3v69v}FY1}oB zU%bj?TUu-9XKKX6FRILWdc5uQMlv@f(+dQ04Yvc0DGeZ0?Hs!S1eoa_X=#bfd^!iIFUK6_THm5ku%1XZIk z;SGW~wq0W&cwwsNW4pEg2GJe;c#odmog+~cbi171B9SRqvw6MKI@E4jxxAi?n#T}% z<5>)OBk-HcPTu5?*w()q6qD*tyTdhZrH&g1W$p=%-M1UTcf}+J-Q5zLjQPm$6S=#D zFUb6vU;Q8NhVUSC-8HFS2neMl5aQsW=DUhIvVXpe)fg72GJOoo?9Q57vr*yMS@(`{ z#HF#gsK=OJ{F;K0Ug27IC#rImzsVG5x1BB9Bfrz~_fP+tyBkjl@agvhC|dvft-)sl zTRi}%C2VD3ZEo<-C>fDBp086tv5L#zUeFY<{t4r`iSCL!W^tTUo`XFul$}T*m$4s9u9VVUS=mbu)Q(&5DmV zGb`9>1Q4>_gy^U`6Zx|SAp*N_X?`8q=m&y(ouI|R>)~PF+ePU=QVWuQr52?AXKI1r zd$-;W5BvE?)@c$V`5Z;MIJ4m!mS^$d_JD7%fNnMb(5=YH%j*y|g|!zq{BJDhAJWex z0G5;E-&oGq6egwAsnlS%%)v;O)ln2kWvn}Lw7ogs>}~ZRkir}_Y_$ebnBJ48xj0_{#EYHJp-v>!=)2oB$LQIAF)|!zx<30T z#OZAs52Tk{3A)_Q9m2pML4thdlGw8SQTfOwUfV09)*mKx6loxfEZ0<`Y36 zIS4~R2(yFhr`i2>@&v8(Z|u&NTFSwBJKq`gf6};>M$38Xj3FH?6h~@XDc|`g`u}!) zFlo3B8Ov`eHo}ZFBx4C+oH>Uu7Ltf5*Y#NK3;Im!(PmCg!bBu^7#8^99WOX@M(`z= zP=!1`HH>G7xLPwq)&m|8TgcKVJLBONJA#Wv*b(lgsWkjq{%$jzyK<0U8v*^W`ro;Q zn)k;R>fE6TFZ1hK3iE^C7g^%H1`igtEe_rgkh+3B|I+xPdl($(d}AUGoF4kO47!V{ zr(TDR=BD5h@1*QXf+sN&i!?Ic=}y3|Db%2pxlsH`jKk)5W!PY zq!;QcX?o@q`h@`BX@3>g1|1>O$-hTz@CHnog){`c7a>1S3Pl@4$w=fsikFPfJ)Lu^ z{-9Ix@E0Xx;qGSIKM*DQj{M8+D<#9ELok8HXJibX$18ZFh@Cc;% z8PUYIyB(t5X-%N?~+h&$}fszR;&wQs25n>uX!anA-_}JD^ik@aT9w%F4uG%2S<%!IcG4pdS4Bd zeIMEi@I0S3Y#TV~Ifw8vnoEe%_+;3GnMcBwUGgldlr>?>5YvL3UyhLvpq?VF+GV*v zKP-LMCSo}_S+V#%&sNVcu)1}6MD8q;9o>;xadYy0;Cf?)ZW@f3D{>@E)?I4SY$_*{ zMaQMm?2!>UIGv{XgeP4)QxZCwcDak`4-;2v#9Mck={2InG#y(x=TMJ`aP@87a?LkO zegvQMrCNTIcGPxE)Q#lHkVjAS_qBS7u|TmFX{Jq_>Ud}y1vZ$+1z|u^=siXv(HQ-a zo+Z>HlV0;TJAW4}VO(PN#|kc~V8nZ9Dn;Aw3SIjGZ*}wLH~ZT5et0csA|BH>^m19g zTg|Q7?UbKj_?=O@o&j8(Wi1i**ZSb*AIE1Spl(q19fZ}d zIJ#a8lpe|t>(Sp1TBN;oI`I7aG%+c4UhM!(6IZ|@LHK{YNC2)9dcaY_K>wd?6Do!L zU*`waRo}n8uYm7bz%2F(_+E|Do>9=Hn9=CEZkJEiw4PfayoMGHA^x3JHi$sB|EWLR z^{C;J_x`VSg0RFdgP!n|5*qB*VCmtVh>irJClHPE?v8$4A5nn`rKa$;&hbF3Z8KZ0 zz+32E$ybv^5~lPCi-tqNF?b^;RAVcGFe4v>NeiCLzkWNUx68x=y;Cq!XaL(Jr54l} zg^JKP2Q@~OB0!B%ch8nJ+@af(k0Dl4V9|Y@sjTKiK%HYEM^2WVo8)Qy0nABZT#Py} zE=I)k2O89q%U_mK?8+n*kfjvKLt?Jh;Hm7o2#6HMd>(=ZP#7U!gbUTDoolAT6lB?w z9r^!e`pEg0>7&#j0jP8A%{I>7elZ+ZeEXm4gvyP7uM_ktw7;`o@nEq9nyt8Gk#0%- z+NC}iv6sG(524)4^g5L43Qj|B-`VV-`TtrcTorlx|0O9k){;b#{G87%79Nfm8%DzS zRzTpC4lFO{&)#Nd-Fm#3@hwzXM~uI+!>(as!#W#bq`IG=6_NV2HGh{tVky+MEfZ_TwO_#l8wJI7<{ODJBra5H%yso_ zpczVPz|>3kQ)`=`+z-*-Sy87sk8$P0c9N@hu~s>wLE8YFhb$Mfl=Tp>QW%sth|7m@ zi(f--gWik-nxQ(+4w_Ij$uJKOpq0Wm6>@)O2#e9HKZoV9p)U=z7q+_9y62_r0Yb7g zg*lAuU2Q`t?p!ZdeJu7Zo-g*>6+q7M9p4sC!Ad^wnTYJm`)I8~%$eRFgb)Td1PK=$ zCJ*~t^VKVzH%Cv@zJ9ceyHFaIBj=8O&=vVM+)^_`C?-u|+A0K4F#*&Cp!H~^xP^2t z#Sp9VE}*omYxi(~Orj4)vXrnm*IWsW#|lc**6By(3DZ6Bh?rJ_3u8IMYqR@29YQf> zxAnO>%1;Bjz6QJbNs`di=CKC9Gc0(zM#_7%m@uKWMMH@F{r-_s2|M5@jZr{83zIylGEku{V{die&@S`v2)=(dcW6JRLO2$K9?=bRB151wG+%`Y|6Sik-zWYT{ECt zF6+{Ihfl?xA$5He(Lw>LpV&&3(iCZ7OF&X>2@W@6%|CMEZ3Q$!Wxbn~z)f6QNz#3BwjWrf)7qLmPEHL$At30_lGo}YNrkfXT+&C6d3!er61uP9^aH~VT>{aBdMe+ywj z?zH18kxKCW?WtXDg(IzC4s-WY8#=DK#fb(+!hmrMU@7g(K6^uOHN~!x#$&FyQDrUp z-i;lAeLp{SsNgk60kChZ%JJNa{r#l^k%B{@tYHVLdQ#YLH0B{Cs47#s{gnO}B?}YZ zs88TC)*!Fu_b7ezkwtydFVKT_StB9jt8IHRpqyjf&pDJ_11M>-WLXUW_T3^1f_*p8 zaL^!snPN)w#_dojZybt%R^gU_+135|tykBtgI!dQ3XqBo0#dPlVy?``*g_R-ANo(> zeJf?f0PFkH6I@^?v40PQZ5@7O)HeJ>Q3+ETpETP6DSpI)sWV=c{CJmJ0_f6U%H&De zwgP|GZRP(cL*+po3G`_Jw|1}Cqp%Mq;)smF};EgP?@4|F$jk@gU$v!#1*py^xPH8436|oT6e|O|)Ii&WN#JBS{vb?bG zT==i(P0(3EgReZ=510nnfN4PBe?1K->DU?>*#DDJpoTX3bp$ZzkNn#^_2s~FqZT+U zfNkT!B9%%o>h;ykk%u37Z;&qiPDmlVh7=8H|DC0mgcGDB(H}m446GD@!-9LdyC1$} zIqixrMKtZ`8x`}j#oLsQj)=!2{uc`m7g#rtuzZ!SKsOG!ETH3WZ2Ussli!=YpR|-^ zl}sm94HMv{BnTk2qI3iYQ_k|LQ=nuTCsTz)!ktzjKXgW^EDV~~>983@=AJ0C!^3gF z#oh~w-2E4r``b&K(IX!RW75!}+7O2Ap^~huY_h&R{e9gH#H|iJ4rN5iN4QByGUmG@ zv7v8t$;_WimJoqvC#lqFM4*iNw3eh6cUCd1Q2yK~ApP<&Tm6f>>C>BoT}&?vfVq>% z0WkNN!pB$X7g|lPNPDiqE0{YE1m;$j=;6~I^s?UnC_>1_W89-`YDpAp?H^?u&B%>) z&yGX3npM)Y7-dU_;2?iR!IibA4vYdB-kah?!D(piJAX~LoPQ1x%&UV8c zvl+u2W|G`djXda*6xM#hT2F{fr4BUGY#$tW4pxU)Hr%%Z@T2iZ1CnLU^}L;Ahw#XU zn+sZMPDB3RRX>&1IJ=0#7`vCoMbnhPN^FR3+q^Y#XR1iX2uggjCeH{d(HV%ShZJnA zGx~ijyNP7DkWqF297Bw-jI2HXT21971uIs{k2aG{jpY*-OdZ8y!97X!q^Tt|)Rv&2 zvvv%O8KGt01YjyhP<#3nuGiY4#|V*7lX4`n@69h631bDbO%v>n!hA!&vval`TnA?71pqNv_hZsCYb-kyz(yGs^d5Sx9Y1H~tGih-U6dYY% zpMI)KT+5IXw1AD8}OJ;QS(GRpm{y(5Vpc zw2q@MkA`JNZ&CkkrICpQFqMygR=t&PEpiy2QX<+4x;xNpQRmOY*HVGr`fxkq>=u6^O+j zRD+Bl00AGaHZl>6&B{nKWdd{s2YwXhgmXy>GG1=8R?^#eyaGIHhfBY-i~y)nF5@PH_i2X-A`o9wk>gkgL3kPN2#2#YyQ(HQ4k| zlova+gWBNo{Bs4>+X=q!m}XkAFQLb{9O^>M1;l8@uzDL^^GvE}2O-5H?dbq3bI=J; ze$4F*`iTT`dpTPsU)aJrF>@JB^k6Ds>)Q^RsNpN7%WXho-M2UONa#SYsD2L9cWrIL zeE@jcg{%V)m+!QzI*bDq2NMz0mKP(FjTZ%xmieylQiS%lIWZqF=MHU%Y$ZLqWn|jv zKjx2sP78A48;0E2b%S&Yg$#=k1aXNhffPQ~b6>=dSnZlVjV^F_&YEw_)ulCQmpoaP zGN9{h93{~yJP4Tv$MWRps{UM9+4bKi4-n6>S~*l*yIMioe}j19M$8y?aw+vug(BAqI-WCn^xB6EjO;@9JISc0G$cIx33ai zCB@=zqjX<>Kyy|D^aocK2=-Lt!^`#?YviW|BmbR`wEZV;?p$o%o*ZKGa<%eacj^8& z=^3OW&1g@qwwtr1ye;HdC42#)syDgY+QC9EuwsW$zT_?>^9343#APTgd z{e0)ohGTJP6m>86k>Xb@_?irrN#8v zm>_9~DkcSnO`-z{z~r7*$W6HhG+;jJ`jqJ_rGN(Pa<3QAfLWkO$o(blpg_S^=8J zV-+NVBO}4?6!<_M5FiSnF?26N5O0mr`2)|kl8G9CGS0SB#a znnB(iwjyVo9kU0d*;}d&!kWtgVvn>T<*p=4usU^tW9-f2B`*$oaWD+L|Evq9Qfr!S}p0_qK7R#gp%Ri`_>HAp#o5^{V`vGkLb7uiwuD zT^kACpWfx%a=YkBAKh&fWfv%}_0(EEc@}f!P|9)vkurWF9~hr|qyvPO?w1GG)OqgK zgwQj})L~oU?FX+yET1m;P0p#wtdGf{m?E3&JbNqy5K|nxWNcU47k`Z@S{kk-(G-df zPSOfu#lCJ2_TP@XiQFPOly0X2pv=O(EJW@uijRZ}xZQTfiU{1>L7YEt&v(MVfs7s7 zJAL)RlyaZ6YPbm^S{w%`dc>D(nfurK{N-!s&Y$)|=fYd{+_xRxWh1$Grmj*j1Y=jt zTk%-VPPduxQI_Bsjg^Ftbx2H_XJ;5dPMQ{;f-e%?TXGGTo za~i75UkdN8eI$Nf<^NtZN-oSehG_%qi>egszdj=f!g;f0BQmUuaVyI0N(^iKXHa%F z3gBdFGrKM;L&ab6n9cjRf?ZgTSoj)c_lCfToG+naU*8lDBU_Cy`l6iTlS{lU@;a&) zK0PkGko^e^4q)N6AGmh)ofxmcr362I(&hEu4{RfhC-WdDmnNW4*Q_rbW`bG?AIG0g zT^+n-3~N@CeHC^Dk!6byIh);&ZUe%OhC7~m6mUgNHPPX%5WAWwQ6Qy=XWH|qBA z{*_YvKtBx)kRC`Dy+nBhv-l^R8*N%1 zhW++i3_u*s%u>tL$|PbIlKzM62rTzf}uJJ35vM*%uMXlbBP@>b8{BO-Y(q z>@lmy5s#0O_<v#ULliZ#Qw>SE-H@9HtycpX_D13rK%lX{x&72{8U)3 z{DNDsUYD!VmM8U=V89UaSFTIP{xx|22?86X7GXx-gN*=sx!CgE@|yeNQKpd9DLg1|v!t7b>J{mA;b#nN$wag%)ls62k`Izm8R`C$g^3YkJ{h{WjEJnXcP zhfGJMZ?dUI_S>mM_N&l*+JaJvRBvUw(JY!5q*gyBWWajEjK1ed03L*dCP4F9H+z5J zhv*fjj{FieZ9YR;0{FYk>-^eWODxQR0i|bODTVayVhv_9qZ{UeW8PHzs*j#pqTf19 zbZlI(Z!|15K6$iV7#n@5=8rdPk|MIVwc%{o8^GWCxP3kT&0wF=`1$SMXNH@BXihU= zX7~!M6S)3YGs8bkD9+n=ybcIH@7w)IpNlklcp(9lZ> z)1d-tk!-mMBtd3xImtMqsw`d!QBWX46#j6i7>QcBKKC-a7g`9`?mwMb6>h=^*;si&vAa&d^vv15aPkLk>l7+56FLy5f6pnsTf?&K6rP_9k3-tCD8I2~oPMNkSes1_=KUCW~R`|6vJ*cuWV`gQA~{ed$xH6gW@s~;&IB}Ni6 za8eMeP!2Fg|Lt`t-WQz4*1lsfVD|3N&`bHAvI0_zdQsO?#D_^4Tl&E41+il!Q73+F z^cYGhSvImhQ*8bzNKAk}HdHVH%ftmsCR=V*bD-|GZp^5>8iGrleroKl3yTGzt>=$9 zrTouvy^44?#d?m_Z2p$-&+B02ahi|Sig4wZ@QG0z4PY(rX9&KywLx2|Qh%$>+3*vI zXk9!ceCDAIYPn1^d4SVD>o|0v>b&j|@DGLf8T><9Q2S3}7OsAvl;I#N7|qO*t~tIh z4UrR+@aOoaV>P?vfbT|74z#fPlHOm)1l@Hruh0_JUB`>T zA*9iraKd$gdkksA=l4=4A!h?8g$$%MjAYdh56p&b4k|s8$yKHfv1L{lo%?tU=e-zg z5kn{ob1yG;T^F^EzfW|BaMxt$ZBkl04XyYu_V*rVdPYFy$BBfI?@W(E&@onYatFju zLCI}opZS0^*9 zgTJh-AY3kkUE@o4_B9$|RWL$=Qi@~0WpmRtf@LV-x0MdMOh>khltg>UFNQuW1Q2{q zXX^~E{q|^SB@i-u{Mox25QP`zCbIE@&{?romXA8JviV8cGSaft;7M^MDt8-T{IQqh6>VIeSb0@2{e=izX zJmK*a9P@m%Oip{Tm4lW^{b;O2CzjWg`|%9{QtvO&L18FF;}4DF_xx7D_6K|XY7dvw zw-%uZ_BDI*p=PnwO9>g_)9;XO3kzKoCy!VJ*(H!U`3djnE+wX(0P%+HZ{nann|7x! z-K>$x6JHkAvNOFj+j=#Zw)CjR^dFpMVu@F2TfK_{;y2Fs@RJ^xRCFU5q-j1dCO;IF+>6S#8M*S6jxNm>k?3sM`a3wNWw} zQj$dWdQ9c2EgT)&N0#^|AyVqby?4oMp9X8@2aNqkQE9{5>_fV(X`q%(j$+tU<>cy9 za4s9S&DVshoz0u6@OszbAC{PwwUXFrEAv*H9NF!f7Yf#PtWQ=ydAFUVB2vv*Z&o%~ zjrV>N%`DA(7GjryzE#$;nz%aaU}w{W&-vJW(hdC=H=zUICgduDxCttJO|AyUDR}Je z=E&2{F^}<*is%uCdDG$i4W91Ucw$&_MH%obe%kGiM7-iffzYGwK(KUo~nYCzTueUi902 zezY^3hw_Ni3LzYZF1Sh6QFHaI6!$c0B`D%I$(wNwejC2uLZ?L;@+r?h@z+g?INQT0qhOeVptyrC6Nt zA1Ou6mU+5rWKXt85+J3>OO5{oq!fiVViL|e&=3YsM+dB9TO5y{%HCwrd4}86wONHD zV?N!rzLhe5TK^Sg){koM>NZjR6sBVkMlDX9?NvhW}JEJft*R}0XN&~mDQ-1 z7T8<+8W%+v&6P5UmtQ%>%+b%{JE>g7U|in@{5)64F|g%={JLe!MsG1XKD;Tjw1W5V z4sR>vBS4RMGNJzJqTD++oQB69b|2wFukPX7wui%3GzcFt@thn0t)1mP~Ls|x^mb6EHdZ%Y(t!a7Z7b6 zKf?0RYYU@`NJ$H^2?gSM@XBWv_)$Y3%@4g}C4(*p_mr6h(gg~4F5k{XJ}AD5HbOoL z|52arQahlP21FY+*JH%84JQ8r-`h+lu*6()n>B_Xpn(~;~^!Ng#VCc9u~ z60t3s^r)JO5&2r*M~QXoe0RBI#YPXL*5ZaD+mgaKVBWW~m#)YG^x@**dvQ@{EmQz4 zl2=nlkb&h(RtT%qwp0+#0s)Gr2q62spXcp)m3?wna`S}^Q*8wOs9++-1CokJoET)* zDIzGg6siiHgjX@FDTp-Dgc(Gp))JXILIDQNxmHnoUwsawV?nad*PH>kmLcX2P;xAd z#W?8opeLReX>ix1f%!cn*wK{=+bYZdl+YDd7*R>aH|ujSz>MQ_?5^m)KZeNQ^S*=T zW)8^(UQLBj5fWaE-;4aMpa~qAUOy@!B5Gd`xUV-O7%#X4nynNB1dT+yFWMYqIfro! z#ezbyM#me{U(R2;`TFc`oq#%nZT}{IA?F`j@Vcz%UuQ7p>28`=lD$puZAS=iR1#dH z9RuJHG`%_$^9yYHk$mBLGdhbMHDPWEuV5i@+{%8;qBC7sm1k?V1B&s1Kn+D=0!k}U zwx!lHxL8}3te1%3yTwcVfc>>^%xJb>iLK%FCXkl~VH-ApK7%*N=tYudMRJ>U3K+dk zRmn!f#ktPYkT|AAzP*!>M^R`52OeRYa;#bgpw57T$!e^o zl_B-m(y~*~1c7_;1&yNO%(~O(4G0w};?0wl=z_N6P71PYOKJ~b>$x6kn0b*&#zgr93N>CzAH!+>)cD~SL6qxdRe`BkHr+aj& zCtj08HPYAyX0cn5p;enIipE7rDU1rCp0a=trFj!ON z9h=II7u?1$!A7ZPUx@a@osX_U6EpFFmiQnS2B0kQD1$nVZgMoJmft$~Z~x&>(b* zT7R}!8Lm`NPUVIohlFY73sfA@@r`V>faC$2rb^Tw-m%bJrfZmsW`!M56l)4@gN*=G zYE)*8{I4plN`rfoWbX8j>Pqkk@pX%K6W3nu1P55XpjhI9d0Xkc&A2%F1t^wC@Rk{y zyQs{O0I3GWIIm}T)svz?4Owu9P~41A32vQW_J!2E{F^(>fGDv~56-b^)7m!UU1V9o zmWm>;3eH~2?}pOYZR--PClj_T0{Dkws68}7^|_X_p~IGUwZ{jlX1}YiTBE_;=0Fw4 zpP-7PaS=tg4-_)00+~=m97XnP#c}*68_a9PF<@ozwc_aL5GR$oS_n6h2~->{Gt(H& z2Y%7DST!N*EXd6KUc}qV%HiZnW}tSj5KrWe%Aoz3G&qvkQC)}QAVnjx2lMBCoZ-_R zlvhWE=tTMza!ez?|O!& zzte7saCrVJb2tx)Y;AlyVB{}FPcOY<;~wL`>nIF~^ds%ZzjgZKkrqNK0RTv|1@hgxKSxm7u{DcCLY0pVMg6UMup3xLThDG)h#}|5E0jl+ch>v z#|zt;RRjx^chzuWtwxNP5-qr`BQH`#aAd5jx{ykAs3B}vg!TEmFxxg)fDX=>+z8P88`J@}MecQ{F8^@9BO0V1-*AWRP!AV`3kgV_IN zfDm=kGqAQdv9kOpfdqM*yVsH7zrUbt;(9;&O9RajcWC3dOoqnco4M~Bpo>G(zeVBm z#-+%HmgW&BgYgl|*BbZuPnil@xh114)lB~J0-tQB#C*JV+@7}w?>_uhb(HJy3Kjg+ zomnl~N{?*u zO+`%h&>5~W?59GRh1z{c!bLn(L=X>#%w!iJbl!i4ireXdF5{xJz(?^imbjFy3nE7BLt=ipe-V|KP8^Sd!)pkGss3oB$&AqO9hVoBi7iK~i$k`d+ z^(iMrvE~!YEHH_KsJ28wnnX|wG-d}_?a{Vss6hpbCSX1 z3wcspbR}K1@7DZ|u8JOiDOV@WaI`W32Up8Z ze-p%^2QVF66q|JNAb(~PE*J6nm>JB4wxErM`#&L4_l{w(QsUPRXZ3eX(u&vQKcS779B0a9jyLh=?uhmz#;Q zTB>+^nAMsEnIya8L}Y%h+@V0AUe#)6HXnij2pP_Phz1t<;@HW$g(GpA4?W^?WAoM$ zs_GbBkr*Z;X;k}?Z~y=yR=EVB)*a)g!*~%D(iwJ;zQsFEI&eSyT)s16U1w zNY-C2<@@lzIaUu88yXSF63uxTI(ckS^pY`LS54hUa(Xv8vDkp&Aa%-0_ROAmjdyVT zqRjt#7|Yu=BGzFT2quPq-R#QMo>h`w@PDg>ac}Y_N6G#8p>6&1j$!+w4Hu08$x4*M z>EOrntGtt;Qq<&O2s0Z^1SHNhdGAiQyo%6ln5MukCd!;$W)6i_n_psT7i)J36HUS+ z2i?$o`XB;C^U&x(w8b`>4c4hbG=D0Rdczn3(yG_Yc&}jYcUFJM^&j z>~5MlR{T}<%=zqvi5?5nW(--I(32rHP$Z#NS-eDl>T@=;Qy{-JlU+cWD&uNyS;~ZfD;cjlpOHHF~qz zRLa6M?2`;izLaxJg`zo_*y!ZQ7Cjr(Qn+8;Z%ajZd~z~voA6_OwxN@XO5_<`lTDX} zc~IAcG*$W3#uqqR@_t=C=)zR{wA>Z6wV=gZFL0Ov=%i}~xu9j`%T&Tz;>o_}w!Q_9 z1;2-}5`V`)B)q_!fZV4;>r_TImthp(b60qr9`}e(N^fymMV`CY51iSLV zIxot&+O|@@kPB;L^5R-Ib6Fk@mlHyITQz?6(A7TX)8&izIS(uK1Q8A`l%r+UHXN|V z_AQXAV^%#EOI;q}2uT1M`d)s5mq<9&J5k>gD#?wRznj{V8EiWOO$8j^>5JaWrQg~g z%)8A7ft1jyvz5C~`!*bKHfhFO>xgxPBaPZmc3kmFXlFC#b2tr^hharuue%W{4>`P0 zSDL=fRB%)u&S^1&ix`f-2q69;{N!axc-KA?7ZkEhZ!@+?O`piX)DQOV=(@hu*b?i* zR9^n=648)?l`Vb$D;sxpxYwIZSCK|h*33KP+EGVjDas0|f<)fPBv-;I< zS&l9tQl*dbZJ7+$mvm|HzQg}@e{cvS5zl|>JsN`I2EggypHi7YafAP{KlrB?1eiOB z9S{@gzrU}H12K$$F%Bl#-~arz`5TUoD$>B!tZ?GPFI_Z^LwJ(&Pl+zQAjW~&LbKG0 zo+s@n$j^x=As-{HR<7$f_9laDxX#0F`x|-7%Z+CkvLhG;>MNC5`AGP$eq$!kZ`9dJ zxk{h#lB-c+L5~sf$^g7^PbPPKkCijT_ zKi1wVDzA21vkeZxH9&B;;2PW^xVyVM1ozCz`=D;W0MiolBbjHJY2GHS)f zSCqpl>&aGFJgZ+UW}@PgxkueN&^IVS_Q~&+RbF3XNM$ZNqt5)tGO^&}FU<9iWrE!z z1LDmx@n=<|*Ni3HRR}aEZ=Ca_@BJ)6wY$>nt&0daz=1Aeg810`4&hKOfX}>fDzac& zQ{dYM90~mB4}i*?^bS^B9{sQT#$43@0xNm}_l^W&S{Ov&R zXN4j@Hr~5G3{T-$Kg|%z%0+t|hQ8BmSo%p?ame4gFn_Qo1tb$=Vm;#G3U!3#EM*ed zk@{b$s07Kkrn^A3T=D_Q#F`!}I#4&b6cUX;n9s0kYdbRZ908jJukqCW(yvkw)+qE& zMSAoVPO{W>3F!TFq{vsZX;8q`B4{Z?H5Z}d>}!CkZXeX??m|#rH;;JI(oqJ-2vA; zd4kn9;!Rbh6KeqnuoLqMt^#VjQky%2U~boK_&fvO{1Gd;q~)Dz++3PQ$0^HIZl_nv z)%>FdSN+Df9qKRNQ3y50T`Kz{0q#+ww4VNCYwANI=j-U;r+u$yH<#Tj;2r@D;4UAj zs{K9teW0Zm3G2k5k{dGsaE}JaFQq>6I>`qv;V(RrdB?uUx0jL9NH31T2k;UTZTme) z9VvVd@xHs`s&n!A0t?(Pt{#S`oPiY^i(ybl7bs34^sS=5-6L#T&285T1&)zj^+7L1 z*vMrw^aeMoKUtT7L?q|S`!NFBgD?LDUVdX7yn&ZX!}C76_p#0MlJ?n3TUBe0wK7nn z@V-pSi=MMXmrXjCWD{YNVbiv>UAdUpScuk{ztWriwKWp#nKyrYY5ja8vR*}a$iy{s_scb$Z`UjC8MMzt_c?2f#l!slnG{|Ekhbvm8s z?v82%{S>05MCiax(d<~;c-0?N0QE@e;jlsHGjoZDZ}D=<0T>j*UQgiK(`i>t4Xaq} z%nw0^XrsxDg3v{vh`3&pbLga3KPFHu-8^;=G8maIfpFro77b`Ofm_88;8tYar1i0%gHf9%9Hdr_(%6o1v5veTybLGVQaP( zOS4a0`qx+VPtus$2zB+*T^R^4Sz%qIh6Bi9Ma1XH6uB9&FZ$&Ej0D^t8J3C{)R5+_ zFUhepnzV8Dw4YkzDTFEfe7jXdA=#BEGh+7K{{a*VTrM;0h#~OwjnG-}Gt!+GJ+E8M zt=8Yy2UM27H!GXd88Q^($l-un#WprFrS^rA&3_;Vz^&pB;8w9-JzYiIusr7toJf{R z2Iet6WYx^!I-mdGuz@E0x3mJ}@a6~*Pq~o+&TfXn>B6hc)0GlVBj@C6pilrfyHT6% zR^okofgWN;u(3#3U6%^UQ3!&`1fT2y9hWxHL%bQ)z$V<74{nL0P`v`^n0Yn8F`W`8|ZY2+EV08rY?dK!hmOk|wfH(Sj;hPdU z{?JEB$`(JcfBU!4$a;5KfJv)yv!ZPIg5032XX;{5ZsuV64)Pzwff?YO|IrY3KFE1s z+MYLG1alCp(yqc?>^@)^{8>ltn0Gza<#tKT#3sK}#2|u0+ZMlMkC%rrZMhry{^!wF zNY&F3a_mEQ7}y))fX6W2@a|~Ln`}x%+{o(>PiwsdzV=cvVg)xpz85@u*GjQd#CNM< zkta$voqV!q?*`rr9gx~46j-)QGLplV03pwk=tAB;Q%Jt>r6c{Eb|cAnlY%F2h}hm* z$JFTTbS<{h&rdE*%+zfmU4u9`1~d+V?|)0sqGrNQ zD!W+LW=l5p`F+O%pm7K#Y2dzV+>f-l+Oq7vj8DD-yF$Ip_V)e1Ub&zItPV2H?#^uf zu64XldAZ<28h(^#z;h}UY_UcT<~pr0U9QsSE^ez^by`Aw+Z_}szrzt3%_(g_36<)i zU1O^RWeyssHx#|M}ha5Q=k>Lb1jfvQVnJHMG3psiy7xbgsF z<~v-utG~gCgd6dL5hQa#1}t;#5BHPr-@Z`fBK?t_{LMZh9mx|V0-v*3pe-%#8VjQ( z^c*N{_ApKK%}tEpUOsyBQ{b+{jCoe8X6G zbI2pCeFeS3N@}O_p~DIZmvdSkfLIec^TcZ-tA6VpRyJ`n$J#alh~)ztNzIyUPh?kn zT4u7EXNswcP78pu%yM5ue%^8!wra-Rz%oV{;bk1ly>|s>x`~7qw-19vCDh3k$`Swv zkDDV&QyC1GqI`>SUxNeuP*DI|dFIiV%S6pQ17Ir;a$xcLumr^m6J&13I8hPT%YU|k zgh25J4e5&Q&FTeg$X@}v@)I0Sfi3pHGGnsuNXect)GYxfsWymr81F37qbB_s>&YC@ zIdt>Ht+EN#H3J!@-oeo3RO&imep#M5Uw~E;wztc{bl{-N%IKM9u2n9+J^kBYlG*im zbF>meR|4%d%8hM#GH-NWMGRC9cNivxO$xex^DR8%w)C==<1fcs-1K@;+(8{wOdp~3 ziHpt?-t7g5f)scSJRoUp{fmqk-%o^0m)`>OKgft_=7;h)b1{_@ruVfbR65<=CR2Uc zd`8~?>khz%yyKaJ;O+>X9; z5i4+-xPp6th6Vl7w{Z$R+m$1o#x=H7r#pLD84*pc1x6wl8BcEp_gnDqmc6Y!-Pe3) z6(}BiFcW5VUQwHoR=8=~V2<}bVO~z*c+xq>Z0L+r!NTg7)1pn$5W_|6a1-OocRR3v zU24d&Iy9w8l7PvB(hx7Ag;%eT$O2KFLf~P)8B`D(^vR$4=FuV_3)jf--m!?>8oAaT&l!y%;}jU%G;dhM$^n0$ zk4CpW3NY8i;iwlXX^L-HMCVarMEEF98$_;O6Mfu7_tqbQfS|G$gg-{_f_#p!D}HO~ zgWHIDep>lT8@-B@tZz*~3klydv9+rBkp^^wJ>(3$cx+%xH{~)Vx$=9OrN_Z$b2nOQ zR&akl+4U|v?<(DA55ZoA5RqtkDi@6lO8!{?rZR%LQ1|j_dAeYkYV0V#$D!k9G zgFu|XuzM(8k2X?nScb{3Eh6u)h1qCh%g=3J;Ow27SnYZvD+h<0X07)gHdn;{)@%@= zRoH?ZWX9dp_@xPW83v5Zy(l?he9uPVf4DtA*cC+rTLa<*Xho`NqX~D!2ZaLvj8R%sLyyie9f%89T#E>%iZq^=FXL`$C;_uB`HdOOB zg2pO0?DP8HT${~?57LXv;>&G!Kl_iYYq$T+Pn$$+0%P^NwvYaXVD7~NRR->Lv=e4u zNE!DvziSH;T?w~V!>e?u{$pP(4bdai%;lruFQ$UD`=}ZP2xl1#b=eT6a#jKb>|R*c z;xMf;XdKTv%$^W&iNlliYm9}J9Y9#A%mO62KhiTIBGKhedqu{6WyneF#%|zgXZ&Vnq?cQ!bZ|E$mf=0pNMaq zx?5Pzol!{gt_7@Ld?U;ybiF}$SIwoz14ne4f@Jq!idkinseGpRE_VFxxx7qIH-n5x zd6_c}K0y(PoJd8QDlhjBTL`{5D9B?dmnQ?QL>JjqYftBP`7bR6#DjBnI~Qh`TytO0 z2I)HRj%AG=8OC8izT@j^!c^PVGkX$`SleU;meC!dtr7TUD=p0Mdma@qcv5 z@P9}b5=O57$znlM;rcySAYEMi+dBhv60pT@U5R(_zu}r$QTwv4r%2HwEzDRYoT`Hg&NZzaruB5ZUX0By zwb1h^5TWmso=g`9ArOsh@c`gL)C0Mlx~uxBpQb*bV);L_n-xHC#Ag*(0|Hc)1P;Z^ z|B9(_;jwP0a>7)eiRPY2)?!G_vFH@TNVD`5fkuWAb8n!0Z@%g2`SBitR9ITbm1 z)Obei*U-*lvu&3TGi9}R+3JZW0y4XO`4r*5EIk|?L;_+#IWFxUBZAh6 z%N%1k?F?KqM4nH36m~CB#b!W(81n69Wa=o2SV z&#=(E#6R-C5~Lq3=@jlms!|@d^}t1i=sf$5Ow?`riE)d5VS@}$VZ`wpS4oZ_{xDhv zivCNr4M)?aoEZkb4agKjzMnCO^r|?NQ!0((SB;kl;NF+)5!p=6CktdkSVNA`1kWMlCfvv1 z;_BlULc$=*!ux?Or$uZVi$r~Y?i(H)ATOz0B@@TRnWEPe&&SvdWr4t8B*ZiHw?t9I zv1nWi(Vhg71H~UAgx^;x%!4hmutQ=}NB%yX$(kYsIVGXPzTifTzB+^81slJV;I=7i zRmua{lv)6)r(jQoVdXsa~v>q|z#Ekagcj--&;5leQvj1LP$r5Lj750+E? z{XAbFQC!rT6#q2Zm@;#t;9EHJ%|`BxZq)WTi&sTRAyYvyQWQDY(&w;g;=97zP#Eu0 zb1RN$inaJ+JU_-A?j46C-t!Skv&P3-%gCTKyWCZ=D=l7gp85*^Q5kPC{~Y#hmnVT9dz>BRc^7gN$$+sn1`$lJiNMKSKa(oRr)xMLs`|=DUi6-PyvtjB$`^Cw86& zDv>LiZe;P0J5Y!ud=q%h&~!!}4P= zLm6r7-O%*7iaX19+!I_Ji5%j=acHPe9M1Gp*v}~?v%d|Cy-8E@1;3Yk8g_JesFaMT zFd`>hZ0|Pc%FAb>33NH+Z_Ki2 zWBqaZczxi&fvGqiKV3meGay7xFhGh#1$Du>92Z+!W9|uC!uaR+R)kxdFJKuEQ9|_3 zOCMBU+6z~gJP<0&vui$Id+E9|@uniX)-ndZgtQ^6V@$ARc2n|fZFszu;aKwIMcKd4 zXKWIV8Oo}DOY?i;7$3;1k4nxl5bDhryA0` z=sS;D+oo*`R7)Pp>xwnXBsuP_zFMB)Cwul3j7bdjZPkj^VE41ortSxx%|v3aGGOzc zs-QgwGEW>GvI&sO7zad>V`FpU{T&zZb`wni6(us@)X0RB*><4&NEly*_4q+9hwkxt zyGDy2t#)6>fuO>MDSD0#`}Ywi=5O9;q+tyu)|ffAwBIhku>{6J2R`U5WN368-$h_? z3rtu)tKP&s1r2t~{1lR3_@a^B#5_H1=&;kRMo!tZgvLPc;-Gr9C2`}8SDUF>*zsIK zU-#Db!psj8qp%70E2oK4tNN8sX%;PGIy9YeqF9k?hpF%#2*AGMzl}V4f17z90HFjP z2qkj=*CP)}BNIK#|1tM)_)h}L!S|>4U~-xL_;2r9X>y7E))n>|9~wQG#PrL3Y)*s+ zB@THC3~M@g)n}Ueeau>+r8L=`#N6XXrYpKfAfR-<1(Y`u17~$vqcp?(2W6VeWgD)b z7vR`(B%~@){iy>7ef}g~r zQVD@9^BM5}kP`GxnnjYi{)CEGB4*wX{adm#%^bsr5ZzTak$5Lf08S4c{I;%V#1xQh z#|P^?OiNLUi;nXd$$9so;#6RZeT0G*qQj!}O3>w@*8WqaOU|lV1jWp>8y0M_G#A6v zFMu-hG~MEJKBZ4ljA^#A?48FSq(@nFh5YzkNb@Q*oSxHYx#?`OLMZ2R7Z}kr97`!C zB}V4}9))e-vmCT3R(+N=X30@TgE*$PALHk}2lWf8QEf|hoG4Is-s7udBq*4)-)icT@1h|l)GFqFyhB%QYzjD{|(F+_i47SFjw3(Gr3+8|bK z3n`N6jq|AfW+awWJTJv7n3G93p%cBom+X=%Axh|!88+Gw&v}x|`7K{4m&K-ysU-lO z7!lbe%tjf>oh$2)mdB7WJ@w8dmA=fUGI$8`G8+wcFTs;V>4VpTA15ixfDmGwI=nI2 z2s$k$geUiS9tkK*rh9>%%~iOFwo?%OMR%cJa{IWq1C%BIz{e}-7~$dvkq3TUUAhoj z=)Y-3b@-C;6t&ZiaVqawAwr?NoQBW{8x%Xn?ws0R=MC|Sh=}8A3;z7+#@}|eA)@FA zMOO-hCSE8_FOU-x+m4`=MZMJ7$thg5(UEZtj&C8;CmTa3u2HSEVOAC406`6@NJ-?J zwlbN8ChI=$aMD98TY~Rl!t?&fQJ;4Ek@Qga+;(fibpAw}BsU z>!x#X<;`ukEn6-L4Lf089Ol}3CK6Xm<}IhKna7a5*@B1HAMz!pHyFDRrIDDe9$k1X zfA-69TSc(dm9J|_SQrQo)$7ZlwiQ-@M{y^F{;bM`<3=2@s?~1iOX+x$&i9RTU|?cZ zQrXR?=%c}KpNKsh&?z9t1eMbRY15qAN5uTWQJQcNij85NGW>*k2Svc>K~lILrOqoj z?+=Pl#UJzifcI6>=+f|jKgyCI>1Jcn>P3@4ZtjO6q=>{EX0T~{NJ@Pk$*Rw2wSFn= ziQwTcCoawYNZHs!R;tvqwQL09c| zJHS4c{SllR=iqOXi>F3bjEWMml;c5R81&%y3A=US972gx?#nxQlgH`5dZUNe7B&=Z zFLoY|BQesTK0NCvK3Blcr$~Mh)*!&Q5iOGFaQ{>~b?U#1ZUBpyHM(`J)K3`pQO~7c z7SGXYGCu+uzjb2gev}`AX8=mniC>YzgSl5Swt3>PHT2CMQ6xEI0@x#bL|Jt5Tc$=C zXEKJR`9F*;Vhgr;wW$?vnZ%k?5c}E(Hve`zn@~$452D3i@~<1<;Ox`5yIDXrOJE7? z@lV;+x12!lbZhM~rC(QVgpE*15SmCSKC=a7*S%&^*)u}c?d1FwHwuFeiv@2Y)sx4l z``viJft3ORLUL_!VL}eX6KtA^h|Dlgb#=f$bmC(-NMSPCr+CC3av|u$SWODmJ9M1= zMQT~>mWvn+5U-bNJjWfr%(xe;2x!~yWCTvvP-&rlmNj}#P@f-`$z|9!q(D%$$;skV zyR5U7T5lIDnWkIs7Y?IXME(>kCd%BLZA=V*@*V{4mk%oh{uFz%nSAMMdA=0pnGX1f zu3x{P+eOBfD=UYZ;`7w0*j8xgeXo~$*ull^JKJoS>9@U2`jv}HndgvB2W@zL>kI>J ze1XCjx6VRffitOBF@REOYt*-v{-(L`i)O(qjyVkk|E=2h#DGX*Y{IzTg9zaf7Z>`! zKkp-_39zLnN;?LrLI1$UZ@6}4bWJ)3(yE5Tc-HrghCtAI&g2lLAN|KSK4ed zS{!5Ctop=*#f%tr4LFU4WBo30utsVycF|}puZNtd23QIre?%{la-%Nox81YK4i3eS zPpI+-^`yYIZS6%VezPT;yiGM_Gtc?XpAF4*(K#$ zNnrluAzuEZ#-^Sf-CRW8jGw^)k3WAe(Q{KbVRaBm?kI^)VOu6r(FqDsodBWy(m)>s zp;$>9t%x~<0ZB)EK?kgelE;BEU6r%_NyBNVA&n?NoR!5|9(;e?Z23xg93&4P7=lX;JPcpqdDJ(1|- zv><|uF@>7hq;x)(4#!g(tK2wjV0;TY|&N~@|8eA9qTkqK4+f%(QCu%zwRJ?6F_QSx4q_g~U zY(9fBRpl26-ej1_l+9!xgALh;rVkm)b(-aBYoq_$Fe1H|b=Ja*@^4{8M^f>~+-C^9 zrR;|&nh18a&x9pVVY z?8b&Zwg^g@m`IwSK<>ECPL+?1%<>(|dGRA>_p%_M#34Z9Hq8Ai>~~-K*C`T$v#RSG zcUB66j*#Y3dt@2|Mr`43&?-bgCWfF~pV-mv3lscTI0^CeyZHg)&7UfU0Sjw`r4qcT zA=coC!Lm%#mHP3?ZBg7vuOA$#+2roGMZ=NGBu}s{ydM)^17}&P3)c2gLGWD;3VYP{ z??qM}=c7TG?MK&(mmXhow94z2OrGtTGr9+VT+}-qHeaPweMSmGD4GIGrj-jC24Cag zAFn-Gd#W_U7QJ!&`vp(Bt08f=FI3U0&yP%9P6r0>krJKRfE&vV4|B=1&BK@R^|Bxl zQu?c&@t5NAV_`WzHJaOO(zQrl85vu2bt(+{8kUF`AHDe+^)Q%1y$$8f;}2e)qJF<$ z3U5%sIiQb`K7&W;JfE!GdkT?i_HDv@mxirvU|IGm6=iNC4vMzW&p07HH;{|F32ODl{H!eKPSC zQzvaB6jIUrL#9DytWK4;2y*L|Vm@Y6K;Uzx?whUMp-ne)!6eQSAH&xqpk>&0S6H(% zm_0nOt9xSiXYu=1(TUqBv@o%%bULn%}Lgi9F(RUg5bkM@>4p6WP1L<9t^}EzleYk}wvGBocr&Y9UhK)D z@};l&e+H0M-L9|Xxv~?T$vz$cDnn!I<>^Fh#@oyM678#DrvCOe$yct$a@%R0_IX3&ePU|hG&`|6+rS8Bj%tcy2pi)Tbw*!m?)~yJ}jJ--3cc%<*+b>{5+PQ z$Hb>oZt~Txp&S`E8x(R$4%E%Ru#?asT&m>Vv93z+w5duk4U4#xC0~#I?Y>O(>7~2O zW3>2jwiMeeAGXgXj{oXh?Cb!a_X{PaO;i_`fga~Zw@8I%fxV`~p((Vh)?`aX#OlvA z2r5@5Qb%TG`Z?R(?%ux_+zBXYA+^tBixEG`?VC{DkSbMeID9C^+h5WyC>PrtjHmXN zg-Tj1b7sm|Cl2vgC*BiCnDWG7V#z*_;9CMo@guDML9!h$-Y)CL3nITn%4eT>Qbm(}4tn4gjaP|IZ0T zQe8zy(#=KO+SbWY!O`AG&q_y7&syF{?>}NvqvI4EzvT@>imZQoXVlKDmwqF^E`M+h zf&fbc0*BFHQ~$f+Dok$AQZ-aVQx22bp5!EDyShbUu(|$h@@_u})HAzXz(hPW$8ade z=n(;)KxFgJ+S4j{>@!6s8TZVM_oxaw|IGcxLrg=JfXCxluKPx6k04~)1 z_G@NIm&jGHl|?zcxMv2sH2EAjnoFmWeImAaJwG4+ro5M{z_B@)!!4p!f@?fML$ufUepNvExmSv@dMhQ zWl`_#PnKKJUR(u2{<@BvG5Y6PtWZk)ub(<3$9gD~xk-H>^96e>;82=SxInXwbB*#G zi~dAInqEP`i!$J%1DY$lLoMI8qYuz4M0#N6F$j9EDHUH-^rxwR)yc1YccGYRfoqA5 zENMzmmMF+wmu$^Te*)rj@+aQs2^y8FZ=jN!}+cIH&!8uNg5Jm{$>xg<^8ryq-b&sDOw$%H8^L13Hs4V zFX54W32KEBT>^%76ROq?kXs1V>6TUlPE3gA<}c@~7~gGT?wqlj4DvC){ z`YB>Hk-p52GKJTv%vxWI@((p`vdfaXHK-~m!xHLUz)nY@5j~~b>g}+!*I!#W%a<2= z5Pq0()`YScXFwJHBvhl}Pm>kK4K1Vjcv}=7*1)YbjDn7rI`WCwlCM2Wz$zHSuI}%O znm@(_cm9W>H~Ez;gM}K!mG8R2b(gAJ3A5%xQ3BQRr!`$p;VP%mA}6P#BQ`hT^#Kia z`$l}I?5au6IzyozpjN*)X_$M!1VIFQJ%InvnkQ8bfMZbcsK`9zOvMmC>fQUa!Y`N!W z5I@6=eAS?dYe9H_clXHciArkK{)YJcMMCF!FZ0XK^hn>*m7^{Q6ZE62rn#4kD)@TV z%xnGOoa9TQgChkNElNVnzco3VPB2ZwKsmH=@6nxPDT}ozHPcH52j3J^ber9{T_s>~ zr(K4)sGxvW-w~d;tt9D}QkM8!4RLZ%`Iu%JwEOxY&-pc83Kx0akCpVRxaT8-QA)P0SBQjl4O?9ILDHXW;{G1-U?`IYR~ z*)Nn3W8ssmHEcaU&b%^w!k*KBa%lKlIW*mfnR`DFD2H;mGQFXyTbM(C9u<&F-(hgC zvAvzVq~%cw(tup+l!@qd~@I z7{R1?r1P^I;hq<^6t5z8iq;b)j)o%aBN<}9W0*MFtUZ-$P9nNSQwbN|mk66umI18O zp&~NL!sLgjU+7AGUM0smf%UPSu~Gugcf}{GzZz_ctqS~gzNpTtQt)ftD4tth!tLiv zMwIxq(0WsS>R%f=&*S@)nLz%9YdQ{udN^{EeFht!MkKo{=~$b<Ot>hL4>E-|?EI zPzzJ$qqmJ&=~EYJlT_uCg^<-9(1UM`z;c|r2igt)##bACI0 z?-ZYTg_yB7txWtDc78kVo;S)@?Zg z3=VO|ikb0a^-9~dPV7cm?u_ebSANx~?o=W3JhQfLWfNpt=Gk`hV7{DPwd-JK*mUk1 z?RCf*O4gA?yX}S1WOkDjuqMg_#8|tUA97Z-lMqKk?`5?UFFV>u(9I6;$OSoD_SIa1 zE^{S@5>n|lO_it}=BK7@yaNR$MoEcz9x*wLd+Sd);j&hTM2F~W;WXWJ#W-6%h@hmcn0@VMbt)OM;d4YXv&POH^zkOJ7dDiyW`X&ZDS28 zd~Fm)k_^>dz9A6j>r79NAo&8om^ko4 zh7d1!HFm=f5<5qBedu~ZEJsj)3+v5@S$Z`!YlaD>*mHl7Eu7{&6)Z}URflF?(58y| zWBtvDSxW;LF~Q!An59GqW*;b+vN&#-1q96-=YU(0aDk5-*Q7fDW1{+o3mbhsp<;!D zbVnTHfa_4kQF2NN;8qj*Zj+J&M$FN@++m2fny8YS7?a6+O%(Y;1gMFYRkShvt0sEe zHx}oB*VkM^IzH}9c?P;1L;bG7`YHV}>2jM{D20v!zuz%=F95s0$eE+@R1pAE@^(2A zicia=@VhT^=xB@UxiU2Fe)0g#$fRdRU1 zJvAbGnliU+XTG;Xl1KNWF;OxXJmH!OQ(#RIKoUV3@_|7F=ux;O=Xi*r#WKF85NVp` zY*KU^f@i`7khld5QyI1JXVO@!bl+k_5>)ATQ#q4M1Z}}2NZ8Q=5^du+Muh4#8RZEm z%OWJLm0epKhsK6r_ZG_|r*@qF5pS5-u_B@VLpI=sbZ^JB&7~O$4kgaNqidczm>a-T zl5u}?1s6qXxAd8mp12A-Q%UZhcnzI&%mmUp@CZxaz%wCebKN0 zu;OX`Itz0(pewqyU>xB2`|kHRw7!_;m(?YUQenvw$~QV?y98B%6qFec!7@K?X`YhR zNJ6?gWskNOLxwPB4CU8-FZY&A zW}n8IY+prE1mZU}UyylZ|naGw3UW28@ndz!F#*NRu>;T0&$wQq2 zGLsVKoP6$|l(1x`6o5|o#j*~dQ#N%Z9Wf*x7-xjbqCF7=ulL*{Vs=p^L&2lbYXNl1 zRAx>RpxeP_04GiRXV0PIrpLgwp0#wucq$w7p7G#Pfpy>;|2$&8YyZ)veUe>uWFtPf zJIU}AeD1e5271-(L6Xe1r>0b6^B9%*!5 zC{A}#6h|7@pNgW&OP)zWyTvTKj5FHe`F8mDb^0mRU!#TnG}=f<36-=`av@9oi!gy|-I>##HK}9TT1+C2 zAmk8-ydkHT@mB5dahQVn%$p%w6g`MDUG0&d<0Jh!7a#fz;k_Q=BNc3m3>A}v&UwZkK(hjx_~$H%m;^qx58vyEIcjeXORGa_GcuSqicu$BSHHAVjQ z%CdMKm*VRvS1sCXM1xIecE99dGGvqnHI>CqZgr#5gMd&d_wxAks8?v$G9{ogW5qZ3{FM2D%! z=s~H%WkhVoNZlLvSytA9pPMd7?v5m^cJ`9C<-1@ev1YUDWa5fm?bev*QD)558lHVF zTQq%tMv+g@U{^h(SM#slYu{v@;%+$hISE%~X7lqb0Eo&mNgsGoY(#0~zw@zgYO8y! zf*Ko8&-fABH8|wyPue&+?uBN*;`psvG!8pRdo=hdp%O)Fm_P8(fgpm6Yu^!mxNB&44}0} zsLA7qY=UP|`SlfU@fGZUUYfjx1_xSRthXTpH4qy91CRFqe#oF=Z}y)VG%HLS-_rsm zWc|OrZza(G2Br$B7xYmkcoS%fqwSBFE58dgL$uxmn#n8AN%v8%s%GA%-g+_%{g|L# z*>PA_B+!k2p1nd}UvAI(3xYb|?n_}-YpI+Uh&r`47;QYCAM5a$xbBFE^cEKFjRaQqIVG{Q`F99|pvcg2dbyD6U^; z?3;FRfTe~<{~6O;!y;qWl2BB7=kMS75ShKK%$7A@eB(;r%fBDv_#%*r0@oy`_sz41 z_}Y|-KS+i6(sYd>1Lvh3iS22LUx}cLjKT0}Hb0j89_2f^u5uv~Wtul~@zw`VnPXlA zgV!bsoYa0c>qc58GJxsHH{zi-5hLIAkFY5bbK3~1{ES(no$#K=!8*w5N z%$YCmYwdNQrTZ6)fq9Cjw%jX4`;vZA>x(a>bI>I|$rPV;E;RokmKi&YZg>3Dhrsq6 z53~un4D@15(!-tgW~MiHCTLAjbjFaciAQ(5jNP;picQWn2dpaU$gMCbzD_#rBIz+S z;_=_9D4JG%u*bsz{9||z?T{yE#}0xp3A%yJ{1?!#Y5XW^BP8-74;tg4vW(eY;6iYN z(GMS?dwd)jGX<(KLNwq`pthBIMPFDXh!XF!7ikuvjZ z^yR>hH#`Di6~m!|;8y7Oa!W4Q?msPyF|;J7KtgIh4b>BQ&HA{%yi|;Id^rTtP><(g zzts?~;K=f^rcu#d20ARfA%MW}Pst*|wy2|SschI6mto~|sjcQ-i7?9dx41=B>@1>cEO#usgMUFyA(Y5#RyQo2DfDjKj< z=wElO_}L+Eg<5ZZn73*h`OLjB^?S2EV?p;MnXvi0uvF{2( zr%ckU$afyEKDk)xp4 z@9TXxRVT|(qYvHU`f(UC@mt5xlZtEvf8a>2dgluR#2CW;@A$w|IP#7l*AKKPU$>$+ z)huWjc+J0PO!?EA=s`EfNhJX1C2I)@d;csg*)O7HX7knsC9w|Nr6TUd(_5W8Y^4FEl{T@wbQB;J=y#W$x=jA)`L!g@mu}hpok`VN zJTMBf#0>-nR3I?i4gS!r>o)bF%I^y-4MIkZj&-fX_?YPsF*^U<$Y*!uBePA9L#Map z`d83&zqDv?y`#9wQOgg$ zv%fx!$K|b5RlwJ$mDa$Tz{Kg9v3l)vkHC|B$*3@O7X@&1+DPx@ZHe+f9iLVkDr*KT zl(F&e^NJaGG>-+rYO*&&YYJ7i|CI7Ka^lyINFDie6MqQ(1_p0vxTKi!4 z^(u16cqp+@dFl|+W9ZC*g=$Hz+m&k*j>a$@AX5zKjlPj77Gw20_|iRUqXg1u+qH0{X;f>pEce2cJY>08+=`-Cyb4Lvm{y&*D9A!@pM*i`r*ChTth3wIyt4_!cephIsahfqwR4)GFJvWA+|?c1w(XDiawb>% z6-SDXq9pj267w?+a8Q-+G?;azVu;lErCZJpr7<5V!Dh~9(l^;j{eRdGtScy8q)-Q< z2x{2{u63GO<@IKK;vdGgz-7f5@TgM28OV;ogAMtbzWCy`;>x?%u|?B33NBfo z;I0mg8#vy_4H@ZiUdPYSTqCBQI}j4zJXl0RmRuhl6_R56HKX`Y0?oARtj<9I*)M=-DGYLvl!o3x z6)-0LLj|y8eJHt>Ge&4v1uR*?jRtR)tfUtXT3&-6#yAOTKH6b{W|Oo%Lq0)Z#S!?Z;;A>@T8 z$ajq?FCttU?jwn{*SjOY&*c&oC0icQ*8l3*@WrZrj2=A16)&+#W>RW7MP6+_-E^F> zEG3r)(j-odwgyp+&{KP5`@4;OE8A~(h49fHYF!{x+=KIyCjErgWJ>lMK{0pDb?Xdb zcv>$5@d~M;6WG-z7yTYt)7;T9GS3!L#av{B(y+LA}C_gJPD|{HdLxRdg3d(2| z)x(cRHBioK{hLgakRC6uUmbDZSMFb|Sd}&+BjLSKD#?c*@$P-=6wO(c#QarnjVin! zULJdR=f=LWJ=&#&F8 zl?NI(dbR6O1r>r+v+~3Q;<0{$Nej0}v1^>nRfwJ13}fe07&`G!{QI;q@OWRsdK(-mxe5>AQSoc~Rl;)D|+^S?D#m0TN5Iw86< z!j|W;fIzt_az>UybOU*Fa+S*JNca}Xskx3mniQ=3fp^ocn+4V#9!Bkh5QbH2*eeXy ztZ|<3wN>lsF1sJx8Wj4*y8f)jfa4DOz}fkCBA;HcT?}c85Z4slzN54Y%jypvw)IjE z=>ionH*2&(ru$G`phb2ZW8^0T74CpYRQtd0(xH``)QiY%&aNN^+6 z*0@&H!b7;aecv7f0X$)~d&`JiT$3ePq6|q!{z~(}VFKJzP-bC!13m#0i!J`kumRP! z<17If?XrgBN7Uq|e#_nKQ)(__e1;QoA|P)6|_lk-V>azv6txbtOff{A{i|4^MmHErWH;75DJ zvbcfz5m;@jGk|st)m!QHQinIat*QM_a-J2XI;*)ysv?9;Da})5Ak??pU#DqzIOMM%FwsN>% z9Armo&Kk6k>5Tp1Op2tSWg9%pFKfE;=&AA`?bvR-jKGCx?Ql=^1;5AjtmZxFbm3wR zoGu7sNf=|p3_6AUJ*roOc?kX}5khl6cMbZdW3t{GqEGp!-}%F^_MFMcuLJPzv4t(* zw2i)P(Ink@N2irx6b#C65H?uhMlXm*N*v?hM*mz>aV;C>iC!?tkf=#HHvE0q9V4zC z&y{#d=QAUBx}ezCNbQ4kGZt>L>)NBTO38N}*`wke)q&!J-88bHvRcimok3r_>bt?G z^qoNZmwZ+9@CiQQSFjexGVvDi8RgXruIoiz*O(*g?a$pEr7oP#(ZE{fozqu4f)pfU zzMZg{r6!B4rdQ~H-Z2nsIdC!oS#kobW%B)>!VPj5f7r6lHikNDR1&k;JF=eI&y=54Assv4J>smhj55XIkBnJ1SVUvbEK1P|#Q%b}^4`hGfV8GDn zwl<`kz=)dic9G@+j?l2;N;GI800n{BuJ#0@Ztd*T>;RF9t~# zt`zGc6HRzDT(|IWmAF3}Um+*W40bNI{CJIIT@kSNVj%-%usuYhea_xlFiUonh_dLD z>?^QSyGI^tx-g3EvLgr@7z7xfY|)rXUB(*=ww1CX*gI64v1%;CJ|*LiSURaVqaN?sjr}1)TtXhbjMJ z-x>V6Qb%J{!jI>~^c4(~dPS^D5nOwOc(YSjDbI{T8P1vddkRmp!-6ZUNsABqc9WEq zOiwhZBv{innn~+WFP*KMB^e)%RFZ30N7Tpw99Jn$9Dw731#nz*)wz1|38__1a+orz zcb0sM5!FBMkT7sXB0|dUZ*So0L-xsQTyXvy=IudzhYi5IKLQlbvX3P_pY5R1D8mpf zM-7|`gX+bktH^e|s zT)06j=u-hqAm*RhjPM&MNjh1e9{eE6$5^j^{vb}LwJrovA(aHk1j;dK{cPG>6Vh&y zzI%_8rVj5T`3eM*x_L)x@n%`v8&yCxz&v1JzYp)<2tMs;!45I2=2f{8d+jKv}g(m%Cbt(AqW(@Pe05}rZtCCOU7 z9FQjp6uH%_-ek5PABTcqDKftY#Gf+=@jgwsd~a$)STzu}!r zZ-Ux%o44DBll8Alh%bmlwPU20I_rWvx6SKOXDn&t2HA3urylQJuX@M9UZ$OIqR96& zf{X;4{m9CWK}0T`$fd#qU^Vk(Q=(z1Fl}?dspi)=K1=|~>B z%oYD!Rg+*TqC@`%DoBCCFSl|9l5MoY>!D^Ae`$tHTkh}&KWXoi^V)cF8m}EC(w-JQ zei_ftY+%88=p0^8!Uf`#Q}QDhDPde09Fke^r$`w+kS3WqxKegq;5G+Qe`ww^reI|R zKRg|oWf=3*#Uq5IcSL9~Dh)O9-aF9Zmvw99)}M_JdTHi3!0?c9lfHKKQ0Wtx%`gbU zi@_)i99ck&GO~_NZyNoc>(dGHc;K2TmvSX--0tDAXivW9?(n<}wrBPpMmEcvDtR_3 zszdn&m>t6b0nyzl1h;w@g zeZ%n)-C*Fw>e+6O(sJ22#lMv{hC@E8Gie!@m*2zPBA}`?}G{X z4_MR8>cL1HZ(EJZrm-^9y!W~9UXqn{9==Flga9ltldl~a@&aC^-5KV!6fHBg){p5y z8i(U5*%x3GsXs_Lx`a6fc~^Ohf47mbbcIw<->|X`Qau{x*CoJKuS**4zgrq8+_KTd zmLGB1?O1=HPFd{0AuVBQ6mZNjB|4u<=CbyXZ(4i{ydV)* z>EYMWIHSD4rZfQOX=gfvHypo0kwn-U@pu4;deSo@FX`-xpXvy;dZ^(q>7R^{$e|2riyYq-e>Im9cI_o;)^?0?7v=2OU z?SJ0;yk2T$h*0C-OWx`pOZ>gHqpYQ+^l8=mx%K*G{C4nNz5$=vr^lI8F=E^ABYt*^ zaM#85X6>i-l(;!4EQ)fv%QVPMMiZ*zkRGM9{0`*m9{F@gw`t!iDj?^+ikN*uuMnGR z91~&hE-B#H#@rqU)=c+CD-wrGQO=S&E1tpZ**U(Qpe-i*KaC?O%?RNwmMdEym` zFSh4l7;!fF&cY7`)`R&kCdXG^1|l{Plj9X;zTWD&;iBNvKCp*B7DTAgx9%Gx*i;c- zcauWorrP^sK341qSikr?FOi`L%1fk3VmB~cewruaVHYU9YlzC~Psum?q999IIm$@bRLMJE1-D8|R0xb_gh z({1Np5WD&gKeP86SysDN|N0`hQx*P>5B;8bFU`~>XSnXWZC!^2zi)~>3DSxg9mR*_ zH+I4_=e{9>=Gkv|4V@8|&*#&>(H#GBxJT9)hgxOL@|_cB z39qkR^Q(AH(*TJ>R>010axuf(FK=06%uVQT6o}fCj2vw_lid;Rx}Y2?H(R;*WbG{t!N=zQdV4vqc%;h@6EZ+Z{Vg*GeJ-_r=d3)@sV!q9px14|XGc+RgTe6%w%~|jY-^h3BFy~+LVtqP4 z7s-Z7tmCw<&pu6F`n=5{rXsmqDtE^}aaE~`++7+Bs*~EgUv`}*`yX2o z;Tta1@rv5JGqW9?Xs4fe^LLX)`!v0eM$!R0lCuFHXZSn_pU(+dh>aT(jyh0{*8Jtu z4#InH{ESE#i>?7fn-m%}X8js`c4xb2U~+4z6sDgt;c8cdVTHlZDFsp)2{tpqF!aYq z)0tGpD+o%+z0X>qK!^fAr<{IwVcxvT-9Pp86W$q$6>3Tq3zDWufQgOYepfz;;X=sS zI9`0{>e10=QB9pQy-+XIUj^cxjaO16>YfP?saawB7ksYa|{xM2vOwtS#~8;N6bt{8cCYv1D7ru@|NXv2vM= zZBM&g(0?c$xA(y2kL`OKc0Uf<+_G$xpTAm%0P3XI@>V0p(k_lGr#KytrH!s>< zUlDk~xEXyEaYA&@?Y~tIRYQNm=2!#cTd7p1IC`L|DRaZNRNCNMsJ-86u^`JCDIn7A zxKrUz5h&_sg4{16E=X5-9ZRo6yBbSky2vS%J&18b{-pBlYZN!0Q7c5P_1cAz0}?tA zqi`OLhJWVS9`#Jl7_MGab`+vW{J!u;z66UgpO(p^Ibz~&%nxaVilHQr==jxync9i{ z6c@R*$C1w1aC1!D88ahcQoWBzvpKYGXi+_|~Wd_>i&W4kuUhqhl9P(#C-D$;T!Aj;tw4O9v% z(lz?n8sW4#hUk9J+e~K|vh)mAQQx4m4e4K3ObiVp%(>*&46bE{Z!fO$zb}wIeTXcI z&YQX)!xqvx3E+Q-7WX^}k*VDd_v@6%u$I@kOV?TJ=FnLaDq%cZgKg<@^vMq6>GmIR z_WPA>)Eqx5mrFBYG*n}}8L!#hwpY6?&1M-YA)YZHaY*u<$g!rg=~cfoF1N8UZ`-4A z+kGxIPF-9*pYJ;wHt&FPX?HBTZz@N|*xUR~CBd?GmV?;lBnk+}UjUo73#iL|% zs!zl)&Bg3nSa83}Xv&)qrB-TUTnY%%*IXIhbaCgU;Uo4MCzf=ERDJ$~v7UwRsaFVP z4cvp9b2b9P6#L~jD{qKxu=Ro-cGC~{8h+T1XVDjM?JNhn#^!id{cGIw98fU3;(9AL zz{NunFk&SC|1Tb@`u4iOPsrZT%-qRXSIE}Z(pAmD*j~!o#74o%*xugU=-+FmUi7XW zgPJ1W^q2qf{_mzpAF0()_k3->VB#_FW_ma(h&1~Ca(rT4!*6HTJA#U?+T%UHwi@d-kLBkt=F_Md+;ll-(#Y?{*Co03u|4`Vs}AWL=22QW+i=Hjwoj z+k4o$&4S&bVj;!Hg`ea!>a~iyn%;RTscj7*ag1;w-dp8&a{71aTh~D_H*r2QZ>d?a z06Ql1nZ^zP5lXPi#VG_UU$zK(Y#+uaS*`z+Y~5`0(R+4nPAI*QFyVk`p26jsB_ z9ektedR5V}@a{bjye~IYn4jx%A{UO7BdfB_5FSoiX;c)14V}+taTEQ5NrOvMwr!c=+4r$!Z%ilZmT|y6xXpP4 zQg!s2%U}gw##`Qjz4^QGdx(^;a~tW`zR??^KI(CP?EStlDeh_M``qKb{{CP4ea+*x z5gEUfQG{i!vW!5zWHpUrVKgQL5R!hYiMdQqcSug{tx18@cYj%|Gu`ug^>W`Cp$*c7 zPr8_#@}By<5I5D{eS)*+@hT-9?^_Fvp^(bLkmVklc#!r|laW=>G}(cUN#)xmvOX3H z^F90X;sd_+Ca65JFfa0L!0)|Qb}#HDpWqC_5NY|4L#cT*>5@cuI&Fi;BBu`X$Mu?h z17=a98&+DjAZ%35k<|=8NmTz{3hGUk?$x+q*AbzVXvnM_=iE6Et4L^j4HR4!Z4ACYnzRRIs?vH!eK}mI+A^v;bT$Mg(u?#!Zi2^F&`ZMHL`?gkQZphdX;xIm7#V zW)=G{HFFEg-rb4t|D! zy(!WPMLecC7aiSi>g6JThk+ayC6waZ)2zmWy@YbylDX_iah;vI+r4+oM#1Jp+dp_v z{IY&ces$>h@p&8MxLDU~P;`*a3tn--2Lths{qvT1a{h`j0@aX#BvDEb#|$m1i0*x1dVYSrugsu9HC!SrL{LH z#AV(XEHMsi=WWTtWL|jFLHN@^NPFs6_60ZG{ zBB9}pe!}@XFbQyBgdJV|lRJi8Mk|V&NoV*^pZ=w?3eqG~9|=F`09TbPU^GMUKi4D< zhUVs~_WITimiqr*o^-i%|BnVq4c`67`-fJ>gZb(%k?LH{GHF#tBjx*%x1cLz@@Bi(y| z>&(*=%AFCoFbiR0d8wx!DvZuajqP-;0eiVeEq_y*VW6rc&agN!QGT=vsimYd0x-1T z)9fe1uZocbjhOxsBt@9(%WIUCdhM>lGcM+Eq9gf`B4?7}r}w9kkPgOwrN4HYu6t7I z0XdPWma!j$C4@voye3W{S{eGCk~p3uleRM2AhUA*)wXcMA0OrmCxqfRGr))8Hi=KX zcGz|=n%ou=#lXAMLrn^X6P~GM{P}5D=tu=bE5o!~kOR@me#Px&*c*yr$9*!Q*PE-o za^6SS7xk_=uNloZ;Ri_()jAl6k~Jaj%5M%JDT2Z_4R4ZG@)xpXWrSQxy;^cx(>n(} zH9|`i4ht$76bz9>$cjg(3en?))hLK&aad>V`FaG3lnVP+(&~0XPQ2ZQUeuq`>Z9|Y(klLaTqE^N zW3!L_$cT~Wkg|GFgQwD%sa8`kYFNt>#G=RJhw#d|E^!8@l0r_!_uyY|ccix*613g8 zDSk()!_MN6?~h)cj0L>H3=3U`;6mi2W+9{?ixw!yBqMn8)DCS|TV_gmMC$8~z(f*@ z`1OXwpL}o;wIcX9V5ZaCwHF1T98|P{%grt>w}agj6t1; zrpa&l?f5l7w$PYp_LESDUG(N$339=%+_=ozlVy=alFU9?jlO<@^7Ntk^w+y z%(omR@b>95{{F`O9dDQHt4Fh4BYTeZo!hftS?@eCNPcb{kq(7~Yeu~yP(G|#l8;;e z^mcy$UnUZ;{^?N@x~{%d@Uk$hH?uMaC>QZ7cr`+axOYax$1g!eGdv8dEuo2HoactT zov>AJI@NkN$c@i^+*x}>vQ&Wd2z(WstMQ+;8m|L!MUKl5MG#Q=6Af_9<6r9MY5 zOS&2R*!&wSz(Gq<5Z7pU4)~jc)~}!#t#xRli-SVu(F#<}Q9Os9yg#xp&SU z@h)&*O=#FwG~b-sDc{5njMX0*HWA5(p(U6jaIYru{P}SE=lq?Q(%d*vZ-yre0jsm6 zhp0Vr(DY2V@*X_~A&!9y^}e$;j9fH9Jx(Zu8*(i*V;N3^+$AM;`$t2=K%IPf&d&kn z{zReX@1hoTQElIcYMbe?P>8&~NW>S;$P?2cx5y2QFWr0WH+1krg%(g}Q>7t^Wup~_ z%S}7x2k5Q+ya*f7GfE1~m;KYa4V-z)T`lmO=;#UZl%|sJKYKZUU%E9X|C-DLzK0mW zhKa?g5k;AzAVaI|nALncr{Pz|y88r{(q=7;*vgw^I+Lc-r%m1#oFdeYw$NI+LZ*Q; zmU06ti!v31#mQI5%~wy4C`ylw{P6QXy(gH-$uIchP!QU|yK30J(Oe3(7$P;X4 z%`6C>dhxUI4t}^>=h8dwrFmY|Yy)322~Sw6kFAg0MmzRwENK=tMpH&U(F+!7)(TmT zB`+WC!bm-4Wx%h`H>W-lbi}HOm?LPJPm6h76V70i9Zj6o@M}J%KNdM2xAC7vs^2Sq z=Swwbn8nqNE&tidAO03!-+LXfl=`Nb9ts(I40Qz5AGF!P+<_*XtD6Xgcxq6iv8${& ze+K*Do1a~PC;|hbHXNhtKJ2&~I3cj~zT2LYE1Jik)-BEV7=s^vVnsahP1@Z;#4ji}eS;ME+vn{dMmIXR(Y1tKh z*Kmm`bUa;sHfhKwsyj=JyJCrp?9qLl>Cu&3?0<9yawv>lGL!DyE_g#aHSmKcD^mNy zvRs#$nB)$AnKlZdP?+DOr(}zXezs3xS~XrGc{dawS3f}3Y+JAo!p}-$?WI-jyet^^ zXaY=3=1a_o$5p8$^^w5lE5>}~9Dv))P#Ua|qcLi9R% z9I;7-1&&nVnL6H<2ch!<2g;!!df=|?qELS!%)LJ_v>O)l_c&WR&|m)0-AJQ~G4ukC zcrnBurpm(t#eqx5H~almzxynhNmhD!^m(leJw8VuB4&Ei8h;I~Fyp?JzMYpELxA=Iv&pRjRQtD+I2eFw& zPLGEeam$;07Dyl2;U4<0{Tz%>zF{R*?<@A_F(qCz)WJRdgY$j?NS?^=(Q1>x83r9F z&~X39l1IYc=BusLzqQbT`cdozba$!06#mCM2Bc0lBr#vw8LoN1ElrXuaXNvUTLr&i z5ROYRn~JBN_+_D9R$Ps&7+*W0q83!0VC9FDfNX+sOxK`ZU#@% zMrY^q%EQx|0}E71GR(rPZ@UdDjP`ns-clp!hf>d4erGN8NI>fp7giCz8=$~pOW*~| zDoy>VP4f+VKb7u@62P-j+_VAz6g{lo2ccR1OY2;TN&;Hv_7-n^0O}ROv>VVmAT&!5 z!`2)(7Y~p9#thVc(u+b@Z^W$n=jy^fb@Y76{gFUiU4}no*86N4W`NAfZZOq&y}R(+ zx`OH{#)4x@4^^BP9K+KGP5rqsS#91yQH()ON*(!wzGi`<>e@6#Gus6TExr4HpMOepjShH*CmSNNUp7Y)*xva;2 zp%DgvEL!ry@q6&a(Knwb_3(cIbV@fYip=f32Zw_0rdPufO zUqCO$JVJw|fKOOjyAZMohBZ6Ufh9kT#@+w7Ia?LfC1Ql20b$_RllZF`M^n{G(as3M zU#Vil;4w2!R-pUK5++PT27LV=v+IGX--iVp z{1X57`Q;KgzW~MM$eBv&jixQfD&}w~o-E8bGsEm7p&w|~QX^_izm%WN_!}>!-RR8g z3G29|qB-BK;5!IlO@H~M-c9kcx@ct?Qo&NqvNyt$vCWQrF5 zaoQ3_+1Z?94YmQ*1^S=+%kPoX47B_ZbGASCm(%~gzhndV7Zo4_Tc(n08{_Tw0l-nS z=W)zi>SY4=7pDKZzf?kfDT#Sovo!Lu_Ehb4cfR$sW-Va-42*Xig2p>?KO6?H)uK8; zOM<*4T41~*=-A{kOK7^WqJ6WxhW_A<9V>xh8~Wp{l&tKsp2n0|EptjJ_jlE;$B@by z*TkAq@o$l^#&_YXbegeft@TjKdUhFto$SZPN`)33dCJfx zx!_UhJ!l}Au${g7F9Rog~11Ls?b2-$Sf-F3ZsmdfhhQOmo%8~OC{@`WVZb#O5n^j|;z zy2>W1eh;}k!m}9pE;;^N!tXY3r-j3noL%Tyfc5%Gbfy|L#7b&mo15nh3Ai0BG{%(En=}3(bPCdXO@5jO#T^yol zbe%1A@l_&W6|dBWy_L15Fulo6`^2sqx~(6t@l+AAs(}$-LIXo|Nz9aMJVLYWDTwvD z^SJ^C3))iZeU@)}k5+A)0wrb{y10lVvmB#QgS=sMK@Gus7sIg?$@m*E_!jRNgGfV- z5FX0co;XTi|8d~31F>lIT0`-jFd`Hy3F(gvQlh_-hQWaf;-!$F<7A2-;cfzGYJNc-fPqPK7N z`dizW4t3*rk@k(Pv$%6w^!U$Q26Wc$M@`^+_7sUH?XuKtjj(~@1&U^EeF)}W2|`UH z202R1n8WrW4`edw*dG}klNh+Q7&9)uaozR)pJXdYV6+X`?#==NLm3bly#F_W@$VvFtJ)R* zNDI$yxqrO>AMkfbdmCriYEpT78^=0MCB3{-H9W){upJX1p3{%w_9xgHEe%=$`#IN- zZQv&omw*ev-!AXdSa%Ko%z8X{5ZSVT0UBfRFOBhGz0P*J(cnY5XFZ@X3_%*B)Fk@^ z1JD>837kPbrCMElfW|mTrSb!53=jf#0YJbO|IrxdbKHOKDc2hRr7>=S5wP)|R_!iF zo`xd8+KF{I+n=JM(gcb&`_GVk!{!j%!F1B#K+z_`t6g!kERYf6nz!N&8%0pc2n}$ygVkk;~iZ-E&BE^fd_vVjmA>1>zUJpa0@81zC-Fd>oIFABDzS z{g`qU0kMDpQtLg6z^}OQC>MlZ0xo`)7DO0IMFrH3iBkB~Cr&1GwiWwU=hy81EU6%4=ZL1C3R}w1(M7pZl$_ ziW3XV5p1xW+nanmF^?NHUq0mE4K&ttBYtX@cX4;rX?CQ-ESM^}P&w(F& zJjc0T#P)TI+rq!H;^LEP8UX@Gsf+#mv{8JDir)&ehEO z^00NRo;(jj3i|LD2JUvcQHvZ#%22i)Z0c6s8hXn~`~5<#QlhC~Ct&V_rh)?vlj`^l zbWfH(!*+X+W?q7lduHVi=pCc;)U{ogTL6+;?pQ{L$)bARFfdm>EBtrSsPvq2i;CS0L< zGk0!zXPUC^dJMge^n9C%q1kUh$P5FwJ~7NJd9Z!&TIV*{`WgE6&Pl)=!OmF3aDM;c zrR^)Q5C*VgAAp6hcF;l?mKY#1PW6`nk&)MSOn-`O$4g+?5%2O_DsmKGUt?RWg}pfz zs!J6gGNcM5GTyxq?h7Zv%E?UTYErwe zj4EF4R(kTofJdNCLm$sJ)bV_N+qW$!vh*7ijK#*tTuT=pmi5zty}}ize5Qx~=u4^d z^8pgoE!~xC`KF7t{doTa%e}QUpfPr-pnne}o5Y+UnG6Z(int#}b+`8R2>h8218Iys z1ozBGKw}WXiw~v97C#uUZG<0vOM$%{7_v-?DwdJ%ZpyPYnpC$5BG`X^DyK(Ns3h5} zla5Jd`kMIbDhI2U8vJ-?`9vIURA!jgVnyJCU2D@G(01}go(Gz}mDMESveS+O$w9IQ ztP_-e&iu(oull=hbc6qz0uf=!*Y1v;v0J5xZ4MK+R(VdaOhq`W_-s8jcD@O0iNP09 z_uTg5X0LR5FO~KJ$=Kq*lCdW%{>oaQWNey0s7+Id_ggMf=C5Qd(5ArywP}E4>{}oi zyMA5@BxC1y2q}B)O;&(pEC-k=UElaP3H+12oCx4Geqs|MS5sM$|t)~N^W#b<( zlL54Bk%)Z*VH^l8+dmTXldvfDR#ai2Li@A2)wgLn>uCTiPlt77h~!OigtvdtAg+JoL2XG zk`#9eE>g+OLn>5R#Y2$ur~Xyb_?35!t?g5v;);&MrRR?mxj{5wp(aOzpu_kZ*@ZuC=S()lo|8?3L5KmutJJu_9fpne&I#VZ5J7q(7kJJ(bUOGa=$(5AJtj@$jKROD!jL4?P!;h z{9)L26sn||VFv6U)(uEz2%GgMl>#zj2Pn`8{KqomKkoFZEU5pH7z*?s|MC9660viT z$;%NC5inBqzl=FRiCE{q6R}NAt%&PRr#dGeZU&@pg>T_LEpzmv;KRfp?USyrojgmW-|7oe5|eK#jquc$Vfqek@`sBv&?)r}$6nVgtZA=kr?aoZ#O0df3bN{dmb3rC9?3!u2G3@`@r5FQz=M$QiZhclb{!%PzDcKAF$T}6^4-8VbdDcP#ABT5`9cQ^^) z%)0sgC=Gca%b0MSAysyf>}q?Lf2WjtpYG@y3DsKCP3xJj`96!J(#l)5jTr+?^-$&& zzgHnVCmAk#xhR*cjXBN7lf+&64PsRxDvUjY3xe>N76H-e}V-LEipcAGnlV1oyvPP(r zA|}hBpf_O~0GA41$Y%=7_d+dii|}l5Eu z>w1S!Hb*soe;`|;!NW!B`lgJNhLvNnzou+Yr19H)r49V|Ca9%PeeF8f8|OaQ6ra!KR^Oi=&Pn$7z=ID@PKP{GCm?6O)*N9^d(LoM~oMPH-u>bTSw z){NJ(t!sMNGuRNF@*B_u>6J?IUf5<~>PeKh!v#j$YR59cy$4=5Q?rDBB*oX|k~!3= z*8Xy=5(99l&1m2H$4|5Ia@v(GG)c$Nry|@{0iEBR@ZSEAS{wqq{R#!gb^U2p%`x;9 zpwl-y`w*aqZy2qZM*?(uU{Nel5~WD>7vqmv99U@8;U5+XyPUl}rt$YC5ywC*ToFE3 zN}FkAks^__r3iz#VHk213Zt&jpN$BG|IeaW!B~P?-8cQt?|#R4KR$8?&*D^7sb58P zMR(TEYzv`@f6Q6@GMp?PbYfh!YL@OS-}!v9*J#lqyEH#h(8${%a0=$m>|!|x;Ai!k zS9K}xeuZx)9=@PaFf8(Ljl0iXn4s$%m|@`O>GNW+sRW5hpG|*g&W6exB1ibu|MBsf zPWf)J+0#{U$JIT>_(IdDuNd14B|swY2HAyFQ4U#Kl@pj1>r7*#>&q!$I=qLMVBFmd zTzy!tVf}<#=vKF{$S2hkK}C}m^$i8dPczm|GySwK$N=bk_`G+1N-AvmvD&d>LgLk8TCaPRlMJ|4SnL5%`nlG38Z-*xVy7p*jGN2faJ zgkJpJ`98p`80$bS*+f$^G8~l9&W`1#P1gRh;`_s?HCfqITLk_A4N)pz){gLu}?5mF*lv{qUoE~gpeGp9F5=TmdMT$tHts0F)+ za~964$%EPr0D|^7&%USG!B>{b=NrN z!pRQPv?m#1$7m%DgwkGg_X%2rsaF--oe+q>j-V(;*h+qar%UsZ`&e?Umk=Ux=9s6Q zghvs4AFc;inX7lhHP_}lKjw01?zAOtLAA$JUVyW7sP3($P?E%}Plr7H`W~4+u;B4Q z4R*S*|2gc8p**K{)+LK&L(#?&$nmP|5_cFT&p1-F4aVxXdQ<<;M_2eW?j+ zw(3^@-}e0~h5d^UZ~TkR8a5mbW8cc8rx>xQVC^REe6LC7coC-{Hg{eaGe>o<6W2PzpE}`V#8`~3 zo9@ApEzYt**lz$E1eTGzc6EUE6R3`hk%&ror;+{o5-P=-;DKIji0%cN1=;19^g3!Wm2iuj-v5jgxKFE) zn3YMk{SugT=tEO;CtfK+7oXyxEACnvwRO8P94bdKHaFxMKMmVmeaP!@RMnq&A^7K& zLhR=oo;E-}gaB8Hf1`iNa} zMPpG?^kBmhT}zpG#Ob$&siA0?QoUIusw??;>Q*(Yh)&~i=as;NVz$7v?jBBDE_F)1 z5wIooRy3S-*K0g|WKZDrN&Rt(?`-H@fDzvjHe#JM3Jk$Xt?eYU0ehwAd;YJBnZnco z2n7U#%~y6Zz)(3KOmR8XD5~~FO({2DwcRHioa)2=31+?m(#6`V@Rapr?x;{M%*ccR zsEhj4Yqt@%&c3Wi`nD0+Q4>~&S(fHxjmT&s0j;4Ew5!WC=(9Y0ju`9j-Q+QZ!bWE^ zq79XAOA)4z8$p?mLEI+_lc}il$AzZP6+it$XgMyriII>o0!j_FGo8o%=ZfGMe+uCC z9W*w$h`!O1$#ohI#Q+fXC<aN3^okWr5HQ}Q^3YbFi~-pyR|i=zRAGR z1hAvAO(U_!R}}p!7Sed+7z8+N)sh%W-i0cumAImC(6Ho8P&8hNX8d$Ij5T@!>>5@f zZ16iW0H-YrWgt)3@4y4^v)-LKGm!ak3|74g*sP&R{;lfzn_3_({!2F*iiOa^N4UgV z1alu!-Cwq7Q&O?0wAe+%7;A6gONifl2mFYDSI6vvPtT2*IvLzXQ~!0J9$bcGe3`2h zQTg(w0`0mP-sIvKnZCt<44pfM@L9pv{lzU@9{yOF@WplM7H{S;OG=(8-^ zLCYH24`vD48c7s8CA95sKSeMj%4A{Do_@DT*%BguafD`4{i8?9ebjxGeF`CY0w~fP zJTVlDNyl<^r$!;CM2@IQb!`7GdZe_uqIuNgF~!-9dGzxS8ttGM2Pda>ZuGpCeOm{^ z+6tzv4eG7ab{6!KKxoP%!n>?EyoNCw>`}oj*xCh7h_ivv?(SuS1H?X(=wyfZ#4T`> zyw9tm_y->9gypUumwGHaBbqV>U!`{3S$vnHX*u4aGh#w5u_hlp7!|>tM0-0tK(5%V zo2s`PZVfEm%V#^nmUQ@Tm^0VEEhDg9`>5Z}w2QS~S@8Q7 zHY~v@lk9{Mv|qj)bxzUN^BN2t#mCjN6Bek{W;x6k#15;;3K>oj!dhyUWsnpZP%|+& zb0BD17Z5m7I5Gy4mPZuxhv4?P-IBXr4Ye>(8K1+qaQ-Zdf zX4ZMQ6uMUY#mwM_$A1jvV?orySFtr4`~X)Alv-K>{00SY#s@@oHf#uBu`;vnT1iXHe+&_ zb_qnX5HV%rSmOl|?~OL9Y9%Ns>67A9mIUZ>xM%sM9!jzsvyMZN zsA2u}cg21Wu@SacX_j*VurX#MnK#(%=;&@IZuy7opxc`RIsr{`?ri- zn5+sok#^6=YSjTI@)-?E@C3N8N>?lG%IcKC@&KLf>tM6DbkoTp?l&_vw!q%Jz&~`h z?x42QINK+YWST1l=s~|CH&9EHDX?lkOV%JOYt%NhGf!=HHDXw*^(JO} zQ*3)sWwXS@!@+3!-0>#zgDsBEF7;XhGv?eo%v&u58q0oy#J^m`iJ1Ot2h6B@ULLN~lb>-{Hr{ zt`#(6iX}agwyT}glcGu!GS6}1bsgwTeT6vsAarC`c+?*EY23O0+wJ?l;f&M92iVO< zv)K)YU0=8nD;5dk4r+Nht5X;DlZdOk(1!{Zv}UP{BLe4Zxgs5Ge7MdVHcqb-DMomD zfeZzP`Q$NeQ?}WPD#01v{^P--^<~@4fw9e5zowN4-;!2M>_4pbWu%fSL z8-U=pxzGVcd%#7MlPWCuKisIU1`m5TQ!cFns%+rDs0_1s=xD``|ZN^0$48s%W zm!h%!z2#9IHL@@q>M7uxh+#(Xn_%Fn+JVsh&z1)|0SvG$cCfBLc5mG;uukum438Z> zaPu9sFQ4xCRs5m(k?hPx9*!@0cY& zP{>h{ji`#ViN;r%vB~aL7sC+9vh2b+E|*NAEC5615%xguC7WiPJ;C&|%{e7^*6zB6 z@O%dst$5O+n5u#LonDcGxBfZC;bL+3=dx`&7$Uz8ri!&mChG4c0*f!KgQQ_85Nuda z5PG(618)Cyl@uNZrhk_5;f@RtKTs~Z^V+1>ZDsdbp zjWEs+jjKkUoJjwy(<<;)$*fBed)FYs-ciXPlRO`n0z00uYD%y$Q=CDXl}XL$o zvIO@z*iZf#erz?^RO5L0Us}n1K1Us>OIbeI8It0hgmDVK`)hrj*6^oM|Fx!7ra%+*A_J#2 z)`fQ*Sr$V!TT(bfA80z{7D2o)ZiW@wdAF0-Gw8(m)XB7i+VC!+EB||gY85X8ue}>* z^8Z8HTQ=3Tu3NOh3GVKY5Zv805Zv9}-5r7icMa|k+}#2M2@ou}ySvLBGi&XA&N@}M zYVUhLjXy9y^!Yx$wZ2TIGm5D(XP{E;_0DRRo$j}7QQ?z;kM(ZDRm$XHXk!16=XB>; zv8brFe3yyNN42}xm#pF&q-sPX1;BLN7kv)WJB{d*VP_+mK{@8*_%Jla-{NsDwHLVC)(Cg5fTvD>Sg$Z+5) zs~ffs>|(>gU`|j*GnuQGmZ0b(PvOCr^;m{@ZQJ*wy2T>a>=6u9{W#(IxkG`=R0Frh zt{YhQR+Xf?b+aT)T9yp?fLFxO0bwDNV_b`hv4g6- zQ7cu2%e#|h;nB@v0WDBU?XeAzO5MHvfI^a{tHnON=0o~v13yECKl%nPKA%qxGx=0p zmC3zy|5w>V3Ob@afB<&tSC@-`aOD6ZOSJww4SwUG*qP`A{?=4V>{{*98l9;*4V?Cx z8@ob{dJL9Hzu4E%s3)u z)$O9jUK?CR*g%mEZHJ(Bspa`#R1{QOyYC6kd&0SSOF<=BoIpv;ka=JTlvpA-!3_f^!o&j8nKrKxgUOyBNS_W z1Z1#@>7qb`4l`l0k3p~oU?r{88fYRZ)XoEVEQG|c9~e_O=MBL zr4i^4DNF6x)s@|FY0C^P9KEiYsaSk$~gL z`iQ8AO^SI*5=bTznFf-HP!U+Z>oZX5{P8-S@IIo@E1%%_$=yr0x z8&kUcyz_aq%ADx>`Ox%@6QT#{XITbKY>tHca;}&b8#c8n?yck3|C3j$+}q0vf!B{` z;CRCQUms5t?d+UEFChO(T5)>U^e3eN-JO4Y|J+RmZfKW`t5EjU^Y z`T68DD?0wZdp;1lsXY&qAdQG)APSW?mqJB(05ycmq6{&{JG@$O0Ws?Z=FW2O1Lf8w zinrID5vIVdr_CeB+k(wbd^cAR? z2Mq7|XXB=qAQEvWzFHFHkzy`Ujl?+$kp@(U1VS$un6_WD;$gy4XM5tl+lR#}<2{H0 zI-n{+66+)ZcYs1Y2JNTWJ79L@=sk4#Rh;RVHo&BFr&A zCgHmD9LA{C*bJr$y5l={SmB?NQ=k0NLcp#S)};RMwsk_+d7=#j+IIAqcRKD_uFyL`rbrPx{HIyJgCaV27e5VPXi zm$IIMGsyi+1b(p=$3jv~ae1t6OB*8Hd&AM=zCAJ0Q8pyX|I{n~nF^6N$cXUvD)G4)?ai%ytv!s#d<>wH( zdzWtq&&54^pq^u>Cw|P&yyjKZsg_<#tP*b*32@L#n-sPtV8A|y@L=MNYVjoNQaIgRi2hAm|{7=tH?9iY5r{uQP)se(B7v? zVm#VatLDj{duuk)T6BFKzJdy}hO{n4JazwIbCSWGBq{QmKP2ubXJ7HX-_F6ijcu;U zg|TtdcKfw+Eo?s*#^v*QKVU&G_jcuNU$V_Bnkd~AC+8U6bgwL$kA=m2g?fW4nL!y; zAG<%L?~v%IhLm_`%mCX0U=3MXJ<;i>&fLH?s;q4ie{);8L`W3+1!U zx!6FZbLOY!a1@FEie zt{%;tIW@c4(+Y}_0nQLfPWFXmH3yJ0B%$<0npr0Ft^|9;+3BKMI%>D}4@zrT^1F&S z`QR+A0B=Y=M>u!va;4497W41@SErNAiKxd1(Ju|d8NKW4+D=R$XNb?rwL0gPa%O8^dpQM!0w0@M_mx8p}6P+ zVz~fc$QpX}koh%XB-Ys*BD=bB#|%1y$(zkz?`huuj>CU@eL?Sezd_vpxpVAD6K--u zu(8%_lcDbM(>LH3lqhIpb&nbJd={3Y+qBdu3g4T3L`;yvZ8)6vXs`Z*AU9JKuC!ZR z(W08_noJ_MUVhPJd0lVEhqz4^C1#A$t2i&&A+tuNw8eQRBTBb7^(Q_cF!iMEHDb>S zQIy*X&EDCv=W0T@M)>kTXNB4#sm;q}eRwFz!@;=aYg$_MJccIsl$?T)mi+CfX(bE6 zezIE50i6-!mAQQzLY=iPEOzvuZz6m~yJO~pK_AzE!v}fHAz$c>c9zu;YMnGNd^wCP z<0Yq>k9WUeLN4iK#r50|IFZH}24D{yDKCD7D&IDQefWXIG58w&u{3aClWQ>Yf!;{m zr<^JO1$Q9Qs$1w*HTfs*HQjFH_`XYA*cHb;pQ<*vGw)E!gHM*a`4Jj?RE1&gIhVNX zo4gr%_>h6*9(nDUT4Iq6#d^oZcuk&;XsWicxd&(_H#)J_^!|kpSDcM)t9h|Utvf3S z@~p^v5p7P9^LLhx9w{mGCY%qxih8Qlt5&aX|9LVY;&?op07Anf5E?lD>(KDW-SHoR zBdX(@f1<*c&iX&TKQ*3hH-<4^+h~q?BHJfr@^q}hTaH73DVU)Sg}+OknEzAid^o4~ ziFr{dWtdjm!(GG?vA36~wWJ_mapL!L+8O2Q^LxEM-ARGTPN0(L7oDg@IxhR$*D(V4 zIxglPCT(R|6-iBU@H#!^35ty;cu0AB(2jsLufTI({kcWxA5ffFM~igX!AQHb-%1OI>U4Z!G&5{SqP4oR945+A*m7+iC&Qlh2=^TCZ*Fqu0$wC#0RskxPyw+|MaR-#k%2~NH}8AR--?b?1Ag>LC9Vr)sZ>j<@w>T6GF-hn6t;D%Y~mgA zvfm#mdb7^DqgP*k0Fj|yq4im!4;NB=Hs z24CRtrzV z`?3ptJouw`Um37<%blO=TC9Z%*rPcJ7sirU%b|}ISHFFd$fp(kc9xIQroZ$8<%UhR zD-3}u4f3N45BhlwpZCUcBn&j|$PXZX%qzM_^B^ zT)$si*<=Es5mEi{L!i*PjbN1#nrz|!(8zkTg4DxL%)+&K14i~QBufcY=x4!N`7VN zgELEx3*y7CJQ`oT6nBU`5gZeKm6(V__z~s^1%Royq|u`;e}k#cVSpw(!?q20lJKMX z+KZBX4W7gA>%CBx&rxexU>L-X=aQw@@iBDoJqQ{h0-zE16x&RW;{OGWZ2Vtnq;EmH z?6Z4v+OBxEnoRe=aiUE2iu{*22aefV-XdYyT}0-s-j0vOi~(s@_2S-~`a*&C2wNDl z@c@`wu71pjmlt8-NLoI~s;Z6`0T#qTG_Pe5PpvO>!%?fTj)N61`$OPNG@%+XY5~a{ zlFWZM$Uz4|T-+(hWJ9HUS5ArUQ?6NHqlWrN8%(Ewq%9odPq#12cI;9QR1jSl7uTmD zPoHquSGs6`H;DtJ_10(&TnGHX^dsW0?S5+X)iIs;?fk0N8qSHq1wyVcAZmoxxOu^& z{$hL*c+>?NwDH1U?PSvv@=eT`Sapb!S4Ri|YJ@cUc~@ak8;9Ld#rfnmd|?3@%R%ns ztN`)5ZE;a_*Iu<$0%U#(`uG$CIS*)f@ zILNyZphmcXOG%db=t-cLyY0(9O&>HyTPQ${eBt>wHR4iIdc7gLHLup;7o8FDQ+}CZ zci|S&vH=25e{olQa)}qC-X|kGtjQYJvaKGWL6J`67*jI@zZ>a67xNmSA)c?#O1xZJ z+H={RuH~R+5iX}MN!|07J5GM}9oj)5S?&wo&-{B-XrKok>^UU=VHjcGj@m&}z2&>) zFIhW}aQgS3^rUxe+a$(I)U7N5F7@^iC0?hUw`_+) z{7k{}tB6t|Cx52WHNTf%P-d83P6fAD7i8h^jjU&=uc|J#2H8zT;*;6YAhmZNW=fr? zULF@uE5>j6DV1WwzvS4=9Q#BFuEE7XZ8l==D;(!vw@js*7YGjvviZ1FancXvlrFu! zQ=akO`IP%z;!rUpDl^dT-DL1@8&3 z#$xe7>Da1i7Ts5Z4d1akj0PMrz*cLw_*h9`12hIp`QMSLfDN7c|0kIm_AfFO_y3Zq zDgjSv4}z7TQ8z9NuD1$#jNJ{5E8nXq_ z#6}6yrH^9#!MMPL(QVO4-A45j_}}b@kY?k5+3k_gHndC_g%A@LMne{3krfquZzx_* zlIZm0UsJ?nKa_X@OXZM;w)9^5v*y@PEOpTlqHnQK2iDYYM({8DR{=(Y`x^Uz7>o;& z*;5b@gTV``E;hT|plSi4kS4B`MS@ehixv9Y0_VO#)XOZoQ?9qeYd(GY(99!>+mDkl z{NX*&b`Yahkr1fNx9>|MxW*n{Ubr{A3o`Q(;|hxq%NiwlGQ^&U3$o2>)wcEx#E9Uz z#vQV{rxQa=Hx_Q5I0nZjo?o7CM$J?Zx=`r1@vZa}mh6W1bq(0zo%wkvzy^Vc5#Fz# zkURoJj0Z3u^W8!qVpvR8a!HPWB8Jr)5SW_M1NAqU>dFR+7#ysBfvIU!LX^r=MEy5d zply~5i&f+5KM|uJK_kW2LoQJ5NT?wd%o?_>dj%7EO?>beO4;=2KpqB|g#*3jSps&A4$-e*X9 zG`Em!^`m{o*dhnTt=fvmx5+g20S63+$WOZKUu zUSh{D!$)L)(!)!n*~eV+#hb>x2c~0R1U(7NQG&NP4VOk>f@wI5bD53w)WADJY9#r} z9g^}TXQxgCA?eNNqicQaWq73|By1b^Fp^jtzKhDr1(sB%%D-%2wMcH{P&*VR+ia)VSy!!1dmhUR-J#aN6GqBntO=gw&HL0K z=>?XF0T3}V`f5-dUDcP_LH?FI9t>BZa_z^#)k=R{OSHJ@R1a|TAlz6Ks*&Lsj9Hv^ zrvn1UD*n5_Te6Km|6|= zgK43Sf^1;Pw5Rc<{eRiO65uuHrss?-j$ja0Quk}jZ78%@A>exfF15mFf@%o$9y^)s zZ3YR~9C*ASq30*|4nU%AC?sIIrxw_G z{xe7K?Es(xd#9{opd++tCl|KhvQ-907iI_8z^-m&8gK-jOa&k3dIG#1wb`3Kp`^{? zP9+RdB{#3{?2?Xjsb!f}lk^)&hdcRNTF4-!KnzYG_?bUne2>SU%G^}9q z4b8i%^9hB>Sr^6APAb*%{9kVyICC&IdxY{ zYaKRnHaO4YNofEumD`-=#OtW}519JWAx+EL_yqt{)d4Wo*uu9C08;}2FcoKbQse<$ z`YXQbi8}zMO6AmQMGW62w~R1?z|{9y#ih$HwV#cfn2|M~^BPyRv9sRhZo>cCMl^i* zu*uYvw-c`X*#5r-q@a?9o_W%o2aqsOiT<0ChOmpNsfnYWu(h3$mAHYCv)z9*0jD&f zcnXqV{IHS#$9F~@c*7XL`uhz-F~J-=Lr}HN!C!?$5`Wp61I}8xp=?5*SRc=8z|9n4 zedR{y#A``_`Wldq@)_Y9!9u1O(=371@WHM>4F3$6ADW#qR`yrp zcXN^)PN1C>o6X+;TvQIYFGRqGVgfM*XaM&`%5Rc6NwD%Oc~h`XQD6Y>vpZ-2ZfAD| z>QBNT6fFN}!b5~4v~Vow?uI=*B^+-BTALTgll_!j2CU5|RDB@scUD&Zj5JW{1l4*X z4Xn-k^;lCEfE*Pn3PokSx1I?cL-(nJz=TGwFNLTs|YaUi=1iJ|Xbg=Byfc zyUtMed_AC2e1&=%9*rNzNf4<_ZRP3j@Voa2AS7{^9)2(eyN40i@k?ykGO@uAC55$v zZGAU}EnhmOos=t9rVp-;B%Vl@8E$6EMOY|50ss)B%15Xb-+-o=_Gf~DL0Jm`FvX?d zf7cHTtl&zYx9@tGUd}s{;=KQNO(NATL$win*Px+wc#g%ws4r=}ZUoDQ$29s_@r4w3 zYY2R}&ZYW$^yjabspI;F%pDn?%{;F*k8fM`x>hpp^CH*Pdh>f`6&p|Rj(+Ux7zJ*& zrqWL~10Dyxf+rUr^Bu~4hIey`{gPVE0cU2SXM*xw7Cswlcc*`qB%};@ z!*`c|rv6our~&s7XFHa+R#UJSOw#=3D#H&NSYcj`tRA_;`ZKU{*nc_;ofEcC{x6NF zMxRg`GGx;)7%K}E{N~!$B(?Yyk#zEockl+bRo zG`+U&!9Czh=}?uFp61cpoJ_`-u`~*9NR1={IcM47Ed=+PWJQwfQ7aNIkLZh0ww*ug zhV!*#8Uj11SgPx_N~jJGr);nM0vSP^BQzxeQ|U@;ot!W!++;g1EE zY0bve?CJ3L;QZ~=3#^58|V)%fe<=KE`Q&N$<*lzvnyTgVJ z>+HC%v3fP%B#}(D zuto|AGe{qE$VBfhjg>eE|sZps4%u7_*sQ{ z0=FNp*6HT1d@E~Dz1f;K=hyx2^tdT*O!W_W`c4g!pPfa(*O*gzllImnrv^qs`oZ(_ zcK|&_QOFUOW8OHvVt!U)zD?r2|Ly{1kN2VG?93xCw^NFBT1rghnQMmv@P4jfAYI3= zSMzghonA_6s^eX=)Ymon%doi5V}I+fgB|ND(J%CRwff{n{3Q9(dzNFP^Sd|QEgzoL z`GUF8{nK!=Bhe+V>B_J(PW=ny|2#Ha0#U$T#2K#?hyoVCDTD7nK4ttJ1w>pN9ZhVV z|0II{qyk}^>i;JLq;mTG;|sD>EdD@!Z3DYNf`{f@3==!(voO+(Cmp)URM<6C2l$T< zpE0@eZloROmkW(`rab?CzgJfwAew9b z78yC`Vq}hs{s#a-X4zzNB0~3|#Vdb{T{2asR*rbs7x?TAfkp<8ENjc)`6~(!_?Nx!uxK?(cmHaMqDb-4FrHl*v5YGcNm#iEo3WFdhY)| z$eob>=+6!jqV$s-p&;<136~;0MFGaF#DqNMsC2UK`+RT%fF($wAnYMiF@6q~wRo5% zQRMtUa<5Rmf&FE@Zt^!i*_;%FDsIlG@EzJZ_l?>2GZf|#a4O;j2BK%Cpt5)rrfZL@43?Oq^6Ll;ZJ~lv<)wJ^-@P;_@vx|YWSt2KiyE+LkwI_B zt?O4iNrU~W0$5bvnQ}!=z&=T^QeQ0y7#-(HBF&j=J{$1=8|2-Qx86gv4_%i}>uh^1XQJC>!SFC@L`U1sg`Tf%MGkN^6e1`JR7(Ws|Vso62 z1^6thbOQ_PopR)*gQd}LJYlj{X3O`fCkhVdEk;3fM|7BvJ?r~+Z_)QnDT)ByaV>US z8L^1{mRLW_I)|>lZw2xz46i!2^dMwWs_<6-g+UlCkyZ%3C6>En4W%-~iN}lMZ!_T4 zz=fHl&}k)Hkv8bVm9y5~IO-!GJ+*yHt`j0|b`8iOeq+h1vlmJmE_m&z-I4%)+r}E6 zUY>&8F^0ldh0AjnYom~M3inpS)}f7~=ea^F9La|4ZcW{7W-|!SR~9LH46;Q1v$3?# zTQl*tTl&(`Yx6DknXUwxDOCQ044c+demkX2uYRiVv-vqRkVCxbV2ekCE%}QOepD;9 z>FE$^!w}Lkzbp2kzf+f#TjgON`FR-*T)p1CA2f=+!juulWqoE>Jr8 zD4G^U;-{8KF&+sXE_X|@B#f#iY_R6zc!G7vO)pWL3Y~%7c-y)H;!BLgaKBBCh}Tb& z3wEp4xzzZJ9a3(5jwYXNKiE6EJKx;Mw2%qh{|qGXhc57f8hHO0Dz>>=8_+k3ZKUd* zOoV+V{i*0P?L>cC4i}e(@O@lX1QlIJSD*}k zIx$&NM;h4Wd$>0KTOD4x*NZRfbJ(6+FnXCX4eJ8#5wUst zh|_~t-o*odNxLpw(r-Pmq*X9kKV(OI+NzYG?d4wQ4{!VV+JXN<@e&&BCtnQzm@#`_ zeh-NmWoxs3+Ri)2Lq~h_%hpaxJbx>)zJ+`X`%aQYy#@S7Ugk2Ybw=lit_|I(ls%d_ zlvVTdV&aLwMZ%Nqx)^lgF{|6q^G9N>r7`&Y1uH$AnK8n7<}TTfcOSF~eF#Tp9`g&M z~r4kq41(e}&4HLqK=oG(+} z2zvs5@%YeIWG)7cV8Eu%HQ@e&t$xjLOgLfT)q-A7Ok9 zA&pEb)U|X{eoQPxEW1o`gLyUSjse^i;vFmXojMl+ceL%}P@}s}PAjYcJ~~)jT&!B# zO5wBmO7sLww-#XAet5fu0X!u*<}Ro~=s+L1Xo7wC#A<^0LRhDdW01)T^}0IrIkGYang#Xjm8*P&QhLjE`=NJ?73Cd6^&veZAyqcKY@(mjrAqL(o&;3DJ+k_!LJ@6j z6-@-Q$;|!8D1E{e|F~x6ubpiNrlGI=f#_UI5G?ms=n<9kKST*lzhv!V3xKgbVPLB1 z3iU@lBk*65$S@SSDbYXhbW3M~J1D6xfxR6wAc&M-Ln5!MU-~huC8$+R()-?xW8~(N z3)9MicH`q;If1Q!V}8)OVr&TkzP%6p6vZQy%U|xJIU38UhOw_~>96Khrc@*Q2-Q+tfg_OWjYqRdEF~Q!3LhJb@b)CrS3Z`+>*Vp_{7YJnh!M}Qp z+thIDxX~sc3+;{mVvXw!}ZH(3UGGVp}%$`vR!Qap7r$vaYlg(D~9zEfI;Oe znokukdL)ySS6gF#K9RIH1TIRbf2*&+cd!$3-*Y->h(caxdlBHZ-|j(mrKgSDFd1Yq z`OAk%D|A(oht!XS1@)*rJTuiJ8y)zOYRgmP6gc3KdxR-io6CG(Gwg zeTjNKZQ{LzJ+=?yY!)@5nrn0+985puoVbFuhLfevG4#V1UDUga*<^wfz*P0EwK6%< zJT{Ik9_DM_-c#7bmQ@AZ?g^F zM>7u^jg>0{QM%)RB+fZW#Gl>%%cM`24IwiZ^uGnQmkRvA|c zT3}q)2Won$MiH!d=Jl*o;yCNe`2yR{XC4P{kW<@s)VnGyZ^S2CTv1MR7krOS`YKun zSrnwBiq;}(<#%!zJ`5_yZ;gO4zWADmhlE_|IoPDLlm@gHB8=@4Cy+9!ns420>C;wF zQVp(RvC)GJ4$mgoojYsw9p&6FX)MCvWr3sg9K6MzTj8U1 zvT9KK6BD4mY%7`(${;_GMv%$Nu5h0ebXU+uF(W8X>-Q7+pVt74RfQ$JHOVt7TA$-j6sv2Em5i^O@`=Dgd=kBtWK z6wSPv=5zx{dU4j>gxO-`vcXLk?o*QSUmYL#$$BrUR+}E$ZNX(f^09k)iU2yQKH0^y z)JX5v>Y*RICw$z&P|~Y{^F!k`G*6o!{Zok=$jpj(-9KLcK!oOm;W4ICJHmIXXGa?8nFq{0*W z^6OF<$_np?)I_-6EL)$1M#|g_nv6}?Q#;~3l9>Z4s;M_wQbQ=Qq&n93T2l!s`TUdl z=zUogY+n4A7&sn@OQp=RD;4tbwMuAl-sYez?Gr;el3;y*nzRKG> z%iH`U0r}^r`w8#pQgnawrV+F}4JOiIIPsgdkBW4&^wP}rb@)lO_)%pX0p*A9Hq4>$ z>n4h+mS6FLw{F>DLi}wY0y_QLwzS`IM3&RE94UzDd@L$WQP}o=hgn_vB*?)XNp@3`%^_2%`NYY`3-krU-LQscZbW?3_ zn(gIQ$b)5Lfx2oj^Q>%xk*@Vf@rrpQSJeGb6?>3ofTKR3AIT8@j#2veZdF-%dHU+vmmW0%N`-u4xl z@Y4V`s-2)HyK-sI0Wcfr&r0LMkcxdluG)n=XlQU|Bo_MMrh`)B2?~KZSA`jpij~H> zV|6d0l&l_>sPA+zQ2d58&J%=zMYD4}NS?R)g+#-nJ=pLZbJ=KaAnoPTB%nzBYtP+N zxiNnorNF1671(DLkb#KZQVmBb$chU|KzaWO;voMQ2P=-4bD~->z4#X|F3^GD>{y@| zI4~4n1n4MY6%9A;GBCGEOb*go$%rqiCAHIK(g&iu{!6cI0Dikpw@B z6}75ifLoHg1(CXN>T^$f3n44ohJwOg1-5`*Y znsMF0r=|v#XWg~%yy`px#>>v-%zI1xKD*CS_X7zY%gJ+bQyu+**n8gR616b_wO)&a z_!)`b2Na(gS6f%p?6N{RNLUcGJIt zM1i2LybKSz;l>8u4i+ zBF>tiitiKC*q~*zJ>!raMy0q@^6#pL*EI2uUg8P0wB|m8lR5iwd*zcsxTW^tj$@S_ zJA-tOmC^gI-&CLMe6*<_qouY-Retv6S0xBtmVZI<{SLeSIKevxQ?@=an=CWWtZtDP z`TI2{@tKCM!>>j@ zV=yYT69-?>NoG|_lgB<{iBJf{yx4m3fevr}R)FWEX2HoOm(DgYwp?}mv}+!JUGIPz zFp?J0=Zmd9<*dg~lJHxyWc_UIA@8CkiVf-QsR5Q+8u)^*8NvylD~VH)8{~U+kyz{| zoD&##b4}A-7C#I#UFjM0d{n)}fobVff#{FR#)f)|a9M=V3Cze3YZbpY}$pgJs~S z=|Lr6-1a^jBj7tlqQ2wi=j2WT8MjGoQ8@egUfz$5ssQE5G6vA9huzFI`*H(uQ|XN& zXE15!Z#aL?#~X+8XuTh0x#5VKR?{l{o~vIs504nPjht$4KCjudIxH(+%$4(ERKl8x zM>O=PQ5=3jGFu1E7<8aB#`ovImSnhd61Gz-kPdTq6rSC~8(8%iFfy9DNQL9doB?#0 zw?vt};HLCshv)15e5kW5vFPel$+tr|CJnvj{`5ut!L+xqb6Xa?cL*yGkhbK%6ls`? zUtlz<+#&xxb+$22X@G7!Lud~#`bIAFxDlrjN@gMAIAqZ?ZPzlto;?IE=2zm$b@^&V z%9T%uEvY02`8+^$+J(F*PR{CeQRggRy_!+nQoCw>(W!&^vHr`#fZ%cIe#E-FPxDkzuZi8JKTRzr&@HamO^k;@xgxO3y+ie(EZ6eW%tciXmx~@>;)AOp zj5+gf=Mv~keWvSG#JET=oMb+O*A`!MR-o$%v6|09}t;FkNaP~c2MJSmuVppK1Q}nOFs|~@Vn}Qecg=gJaZ7ZmtTBGY^k*^ zVnfXG;SG~5_B&CVk-OIl zjsH$S!3TZ!Cw0__-u&bH=bq7s_4DLy7EZx74yub&rq*6NBVB0mVB^m3aeSHVqxQcBPKMotMBFdk+`Di7EFYN zjAGkhv20!iK5k-@ACc0AMs;%-|IntGO@#z1KGzw-g8>)e%S6&jBBZ)1_`zGyL4%j5 znep2<<+)p<$;P5jVwIbF#I9vVX58$1oSdpk^xefuRjT-7hlMYE`Rh8S`uy38mmxp< zzn2n%R?M8K9x7iU3>4nuO9(94qy3Pb72AVN*T3$vFvY2> z9#F^aFJ^@m-SxYleu$kbfP2ecw7%)l1y?tD!|rs3yNUORz9mx=E7~A{Ku_}Qj1x{R z&J95e95kdq`-lLdO8)1h96)JBHVxkJRh0T1XX6c7XYV@2Ktells@~U8I!fS8LJa&d z+n5QajhQm*5~DC{mN0q#jY!-o2unvaX;~R<2=t(W7jUq*c2sjkIL)V>AC0@e>dg4xSAI7QC4&gwDS=E z_tV`l2F_EE0+~iN$t`5QB;_znh%T@u{wvDFQw@`je53nFPOTyngr+F`wSoz$4{{uL ziLH64U4_O-G##|`i)ux3b93D?PlSSYACTNdI~KP%M=XH*g-m|{Jyt(H9}N}H*JCw$ zSN!{~5BPF33>7m$=q|neWW`?MrmeMYLsvJyyN>yLZbwocY4j4`K81Uw9`m+_vv+5u zudrb>%5NWv#yclUc*$2ro;qH1rf^bqDG-O;>)u%fH&`ft{ah2(+$G3sOz>!P=;IFc zN<`#-u?8#g7BSyl(zIy$_HAPuSamNS!Vv}n3+?uSjh-6wW^Zxbwm#&y4H)|p zh+pq3)w+1J{Dsrm;mEENQJ=8XX*H4Ny!D&movLS7fQJcB-FHYZ_Z;1^jMcxSHGek- z_~w6v^nPl{B{FkB(WDWciAP0>nlFD@yLM}^>#AV0>ML7!V5|*-ah3J)8>)XmJ>N_9 zgoxcocWJggtH2hs`TcB%(`0kFM`83u>yCi7IKR(r^oUzBabMINIAA2dk6?yL1r8Wz z4cz0|xl7q-1qM2#Iytc3-5&$T?I-V1(a?E4ze9}=l?(V;tzT`y8*l5n;Z10B+A%!e z#Katbt(eb)(LxIOj1>|_X)9Yu(Gx~@5#3a{NQ(H2eUsnlbBnPH8lR}B|iR$frHY{FTeUU%;GQ_)eDGsqAxknedcu&nWj7^yjo_rWd~9f^+Qz<+X>2I5ES6qaUQr1f0Lak-1C#KQQF&5ibKB=;GBV+50>yj z78NFnmxI~z<*l(bxG{B{*UJ%ce{$zIRu0BP zR8`1}CU@(2woM!$d&shA`=W)L05uea6eF7@K$EievkKbb%@N&5tXx39*kcfLv85&! zyZSY+;l0^D(VHluhT)o|2u!bR$raj_Y~YooZI>?dW@KA}YV;ck(!H4kZfh zc0S7%!MQ`4@iW$EuP9I%80FZdf*TqMKbV5|^51T}k?&rJvCzJ4(S4o2s(pvOGOCT{ zI831@b9PA~Vw7!cp7<$bV0Z5sR>*TA?C=Tke^SF0 z@N7Z6{rSZTNDYxdYGD13Zy92?&W;{>;uhBbk*{jP+TC7kiuLP+n{LcDO@CR4eBF20oTM^T$0a=E;zd5U)f&Sd{Ng2jh=?a(@I4X z(%5QhgV8i{W($lVn9Z%e+)6$6iFE(jUq4buY_mm$1&wqp)fn=X5o!>(9)AHnRwUt< z!1OyvhE!g>N0C>7Po)e-BiFeUUE8Q_WHwxl$u*LxkJcV!5&&K*#ymi{#WxUcQLItb z^z{_`3HfXAZHxcBwduHKW2{l}`OC8xrG`$d@6jvl|7>&!0UI54e{XcO9sjk_@ftQ? zZ}i-9b6+rvE+qN~x1bb8%so+0+0DEp*-`G>zW0jYTyFel88S@*$A$J%2Q&nx2k@NC z|Kd4gP(VEAc_P4bQUN???mQ!p#sf1j1ZI`}*g~-_iM3C5IPUyus_CC)NWChd>Xd(9 zFoK?$&ff#Zs?71Ae;KRX1h+j(wwF5f34SzSpi1yj+ED7qssytNDpi?tM(;P5ydjKG zDu#1@Zka@x^9#I}2F-Jz6Dkztb8F2H$UG5WcC!ju>9K}8OdsaID#+dGQ?9=B=FtE! zXRS{B%ZBh^&M7r)=M{Wl)pF)BUl6N!s^k~#HDv#Fb_2K(6y_5uW?@yY2uTg;iqF%a zAul$sf_ql@nFQRVLY%~N^1miF@Y2hV$W^J)e!D@fw1J-zUaZiqX|};{rrzt3>`Pe& z_S_}+AQ*J%> zVy-S0Bd7-=A}1r#U8qWy)bz5$qROK&V2l)~H-O$7^1?y=NAJU$TKZbIt*go!@!;0f zdkcRi`I{WY>*bWx1^jmo7mX zqy_2jknRTQZjkQoE=d9DknU~}5RsDZ?(S}Z_kM7#efB!P^I`Az)BPVj^LpkS*BHJc zFSiXIcdf196o#6>8c37OX=9$lvdiBsQjjESu0Ng{A7e#-MyOhNuvm5oH~B>p#Xxrj z6%#o6D=obN2y95S?ITC;i(hqlP^#Mg=K_g5X(sTsQdCA`UUL}{KoUHL0_d&Q)4Z*V?VAALa7 zO=0~}oQj_R_RYDw!db!SyeaV<>Eh0BKjY%4m{rVSrdUU@sYcP2ei z=>iYcptt>&eXnB3?eiojQ-$#DwFH{-b2g)1J$+h)M?C1?!+kfgFPEJ>@1mKf`bJet1=#(BqLDjC8A+< z-pb#5ePDp9G%z^GX6!YM3#>#e0rcagFwg?^bhm8$0)egu(2rNZY|u~Ov0MeBA4vf5 zHM?<2nT>5giiJg>KRfETo8g3BS5Kth_{RkJ(xaSq@h_b&n-f{Ilu`h0VC#sJogn5* zJ+N-!^`0-7p7{ZS8|J|#7aHZYoNqya^q*hr#dI)SPsTKAhhHo4HN31uNHtcZ8NEF# zfeWU{X&y7QKEv#X$?4T##ZbPNj#0}X?N9j_@(4H34$R%nRuIEXrdIb(Lcps9q*U)q zM5EQXFW5Ck&H$WchT8_98=9l8fR#(tPg~yeKeU!833DPe?1{I~k?>HX3JW^%Xn5rW zwfYCco8R7JYgD3&A4UT5YuFf8_=Q!oV=!?_AvZqUnY6J!bDOG+dyMnD3FU}}HI3ME zZ0DQ?ggxxWovTv*GVDv?XfLu^trf&;MU)nh1*!zW96qW;Epl3AvIIdJea841WV*Jf z_P!kwcwJ=)c~|D<%ru9 zGsCHFR`GB$$f+N1#S*{an-TMms7k79dAt74kKTE;94z`9;XSwvO)-T#di>1k(?6K* zq7OETtA7I<5%)hLAVC`ue8vfz8fx*r(mfGZoJ)BW3ml@wJWxm_NRlg7AI*-LSy*X? z5QngnacsZ}hdk@e&CFEsadnwLm{^Pt1Y2|y$ZM;DQD}$fn=+t7m+RzwRiQ%AWMJZg zK-su1U^G)f43rfme&`6!BT1m=1|BOGVr3iAFe{JGAKs3$tg98I>=Z9Pk_2sX(8tW* zI@7f^Gqj=zQE&td(9|8O3>#HI4-sU)cDr%?=bG@ z`Q^N?w{QB#7j*7#umk5l)~xH>I)QlonK=G&m)u!hQn_)MA(y~<4$5OYMl*BT+Rq{c zl5=PE-bwA^&z!5eySi&3akK-`m^5mcN=;~$gckK1wb>ypw}$f zIZ$BNE-6^IH*Biudii$LS{?)NI8Yu5EK3q4iI@TMC-5)zejxdiDqAQlJ3Y<2cP>kB z-UITdK0yA|J?J)=-YY^F(PQxgdjCayeecofyHk70j?I`hG^jDK`J)zBTwEL=7v4V3 z{zWd}RZziiLj4=L;Ii-+xqw=0-g{eoy_Gk;0g9d9>7#^#V&_csBiw(*&c$J>TdYB` zb2G_HIj(9F#C{}ZRL0{s_qBCBP9^-ww++L2+o0IFU5R^;0Ckg6;=3&&At{3>C?x0a zgT{O2AabGo5+D~)|Bwp_FXTetzmp4o`V7!z>;fs!0QQLcm;C9y9t?J}&paT1LS6#L z+{s3Byx{KK*c~UE2@rofnO;|(Kr)3j4p!cllZ~xZSp?}Fq0|97`jt_V`M-Ph1k=3Q ze8r|vQ1E_-S9(CiYmi0Rw9Y3v23e{#yY}T7a6cFqWy1+lrTy0Z* zn^O01+w}kd$4FDgDOkUZ`#SFDp*?h`4)0d(3sKCj$|m8*a*D+Q?Um0H%{}v&C5BuQ zEK&ZfuwM`^*$J{dilg_n&fC9a1+^-^$Agdfa_#gt;TU~J1!$}vJfj!6zc&N}grk`& z`JnSlWa~v^9b@?XDZrb0>)c##rc4CTSVwfjdB&V5WV4Gz08)mN#8nX|BPsz4K+1rv zJh*`M>l?)_hBu??3%Wq^2VD?WI8+1Bh3-G-f`eM3$09HT^l4Qz0O$f}29O)kTuIld zYbThF7eiKSVEwd&KBEJSrT;=4uhpP^>~e~X7CJ)gds$ycU$8qU^@e8G)$OUSYjChJ zIR<2p@gPat7=qIR?1G`ClU@f&a7SpXzsfu<{U3HAd*%`K0`&`*e(w0?Sck9e#G%}GC|B^nN_ z6ggIWr9JpYQHVJ~{%QrMrjrSYeXd;*ut&tq<&si=N)X|A*AF5bhh4nwoa9}6LS=0J z9s+ih7ULw`UR@X~0qg>>7-@6%L7TDd9b@+@F#|bFm+oqX(XNb%f0D5sz%FF&Ft|E= zB&Q{$h?jl;wVV=qCQ?Y=_UZ|ryRKE#hK|D=C~2{EWsrt)!&y zByQy3tIFp_;)DLDPJ5~+rQwFWKw3DDIxbYqSq^Gh=6oMSoX_k<^J3h;Cm;y*<5LQq zw%*Pe-=GX7rz#_@x0a7}V$eZodR6jtu7;-~(raLRGLrIiXu@X_^O!f9rQ6OAUCdj{ zz<0UI&(=vsLg3e8o$+auAa@*)?-j)NOg*pi+1x)?{dz!P#CdM+mNuEDTFZzd5|M1Q z(;qCm+$6VAwS^zg^ifQ<#y3EAIZaQT+LIY_TNWczW6`x5?{+~vB+zX4bETJa`sS7z zVO+~%IAkQz6ag(W!uf2(Tn7dEM99-RSz-7#{e(#EI4fYUHeY91lJqFsa-qBi0_;S+X#J?Ix0`5fJ=b>p|$f8I?sfQ-2-9o zBmii9(EH~+P+CGX8w|_?LBKrlpBKUZTmrnz1OKUbAy&WhWfC~b?D)rbNaF+$FQ7ep zy&K}L;~6I(Lv-;NU3q0qG(YGkgi$;kb?f%hb+up*gqXFkZ{l>A+$AhJQ0tte1p}F#*dkCRpk04CZxCl z_4H$%hMiU6o4a0jt@O1ZlCE5fSJ0(&CF$e54=%lF>=wnuf<3Cu2dq?)$z(|YH8+q) z(;JYO8$`m|PHBsq)zgQ9u-xaxle<8g$WW}VLl<#~QDsoX@}GUZrUFP5s8wbH(N4bp zb247xYZY>H{?#Y#G#;LSo~D~q0$ z(JiK{dDYo(t)v@nhn5-j0TLDZ*Bb3iu^)X)bJ`?(O(`a-AFsdJZkevpeHj<~WoW{? z66?wGBiB!<(%LJ!;uLU4)7-qSDmMV!(F@s37d!$}i2Z2r>ygy^9}aDSwa9#Jo}<0{ zFD0k5#_ey6OwV~=wjO38PBIYE!)$n#VCgQ{C61U}1I*%%0wqPGsDsNu(_2peRTzjq&^=Uj94zBrf+? ztTQ-5?eZ3M{VN)yIvKx?9g&QD zN+He^C-i&?S~wnv%iaVX zjrhI;@}DySb0C3N6fhI`05idVjuZTu2_zjw%pFWXrUdu@WW#}cX!KN@Wa~WwJNsQtp>5?xN z;J4%Tv^{wD=INo*w~?PWBwa>;nmi|Zs_FnpYhr^(h!N0?bf?(w4D zH~f$8are6TTUcHCoZ5c69!+kIeFaCfY=;jW$4$RnQ-6b_#eZ&XRP#dAv`nU z)RKUNx1P?E%7-}LjrPfV$G)8KlrE*dHs~lowUYv7Ae_@HV{j~_@aDc6DmV)>n>1Pa zQ6MCN=B-eSpj=7-o!q8>3tC|#BUCumIsACsCmN9)>l!=Z7&TcLxY1F6X6iZq0Ru4g_N=)o=Uj;XyTvsoAbEocqKQ_NDG!i6uY^2t?S4s@=k7Fhl7R1 zH7I+HWFhs(AeufkyztMN{dR9*DPIN~>csA?1?*htTSYSk*8QhQgNWr1N+5p%Bp(gUGDhSBElFAsY&ucw zZ@ZQ}8{gl&XPlsNrp6Dq4>0rC=@aTH=6lKzZNZgV$E+Kx+-7_jVb0K6tnp0iF+{%5Y0w z28Be|6G>-HQ=q}U@Y3MU)tZrAlW3zBUW;%88r)i-2KOmv1Z==B{g(!JdBAoBNe_a- z^344=D~M>R9jo)-{=Xt+LbIYV88ID!a;D#_XK;`_!KQGrj#EFM<4R2Kr6K|8KNS@Z z{-+}GyUKY?-4qGL9MUKh{}?uZ7Mm_5@E?{0jEz+llCvR_j<7N$sGYWe2j?$2nRkD}3 z9MnFSk~+!y#XkndH`ta{bNwWIy-EMQX%o6iCWTN9`gLP_q{dy_d66F*RR)T~ z*MSQGPp_uk4cL!mhO@SqrinmD0_?R{sE(uOPGZZ!_z2|CmlfD?)Y-MU#jVlp-aT5* zlC-A}IYtBrKHtqRKfKQqbtM?#z-r|n);Xs?#S5i-4nnklu>AChK!0aO)cxL<8JZo} za_}JlR$bxwcgorzc2pm-c9u-!9)DykD~b==I*h^uG)XRLt9JeqSq9Ja#usGn73}gY z@Zx8uQA26S#5R|&_cj-zj!Abp8s_b0?LWMLZHJ$HMY51$wd;Ooso=CM@w&W0G&WxQ z%@CYhQndJ98Tw{NXo%%foueL62Izio8aYITOAT4Aq_FOgiOdVsTcrBOhEFuvb&Qq2 z5z*3Tgqi-VL=@8vvbpttL=Nz5EWAtvET8}R{Xay|d=9o8ud7Jp9Bd~Km&^=u zOH_hk9>5%pJQq`#f_%P7ujKw)JOUp-ZV~V_^6Xgp?0_bNixJ;?{v}wx6#v-BP=Z{8 zX(Wj30bVS*_kcK|KBlM8#37Q%?m(=_#I${wZE?ldU9oPCH?i6Jcii?Nu zzK=7bW?jHdjallle*)jSL=Ed(BTViuOt=gt#xPwYY7=N5A ze_qo$`@NxJb#7P^AAvtl3Bn%n-h)>cK7xLoewg>U-GmYLb77G~ z%w;DL1!G_%I>|p=tYq>E-#pwru;{5W{Z4J2T+ujb=)MOnL2g%kz?=}oHAl?jDoUtu z-Md}SdtXA-AFAqux~#d+BL{3jcKy8t=^V-MuPsP+CeRk-#s6$UrYngOd|IMKxGqj8 zE%eT)MFW->=&;`%iuecx&!f<-f4pkb3P2yTE&wZTlsRqvYB<*LVH>j3vJs?q^1`>6cor|(IP4V!lSuZ7;(exGN~F(A2W;ol{AJ{5k$*b#$`Aw zq1VbXvZfZ=^vlxvk!`#cu!=ff;K)0@Nm$m;V7X8X`gKaC;Lf@C6gd`NqEj^%1Uw}? zj}>TS15XLMF%+Di)w3$T4UfcRWRAzaJS8Yc$n>0Dk9*)~MnGr=|_!sfnQ?B8Kofm8sXu zXO-K}VBGR3^3F-JnR{hiN)si=zpEzX-!zCSN1S}2ASkQv_ls}N;T*0j>@8I=&MOoO z@ixwk>9gM7*t1vDqn{5h&OS8~cifnXHV$a~?POKAU*6ppPlVlag4uKx&4ho)`i*8i zB?f71{AM=M!64o>bAi*QxsdZBsDyk@?>jls(8;?myeW`rGMHGb$DXs)paNzJ+e-m6 z^(Rok1TGBlV0U|+LdG{Hlx&@z6C#zgQe$TD*-{@OafhUG#V(-5qALAz4>D-e*itb~ zqmrDOC1mgQIC%#!4^Wmy`f$Eo2BS+)EXV;a?{0E zSobZ(F>jZiA^v$^fJug%?+Hu<2*5<}--3ky>GJ_x{^rX#@V~!9I7c=MV&^x|ecZHf zzBYUgn+y%?smuFba5P;s@#eE3zUCr4jRUFmAC1!0F^D7d!5;kMH{ z1?rl(S6H}-O8K8JR<0jfzf*u(QdLH*gDrw@otk@p*aJ90(KXPL0&oJLCG`gZ)K$w77^o!$)6s1;&-A4E;HBv3hN93N!uRIqR(8M# z=g5JJVRw`V<<70U&w^z(S`p$+;Pzv+;hbTn9wBRQO zpe2<*fJeKV2UB|W`D3RSygjHTB?q*m-e)~v|7l4fFY*1s2~2Upnz3H|N!IxbRHZ04 z?|U$jdYK5YalRVbmnef*a3lev07ddh)2T5y&l;);Pf2e1FZGaTVq_VDx^20 zS26g<{wZD$!J=wbW+Wz#!T0g#1cA6buM9MzPV?2?dRd=Xg|SEk#_ZK5qW=a@n1YPl zf{#z$KyjBRhug-guJO}}n2~3M@Gm|myqP$}PaiB&hqpsr37kqx2!30l;Y8s5QZ>0&rXwH~B|g|Dd7uqm zt58|_?%J7ILmtY#X70y!b+|G2{j<5y98NXFw?HJjp!M?eiemc4{dGLm)iw0DR`qc(`D5U}~^mg5TL^X&^==z~29t~=}$D2QF6*7kIBCDv6;)P^@1-;U(k zaOu5-KBC2{-Ug@5ZfHYfP}Oo=iRN`8rqJ8)jMGB^Dn+&a@I=DD9~*bj3fEjxZkK@! zLA#iwX!e4Z?&pLXtrEN0dZlY{vbI$aV{xLrUrh=>*Vk*#4MeBS(~2e5LII9R3Ybh*$SlU5W&J@yhQ~ z;OZ2LB64nyr_y8{fWx0x{UQCK(CMI^9y(lARH=z4)snskO9!=V1W+Id0}6ymHyz2i zNjC2^6odVlk*N2TpZsbEanks_zA6&O6XzSby@-;GcO7rAzWjhHIEgs~REkGEUND9T zmi_1K)*Dea7|04BmEu%M$WYjiU&TjJDTEZ+<@znubbe2Q?2bQi_#i=rDCjU>gE91~ zA^jl&MBwZvw5>dF@T4=SX;@R(o|oAdu^}6$Y1!V2=&&Nc6tNowprDn}x!{Pm+$plmS_gVUst z3b%FW%HRdKOX^!f=jg+XIQ3!sp25x`R#zxJ7Gqz#O}Fl#2P~KyjCCnrQyulM zIrO~Q*Fe6~+9q;{Z*g^)ol*;QF%Y2q4Kt?wfJ%}wK*vu21Il3YxN?ruRe&eB9`M*Y@{v z5ErdX0UnD{ke9?$-n1kL=S2}S9c022Ay^w+u%EW+Aw_G)1;)Gr{MXS}IRTJ>{L{zo z@O7$3I>pcJ&AsSf$i9a&+$q);h6ha3D~y(4K$jQ3p#cw5ZKXxj#O%^{eErMUOJaQF zm$k&lqr;ZG!(Tb;OS(P=BKWdC)|2k|1537&5q(R1pKG<>+wafGtf3cs@dbqF!1;HZ-(I8|1bm) zDRYsKk#LeOxkHB{km%*tPM>gF{g&&N+K<_T7Fu1KZ<>%PmR>EJyH_aY2RL^|7bK7tLfDSoaFG8kaa z`ofZje$m;}s6x)W0oW9O6q}+#6tBr~XDT|vQw6icva*8L#^+bYD+E?u=O;-kW*UE{ zuX&QAVD$#v2fP@uUR3I5t$_RB5^x{1Qt8+8{i6Mz1jjK;gl-FRAKZ`g_x|NRcu>v^ z)*L=0eBh3yd9f;|%C)2e+^=7O?zkPsgn|P2d#pk^%v}$beBvtKkU8c5StnSii82A! z34XFl0&OUai=qYL=iG|ZPC35Eo*ZfRDutRh(#QVbXn_@;2z?dV(_lRmuPqy-pHzAM zy@R>~&`)slg2G{hEWvEAQ(Q4@(2ybF_;8qCi)1r;27cDKuP{C_eG~BWhxD8;%X zQOAfP-!cNr1xUbh!L{hmZwHr?GNWp_kq3!rtaoT=SJNSv#9sDboYLRwn_4GOeJUCx5kv`}vt?9y3wC9s!Hw#l_Pc$sC zvu{Z_EGw|eL$S1~Z{>>%bUqDHfr3xn6Pd*y!V$7$w*f5@7Jv3jgu4EAnZ7eTxk4d; z8KgxjPG=)XaF;)Yzt^YZor0-2+?2$;j*zbs%$beco-FuyHH2PEa<;`l=L`+nFL)>} zc-b#Fyc&sq&;O0LbjJ2Np8mBOyOaM>^vTFVx$cW!82|}JTmSf#9hQ89><1dIqb~^0 zbh$(Aog$ay)>XOd87};?yGf!XZS=sYFk!(VEP>y3z>8E8`pm3`l?jKrCY`-*H~9oT zfi~r_nsa|S=KDOAH|LI3G@pUPVpjwBm2b=S2tjUUxesN@8c0>`_8@`i%e= z0&&(!pbLSKJHmeUEa~f`Tq21iNTiLh^q-LrqCC8vTu})r&hOE7P2Z#twBpABdgV-l zRFX^13p<|!f78_JT7V>IrD8ig)=nq%;_J)^4{BtTz7~T&l66H~rppX8>pR zwh+{r)_dtpGXQL1OB#nKfD+Kqloq)^AJ#223yvWFg6Tp-w3W}EsUkOsHx zZiKL%mI3KSaC}GrY#1EH6K^3zm%H4k#Jy}7Ol9>K^n?z06wj==We?J_0! z{?$Qf`Fk(&(hzDUpfkPGy}QKiJw0det9RS@=vAluZjZAgBdIQC_NfRfi)I;8JBfxK zpnir4kn(+bBH-E@lobww^>^1hxTt~WoJ+6i@4};IW5&_YOdL`Exi?4#N&oGIEo|0u z0N6r#2Y@Z4s8R&j!h&TB@iVX&wvcb5ifzm-8uuI5^j(z5HdF@squ}&G*B;+HF8b^b z(4TzQKLcI@?JK%f1W~vc@q-fla%kCUAs&Q^tDN^1xv>MH`nv76Hf_m7jv~^M9$b=S zKk-%&&+>me0V6?n$*1Oiqw`y1-R|<1KDKaqmz!v5NG8-lU-ejOxcTv-FexjddgAmC zgd>lvA5|9YLsw{@z^_x^5@FIcrXwy~yM`inahrH(v&Gr6hrppXgqfbTopT26STJ`R z3sMf#4xOzTZoWw#i!m5UPI~K*A?E5e%gzyOV<1HNTR=hYE|>&of*^A^WVm(i@JIpD zMmC0K>?+ZjWtH`3?luWDOBQmDdtdc4#yDA}*U4(t8bLfUx!4dQJ3Uv;ir9P4mp25S zW~iHLirWG45GAUDqZ@4^3iG>1I7#odZg8>KR6Z;mGWW^+L%sNHbJ>WqbVyO}H2)l3 z^RGqxodRb#cARZ0Cg`GV>mp|fXNkpZ)XSG!GvaxcKPw~O$0#*F(!uvv8XaHV9^897 zwz<#;$45G_N(6j_s!&VJOvU3&LKziAAm$b?#7 z*3xE)8s>#sWj0!awp7_xyWE&290lNoR2<5#fE6iHdkdL3uLO%(4}t8yWjkWD+r)b7 zr(mqW0Imf=YqXKiELV)q`E1|Ds0ebfNXGE;u}zn|*6E5p)>0xw&qg(`&8*Pt^!v_E z|M&{5Jfin2kTKHpAE3w5<31pLCMo=TG6-~GfqIz?7~t{h%ZMzqqAfDvj7l_O0!6)0 z&BL4q-t${$guoZ#4$C9c{#!Tl8vUgkNtwM;Gw8Z?x!31aea1ABM}ZGAC0>z=y=7Z8 z?^P>_jaA^}m3&ug;L>u*io+IWk@Y^GbW0lRfcn7nea@U#1m#|?-=%o>rx6fHF!SmK zB+yCF@MpjTKmyXISWq{z*fZp>Zlr55PgGs{?CqB4B4O;N;-@!xnXv`&W5)L+xH)au zthl63AEsX5Ld=$75m0gAhcT`3SL#hAQTvKrg>M(r^yuf=kxJ-Y*BWiOs=BaiVZ5k* z89oo;-PmQOdGj|aJguAHyJ^n(S+JOUNyihk{Qk57$y|*2lP6$-_I()SRGZ6+#>vbJ zG_(UoHuRenUy;#j2?iaBcCx)#3mnMBOdMjSX%(?>V5bFLGTTNz#`SH<2HzC?uw-8= z5U{?BMnuEnQCU=~2^D-u?R?XiCqX>mnh*IcO9-hGA$I3YE6K+vXVp6D^sA*M_nrz# zgjdK;DO{?%^OQ7YWE;=i+&n3sbmYhbTLOKO!B;VDTD&lpEn>ow4vj|T_}SQiQ<*OhFb^oeuoPb|By{(;RA<7G zi->5Cel_uqq(42mPONNjsan%lNXLl!75gtI2J$7)bN{`m{N?MB2(pZTBZcvZ+Z;AEu56SN&=OE}nRRzXzil8n|yi zR_}d?G)TFgN=bc}|Mu`qQst}$Zs8-U2072FSLi0iFj?z$t8I9%znG*F}-#Ieo_6V4vb;Xbtw00=2N{x7;fjxux zO99&KwzH7c6+;8s9J0* z^mWJC5}K$6^YdLv4eJ*A4(Q47z? z@xFBN+&c3UV9#KG&B(S|cBU8DGq_dc>}KM_dvPQhlwNnls(63Fts5<>-9KKU;fgq9 z+%s~natU7Tb=qnvhACE4q4YwPkHoSJu9TR@1k@AqA8=%NGhO5I@`n})ekR`zIcAU4 zlCS=B{2_)+R5aM<^vPTUT#2a=J?XOP)OL(YMt{4ZPc{NF(H7`0i8ChA+SVQ~Tl7jI z>kP)fN+~y=jWMImggL1p;mbT%t5Ii>+vDmdz9W!M3sR{%v<8zVC2`}SP8v|4GOrjN zh(XQbkx^kqkr!!7aLps6+uMrprA@rjX@<1yT)DM49f8V!IPXR)k#~&t;01_ak zNqRoKM_^va2O2S*H<#dmLqwz%7W?cf znu_tULd2o&f;&FyLd0c2O_u<5BrGe<4Zs912GA6je=S;GVb?!yTO7&2W#|&h*)E)` zk;OC%vd)CR-#qF7|K~scTW`i$kPDd__{Y!wU#=4V=Rs&%2$Yv|y|fSUAK(9j1Ax%@ zLkJ#6rMBVG{Z&&MT$}|Fg4sl%bDikRy^wcsW_1)36l^GIV-ytl$ldP@7SmxI5C`DQ zw-O4T5)d0HuCp;}g$qTJ(BX=$f(Ahx zfJGBe9l!x_Rqv3EvXM)5zi+7gWfh!aLmwl5Ood!CR5X zdyQ;VGD`^-*uI#!pR;sbzpW81||XuD9B>`6;PNN&3XwabpC8~ zCTBwivj%jBLq<@FoozMRRM=?D2$rN~d5|9q0Nvr3U(s2coONlTab6rv(a? zHb$%umBv|w$Zgr-84OegVpR{AN#d$>u;rnA7Qoeo~lkmH*ZSJU<~qgys$Y2Zp?Az=$x8sJc`B~ht>)JSED-Ttbo zv0SiG8oyW6fkUKur{YFK#&UpLRu&38{>!;x*zG$m-CPv$@V+)Wid{tIWIigz|9vdn5QhPcj$JlLlPZ{G9 z8y2Mq4otAN0Vzs~sR9)(tpQm)qlj75GVu6+d1HoLC6y{pCboAQS44O2$#2A-Lyv7W znZkR2!~dR@e_Uv;X$BH@_|5bVP36OdQENW4=%rzAPI5QNQ7;Qyp`s8c!nR4b3RlAj zi6YtJs{qKj6RtGYA^8q6IWSf!Lx;qw?=*qC=WoAOPb!TRgWV%}wJE4=d;qb4j`89) z-?h^>?^pN54%Z1&cqnoKnLz19m#t|NG0;-l-b*a{O7I>CES_>|GkU*e?4BiN*oN*R zTy3}9R{wKtdzS7jM%M;`V4p*4IR>#wE^T7 zIiFeXpEG02o#9}?j{GDalWOSOb>X*f-#2O&1=9xSYVrS zcxm??68``vjH(QCptY=!!^56g2>W7PNEMm=Py&N63)hxsvtitLXFK4q(zsR#|I{%q z9sxlk=axIu9im}vY972YO#IZT$);pYb9^(Z3mtrc_E6ad(=k{l2^sKqJ#2HNkv*z^ z*OVM*kg(`newxzP>sNd@N<%1V`F;{RbdWrS+DN=8op5DwTQoQzrvE${4vqTA5$spM^4HBXJEbw~LH zDP`(VmrgI{F>EwTh2m6T!?WNj1%-loj)5M6A&aXphkScuiq}m)J-qGQ`*yJk5)lzlYiv*dvt3$W-Gw ztwO)uzz%t5wi!=7=}0DFW#BWC&YyT(JN*V$mhr|APlN~hnB zdH4&it>lFvv4EA-!#UeP5-o^Rb0Y*i(!(=+@E+9NCx zF`JPI8Zs%mr6Va9piv{{n!nSLoH7v|Ds5YD598GQJs*3)`lWRxCU%`^p{z170dV;hLLMFhVTajaBr3Fx9~i1I2l8R z28{#5aTucgIidsCSBMgcO&2#DwY4mz&rb&{<;abHi3Jvl(n4YUN4E%H^;*AE&7J4o z5H4i`u5a0rZ z|KbAYd%86qXhB@y`eB=3nVfW*IMiEBw6?#wK&Z%h5EqD=u@7*8oQBRtR7@8$?U)!5rWf_wk3Cx98?3BXk- z7;5Ti9(V$n_()mcwR>62`RYq@njTr0JS&(3nH!YQkmP`rq@pu%MSYYsZnV*RdTPO) z^~q`o9b0-#sBIzxzKtL8(C6Cn346uE9y8O-I7AnuQ}9-qGZ9={mnac`ae=kFaY(WW zHp^qDn*qIFVMfTcRk3~6FoX2wVj#9K#(x@n5N!+jLYZU>ipVDaybp!ACJk2*`C(#H z%`mWAAM^zA4n)d};5!`0x#I5p0bdV6f1wx#Fxx>CXlz=zrH>VT5BwXc zHe5HIDyu?*OVlyPjg8(8`Q$6M$pUMHQwrWj%k}5Ar>atB^I00^F&uyK0G4=JUDAK? z09HmI9^l#(-~m3c2{U`Mrz-+D;NuGpI8ex|(+t7^0lScu=wCRX#a){cfCEMWIG_&s ztW)$J{~IW44yB>vh*E5RvFF?Sjff_3S z2mrx=u%rvl>|CrXj{<*SKvDn(3>y0b1mskJ-9z_ylvar4fMCEv$`>Hu0007p=H}>_ z-Q}bJAOO4Yih-hu?DHwic7Fk7_6rbjstQIv#=PPai%zp`&)}rxqZZlzEV9Is#a>%A)RrE2elQAAc1t!Fm)>7r4V2jO8@o> zXe)ZE{{ zGA~Vp_l^CdJI6>bO$1?36G5C4Xd)=7(*MfClC5mFk6TpL1qE-w*~3$ zH-*8paKIX2*vlFr)zwBYutsRndc4aK;p3-65e9og;aQlIXqmyp)|_RCGsvNp8^omr zRe!7NUeRg9j$>LQfl-(=y=lhfhIj=R_C#li+AJr`!?nMQC)&!$h~cwfR`%HRIr1Pe zYd9>iY~*7mH~wBC(2BD*V!SkWtCgws(hbA%@AXM|mGdUy1oVxnYB^k63(c`B@F)0C?(RlHx{*e@yWQ^}oolVRzP+z&e*5S> z

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�|9_-GE;! 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%0A~NdlYe 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�{BMwGPzGGmD{_q1~k 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�v_ac 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%0Al)oQf0G64T5)x7F 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
n0|=nl@n+q{ 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%0Djv7N3?y1v*Z*qkpB^+3-jj{QA6{AZc}nL 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

jU;{|Wl6Nj+2xd-r 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 z zHMo|5u&LYLYv0}P|9q#~?t zHmo)z%&j5Z}A@!bQgCoUzy$03)HF7CeB?BdDgx_98$iJ zja%)Bot?}}j!X7+r7}!0k=@i^mt3k97~v-WsZ4sQ+gnIl zQ-$bl2woZ%iYhUr5w=e4723mo_N^cXto7QD4c($i*LBznBZEyQ__eEcL7RE1`gwzX z>}zLfn(vINkv>jtt4DQ*4vubP>Z?D>RoeTWt=2MwEhR z>=@*1msSF)Bm7?0QTFs2*eL)S;eao>K9hFilv=pphQzZYF=k$L#ob?=ywy=;)gZ>C zzU6(wn${qaXUXGfq(}0X2nA}^cAwveY1&_oY?KSwlT`4};ew1{r)VDK@eZ@8a190* zTrx)Xo9+zt8U+)yD_RC9*Q9$hf)Pj08otKdjMZiOe0WK%K2O#2#i1*! z2$v7w_Pw5#Na)RIhUdBDJhb|)j?bx}`2**`{N=}jmJpUVDPd2pe3-!D|FOS>_%(1v z?(XGzA_D*vM*slO{v`jGpQX)GUBrTw(s_6sm|A7o4pinF#iTulh$5kFF5@_!2 zT!_6L19tnn!Q2hHvC|3Ls^eeV;$mjC!Ui+Q8K>F2#K+3Ns=mS6#m9vqISS0mF>gOm zWxu7k)f~W~PmOe0Wd){nm#fL#vgtRo5KgC|G7cNzm+V!kJ(QveEGMOB@h@MLhjRyT zS!rcu#d^BN_+F{+zAW&LBY=d@b7@Q-tffb50j;V6HegNxfqC`@vN zW0Ohz>kJ@M3 z`5yMglhB47I`lTAi<;sat(YKV>$4my)_osR`IQ4InW_R_)nZRD>xYePeTHYCS~{Q>anq#1>lF2+4dX@vvgK)J6pOvA11^=ymP(~yK&f;bB({dW_EH~O2OquR zmp`O9YOtXiB#yKa^smGW@x9?2uko~??<5~Cmu z&b@m5Fb>%rhoy`S94|3z+Fl@h)hG}`AIDL)@RkdAkwB}@Z_=MErqATv4uM zZ>Je8J~8Q7r^&_Rc%5;#AgXTy;(CM%RB5%tJXMQ$fG14pa<1)mr|)J0TB%DNw7vM0 zizWxG#e|`3Gt@d?zn>zdNk-s?l^H%-iB7@3oRa#3?E5ST=n0E*=&wHF&FGDo(yh?O zd@`gD*)86j{%_|uqZ4Q@KYp}yg|N3sQhv=XWj0U;{`JTfbh|>bjscV}9goJ&66$b9Q={8F!?=cM&8sn*_s zrnG3xI2x-^>A2}s&$hsJx{5WF+AV>>N)Z}j)2MQ(GM(1p#BZmS4tmG0hVYlY0csu$ zV5q@M(koE`H7SPk42*qcdDqCq0cl6+3wX29&TEOVjC|;X-Xg)zULQNI>tw2N+KN>{ z+cr3J%b|>Jj-ERd%v;|F1!#T#??hp*SR>PmH24KTl7D&`QSLTS{PIfs?-V|BJ`#q! z=Q8F#EgG4obnj~kpXLF(Xav(Fx(2Hcs&DYPnP;(uhlTxzd8@~eJ>@d;p^3lQ2`LcoKx)&^}a4RiRDSyV;QKsj2$KkapK9xz6^Dp{qM z#bAZXLeH&fsl4&}63@ogt-cnpZa)96{8IjAgMFdoZwV;t!Su1pVO#g&nzfzZ28PqO z^!DA^T7x0+!-84KcH=bFnA7-?WJ}+TjDz~eiwydAT94nF<<}6 zKo8!M1v9nZ&-KeLLC&=q9z)wJJ`zoI& z_yfTag9h~d1<9GOw3AxZZow$nneI=I5$;S*j@bcuzn%62L%3k;W%L57T;`T4f0H!T zmSdI*()2S;gTm%^07aMr-Q&1~IoHadL|FCjm8>$^c}+9Wxecek$c;+|$2tWC9Mf9! zYN635cih$RW@Z|&B8Yy0#V#kiC5}&EmMw035tO2V4NW}~B&b=!G=R@EWXmpy&EWW;BG{AJ(H z2&zE0Cu_Ungr~WJTsa5|+a;$&H{kdB1|Avr7W5S9bQ(PK6-%V~L>U8>^g&!ToVKVo z<~qC?d+o*nTjdZ(&Lxqo8Y8QP&#eEcwRUQaO#OVm)RR6f-;prkf2_Gu1Y>GZSYhax|lZt4hRm)y`ErIr! zSByGxgETp#V4?bxW`;V?_|@7}41iqBh)@6+zw(2uga3uBRFw`npzjmBEvS|zkLCft z#K$WP9t0i9`DcyAgq=H$bGxiSmQAvJF^05ku}?w2HMry`Agx51O_FkXqd$}$YuV14 z5IG#;qrTN99!Ahy=gJzG0qN`GtM%wDj}{yvFS_f9v>B{yFe+{?;;u zWp-Vw1xqp@*%ZIoUS@D#e6LkaHt0>7QifXA_WTw*0-ftoZ=~SyGuIpv9bmoCYEYLj zyiHOVQ)3SEV!R{6XiLG`qf(*Mf)u8dEc@*zmMj@I9j=I$&Tq^UT6v`H{T3@NpeFU`19n=~J z!NdzIzu5VPJnouFn~(?7Mc$vZv6~!Qi{7WGmqrp26oe#vv+4x0>`{90P$Tat>!6A| z5&^SY1!EziDQ%-{oiHrh+KMx2dY%z{NG{hyKl0ZkC-R6(L8~ZN@rr#BoJ7(ps4P)n z;(T|sUPU~^PozQLh<|AgNHA!uh-x6l;wVt2(Nb;}MOcH^%FNU@pJrEBB z2gq;b-dA+{4l{Na3#*ij(MuBn;mB_ScbV*N4N*bn1@^k^x;iXheQc~-3B@nz33pwZ zV14*0t?c1B9wL6Nt{9q=ib1RFGx>zyE}h;b^zLct0;Y|Y^i)S=Zd2| zD;-7-wSimR!ip9`1%6w2L^1-XFghMW$TNI*$DnBIU_Ue~b-;5mJg)&v`A@P4nVy_y znV&!<6>!-A0yI(MvB5A8Q~GZ6E5KtQwKtXIs&K=+sKcCGyo1XY=<3@!CKZyxr(iYUI2x)}q_TyIY9Ju3y(cBn~qPU0!D+GYDrZM#ZG z9+64hKzD7#eGb@{W)1oBX?M*>voxcaqh7T_3eWe)e~o6t%o>8yse)EVmCTwM%oo~{ zThnE%)%W!D8iWTA?SJ`!d4^Q9$J7{@q^5>QIQDT``KOaOtw?5GRX(|4Qk64UO755L z$r8=ROyNa`4NJ6x%iN9^PsO&Cxb!LS^TtFacvS~WP=ol`)>Ac#CA(2>e0DUScTQ=x zKDrtrGjo@B%-kOZKQ{-DuKtA$pH;jwB0{R!E)F#ky;~<>hOlY_nE{ZhF%cV^++XTY z4D}*eKniDY#JR|d;khg_Em>#OBmjliX0>q>$%#5r2daUREErHWlMtEU%rtDdJki z1?Uq5B~!0$qWG1!G)oAHt+;Wlv*Q3<{^=k=GzAJ~ZG?Eq%M;A`kX%npmZ6Sf(5P(d z{41#n)7E`c7tE&#kaKWn=0Q0$zFd}<&(J2f>AIZ|so;69PTdZJdR)_mgj(n}9;MLj z-??mk>n~Mz9H3Y%0fyj_F+6-U_V=Ssc%s}090?4=E42VVYT*QUE;ROuG1W6~NsB~Z zu>4+dG+m^AMv_!~iSD9bx!e}^(Ox6 z9}hHxz}W#)melR46G7Vn3g9<6wm9HK8Wut{y4X0gFp|TAhak=r7}B`Nq$qe>nQAKe z_-7*C4h2eF$VE(N@qxE+4G5 zz{7ngKu+P{jf~*>W+eSwc84X0-!+m5NrWC1=p>~T0WBe9>K8+S0w>nzXyp7}oc8FO zHN(mktLPgf`0YbRB;bM(uO;0bH3NUCDh$m^VLq|L$CCe}pd4uX%9xS7(RZ{^PtZT5 zYemWHI=|&5L5eRGaFn4dbD>!(c6{d>t);K0vJUi7v4pm! zCbb6SWy@st4!5Q@YXEKyuMmGKox(kyreKKK?xidF52$|_yz2*j!xE=>7Y)_Hj9qh# zA6lGrZ>e!7p*Aji4=+IB&v!J}xLZZtyetLlh6WI}k3N6mWx02gQexcaD;U7*L=f8B z3?o}6tP}p&`M3-BpC%DktIeKh#ZVYJbDIQOH)@PMzV7A_{=lE=qo$wCptAV!#yB>@{Cu@FC7Tt4(LCHi z<W|Wu`o;jmP|@{7KlW*a#A~xFCH70zqr(pQaghSc;^WFiOZ62 z$lghhP_`K+Setad^5D9(bek{d`2bcmIK<&8j+@A>Y0IvMlI2oJ5!gW?P~+D#zIJk#noP0^y?ZmKRfiYI)N7aw$+I*GqLr2x1)W3GqYZ-Jp@Ut zy%^)5a_{DhpEl%Cbd<$yq!&vEn$~QycA+NKy*{11Sfs)_S`eR4mwzu~4N6_&*SUiJs=_b3c#ATL2S8=CRaF&hfFt}Vn@Gr$C706yH{v>%7Cy#fVY<-Vo^xMiQ zk-bP#CIy|WabNYUK*yc+D6H}xx@ZKMu7pR|;p+VB{>(Iya161L?WR(Ex`ldlnknu$ z_VK3jOiu3Gleuxf?sU#B`~m;p=>@1?_0M87e{12l>b(26>Rjx9r2gqinRqxUnmD*v zIGPxXxSH5HiyPP)TbnrkcVs~`4|>S|$bvjAl>g=2#=NxM?09>Ddc=i5WtUh{kGys+ zRj~$-P0Z_GSR`_dG8l{%h-#V+MPf;GJjjP{d|8VF^vdrZ;Jq+izY~es2DS#Y7CUn5 zz56Kp`Fzl;ei-#Hq)3U3sIytVMuwiBLk|u)Y(c$LxUP2Dv5;Zr2Q)6*;^(1+(_(Z^ z;mZe9ZT5dt{KK%oq6b22ZAAr4Mp9y9Rp4^O8S7EUgwxqq4>;Oip92BOojo!xvFMR> z$mfW*gARg+hj$fLLUXiM-s|-;BjM^a2jBgYECyrlzjC%~$ZDhISK;$-g&R>=y^*jK?OvqJqHJ?zTIGW>oMYwjUKFN}hB?7`sb%VC0&~CoZ8WsjgoNi1#kfRYmM5w&K7-eCRE@GUUXWcVLg~-^h#S({GmGTtp$JX^YcY>JHPa4Zk8L7qc=6$(j=XFFbZ9%6ZabXBaqh4hq2u z?jb-3zoq5+gmF)rX_qK?G`g)%6S_+222!iSHGyo-76e` zNw%=-L)Oy~o%l(>4e6@X|LYVIbk1&gHVY3hH`G58cx+$5)9GtsFn=5&JnvPsgxFv+v%Gq;3(DayHQAC78E@g{SAKfJcYS`A}GL-L^B>YN;-4EP$&^%1R z+Y%_^VzJ*(VMya4vwX7{6F~peVb*T^^9jkN^_n#YMj}7igTO>dB?@e)x2kCutuVYs z_zEI<7JfdpnU1qz?-!;=)&YI&oX8YA#pV`z)}eShMHLlAPoYuLS(GhRf6>Q!I*nj1 z6F%7_-jj@)#}kD3kW~Kpe*d(|*FT_pOn`o^2>6vgxGu=28^SKfA|qiLZ$R2$#GvoP zdYg21vwrr7ACL;V5hGqY;Pf5gZ%mT!d$Q%va8x^GVU!tF}nJN{>wEKD<^$)>Y=q{JtEb<6d6Qx(83{2XU z|BJGBhz=!c*L7ptwr$(?if!ArZQHhOCo8sXCo8=9_idcBPiyZ+jak*H>eQ(E=KP-d zyl6Ur)$}~Gg$4bI)2zCxNTg;(9l#NL^$fezF1jdyrZv)R+t~^g@e{*Ktq{tHW6bEV z9e1~aloa|WD^s#?;2b{%xr&@6(jyOixNy~SDDZ+K)$RGq48cBUibED;)TM^*6%KSn#3Y%HYo;#1hMRQMchprDAa$1 z3;tz=4E|Uu{b({){dHP=U+p=5KDRrOVJ5rIj<+IWbXKOCP#|y?+hR*F{W+RRU+B&1Xa`U1V`KP*TLPhX>XqWmDu~;)Z7%8v$WF& zHWVjp-m$ojM^*mo+2{9g(rdZ4TO{;OIr*_8ZgGc#tqOOCMsSNJYy!Oxz z62u7<4v}DdaD7ngHxjo$UA=uDR*tlP7$K0TDWtlzBRU#CAfr#5fQmFI88ScGM+;Ce zTUJHInhcGr`EVj%lh)T2I_svZb9Bsaej*W2-4f)%w*Cy&b|mzo36ZDWJW5|!SM)QY z-=3i9f_Fda{r7Ui#QiV}5CZ^Us}}%(^?zJ$NZQ)FI4e6lni%|#^3W%lRR61}u#}hl zZ{s!ZrQ^nUX5W8$j-DA@=DWXW~NqUrAjeN0`Ni$iqH(4PCF($ zMt;`I-SfSJzItsSLJ|ZMj)vsLh6qY}eOi8PwqLtHpSR~z9}R+~(}-J4b5O?ziUADD zP0qG(vrx!werr_SJp8zwze$Ce2ktaCA%Jl>kLu>aY^4YG)2w4is=K^P)%T1%uF$#$ zI(hX?gYz!ehf0usC_P*wqB%rMlz$_*n{m#XR5-aRQ!jkKyn?cdM1h;ut2wIBXw4L; z+BUBfy)V#xHhpGbycAt&oSBy<)L{yO)%bc9v#kJ2r^|hPxlHLu)gR)&j0VfhLVmbD zKSm73ur`;Dd4o{HO*812x0?oMs+!aeBLsC^A1ieTN*c2Gr>qIN$%iI-%T~ePG4oMKzTkvSt+Mh4PZt`7E9f!d%6cG!=FSp6uM|BKAhYTX9yt02c52c`&2@= z8yC+7bV|lSq0xZ2@H=EFh+{uc5~of;Tnh`|^#^LoC2X}DOB5gzS(iFkB4Dh}FGN@+ z06Lj0t^q}lXCPP6+ocN(HVzSWXnDjMm2CwZWcf^CDrYBzvHC?jPKw;gUjanM*@Qt3 zINyqm{e^>YYB@j~_o_xcsD`he!$G*9(f(LCT#LeVQC0t&QJwN!+MjKVf?OM`40CX2 zlz%fOupM{z?7;j7hD_T}LRpC;)MP)iUK=r1m=6Q%?$k6PYHG47@SacztKkdTj5%M$ zhC0nH<8NBI={p)p7}bsj+p4cpr(nM6zcUK$dpHyO?(7Sacu~xfyBAeFs+gvj#|g>f z6jkNrEB|m@^;sT;pGaAU1YXskDczs4De$MS!?<;7z2CNH1ljlKLV3d<=m^8kXx5fj zf^k`Ph1+chC_-G@+t#8DX*%!~ap%i3YAdlnl+L6jy00|2s`88V<-V%zth@cMJJ7P- zYv6(t2?D$x97mnA`F3z4WPzM&OC`8ar6Ph3OAof_q$O8Er^-JCu#}1+$;cAU3tE-jGfd)mtuzx;vWHT;0$+fG(+l=k*jZjgN4*d&uD5 zPbuQKQ|Zw&LfJ3S3N!{aiPk8pWZ22rb$sC0LrMq(A>g^y(aJKTM(L{ipC7jpcY5Dg zs^vitKGZdXsFsYyz9vh3LNT_Bqe3GFV84#J2)I22ipc;p?Ksp&+rxOB~S)Wn$K+C@ct1^T@4Bx-*j*D}1z%gOcBairnE@KKx zCBtXMyp;>y>?+`9AJw-t=5kJ|Z0aHTeIW4rQZF|h8&!Jj#QfNCBzBzj5ZFc{z zaVekLZNUsWr&m>M?}~_~gWE+sZ}V0kSMSd*&VWn4E!wL*8kFVD9Xp2AMWpAmhdKW5 zPvWm)vz7}*(d3VFGM!nkh2!8PUuj&%;?ZNA=rRfbV_>1GUCZ_+wkTks`x7=SxRmaF z1xW~S(wWuMUZ$T0j&AW)tp5C`2QmIl>ql_3l|oBh6yns3wG__U1oQDfkD=PEghxcB zD6nFXllgC``gM|XCu9&JbFHbb)>e>aU6t8yMhaCKNY!lG{doW}!#LS}LCa{9=2sY# zm0H*kmQ83~h%(UeAG~_~QhYaEe`}02oT($wwx!^rY~A1{SADjqv?SXnYXy|ebdomNoVcOumR6AR4WfkVPamqP zW=F)+Jv!=3boCQ{2>s(p`ElJs`(?_9iOo%h=;7vLIo%aQ`!=G!ki$BV$4GoEAzYO> zZa)bqnPFl^(y8KDN-f~|sQwzgpF2LLSH^*oZ-&lU!sPpYIy{zJ#<5iP#sf#t4W}1QKKyT(h8Z9u>z^ZmDBj{t~bEifDW2_O(r8Aol z8gMGfwGVdio)4h#?h6%8nNKRkQVhBv_|?A8I1c+f$hiP6DI(q(QD)$(kQ#izZbX&g+&$I<1*ObkNxVVnZTMwBo}S&C9`9HI6_= zxS$v8+U-$TcuziYclLrw3|zZ}FoCNdzsPXZ1yK&>H6F z(7LmU0tr0Qr&1Xn)f4hD>;!fd2I)K3Rp*T12eaw3k6V7sN%`m-+x!{LnI&u6(BJ+^0y2MVlGAM1Hjr^Y3U)J&V326p#J>BSOUV3LgIdEhs83j38TIvwf zN&cp8mTry+%7Ed6%;MUo`wQ^HE9Tq^b6=|6!uz<7xkp4f2Oz}PUrEjwgziyb#AX~0 zXJPy{t`OCVPmTUPh)c_A>#dN~YZNn41fEwo#Ey;mSXCTKXGAOs>wZsQS^qxShCu=i z7$aqi3Zj3K1Vpqhq#3XoDG|wCI4*!Pp^P-S?CP>(Sp!}Qc<<&tT^-Sd`%1l*sv*P$ zY#!4AY4rsL=bXH?y{89|;n+ zrYsL973PABp5bLR$;8`$gYNP=x0F;GyArEttl<|d0_6Sk!|A2$4)5rV?1+FqVJAb3 z-R{4iJ4o6cOkY*a3VqP_ZPzV;hWIFyEqG$Jscyn!nFU-gvyNT8$4?i!Mu0eqt0qQT z6{cv2x@0}OBXa0oGF6ooE$j74cr{uCXBv`bs(>F6{x?1VRA`t^LC|1}OCtlBJ*>^9 z!}Y~tH%V~|#5|D#j`3B}ae#KrEd9luU}PBU>-rU@8dkBB&#uISo~djr$O6sHy}4+m zd4~Npxukol@+kIIrwI05)WRJNe_P+1Vp>b~A3h6rBP_aPwtIE)SXV4Qkj|(Jvb51s z3|Od6O2MStEM$}Cvhq<9vlb$a;gw|sOxy&nh3I7YH}>nbZCWRn&;FbOaqmW{PHK5j zAJ?RnM=FmMJoaJTNGibhWp^=-x^mwtHXl=bbJ@%Lf@ANe>HU>Z0AtsFy_d7s*EJPl z5Cjydw+D13KdVhOd;tb7js^Kll?e&F=B!QEqe>#F(53Ydt1a+Ng-o2G@2f3N7x|7i z-YE$ETeLCWSHb3Z?bV$=@k1$`oX_W^TwBF!Z5~s0Y^gB(-;=21i` zRh7rbf;lc)H1ViRVMEdMRJ!(iYPdJe@kUE>O7b<)_O2oIaraU~?%3oD%VK-3QC*wg z|H9{W*innOR57}SlCLe5`;L~`<>3%{^~bqqy|TF~CH$;>OE!t8<7wz%DR>8G5o497 ztCt_2fLaYv!#(=$Sx)MXS8%s;FagSAS@qEz`XQ0L_#|`)SbpR+w)@OUz|d~t)(G%B z;#whl@SvhCPP2srg*uCzF-aH1nbQc5;@YNKAUugnu9VBCjLf6q_<>-tUa ziik0S)CWj+dYhjt5-W7LZwQ91q_oS?HaX~Y?I1wz!I%n}*UeuensjUKPc;f&|JoQb zvXg!~%%LD)SPbo33D-3I={@+RNS*<5kRSMHDd9m<5`cRIs4yNC@t&;rJIui6d!BltGq(0Yl^pTO@uMq}74>opfaKjy6=WI8jKM zfcu;bK#XXIYRz(-p``uoLgO7z{ufHP+JujhCD8VHUJ6LDrJ+X!zY-}FjD?K=w`7WX zNzH6#jVkdVi;v001W;JJDuf+B2r(P;^2tgILE!?IbxXC+1cM>xEA#5)GEKm+<4svX zidC1w!Qy^R24B@hjVXO%8#(b7XXMUx%TtK^C>wgPL6Yy%*dsSdW043$VbAzxZnMV^u25HquoWs&M*Qo3mU6>Bc)EI+9_ z;NKBOEr$?5WiF@B3+`ypY6KQUeOVEC3`Je}8SXph1{Em&v1DmFHwMeuu}ODKg)(qz zpn+@=c@BP1xu5sO(%P5^3?RroHA}cLsoZsRu7#hhHR?N)LcD8BRw_@*1j0W<7%?=j zIx5GevES7S$)F)2McG=G&j|an-@4w$L_Yc_Thw61$Mkf(WG+tV>=By#HSt_ojyC8v z(k6RtR5K@JotsmHovpaH;P9gF0cnxOjy&mhtiz%ESY%r{b5!@AeCN^2p3DEyOtR3ND4zB-$+ZNeNn1v-bnE+ z>fPzuZTSf#&x3qC&9Bp8@y+aTc}+rVn0Wz10iwI!TS9thJuL|wmKL2#iEurG2G2SWm(oVmjPf?YOn2ZgXTwO$Fa10)n*?y9CqY`xy==08jlZsUkdmLS4;opoMNw$~h zZDM@wIXre9%!zT7Vx+g5_USV@rjQ2cOZbbF5&1@W!yqlG!h1&C77&_yB-jo-gt-}Ic0&~?&e(M@Nn&&X23+6lmN z^4{$eIW6PGI1I&lAgg^jF9;Mm-ILZ9 zQ-_qjvxN!AE@&|#bxr0+cU)0cv(ayD8Z5c{n>39c-0u)!5@uoENc)#}H{=Nvs~r+3 zuyOP>*;92gb*-9Qjr9?BqY2M23R5$_`#5|Hg)aX#T&E!I&Nla7DfiK9>5ogLh93{c zT)p|x0zU`F@ppXXGh9EdcmI8%p#PYrj`U@i-`kzkzj>WL4cC0n1XuOJHZzIC1(l^b z$@tEP{G9XUKVbl8y!bvmX&ZKNd%HRsu* zzWZFoRLUq`INf(UNc_WdR&C|DX=*Eu`yQ3uSu>1#9U){te5{6!o|cA=4`_Kjn3}0W zzznR%_ZZYyE!%JqM?_|bIUmJ3&r~!HNU0g@lZWyV4Jah zyQ#d0_}ZQJcbR8r03+NJ_jAHid)` zXGZw2#QV{P3R2nICawz1fpBbX0Zp3ue6MPGtres}wX-4H#cU5d{2(o5JpMzSjqgGG z)!Ek<*QAd6TV8t-XK<_BzH&mI%WT%eA8g1*!rRhCPA*;<0q)23II38Auqwq?k>{xJ z;T=m7RP^VTejO#fJ(Ixv*nCZgZs|j7Zag-CBq36Bf4l;8{N(C~BJ(uKwzlGvoEH!6 zf061`vCLuzkVq0~C22qk5TMOhM^=wE+x0VtVTC*jxlypwX4Xb~-Ofm#@Ofz5{l2f; z;*p9ULxL|Jz*E1I1kNbXO-J>|L9%ia;gi;dT4n=D&k;X7Zpao!sEIFsl4NM`MD9o` zd0MzZOaj_4l0W;w!0TKS!$&A1^XS{NGc(l4EIhVH>9(F0>^<2?~qQ@I+2l!(=k?pvhsBh;wgR6c0!47McE2VtMW8(_fBlBxQ6IwHh za;CVFtcnb-1`t*jZ^uTAEluh&*CJ@j+~83aQy2plV;VBo!Kx4StH@sOOWq)B~d7{Zy5tn*8(rhpuJ)6Mo)3gzY& zPVZQq$43AC0RNv}1oSWZK=J1Sfeab|pqvK)fc<~mi;y$0F;Q_euyr!EbNnB5BdQR@ zq5gw9{J-Nh_NE*$_k%~A^Y_3-5o&$_3yA>+&;$g~RlW&brmXYW?YQmI@sH~R9EU1Ifmi{;QG6K{lb3-KFkQ6902h-9j^I9cPligL<8tK5xor?d zR33BZXb!>^niSY;rXEi`5I$6zrXGc()@qFYBj(spBFJ$yl;!Z(GA77aZNAf3$HP4k z2GuQ1cv>^-X9jk;Z~%#1x>DVYRl*Db8N89iDjc9Py>MW0Rd0W+NK#gcJxZV}^eqt1 zjMfy91cyk62c_$!P{_-Hnft5Ht+*zKZjQEO7G87{7tWlo#JK&r)C2G;%*L|HXZ4jN zerw*}Ss(up3?s2wCWX5>Vcn<%0U&!B8Tys}67?il%aKq4u!>1N6ZmW9a3?9Qg4$!Y z;%ry-_?&VDFAm=rG(mj?0jYDZ1F}mQTgZ*;lQoz3k4h=}W`l=?$(kJ5iR`8?@H$63 zbH$D;@E%1pvhlCQLe}VTg%+KymTb>F=T2(;eD;X2N|ny5WmmGg5-L zd}lTzCVTvBS|h?e@e-Sv)+yYh9Ig#-f8<=hhf4SA>RJrfnWldIr`aW9T$8Ppy6E8@ ztC6y5mSIJ9#)r@byXmSo?hr7DiG9GfAc3Kc`}25CyyAOr=yDXr6s-pt_AdQ8;X&9; zRQd?0WLOUEev1V!;kNj+(}wJMT;!Qr^tzBU-rG{_-IRn>Prk*7SU_LC*}M~`cGugn zUminS?&yv&qT#}_S39L|1E=3$_z-QmQL1pGDXFp*u^=@YSNYevLmN+Sl0Usa_HiiebXL(ZwNT3 zI8Z+}8(XP1z^|&2;S}t_DYRJ@LkgfhUlFcr&t`E$G!Eu{G!v|n`rYSe_UBj0!Dc=A zS`3|`p4^c_aa9zg8w&iZXU`4@;tX;yE#m%j3|(qm%^5jSsyW88{SBR?=~DTJ zxnlSQIjwd5J4XESgE#rlO95kjtruU&N?pp*cm!>HM3r2dr>Cbne|etX?T*J{kB-dc zuuGF~0WxEl*VZ|ZOxXF1WMCcca`h+U)j$-o=#1E597CuXyjV?5QTMUO?gvmK-X@A; z7znBF&&$_la2Ex|?=3bu$?s>-E$z02u2WDfxwe?-qJt}_MSgbzK@D?|{JYW_X;3O=jf7~pVL|jl=6lzk*s;tJ7aT%E#*rFeYSWa{^6v(Ez2;qs!v^~C< zQ-WA4Oj6Z$yZNs0b%0I0R+GAiG(Tw#5V#>Oo5K@i+rx`2V+~?&s)JeET@Cp87+p#* z;ZDW7FR5LPTekQy=W^D>WS3pQA6TpfrCoUE^5yN!DPN19Q%3H!v;A3*e1SV0 zQx45*m(oS9WGSOeKLnf`bu_t#+{vFWcuX&gRTfg=AjUYLT18X?tf1QDiSr7Uc#+>X z#}6;rx)Y%bdW6(DndBM|n5>$4yZZ@{%4ELuT6AcO^5L>e%%Q_wd5p#P-@&vRuz{D$ z6Xr2;8Y@pcke!RxsG__I46}5^|6`C-GMxq7r(5yB6HlU9889b45L01h6HWFFUr^R`#0rXnI?GD1aOy@q^pzALauC#DIe5NJU732Azw;T&90W( zBPp?9M+<-0)oaa1;~XR7+5cc!>xPd_<9vGF`=;6X7D_v|v{f+>N$R4@>Q*4EGfzOH zL_#OCW`nxOK7}e4y1*%20QmCe;Kqy4PUzNbMIo?t+ zN0VBkjEtN(JgNLWk~+tzcw;VB60AcQ$Zeex@@Vnt_M`3d-`WbW2!oIEcY*zRLUe{Q z3T=cmYluE8=H<9aeWdY?BE=JTY0qE8+FLRy8Vc}!;8O6xnx_sk#0z2SoGUyM%sJ`6 z3PtPtc)V}=i@hDbGuN_*RZG|!#<7u8w%%nI_TE3%-t2AlkE}8DJVJ-ib$D>{qm;Da zeV@h`Oh=i@d449riSaQI;JeJ?6oX#+*=C&N{QMvIji08T1M7d?@B3J*f@YjgIM4aH z`=&Qz4j66JM3iHulZtoVsVdrZsh(F><30H$5E&~twbI=$f8Zn7rIr|SVf(F3xj=45 zr$F|@!axnw9`=9{4%+tG{yho{U)#xSMp`Hbh@d3nVKRw8FBpLgvO}ax^H2gY*Fe06 zQ!)ti{_K5uh;MvTCA8{MExfEESlG$V>SCCF@Y|%{A7LFtv~?`JBJ&=roXdXczxW<} zzNWuhdZ^?unwtWdFQZ_>`jzckx z3EAba)48Q#r_^+~M4(^+^s5}lfKfE5PMu9-*qRP8BLO3nnYBp7)=k{E$7g@l&`sU;Rfxh0faEi_4daFy zp-kZC*1egl&83aO6=s|> z%^7Bf;@1C7v?1mYrPAmSC^G_E04~p-T{?p|r=VXp8(*S>n`KEscB*<#(kW$;?Bxxn z)DaX5V`7t>ONL4CW`dmV?^nY^yhG*GRo(x#n0QFtlH<>T3cxS-0te-PQ?gP1x#XJbCZa+59sOMxZ@QpZ?^df5Kn)gb=>c@3BPi{^)#{98MGai&=^bIR5 zCC202uymHw~8=#4{&o#1#V9- zjoaU&Jp{NV4o23c;STWHxCMx#3qCfvr8=LBfWLO9Sk00L7@6RQQ z>7E{fAvu*Ic_{Y=`aWFEZJjj)2}KT36AtOj; zPi^wmPXRPpg{&9R1w8irHabAn>!2{n4!3fTD@j46cqKaPpzz@As?axuzzZW@PkhsJ zPX9OdTF{3nu6RSPPp|L$b~o`es+V~eFY8s7>63FX#NYCd=7=6eu`nmx_XUt&U;%L7 z^Z$hp!Tgr&j=62gwwM3_Oq2hcTugZv=l>NygmyFaUlqGU^T2-_|I1m>n%dXK>;q22 z?PVly<1>|brLLppYTKQ)lre7M*19+$Ktj?`Dv?S+O5OIV^N#mnWcDuf0p$fJAcZ2T zNg~SaS|~%KNMa9>O`q*#5AgXPglG!?h72r&DeN-Uqf$j0HH1OAg=HHjhbotw$C{eo zSua+H0+dwNmuKH?%U?Y9_pig4rQpl)_s`hD$~>=1&BQN4gxXhM>T#ul*;VVKO?McV zs8`lpt{li^a?xQl72uX?l_J%%1#_{B+3C>*z>qZ~)#N$hD0XaFwn!OOCiu7QYjwIF z-Gp45nV3G~jxqUeiX3>PmulWbtmS43(ur~)G3?4sJ};N*$K^L#quxx``r-mOh*G3Q zCN1Np!qLUUlk*Ml#m&o{|P<5{owW(OwH}{sXjv!7@;zf2!ZkN$TVn$I{^bjktFm8MHS*ev^jC`kT zc~R{1f8j&8LM}qG&{ABaj>n0NqT^epm2$8^F_>Cd0i9bVvC#4|Y{&}vl(XF;wtKJx z^0+%eHN~9~^f;Qc!G@bYNT4x@ImFsO!*Ka;!>$;oGLLpoJFma+(DDKp$wwm!V#%xZ zIL`b5jpoM|`roEsc*uC}er57qM_-QXCR}xlF0|sAQRUUB{6_rky*&U>EVtGMRQhbF z{9S7?j{4ocI&Ku~v%^DWzwx1xZcB`wxW{i{9R@>Xn_|(&6b7^*qcvbUA(B0{rix$E zi9n@EvqFS=Cx4|!oc>v(kJdfk9tcK@8Bb1#nMWhRLUVYTk1Q1mWBP$aS zpk4(>x)1~$!M$-o;YOBhp1$Pcnw{j+PP&Q$=o$~3vLpco5Q8bhaZ?5{K8vPY;(lEI zEX1}lv`i4V-E4EO6w#ggyek#BULOP&p#l_^cBDW%9uyJ&E#L&Gv4GHdyf8!$4(G`J z-h(V#*AQ0pr~eE0oNN!VCbFNHeC&vy1_3RpyEVO{s_pMi9doNCCRht6SDD#-^s9An zW8b890n$f>2zkB@P;{D zecdbsj>hp}fBs3$LW*rp@vq82_UGiGdcB%umKvX0TCi_*=_=Pkb8qiO@g=m=6WHW^ zdRq(hE$BD#&rb&Yu3+Qk{Qe%l6ns^CkpAE+^;wf<%0!qyKQSOE^G|goV7;_#Dk}Q-gySmR)%8EJY6sQjy>t_0?}b zq<+Xh@8FEg{DU6g)i%z*ZoJJuX(jKvQP{CaWA`K#4iwesv0R>$%cCxpd5A!nhM>}e z{Kx{+UJD3%yJ8BvHYL`#!%>l0gy77T+BWO~{cvQ^otC~3!K^5X8jUEZ?Y4)MUpKp6 z4=e&6_h!uWA!NWtc|H$FtQ_RoC6VlBenBETKKvx9ify3H7{$e=iH} z+U0gFYW=P2xdGQMX)JRqO7IO-Ys+f8i`JQ~9U_F529UJ_ZOFb3PmjOc9}v8CRM;0G zqyKJ&Ks2D19PD5gf=~DgRRMe*{PE@nqNqMub+7U`rk`<=U@8XIBNncG$T^rJV??to z;g?F!0r)KMZQjp6zuA`Yq2ya(^PWLOe15*ZYAksaszS9{C|VWk2A8558do<1E{vF) zcGOcH7NgbG3=c#4o zH^ia8KluhE#-I>RD~m36*v$W9#KcI265f$k(C2`3qX7fA9}&!BG@B%vd{7PDO0Kd%6MRrlq}t51VGe0S6L~GT~yOt4qR$9TzIwEdNM!&Jw<6jrL(;OwwCT z_sIQ=vLe1))m_?87HiDq(5+SA&W%$oo8gk5l7EWnS zdg=$UQ&@ZoMMNDv_+u1$sY&WJFBBhfU6$`lvKxSg{GP>B zIeCP+0m(a@^;xs`7csgWfkKJ?hJn24O`jv8)`CT^y^&?}ATx*VVIoul(vL`zu6IGz z%ZJ9Y62jv-%0X?UzT7IV>5)ZsgQt+I1JgG)4)0>lyGX&ptM@NCr$F&ee_5kXKp3K- zOmq@|Art%LHE0QXc8`mCcFK7xfa3H=OpRD`DXlv8Z})2*d{y-iUwQb0^{+?IawaHJ z(G96^pG=JKoSRiuJ-zH`wQhu&wzsDrwndp?p z8dNSd3aOI6LnqHu)6v(O83I`xo55YAaE@0I=t*ePf{c!xNl89EY-tr9T>Gxm&0Zl4oD|QtXA=5`znA06va=5%nsi zZ5bMExw!5`4@0c7uBDWqh3_Z_*GEo>uszEbWM}oQKWU1s!DOVtm`wvoGvag6VQUb@ zPyuNNgHZtzCRbfk+Z#Wi+fykuX|)Bi>>7-Km$s%v0<9 z!^OYmq2k)`NT%J0fG!ZNPZBT8se*vEW^c~qcWdSe|C81mOIco)NJ#+#`xt%FJ0Ed5 zo!EBNLV!T*7!4P0X4MN#UX~Nj9F|I|6f=koo?md+RmOcEAuccXQSze1QnOs^a?z50 z?%8lf?sIYJWgtNq3GRe*5sWh|^Y_#Gi*InDjmFijyDIz2xLsw#mt%C72CogB3k52Hi z#0a?M){+s1D78i#-q&j`H0!)i{m2kWdYHl3-Max7?JYm>8;*G`IrAnm1ADDq;u{fo z4qO0m#Ad8BYwDk+JAh4|JDHph17j2641B?6)2!(H74#+$AJR2%xUM^_< zBo{o0{mPpD^?+)2za2NMCpW*;L2zEhO)r=OGtuw9NV~*Kz&4l@rtHZ(yAf)rp?VcR zUX>Ry*HGFO>#fnVrsWgVS!AuVfU*H_c$AlWJ31m@4ISe?tT7L4v)B&E^fPjmkS%{j zDlgrKq$`s_Ec2vr{_f{mYWS|(k@bJ;F1LnVJ@nofn>T(9)|0?D0R;^Pl1ateoAj=f z9lPK5_Hpi|RoI5n5$V{}Jk66#9IrrurIBA~(p>_t!WtOJx>YS$E$Iq#p!Ldzrq)$w z>JHS()$YpugZe1KUgM4eno~~xam5u(>Cm%Y`GltI`N#VGmPI?}sz{jjw>ZsgMJK*s zgH!*4AXx*ho5f84_aD>^JK@^x=x8oPlUA^rjnczf{pn1wt~uc%EKdDjQ*7HcRf{I- zpwXH!!Wjdw8GEpY@Mxly@>({oi_-1SN-9dGKm~t-KQ1Hs@AMCNK!l1o346<|q}43p z-R%B41WJerK8$`RBG~3xg;S;+aZ@)9&{V2RegX^Zh4ET ztm1a?JpDZ;V#u4rgzgD-TB(9orM&R=gt@`&KsG(LB%W2_me7s`ogspVsy`sWge?57*ZdX6~qThCJx<;$hKAdqAft@N&>gI z=p<+hlH_?8@nk2yfU(a2EM@&rdPkA?wqA@OnsCD02K2Mxfv>xO3X?w8$I!j1Jr|H$ z1zO2BblIcg356@wR*S(-j9``)2~6C-zdtE4T2(&b;K~(!Q0EM5pcDUuP=7-NU2Zl* z*-FFEp!NRvvE)^5zr36%_6d=JNetD?0EMNl8ONj&&W=%Mq{Oc{9!`8D@y*sDLmZ5e zSZLL=^a%se6J<#9iakR)3p9bi9Xb@+a~rr1o0&UXx^(bR4V)gVkWj!3!7os>LBSx5 zI||Bo*&ny>;KxMXR+ySQx)V{^&i)wj?}*PfAAm{67}wq!ABt>j9xd(coPwT2L9<-d ztoeAet@G!}pK<12OFaV*bRtWwI7Az(nh;1=A8em;i%w|u%VQbE3VQeM@$)mgv6>t! zA7*b7#4iirJgNI2MtO#5&|64{;Z^p8F+OFo-e&^f+^MHz1~C}^lUs6ZuqK?VE05gl=B%MAlOlyfjIp9v^dTLKLjq^9^90Qa;hF$-9TZX zH9z!EiPumY#$`Qe%E}AR3MI73qloiz80nu__Hn!=y1(~hdyHn6GBzIT>MmY4mwi2O zC}r-(9G~-xfb9}022>|Rd5+FYP)^DVTe)t-ujhOaR6ySsr+WJN+w16*504W0v9Mao z6EZlA&6=pqdUnF!uo3VR>s*;3J`gw8^=4y8L!7zo+*iryowI5@C#s?Hqzg~8L8&_(gP>B!#kvN?SDE3o)!q%YGH3Dju{b1n8W z`BY4K!de~v4UEgQapL5Sj30vdNDT}l&eB%kK>tM32gvM0N|S|U7}AHI)Z&eO1i*5o z$?(QbSm3YTevozi#$}KH6j;67!Kl```>dHo*=H+yP zhth6MUKtCpv9Vm7#l?5W0L$8!fR!Qi5aqT_MEU(QOiU27f{02@S?oXEtq>3G$-mF% zl!YzFVq@?g?Y{~KRRe(cm;TjS=YpNzR}c1-)Oaj$K;($Q%+=!h6lZ;;3nhFh4EY{( zz^_~Yn)x!tz+gmu%}BQsTbmOb7H~S#>Alr;ZIk0K9^M>+!5}|LtePUF#yQ@NT1vH1 z?I-t|met2~FuOx6L`q2UoO0_~5C%>SrML#Z{z_bmm99kt0l%^-Ri%A!WGj%?S7n0R zjjhG1moONF{;1^v)e>X(UJz7e!o9|LoKH!OS;F3!24!F)JM=abZ%C&Elg4h8P?&ad z1O|2LkGunNeXFdN^J)oBG#`HT_KC1nJ$-hsVf@bMzeoKNSi_ijK08*4OhzQ$S*2SB z)!NV+Sbn#Sl9m)pm=P2Inab08L^4z6~}@=+)qa6K~kplu3}k2>wXu$^#Siy4_%L zZj6gdG^E!+0hplg&LdCU7v%;_4G)_zb;`^ktqImr019raXHc5Y#aIU>Ph5bnpRo4koz^s98zx z-a^Hvo)6dToR%rIwFQQwm6CxwO*pPf2sCd}%MAA<0553vJ44vJzK`$|n^~1p>0%0g z$`-Lu^e*QWC06^X*EV3cG>nf^b-`T3z4RaVaV6!ZA%TIhR;V1Dr04^ozU}nm)b9PS zccgtJ{mFpTC0h3dU!8u5y|}=LypWpva}znX)uxRanjm4j^#$NDQl}JW!M`iVJ?aK4 zyhxa15OXU<63@IOf|7JG(xTxPfe0VQ_!&fwME6Y02Eh5T@a8`x75{uU;udJrBtvi} zQ7Q8+U>oGk!Ea|K z>iH)0*ppKF9RX2#iD+o0k!q@wkm}a>BMhmz&4|eV@o` zr3JZA5nR_|H7m_Oy+?ir(|$6b)2ELY-5RKlhO2XPbJylBlJ6FGi0<(Vo|Dh3$?les zD3D*S1*2-vI$#&BbiDJ)7?V(+)W%J%&vBEhwk7o4{+4V9`iSChSpOeq?*Ls{)2)r} z*mlQ8r(@f;(@}>z=-9T?aXPkb+qP}nPHy-4&U-NKH^#mHKgX!`EYx1LR_$3eYCdaL zO^@{ktIE|y-J#;3)l>WMrF3b-KY>Ls-H!*U=H~YrsdQC(;OE80lWJzwmUYhH{L1|6t_2~Y z$E5aFg3QP5)dte-1+QTo!o++f+Jo?b)t9VPEYR4AXwC2zfsphq=m(sZ1}xZ}Egte~tmN|P=Vo{*^x317 z8x%>B0`l4#{(xvUqQ(;l*)@o=wsiq;`(;Z7df*Xmp%GN8TUySHC>yrq*j71`-Y#6* zZ)NK}P!%czxmUh4_5R#>k2v*yvHmf}ZVcavhPcoDb-rL|Gj8@- zNEUJY>V3^ku;F{+V>99CS8wc0tvk(@<~>)nD3`M)EL<38!GK8!$JGVkC*o#Q6rQ7l z-#O&1zs+)iO!6t{iHQUzO|-hoEMI>I8o7PR+{tlQUa3UjsL5zQ05>SAXiCFC#6#2b z@@IE&Qqa^K@m=zkv*iBHj9Bs{_~R7R*GCoHw%8o>uXrYzKQ4urDHJ^mvdqfoj0>MlEZ~4I z%KL1pGXrK4kRi#U!h+<4e!@=QQ>JHL!xJ?i)*ml;&}l~+&5aG3 zw@CT2?}V4_So(U7dDO@@jXuLj%DIKlm0Wt0dDb%O3%C*QTCthpb#o%b<0QAB9`VY^ zxD5^J1X1Y9m(*Y3PvGH!L2V^HT))61uX)KJ42n0Z-@g)=fRK3vh&muPPVwCpZt)o8 z>oBFGCT$at&}V?HX}OqdvBt@@NjjjDmSiW%Jkhw4ne^P)vViy3YRgeK&39!coiSV^u&0D5Krl9DU96~lS%~kN<0~V8FS? zjIAeez$CTfKFreGi$2W{pqHxUl!!!!vgU7EN9ELu`?j=5+*NGs$RkO)}yo0f3bw)+Hp8(K#u7H(N) zw;-@H#GE3jHO5b$JAXMT*>hEe9<5-v(fXq%fu3%tfWt}!MIrQF0aq#^pX*y}==|4` z>HeFlF`BbB)S5ogq#$orq-*!zd<_8 z%e_zTY}E+>y-pw0xrQL6mZ42Q^ii&Wygi-qJiU1m=2q5TuKUU!55eczIJ`()9+s#` z2*E!)vFR7p!6ce**W9{8$-Tc4dz~L)4$%+o6dNXV%H4@FN**z%H!LMj4Rv6Cq)Z>T zT--o`odrNfWip zt{`4lol5Uh33m<|`NnsW5h@*&>QN#{o^Gb=F*?VreSg&xg5`2Er4Bl?Hk3>rRxp1_ z-1b_`t62+$d zJDB(fAses1{yqNhd*i28iWnW&9hrjy0Dlwaf8AT~&tiHG!upO5X4Y18HdesDW&O?Z zSFHaN|7TeMS0d;Nn@Nz!k$;u(4~8npi6g*%f&KF{1W5@Ir9b%hp^>2>|7;0wKlT3r zjE#h*JpcgrClCl68VDdI?av}T0C1q7tRMhT9qI9^829Ix$WTH_765P~2LOEh0f6Vv zKX?oPI5GeLCqDoHt|R~e%Q{xCUkm^M*^(3yRB>5}kL$ET6U6TG-hBBv$l(;>dAL-a z4qb&wmIWS4my?s@h@UTslAR|Z7>CXyxItvRrf>y-7V!<}hf_cWQ6eGt!T+3IzfgLz z5m*8jTQL9vfnufaeVl_V4lCVYTcT~A9+i$aPAPJXxKPWboSk*r*S`LmB&?+GC|Re@ zDJplcBsqo`cK&kQ5`fp+d{A{*PNig){sEFMFApa(e@s8CHA}gWlW|+Ptb6spxj@|E z_DSrYQHRfNuT!Lzf2sf;493SGPf2nt8m)cK4$1OOk(qQPn1Q64~Q&)nAD1BLa8_$|W4C_kKLsFPV zo;@{~bpL5Rx4cng80>jg6;*>G*bAi*e!0~z#tlQC?N8)?>;-0FGjV+;34#)cpEhV4 zrbOL495XYqg1=SV#(iheHJZPlqdVmHXSE2-G*a(RQo#D-V)rdF3i9?@>-OmMGSpT! z)ER|x#zZ0M*$?mmpV~Jr5+@cP1!D8JsGDQ(L74ns)vW|oEh?kiV!YbuzPN>?J&TL^ z!=xmBXaGSGjWVO>x8l|lkiyChyxUJ~yYdX41kK&I$|ptu2Y$X#clVD!o>%~Yq^O)o zh0qVb|E<+Cre0Hd@BqNyg!aF+TF%aYl+FA(%nn+0~ z+y^~|f`%9dSt^7$dl^Hq8%0zU9Cs)y1S~SrCjvu}7CsDi32KixC(=JRBy8k$+dbD} zq3!Wt{G)!6@38DPy>=3+3mX2n1hXQm4}7r@0m_#DVBf&@9-V+MESb%prdVr4Z2wLQ z0(kP`;rU9^1=RrnahZjK26V}$b}`@ueiTwgI$2aH^2`{?}J%@Px@1`I|x84o)`lpD+WM>W*i~{Fy#i6O{#^7 z0yG!^=qA#AoPeco00v2Q6A3_7BcN*n8LkEZ4G&;Y3<;zLfV%^J43Uz$00NQ$=wdhO zJl9_(sIM0EH(Mxmbvgp72}!K4=xq9+`Y8f*J+8?(Ouj5gTeo8X zKvoRKpSQhzcbPz}n3!OTY(UiecG3y?Nn&8I`>{V+Y9jyuY&&>Of6&s`e(~Xk^s)TN zA-@1O)rHG)d<-|KK@zA3WF4=l-`f1G8`13O=H=!6y}c!=J|Qjr5p~ZGV2@sx`uopk zFP^u@`>l>0GGC@YVQRpiwtB|yWb*MQV_^ae)()b?-x}dQ-|%Ni`XmjSHE7Ux6;W*? zMN%Senes_Og<`4u$!9)|b~b5W!T2^=0afOFAnq~WigXOY9;7LeH5|Hj9sz)xR_pFL zDrhhtQ~&Kr=g&+2ckwK8fRBk}tStbbD?&!6GE&Pw2n_&;Wckum3F6*$W7Bp);&nr; zb;G^=U<(i;>+2Ch7J@bM!L$28UFIi56*OLjPxFI*P5_^!OVKna&IXaLN3{u&*9PfD zA3CF(s?8S$TyO{)O`mur1jHargESHvD>?9qxLX1oHJprSI0RjhL^_65f>9|wO z1Y7puRH-S_N)(^)AVb#?HWYK;PX@YyUZH9ZT9`P)(Q1-1_|kzdRcd8mt)cgZlhw}P zsJ^0IFl^w?LPYumf)W}s8gfe#MMQXHEGR25>@Z*fianGhaYfQ~6fG#veb@#}jKLZb zw4@8DQE2qY?jgc`>}05+!c3IS(V&vmc`7rgGh#DVN~FiM#i=Y3Ur6JISBxxbpg7}c ziM|d6?xpYb?lJG-?h)T;!KNDs*ycSc?@%d?m`ma8Bk!~9LmDSB399C%D6JP|tDvw( zeHSXvZcwUJ3@$=raZKSH_s5i!&M(hNnEhgkW%_7VdF0T7vYtR7mpG+9GkPq3lz0So z=M0Y!gyBCJ0;Ix8#fHKL;y7bhCdm}w%!cC(sxYuKo+ce8BPCm_YS1*$cwoegz$Qo~ zP$b~e(5n=e6qIa~z^UGneLzh^aCw?-s+%{Vr84Nmn>k##IIua~B1d0E?_u z`18Cp-$Nladu4j%h4U1%s`Yl;28iGcacW&?i7gOHgB*QX`zWf%mpzT9OPgQsR|Qsy}~xoFR6E^aSK>vni-9?ElPeT{?;g! zC{-*KKW%5LI4?{uXcukOeDy^X9F(HerW6N8O+cg{DlaRq7s3`|%JOpESJ0JMV+Phj)(v)Wqo;L{JT zUMmXg^a=>)>nG?ZZU@9PPxIu?i~SNqiZC0{-X+_$9Izb7rGTU$rjV9Bk-bP!l5H-a zF5s5omKhu$8_yYENM=ptWn5%BOg&6pOx;s`%93k6%CdRp87xoEMQ}Q zMejvidz@#B=dX8OD1_i;#8Uk4_+IvPcIaGcTpKA9X&3yS{dd2Q>46%P$dgOVyA5cg z)O}{@%Bi#BKrCRhz5i`Uc&N1BC|x2ST`KOt`cV6xl*7HP&bHgkeR^tbYR`GmYUKsn zh1o^$TILu_CUu4;v;9=>knon`{xm;aW&(r7W|^0~u)Hs@{*aX3kUmDee6gxA-?`*b z{}PMufzK{;mv5JceS>L3Q*VsDt8u7tRKC|bLoaYs*qijz=+o_U8c^s%4gv%V^%eBh z0)2gQ^C0ew^sh704*hS@}(hm4>f`&YWk3 zy@jQPe}K+Jb8KECT|@GxG#)1%O$D3P&yLNv^V{H^^c}cecdR7(Asrjn?1`Scz(UMo zI#gP&-vTlravbqjg2*&Qm=WYRXwKx3u&zD$JwOurX}0N*C1GtE0=XLr8dt&^;E75%oHagOD0~fc1Hi$m}py}5@Ol72H*+sz{F{^%s8;- zqu(mLk)9v{YS^MSx(q_|8*GD6!I8>$szn;88lbVdN#}Uz2vHhdaj;W;nhyz zCTroV+dbmfT@PY$3a1LYALx0yws@{1uR*W5S+D;Rl#a`X5gJy3zKWHI;k`t)=CY3) zY(3JMycSt{-*CsODu}A= zyve-rtK@6#BY#C`$??6gym5ZDk@f29rVklKj2?j1kEY(5eoaIH8+xR-51%@R7{1M%t2g;H)(#8Q=0UbPIg zTI9$0rWZ~&+}^}j36auRcr;z5ZdHcOR*wB<7kkzsI;Kn0wN7(|IC^46%j=&qfx6$CHJgv&moD zg=H=9>wMZZXV_5?Ud8586}1m`UqUI;=d5tnU7fAt@k4#JUpoMK5DNvAmOlDW1r&tX z93DD3I!XXkxuq2e^|x-VgBZ!`SL0}i=par3bfU#hWO7zHwqihtcPz&w$m@F81fM?T z=m;#+b_esZp00q3hBPxNiZD#od}?>?w=$-5qDb^;RXEnHPS}VMY@N=((<=jludinec zpSCK7YaH_GrlzjadDer~!{mx?(?@oCJqJ#&JTcFP(BwjBJMQYA#Bfu`c)NYan9@2sE7_2V6OMm;vyBTM(H@Cu9_TLek%f_;qDSF?ri}+09i0=WNSmCiR!Ze2YwlOS z!?EOM%*Urq$9`ylFi5VoEXS;cK)YJ0LPtFhsf}H+AQ6C!dWUg4v!7oA96W_o3h|u@ z|JpJC-WYn*rptW<0Ra9ctp9BcDH|I)+L<}H{$mjR&GJ{?{uBS5K_smA@E-=zKluN{ zAOh+5t8^T{(qkDd&;`+bI+xd1@qpQ66sfEJDt6%D7GF_BexbnO!nt?HFTxm5n;PS| z3r?vaD+VC<5k?On?UDIK&zrL0GV0)^{E(5FJH5_b##`^Ip^YUI6hTHQ>4-XQ$;G{URb+!R zgl~WM{H~>yi!0-%Y+CO936cH1RIym)!}{vD*If>`6YvzZJI>J51pKQS|8E@=k+K(o zf=ZE<`9lo-O$h&`W5QzUbU-tczwFW93x7rN-?2wo!BdgKlOR|}|I(~~P+U@sgHs>* z4`p=V4$#ohu(GnUwYA;;+@AZK6B82~NmY*Nj!w4W&7RK6naN3Z6iRjx&9ULT_`LW- z){JGV+9k*3#D2 zPU=r@JZk8PQ0_Bg?KPlI1agcOX@@ih4fkhymbnkO@Y-crk9f1!tXKEkbuZ=HkGzfK zOcWJWdOxL#^jR{b`^lfCC^Q>!75GcVR>XuPBz%q<_doWJRT`FUlv<{mR|4rqyxFYM ze~$QYoWGy2le zIwLHUGIY-`1OwntZEPIfF@IbkOiN(_6}SaIlyBdO%}w~>x7-y(m?TN)(K%08f5lQ8~UU9F9bMP2kQZGQe2L-hA$|EK)B4sk;A@jp7mfAAFk z%KmUacE{kykFEPV8yL_TP@=JJNV0wYPkC^qhm}H2m4P+ zBZwPLI3AL49PB4Ve}>)bHwI(kMnl-5EiEiGK~QH^7$ zj2Mp^CcormfGmkBRRsHpjF!lnnNUqbN9;n2hKk}R_zk9DI$!EqyE$ z)Ou)mmqLoUwsIobYgE54GFbsXDs=>?xiI3JG-W_^1!)V=Nl+kQA@aK}4Q|?tqFZbq z;Ojju@TAgWWMHlvbIPLqz7s=?lSsu=W}%CM!qUJ|6F-D2ljt^wEMiiLLO>}35<4Q90)A` zqPL-0Davlr;7(|kZetZ>{5rvR9GD4&rq61LJSB{6=wVePxs-f@#5uE8F zd6W@W$U|}6=*%A3A-EgTwa6P{`kZz+>VE3HD4s4?`I0N5n`>2M@~&s_!IP&LEekYk&wQoBjH@@cjbtNzfmB0CPZ{`3c2GjgpgY?-hGa_ttMMq zM?DalPeRDH$hs3>|5O#p`hFoJ(Vk(USZk6DArY&Azblt;k&?GqY zrz{6FMQ38ZE?tiK?7!P|nZJWq;tRd8i{nn&3T)w`>D=+#bd?d2#z0-{h>D23*tgxy z*mTV#D)==n!9bEcqLeN$%yH&e{Rv>?1nJR(n!E*pm>GOVOL;_x_tJ#&$?Lg<%QgV^ z+ljd@{6Mtrs0p$f;b{Sd<^4NSq*xS7=+^tMEu=T@oz96I+$&jAw^qZ7@rL$-Ka~0 z-mT7_?b+~iZJqP8mTODU2}Up;>^B@{lch2QQ68}k;ic+6$1@FeLyuIS+9GAQ6ZpPN zeIUExz;|VW@!3&n`I^Q?Lc=j+uH#Xo9fXjmvX*fTzfMF1{d>vT)U{39#!F7$aj~9h z7WPC%C!;R(H^#JDEZNJ9^R25$&q)|Oy@AM&4T+4Q1_tnM7-gwJF3yA4Z%!c9F`uh5&E0&^6GsG}M-R2;01CR0%aBqa0e;;3-vT*qp=8>m2 zh$%X2%Dut+A!9Nv9q3w@eedpAI=jYce~4;z)Cm6yW61P!*WtZ>jaLmVIo3;Tw;~=qp+SaUwj|J5ug@bTv*xRjzmx-csX7 zZbGJkR`W;gc^wXxfBPuz^y`gR8Go4w%sDW_bcZBbpfrdj_Xq5NPK}c>q1PC6Z5;451n^54xDFv^_fK6Fzsf`pt- zYCG-`=q8{W%U7tPvj%AIQkC#G2PvROX-nz^s^bfb7~~KyuA`!nH?K&`tPDH4Jl2P4 z2TRE8L{z?$QxLc7xUQ?8(02sgFR&Ri^>Je@l{uPhaJKYxGPjaCniVPnc;j}ZK9AN2re2_r%i zJW~y13I5^WF=3Df{d&Rq4|o|NlT&wxVipMLwCkq$ug1MJSirS#5+n~a(mT+PLh{#@ z#FfedlSICdwneOyN{X_(iR}6G=YhhX1*6}+3m%}LSjWO5*6I+n2T~8bq3B}=Blm^7 z7*i+@L~x7G`pT?aw(-mu0agj;_mP#A}03 zvI>rB$GRUP@FW&TaEcE-88qXxU4A1m%&5@NL+69#Qp-7-c9oq z_RZn$`E%jX?1(dKl5WL{2f8FF<{N}wrXP`Uy-(55Zsa2uroL=d_Rfu;P~)#@ibPRt zp4J(Oy&(#C92@Q!vf^~r&Q*ikKg$WwWo9p}R@tl>hh1bDfsqXMc6KS=(YO=HTj_tM zZmk9-{`oZabcvxiX2poX)_8Chg*P=AiMLekm9H71IW%&<+7Poh=a5pr;j2rgc^SGJ z9EC?zd=%LpEGhLAR^KfM0~ca@LS_<|Bp>@0#Xhz&)a~z-{2+7r0;Tz=K_n>H9Son| zHYM(+8KHB~>&ioLU`;I8UNJ@F>CPh`jvL8s?=3@Y8Y_1;pxs9>8@>(BV2vXLn2r1Z zm*Bc#$r@aYqO60~5z_O&jeZ_#Ba?Sc=T`R4DCC(`&N!r=Tva9`j@qb)WpsDlD?Nm~ zKf)P1`_01z%C2&HL14$twB{zVHKqP4I)#a;9gMN_9el!$pb`2uBuio?{ALkg%<#b6&@?I%})fmt%EhFFx5*(Z_g%Yk@TrUMMWhoiiqo zXfom=RoN>hZ-5IvTqAKLa^jVK8}HgvjR#~$6X zxb=}H7qf&Mzi{~PZbO$CBXl`OyyjF$sx`seH!UW(fybTht1<`EzbhVYWsjq~BM8`J zuTtBk=(Qsid$e)hocUT@=HwxbZ>;FvKETWpx5uo+I!jxlf%z;WAb{bJ`^ zsrGDF%p%7RmSY5R4>GJEu+QR-jXm}Cjg_r-nV9r0&n5~FI4=`4;8-1*X2s80m85@> zQ&ki$;(#{>7h=#3WFQXrA~~`h<`D9qB4L5CL><&UFuypoJ#)o#Cm76Vq!eKkK7O0j z!NlxtEo!y#;MtO4MkJBj~LilR`A`Cpln3#x@^&9rG5RI~TA`qN(a?*7+UHmZ; z*4T|>IAVb6r-s0Qi)Ubd8qu$RMfJ8Bqsz)+gzd!bep|q?`|G0@GPrGE09#q_4d0xR z!|0xhY3^CpEq)xnj7s>xolvoJ9664p@j^P}BjQmUDWv>~@fU}0l{IDvTlfX&ueR>xS@QrKQP zT*EJO;Q{e2gnLM4X5c&e;c+NChRIOMX+D!?YhJGEjH0^Y@9We4q})_P=ZeV92HNLa zc_#UvG)-;|O3_P8OChyHDcUsWMRZt2{5&J(HhOV-{%bt)qaK9 zH_EKp251l z*>k@MGH(`|&Q@5sA|xww4%1}i>Nd2iIgEFRf>G4scZ*KSQz>CkV9DQBrn3}vNuT4oR0XWh76 zwu$g|Z*?f5S%KkwG!Da-M&pu3ySK$% zu+gnM{tP-4IY9I(FnN*@6;x^~$l{Fk$71I%JC7gUD@RDcv0cA|o6Wo5r*TYFp&92p zORqA~Zi&L!bpEor7)E-*OYT{&I*^?H%a)(LUuSr=nWfhdlpUg1pyg3T#iZ=E>4rNo zuY|5yJIHIP{8`Djrd+XnzW(7vW!I1HBv0p$-kv2GnSXa_@zB{|FZ&+Fh=c51tt5uwet7{ zKU>dzU!!HzRG8lT+l^sD^#aYXrI6H=-$IL2V2SjD0`~nZdz#mXy~Fo!h~;e_JnQaK zYCeumU8Hy4n0YBbP#WqhiXo0m$-j~7ZyZ})Vv7*PzQ{@6r}z~c+iPYBmB+9yP;9ms zWFc|&XzsJSgLkMkbXjw?h|tW? z@07A|iQ0RPoR_Y@oz`)bTnzR$pO(R~EgxD|jh{$n%51YT4li@bBg?EP>M_Cmt1u~g z4;Y8$soabGT}_ot!#X%;AG|HKbwh27U#DtV@;iMWov5;j=M|#;spqw9E5P(Mm6u+|>2>Mn%-qQ+V4=ig zn#y<-(6j#HCHbuWcVH?I)B7YEm!bXR#Mb0H{>hrDXTF4ml*U^{okgth=t^W+(K;tT zyNlO%j|dUDhq{9&i=*2nJLa_wNhAmJ;^MAUnqLh!ue}hbo8LCM3O!cWcD9yBMtIsP zRZCZ-S{Bvay_DQF8`Na+z|hZEq%+MYTqNW<7SEFs-yAhsWdu29%n3F^#@1hSCoZB+ zl`d-Fvg_;f-vYditAx)l`c<`n?0URCOw`t8axdplyWfh4DJ3@)`X7WW>9kh>iEPD_ zP3riz`;?SL^;`|&q;U?^`*<;QmX>Z~y`H1r5$UWq8uRw+qSO||IHpbA5E3JxX{^Fd zz?<+v8y~v*5s*69Rmp}-do88s^N(g|T3DJq6wH40bH>66jwoBq6|V1XU$mrXI~CvHQCksMMYJo$;3>zW24{}cEj>W-n|ZCkB!X_Y z{<5*eVzB{Zh1Ha1?3{c`%3LWY_gjbEF*0p~z~C2{NR0MS!*UnG#fO|0w^a(^g1#Ok zK2)Eg(sWoeBJ%{N7q*}ti4Tt`_%Q~(;&wCw;tCpaDcoyW^ol_6fjI6F&5j*iN0XmN za#?&6_f|JiA{38KVEO$ZSD)|uE~2qkFLS;CMyPjPB5;?WR8cDXvS8L>TP#@1Q})2$ zo0R|OkR*Ddv7;JB7Jn)C%2aDKkrxYWb4j_Pnw~FD_>IyBJ9SYWLw&6_5%vBqL14q_ zM?4If=y7aLT_LeSG`khFS~t&B)g)V1dX7_^I^|9i5O>cJHq5gkJGdjm4BJMi3HZhK zj2YEkC~k_4XAv6bX2|~6r?g{O=V;ieUgpkQ~+D?`q0YU-bN z4i#gPhU#cmd`k6d72Wh)^^l&b!E|oBGl^=u;-8!-eciHO*jcJ&G&R4c+1?J05y~Cv z@oKp}N;z7IDN9QS3;nw5cf_zF?AQd-q+$khq|?X>|6({yol3f|%~kv5iM$nEv)g+# zziYr#ru5jH*uUPlrWK;Hm%!H__ogxsjM1VH^po`D zwrcTC^y7vGC5J|1+qr5QSDn!2mKMG1ZDhP1T4_a@{TQz1_;q0?N)2?O&IEB{v6ICf znbg#LYR~)`eE~cchfERuNj3(kv3q>fZu_f&>OI^EMPDteDxsvsV=}W69H|@?-1b?R zqC}o7TA5`8eJq`}Xgm09jU~yOBBPL!mKAgZC}^cZjgKY5XIQ@L6gH6?uEwH2!UV~n z&ORA=x5hqkmmI9z)TYiZM6i)XCxs1qGL<}?;H2rSQ>2)Qdgv%>MZ~fl<`=yDa5D*% zM9drucc37DS-~{9Rpdvq7AvS|5O`P;K~cWwV>N`x-cU-$Yb+Fy2j|5kY8V_(~Ww!DDJROcTdvYUfk2MJ#wG(bbFvkkcJednYGkDSs*|ECQF9W;`D|3(6VmyA^kf6%Gf}s z4{Kkwaepyc=e!v=-MJ~erb@G;(?Wyjb7LnO)@@*n)@+)%0c_%d;XEzbEGyp=`QjvO zZSmXvg5@wfG}uniG1>r8dSsbtxs1?`f@sUh-brLHA;zT#e^jO%xLL`!rCLw~otts5 z`miRQ{rR~4RG^BLV+o8sP~5oxV`6>?$D7JLY#AC%5^LLnzkhf>Q19H*)Dq~IEJIvk zgqCs;?C418nes?yzS60p8ruU~?{qJ|zR&jAQJ_4gpd>UQZ{uve7?ruO(Q;L#w6wIg zutZ~Kh0&;*=%@{+oauDTby_jp)@^kU5&B4|d3iGhT$!T_v&ar zmw2uilcEK+wP4{u)Etd5Cm?zZl&aPkk-oJjy9U@;#jPswG!6JOsiAxmF?BAO2$*zEbo2dwdB;tkwP z(65a|S}}cdUVC<4sSp!pe;-s+5Ec5_8x@G}fX+ch?H=r8-Xx5{+D9CDa*6EcqaO$M zBJa~r{AA0~0Bcr9`i;DPRnXtT{i8koSq}$)c$n1Hdlr4$de2e@92M&v8Iz<;-Ug#l&uRjFYPXPv?anecp_Y&^0F28XVL$-~puPdw?Z06mleK znkYxq6-Lh@o=2!aNnITJD`osDiU-PX;w7R85tn;@GN|nNs5Bq@7q`STZ?twVmd)#( z=l4uw3hn0--M%R028=u>$KS9HHDN!~%Xp+I2c7~RRhzxFEu+>t+xPsJnTPe^sEa!G z_h9yaikz8*U&&v@tigH5z_TQNwg)j})V>D=WYWbq>`|1$WQMJvmQ|ltY5xRi&O_Ks z$0ynq*dT`F96*B@AQjc2Mt=LF77!VU7%f2tU)R`(+kr;p2`(S>1Pe2A zr!X`W>--2D9`%R(2)gs$^ROcH;|7N7LxXX2daB`kgyX(qaz1q4R?_F>8H1MB;M~&+ z^BFM(0eLGeEiErO93-2G<*_u3# z78GN%)f!lRLG5vvu#)4(WbdS0O3I5t1cl)HJnd0;BCUO)+0&exhpbw2~L|o#uknWVv zm@B=U9Ud|3O4Z2Ef0)K`MmW-y6bHn-!zp79hBG^qIqm=1@GlOa;8VOm{Xp}?_zUmtMG81L(*Jdq5{Mskx(zPBX`h0g2 zZClLIL3_|52-(ih$TVcj-^Kg13lS-qMjuGrWOr>PL1-a($!_h44x~|0f_aJXyTj~u?qDu&*L0!;xbkph1 z62JBkAgikK(1ES^KFz?r%XsY@K)9kd2WY{yKcj@YR)y&ELFNp_>(dp1 z3ZS^|jzzA~$-HG2VLg^s+gez&G*gVXr24s22UQlASHK z)EgD@&Tw(0%f#9q$)mevP=}D{pL~>DDcxc(JFhUjv{q$OP4MlF4}NED*)@ca(!Kh& z(4GhQMeqiavdR4#kC}hE6WdYK?j7_;cEtN{cm}4Ys+v>F>2JMcL(g{Xbu8?RY;&su z^GZm^ot}#$%Uj5ahVX|AUuSJPryZzK)bpA8irfTw$evaNcwVGPc6W_*BQNX4x~|2D zzS*$F>v2KfH_{1QHZ%F(S3}IO{3f2T_yTQM`B(=sKoDyI|2|mC-n_OD zyc(X=DHvzef2O>UaMbcg9`R`NYULsA+HxywDp;84r;Q2Q_<6C1w{Dx@k6+ibnkxzh zxfDVIY)*Ty?uRbewJWR!%MGQ}Vu@!YR&h3`Z}l<>AVPJOIX4QwTw6hSw8KZ;1U@n? zjQgBraYnx%;|(n{A=R+0Jbvr_-VU#fvx+xLlFQwxTm3_clqbLG1hylwJRG@hqvx6G+&g&4_w4?nrzk$ghE zC|9|f;gt7luero3OX4`&Aqs2b6);`^cF11K|u;*i7b7r*4o+8a<37 zru;*G{lb(&+H5Vq-Dk3Q8 zp1WR$e{`KK+uG+n({3#nzPmYT`4C9ATPvS2QOlOS*YHye`>D7{P?*-{7dsUSf`%}n z{guXX?Qc>i$1pQFa|W{FUzrItJHh2$?$K}f5N13Jg$p)YiLSh{YToYO9@|Zn7sdm) z`8~$_6osOuLz`g25LC>6l|0J@o=#5C{i&GchUaI=5M^Q#uUG5B z28OFu0YdQSwkbDR|rjaO?P!+r~w6&Pr=W{A_n@d zw)k0ZubEP<5=q9(!J-axY%d>8N62W6d`k{3W zv>UK<6cZtWk?2}P&m-z*N*n$@v>n47c#CGOpd*3~kt3MsPue~1(M%l+qw)OmbV$zE zbitL4ffE8xt-@o22L(DT^1+o|#ZS9(sf}Im8YT}g^q)>XIYi>%P*egqc8jYF7CxWw zjO=bv+*h+oIPWMpccTAAFo<2)&~xFRanCgfZ|dC&w22RV2vyLr?ldO3 zVwJs{*Sq+uEf6nI`sD4AYZjK7PAi{Oh?pafGHem@;fJ2F)uTKm%yBdo%^SpK*8IIS zXXq8Kmpza#Gyp3Q_qO89B*m)@;2jkdYt(iFjsD4qvdhM2#u_X9>#_7_bvP0 zz}{7Tm{jz5^}B!zCO}*j^7V6(jz^*~@+c{8dqR(4K0`)xS)rokSCF|2-H0ma5{1Z_ zZ*pY_Z<*_m#e%olEeyf;`V)|O17D$^L*{v3WchA%e7Hs^-FoU1+w~!9fjI1r()erd zY}!NTyt9(+RNI@63iFs|zPY8=J8-Gl`kzdYCy#AN38uk2S(?$oZm8h&0cls?6rSdF zi(2kkS^ED(l<+=3i#dF(0(lWKvqRq<4Dc>sQy$6QGXlJfw?^oOv8@VU7b1?ijc&5Q zg*kaca~XCH*p93iaNyxx`EaXIM)~TZ7OoQ%89flG%H!^RfRu}?3E>J!ABkVtOrj!N zWkQJ-W!@1kHTm7;!G$Oy zPV18NY9pV$VDDV6>reO&Z47*qy78z{|FEC<2_dOf+MOs#Ygt0&m*e?08{3s$yknS) zR3Va!=KYL!Y7YHwD{$}8@pxLvYBSBiBhrtrE@>|->IGSa%!i@}st&q@Ib+K9Co9XD z)=1eo)Mkdk1dfB4Aq)2AX=P^MS~*;@wrbTd%FQIWu(T>puDxdjrA0H_El9kTUe{6X z!R=#Gy;`jWipqsHv?aS7|BVEUXJG}n+~vm|o%088L@7SPeXCN^y5vLQ;L15EVABfx z$pow`v4cq5orO>vv02{>84I^}k0Oc>MR_hkP|J#>?zfSz_KN<}XA*0OUG(kDiJqL` z{RBjW-pS&!@EY?Mx#ukAhqXyZa|nmu*R0y>9LU7{|XfYn!p4153lirK2zxA_z|9E$&YO1${vexIG?mpe8 z`#xN$*33}x%_I7)Q7`Kd~)NHQaqyuk$k8XiCYbX^@A(pOC>Cd*=8%+^q zYJ2>*`cOxX(>&6rITEQ%G(l!M6vDT{&O$xFG8J_5=*iMlt}T|LCS9WSoY^BWrAKro z!}rG9j&8N3Y>jF4R(A2|nd;QU`dUAjO7puvtDz{@*n9MpM)7GFd(OC6`l?>;jv{31v=B zh2}oVnQSyq9POyE^6d4O-vpdgm3V%QBo$5h+;eBTUH@T5$B`zB%zDM_obBr4t>}x- z3D<8)ftLvE%17^eo6ECod9a70@PuxD2~#;Wmzc7%2RrGuicv9lH9VZ@EK<&^Ww>7L z*A2kL?z7HFZr87-Af8^7Cv$#h)-IK}_3z!DKfZBXLhJ|luTHxR9}^U*@niKAM}=dVM~6T@24Q10adCie`-=JQamGVd|8f9 z+ANdH_HAxbnzc)kzTCr%PCA0-qhK+ItEM8XRAOU~OZqG;s1J&r+qNTJm*evUJv=Tw zSRdP{f(c{@we>jJAqtr=#xL){>_t81Ac;;>v&j)&-H*KEWLqV92lkwDUdy{-Lo4^7 z6HnAJL3H|1)h=)%^!Tc6C4tjZGgN@m1wtKu>m~5?!YIn|2Hc24r zQ$q7f)|QxK7R}|n!gt&&x$_~O*5zcc&9~=HSX2lWartKuXu06flXy|#e)C?N&ARW3 zYMY_R^(Z-Sf&FKjairpfo=!s&X;Txo@fdh`zt)wR%vh$N$*d&Z0c~0GHcy9pWw4wt zMb@Hcq7P;`j$h%un93NCyI+^QZu3BuUHyFGSqEj)s|&3b=u4RpYn9iR5)X_ihR+{Q z?w2<(?-6G+GV~UxDp>0P>vt@hQ(y;EQ zypdcL`kgI#3zgq9ibu=JB*@R+dB}fhQ+Bi}w`R-ASqe(|ab@?l>xJoW3H09yj@*gj zq2Iqi$iu%}9Z6AG+YL3i;-GC`mCi=F^$;9Z0S{%vfy!feUY&LaG%hid} z`E0g;qDA=~Eyh~}y!vYe^UI1pYpRxmX^_T-hO&H|Oc|)9J~-sQ6kHO0(y_&4C+a6v zpE7N~yz8Lz(M^G`sOa9NKj*^nw$@Ne3KFyGqa~rjAlrLe;`;~8n`Q@h) zjks9LujaM^Ro3`YEq9A4;XRxbn_$Gu42|8LB-%j4_pBxF`eX0{eB>y;VLehJqJ>YXgF`beVt z^qGmq34utDic6z!?tYZ~=q4V1qDr8NPa#zF#_g`tR2aJzv_kLdc!W!nIfPgEb_MMCF4FOt3|<*;M80mtp{ZQR{iqen5-9AFj@ z4NtGa;c&e|oO6V2UYeV%@i|KWtd86Cg-*)ejsWFYYVaGE2iCE2EAVln!R~v>RGKq!OrNEoylpQS* z&AR3dh4JBu<>j83W$xiZIHI56K1S#$UdyA@g4;yD>av47Y(BPJO`HtQTa$F{D&LWtDd8$h$JZdfUU@HFcP=cP+bW>U=6Gg02 zZ0YsfR42XT`WAO*$8-2@nEK%52lbgsh$K6BTA$CTP~RmXfs$N0LwcT-d@b`LHUUc~ zG7?7@Um34G8hu{Ov%+(I_bsb4-wBtJqUEf1#gR?t6I(qSyV?dDRRO-Q^utnKm8)ov zb{R~P@XE_@LCsWjPhMhdrc(1l6{5*PZ+>yA;Nv+c6iv1~XFC5@(4}mwvHAMowQS3- z+RipM?;QD;fo&;0L%O$WM}rZ>RH5z^_wLmC9lI+fn(_iZAJX~Cnng#9Uzx39^CM4d z{7EH^+TQk?A9%0aYD+V`jiJeUO-XraR7B2aRK(6AQDlU9md~)xH<-e&B>WXQ`OrT` z#nl5oic=7SdHQ3&-z0K~E)!F0Q*%Rb?ZRKXApd^==E#Ts0kB{8Z-DJfy_yC9D<#{& z#&3BQOrE=kcoD1umw@a&>)PwbgzJktY%Czv?YPtRstNmppF>fu3}w#C2WgCxQ?Dw! z4_MU^lCC!W8%_X5j^tec2$6wy2S*bEOSf&kWMgcl-7QBmW;=u#YuN@Dm9=I6?yb!Y)&8-jRn6#geE;pMVW6mmJ9QB!d2A?*Ynl>Dj|$(#WZ_7*%T9seH`Z+;MU4O#QeD_tgLoZRNxoCx@Q2%whN? zF$ag9FQIv?u+J-6`HM?~`c}}SN=L+E9-LHJ2M$BkPd0F;NI);ePo2>p;q@AQ_sXkV z+TD3~?yJ>%x>qX6H3=~L;qW^#i`gOuRIxtjg`_+qSjo z3%L?cdU<>{+9zviO=yqL9c@bC2qP!&r**!?@G#ln`+j3;$Bn`db?V6}p$`=2n?A_T zG^>U$2WW6OPaCjNiHh_a-7bv1MBI=Rk-(jpbd3?)XgJ^e(fB4~ln7oc!`{=AM?*g@ zE%npFWt-PIZpL@o3Qg-jv>Rnp)Sr^{=DIERIgau?h2Ypl-p{ZnPb@UnzNZ_(}C1@`kLX*OxAViLTwPLiLEfgA@@r#uAguaH{ICe7zX8wPV{SX&4iA$_c^^C; z6U!88o8Iy5LfDl`Niyv2j&_$Ypfc|nv#60YEtJ9~Y9MBJ8cTkH$jbUt_5#o`Sr zJBDd6ATMZMFh_35=qqR|2sr^O@mWQonlsL3dG~4WR>@A zTU^m1>*L$}7g;;Ux3POelUC-iveHG|`odxQkn(Jj{_HutvK+CupZ<2Y>4Gz(sFM}s zo{n)m5+tG&#&B;BvBJvU%r91k9&hJMV=(5$W*F9CEP;^X`{mXaD;YEKotyp?FNj}K zk?cJ<{rN!`XO7Kh1#)t0$L*V6zOIu$TRA%O(g=1C_4fM5kD6t(A6QQ!LpNV|(ptDU z@9umaQ`|0C;v4y>oGj*(QS&*PF~M{uw;V}BV&B@xBYNEmp;dBQAjJPoNXM1;qMd5y zWT7d=id0d7ccZLQ%hTMl9rC$ZGj&C*qO9MB7<#j@GE>p}8_k3S-jz|3ILq*$OR`Hz ziSOKTN(POA5xEP>Y?pQ{9#KqFAvHeL-(X4FHoVD7<}dhMo(i^>lFStbY zHBy45bKDW7r0=fQk3BVNhu|h)x63kbWK=k9q*bcBF;#zydcU*gy_m_b3h}Ovc|7EW zXf9u*5z9lw3K*l4LF@-`n5uS3FLLP)O&9FQ{Fob;T%0<-KL4cx{IFVlAP&w`< zu9q%nDKBzE6j%YU=5{)WL+z)-{bRm$uf^WFz-WobpAE@$m2!WU<9*@v!lSd?n3wILYU}Ch+t&B>Zmh z3DQ6Cq=2i8yAQBr0KR|kF#iZ~?#`xw0E2C`e-YqfxiCL4^~?T-sdpXrgsm*(rNzO- z6^1Hi5axVveG&TnkQ9I^KnL14qLdRW(fgz9m0`q8Qa+jhR@Jk^T)I$a^j_A3%AR!) z!}`JXk4O|u`=Hvrjer(HGUa)!siN$`L0wlQs9UOYqx1_h4eZ8)2o$0%H4>P}$3yf9 za0u^ePYG9QW#yfZPGRHaLq30Fn6+Z6i(H^8sd?J|o!0XR2&J6sf{x>Po~)~?k8qS2Dz#sE7nJr7?EvGZPK8eSfJu$i!r-dY@{(T|~h zg4IHayMBYaVWx7XAY;;>$I`GYy{E}dh<+yYa&ocD6l}`0BPgLcq4}3Q&xGBaOBDDr zoL%qonq{!^Tto@;i+SZ2jPl&39Y1v*@wjX*u)mdC>sf1cZcvp`BW+D{;p60Rwpo z?XmscsYVu|avmN6)tSAKtDjPPMIJq{@juew7eKKZ2l{rKz>azX7au z=}*A^vcCbAy0z9o0ttd(U!h(0C}gZp+-PBx5RpXYU$>QYS! z2z>yfHj>+$ASzzZ+ThgiIShi)^o)QNueZh}P%YTVbElk19uz=fYbFjXom3$4_H*Ou z=F%l8P_@GOc@SWR^fCQD-#f5m1Xrf2tBa*y&5%gN9*CaLmKS_E^PU}aAZ&~WpmcCt zCB+9@=-S`kL_@Hda1jF4(#&)OAjigLaEth|Mgb42rh}G?)2kqqI?i?Gbo4-Rc--RD zxITd8<91J6)R)39thu9Jh~6$r^yz*Kg^!;5w7%T<+S{+y8S8l!d)3&H}+0vCE#=EB#XKGRY4 z8p z@xLmix>d11g559sJ9fGcgPq{G3Uq&GzIoC-eCn*at&}@4zVAn0BIOnh zr1|)E_keXcz+4dUIPOXJPU+7TFk?MXWFH16Gdl&YWkgD)Wj%}&q&;P}6|J&`)+yuR zJ%;jljR|4%`MNK;f#zIr`5UVV1>O->CJrEUu3f-@Khhnq#7_4MR}~7cOL>D@2?{Qy zB^zcO1#zwfm+7>c8C}x-c|+?fVQC(uXQHY$o?CwrG?8Bf&Ghv24}zA%0J+H5x!%Rl z4x199sM0(7)rj*YEPE~caq{$0h7W$!%?e^)%+_?)w5q3FKLpJ%ZV%<2!Xq_^}qP7dA~Tnns^a}OY-h~(i>7!lh`igBHuF&co4b(=kF>&jW}9BS#> zO!8IvmeUjL8z?iBIsKmG4l!BiYlXlDLm8nGo;1M=WQpT%PC0j@Zyj(r-i2{Isikz5o|7~+f{Qgy%Ma~U!BFDDQ#lqcr6rWasqY3vT?ICuwr8RXSeQUFPyj7!Pj? zHM|{pq=wxs%=5B;Due!qB99=g_Al=DBopR!$KKt&DOOQ%n_MTcek~h9rvRIZr|xD+ zCQl5@{?N(z;Opa!+qN>zI-Tw0~yFW28KUqXTlW%jQ8nxUjlF$HCj&6=2?LF%=3Jd3~txW#RmKn9F zM(08Qi1Cm95x6GP9^6Ok@oy3)Mg{)^pugo@}3Z2urQ@n`50r_k{PQ4tV5&}DSnY)to)Mfl0)9nYfFt-vpR z4+%XT$SVyYcx~>ufUe@(uTvm%1}p19(A#})+CDU|d~mbV^C-M+?`XAEOfQ^Ka;%21 zjahdY<@D&ZuO$Vy6xLF*KmOuEPZQVX zvUhCJ5mZmGT#cUHKDw-$TmGYyvYCVBgWF1LAUL{aYhnq0*wWxG#c({O-t5x)dg-&_ z9BBfce)m3X%toZJ<{9R51RP;@3Dl?nkSW}9SkEVODLREeJqc2ov`lq|A-+!pq;Jrf zDnPFbZ%Bcuz6H=b+OXqO;7+mMYs4Rb*ADWVu4h_pNT3BOt~!o>*#AI#4_=$!E#Er+-0e6^oyXCu59W_+Doq(o4YBu z8kJ~TAch;#yj0wR4vt#XPWNfK^lJN7z{QNdeVRFe`ZuE+uD*Uh+snb_!zEMKynw7~ zo+7!GrN7N5@)GY^=g?+TXM|!?qevy&r-^^kHsTy0a*d7Og!iV-K|U-e?#Qa*ruhcL`258I% zXUSIA)ZjjTUyfhTyi~<}G0Gi+z~c5NBY+fu_uRs`t|Y0_Ad-ML;&bvq+yAhx$1x_s z5ro5@5n!<0O{|Cf)?oJv$!r{4uLtMeiC(7;(eHuUjrnY#Dy36wbv-IIX8`R5+!A6# z*j*o-u(PTL+Ji)%A7Z_;6!h-hVnQ?C?lxa=mih$QH=J$({T=HGm%Wbl$35r>H>Rp{ z3Gn2{L+WMgvw#IhDte(9EBDswntEuArMPiLt3xpe$^}^RwrBD(mX%XwZ*qUfxIZGj z_$XYz2dR=9SGv_)S1Emm{~{t$ny^)dY!Rk}NND1hZ+BK=#-Y_ZG1}6c5?RaRL3Sy2 z(Trs%&MNQvtdn`5)r>5fMTgM$Y+Qh24v;;-7eRr>BzbKv()nVRcdhy&k6G87x3{4xVX+2=RZ3^>gFt5+Rm47 zsubnCo55o~g6T0ilkm2sQH+!SzVeg6&=4QXsAN_r*={WlE>noDYdQtx!t04!nUn2n z6B8R)(zv6?8Xt(PVU@Fj#g{hOc~0;+-XG5}C9|}=DB5!I>nD~L3nzzb==-P2Wh>1J z*j~gkIWF&~4sfwy{L}7k5&7RC^FQKLA4uFj3D(TcDHI;NaBDQYPwVm4JlwM;d7gTHv?+=|bxj-@LXwdM1d1_JjA{}k^|GV7$#F4|>YlfOf zXsZE{)&P+HUGTDV{?~$6OVE)Yx2gZKzrlH-{t(VB2*{kU5@Bzn87>S>Gl%axFwbrz zfBFgRsxleGRI-(1Nq5G%vU` ztQww@xwGYbtLq&ARcxXL9bwmSm4LjPqD(4LQ;lvQ>Mzwct=8$lAEfTCHk2HyTsF}- z_c1uovPxCBfm|h3RlU>EP(qcZ3M4IW)XLOquz5_e7HsmSH~@SDQB+T!9n`0AxgpdF zVXJ~cxxBL69%3zxsPb|C!m5qON#XMHhO0!*lI@T+JS6^EQ|bKZzk`~}&c@!-(eV46 zftkg|Gu!#sH0w*tD}(CM$-Rx2M@GM8uw<}VwKuF?ZI!H4_woJOevXFP*3g!ELF%-n zQ`atiU{l~eZERPO$t90i<%=8Q;I)rES*+&yZ!P^dG-=566orJSuE$u>?_Y~|PqJnh zxlqO^sF=@Jv8h#9P#6mH>TJE4+NJTh?)8#=O(r()wr_KAP&mX)=nd6T)$R%DMtph0 zbi3neQoNA7YIP{pIbu4`imNP*pDaGI@n{hLgBXh^UP#>o5IOq~=3(djUz95`1)?8F z`DOn`%D$BEU&__QB-QTh-Dac8>!I{JhfLVx9`2`P1#!Ctts85Qtf(^Qh95wuTBXYm z8r%2r64zULv7^*ZKo@alN9>KWvYT_lrA?<79*`-so_ARnakpF!nk{^nqg}GRzhaZA zZX@ZqIrj>*Id@Guz$xFjT8UmyQ&q{U@!H1j)<6l#RqoQ}O+>+|iM=~PK>9h9gMj)3 z+YUOEv~;{o+Us>mRrI(mVx?@hlFQlMK+Ew(yG@nX{`^<9&^WU~Wv)sgn{OrZNH;DW zkzw{+Z`7MCAE#2A38yK+ulv~QwynTR+_sSY9kezg(Po@NN6dcaz?VuGf;%XzHJb)% zPi9Y|_ck`^p7U~-SC1_mD&@1KWku-h^5TX;P#)X$y3$Zwb=l$@H}82Ia#gJ&H@?~g z(Z^XT1*<0Pjz>f-B5X%|_CV)@y)<#6%ytFTfZ-{XPMoN30Uq?!qn!BSt>KzHD_4dJ z>*)l>NHr)kY9ULQ2@o1L6GBk&cn=5M-5W??J-NyfZu9RS80@9fN9ZNKC7_L)WXLIZ+pUD##NlSoumE6NHyc_$eYy7o2YvnHKJR+px`&V+a`!i$b&+9KF%sDW^j%cwC=Z zn4P*{w0!@WfyG>l=f^E~@OXTaO z1zS;a%(?7yV{i5i3sPfAOG9CL`HpZU#_<5MQwnP`ongBQ_qaGTyx(f}J(wq(jS35( zzC-s&h?>OeA0B4-Bt&-`1mb(Z%YIj=z+L?RO`(#wa`cCj{jz^MnLBmUp+Yq&`AFK< zgu}L1F)zNtTyLk6_yCAhP%lXWP@eD-=_(Pd5D%f*4rCkxQB+;|h_I*C6=TkSC^j8D zUT*P9g2TD8Ry6mP4WUm_+py+Qph-zplsRGq5cKp6AUs1Y)0;pzHm9bmuGYZr?)qVy zMJY=v6Q%Oe$h5%@El%6yNwFH{jopSqxL#6OxioTl`cn_3dYAPJ4Zeb%<-XWvfyFLG z7FhXXG~U(9?R`%Rsn7hQcQ&FMoN>AODeKq+vwomf0X*VRE?r&B{P3y@;R3#;K{R&k zTJRRUwf>eD*@z{F@T3BlQon)(w}h&DlSfdDAhn^K!qbmc)ZA;dSJVz=#OZKSOv0 z&y5=}05E|+GX1~SoAT#=LhG0P4O(Ed1?Wv6t1}7nC8xa5nMg&g8ja3h+C@+-5ulHu zMyB4-o>27L0P{t0mGuOubxQ!ymWUG$^f_`o z4mQ>9MGvF>$)FGqn3?C$YKwZZp59~>CmhIFOB;jg^eZV+Wq8DDyo!0oM5Ti*BycUF z2L*JnYQ|PC^xAZ=aTI8=_WU{ALPd{F_#rCU1PUr$d$MjlhKoasp68_Nyf9W3dtB3n z7Uls&B^Sedy$LSq;b0kgubFEU6mCS1NbaPu*a`_MlV0)Byr4$nGAwD$r=(=$>1fuH zC=oyEJjp0DONJkw6ssFCx+uAMuYE^vnJRly|N6)w9?LdOA0h zET?U6C4Q*|pyZjd3s8?hy2oui$5*B!Fvz#AiwLwcrXN5?IXkShLuB(OYPjH#UB`NG zkv-x$$`%@Oik zYGyOB3C8@W$!fQPD7@#BiJctiw&zSjer}JjS|?_6zo95~IejG^C|J^ZNR2_ScWSkM zp!EevB6>hlqN;kJ6ujWTS;eB*x zRWaX@vpp${-uUe`#T0GAUhcbSnJh>b!H0MC8wgEw79{7PUwQa=uJJ8B7fBT{G|(S> zJ@U4-<9qK!-{?yHnbA?pMgvQ;jx&Ss&dVzubyw=oNHX_D1S|S7kKFQj6FczD-QgZi z&f(-33lT4M^UY+n?k?|aJ?!2~e8om&Qt%Ef-Jr40lZJD;f}IH(lJ%$K0%DVHo8>F; z^YJ?HkqQ+ij0sw9k?~eXt{YJ9+Nv2DnY=TI5@361VH5Mp08M9|+}GH8MYTZ2ur9da z0mCIeWvaxZtj?||r~9zC-~X(xy$MUYQb zY?-u&o;fU!s-$Mp1|9uLxxWAC?aT!D`gr=^Q*{a@HMY9PpY|cZ!pod0?Oj=RDg;WJ z79Av%5SxlQMn>u(Bt(2=@T8|uxHU^6A2}6WX$iZg<1@!GervP2X`Y#RGXe7p4(}#P z(WzWiQS_x$?5lJn+LV@}H(bmvQJdykVfN!il;UFJMl~hE%9Dl2kY9MJTr9tuzayh- z6BHbP6@h|-3-PJO0W}IFp1cX~O%RJRx#2xJ)$~c@eJPpFTL)>Bc?g2E-GHC39V=fZZ94Mv4EX2%YwH`DRVOnN$Apt_vd4K6{{6k%EiK~J?) zryA3?ZcM1o^>FhV1Bek?7cI>mGy+3%eI7Q&RUN~&(#sb$u{+xu&z z$kha(sUv4(*Fb|M##Ul)w<`mrwPZd0F@7&qN6Q*jcbVId)Ln)n=M%!aH9hRx>o0kQ z>#V0#euf!O;nTn{+5}wOtKWB4T~AtKJc^T2;I-kIzZxJ@zZxJIdf1O_r6oF`G^sI` zAbMVQGM&NmmB-w1ts=QmjZu?gn1{$Qbds)s&0My|X${Hjs-$CG0q1vZTo?ow3PPMb z$TrDBit}m5Diu~7JVSZ3PpvYRMtv7^t4s8inf%m~p!sw(^i9MvQQ;|KW@b#Nl%=6m z5Gt7x7EMbRYXT9#RilKpK22*-(L25GWOAVREmwh|8PK}8UP3Zm3I-()zrTw$cFzAR z)*Sx)@B{m4{?B3EQ{2aYz~Yzvd9U_aaEEgt<&n%MpEgsr*5|WUzOD8Yx$mwZ*XR4w z^Ky2ZdHi_&Kl<{7+g#Znv6zHu^}Of-r}Xn4Xv&}WKp*}cM~<0nw#mco)1P?|PYnnj z)4O}J-r+pOGURe^1<~dApATA}lU++qGG5vzVj}U2PT;e7ajIy&E?J%H;l z1K0Wc#dSa`a6S|Z44v&9|BYNw_xk4}`elFfoaWlY_6}ft8yg{76RB<>jDljq_IeCl zN^EywvgN0<96y~pTynU-b)Ht%f zTs7GnG+tI$T~3oamZsq7%6oHJwIK^7DoN~mUE_OTo%p6{bg9jOUPk~Yh;~^M(UIEH z#Yhdg#}1_`-lmr0iGViB3F*3Zif(NTR*hi8b+y&w?&d*oo7NVKnTx~1_fQ0ok_8M` zptCPb!MjpbKHuQ5Dt33cDkPCLD*2_zUQwW-_ZVpE)D}^^I0C4@*B#Et{QZ}8MJTKo^ zoQlaC>Nn;yMpN94t&NTC*#jK?A3IW8x|-aZi{#QY6J(M?-i+pJDh|lYh1b1buA`H~ znI)Lb3-7@abNn8Nal&JS`Tpq4CKSicb8fzKhA%rT&hro+L4W;_GGac@}`u!&F0fkWkt9>E6s_mRC~LJFAQ~ zS#?=FhEQ`w9J?HaQQ$O8$9lJYrlnHPs8i%tT z>VXqf^0<9~nlzZJO(~5ZkIfV5li`os3UnP03)o==>Cx&z=tn&$v3dE5i3 z$N+K^P-wXIr97QWZhjMf?H@}`K1*tyo0Cb<3 zZ}Chu_>yExU5Tpc@%2t)^YG;xe4MdEn|t{Und%AWjEwZ9B`_-s1Ei(O*1ALPGuSQ_ zI3ABf*^Sn@SPj{h)wC@Uj-#uuz1jFs3z)2W_r?JdK?oNN1*%V#^&@Q7WKcLVY+)^S zl>drB+arTif;sK+qC+@?xsQrpGs5l-m)q$+IL;`QJ{?Mmr6;|l!dYZUJ>Lmy9CLrt zVBZrFN;UXaHo)WN`J;)ElA|tKYWHQGS@^rZ&o67Gp*=>A>%|B$UdVkw(Gu&jevM+n zy>o_x`(iWym9Nu}m`P*SODO%KVm42Ki$8c1_jld~`l_2eRa!J}A=UMJl+8d+PNuaO zBCt8B!CSXQBz=c^)<5F-`XVi7>?pod=WShoZS7Ket$MG$k)K#-*!^3lW)Db$!vq-F z{hdkfvTzmKm&TejoYe8Q=Ip0VS@LQxncj>#wsQ+jT!La^;ml0fqw;#z%B^7H zsPIUCnW>a;l~-Y5e~bsKtRC4C0ZwG~2g&$P!jAC=k{{XRm;Kv|+~0Nn6)LN%D!2A0 zDS;9L=!U1W7gO%Jtwh4Ud|f{RVW&U!h_LH`LL}ADN4bNbdVo9V!D;KObe@5_-68;? z$1ZOXBC&v7#HFCToTVl!9s|8)obw#cLxEMTS)3*X3!PdTEgym-@K{eg21HS}?i46; zXKcLd+`ZgMf@9WP!z$(tyMD6ACK~8E;~8QSK+f@4&V=d@bL3nQaYya~p1Z+CgY%YJ zpLJO5p)r!u5Azt?!UDeoaLYqB^}2j8O9Mm9sOkwWob#21!2tD`$K2c^gw^3yU1_~MJl=CEA`bxtdXr68 z=|NS>)Fd45*}e)K4zOTp_)T2N^muR}6SF#O-yYghs*Z$IjZ%`ckz73TQ?+UPMOst@ zt_kzn7w{jdHrGq@y-vwF1J&l`_Wp@tpxUr(k7&hqnVd;^+u11fpg~>f_N#~xC(9^# z9+fb(mZg;ZSv}<@iiXRjwb%M5BNJgT#;c@p&gE&QRQpeqgPT`YU$A*NjPvkmjhCM~ z2yT+oS}AZ~rYOqSOd}GGu4Ph#( z!hmzCwahIfEX+|C#5rggC@OhG+?UQ5Nr*0ddHDFu)+dWdzjsP!BI<+gs8atQ4V-K) zk1}nL&h5eX+~30~E=K=asZoAR`U9W8?BDn-d)9b}PdkLIY)>`7XGHOMgoMuZZB!TB z4q*p`Kr9Zo4n%MAW`2N70NcfgI28yKg9!tuD`z2S8~aiBdytKT85nh|-F+S17s z`_5wDaYRw~P}RfM9+se1T947UD{Y@>El1CL?p5Y|1&cz}lQ%2d%#g#RIr@wxl7vm< zV5UBk3Z`b91v#%(;#$Pc9iUE=jK~dZmIKvjiDdaFD);qelJV&=I@Gio{vqf ztGBn1f1RKl*6a|S%9ikogy<$Exs$o2{I)Cg5Zl_woc-&kxqAU;3ss|t8W`jlncgi= ziPgjW!o0N}A4urvp4xroM^3)xJ?6be&Jp;&7DU%dLNmt@*wvpS%bLI1Xi$ zzhA0h?_%^{R22TBCw`pbFS{Ov;qNCpQd=`I@n(*viv7a)ED|hCw;Oz8D1LQ?m%1`%%TYyol6m$-KX@Ko3DiWA0?p8 zC4?TT9l3Sf+tn0xvbOoyvC#@S8MuzlLoXQbHD2u5dyqM*s_-`=N8Mkl-%xwmP)2lX zM_}AC#j2M5THp(XV$b#0qMMgro}Nv6KH#Sy9Y)iQbk`73xgeP-x9+jvPc7bm%29&h zDCLpRvEguEqM^}#M$#+d&a$b|Phs}?jZFlEXq zm%wu$_wQ#wKb%a5CK?eU?Nxo5&r)68mgu{;M}5vg=$c=qeId(Q&Rkc>wMvcborkt( z>!vPcXbz`NZmGa-Q|rs>aIlO#>tPgE@|$e91XHbl-#CFg{_V2BsS|kOUpt;Z>&E6w zv^lCEh8})te~+X8htP8PJBJ^QzwH0D=m~NA>4(4U-|u7^lsYn7{c!DDu(@Y+Zi4S> zU*LR$=4zkQVynsabcAPE#!8>#Oryhmlg|2(_s&AxOqI%Fr+1L`J=A)}1k7Y(1iCd9 zveIMsy;OE*F>ZVIO-F6v?rQ4lH?>zKN*yp7{o?nZD1Y z)8Dx5EW~zx;Pnj6bk`BH^-VyG`}>;R+4>%y@y4Vh_>)_=o?jWu<<5rxA($trYwF92X;6Kk^+raprQU{4?ic z_l07W0_#Jbh*Mm+Z?In$PIUgmz{A(H!c6@qqnpoh_@20h)GW}_IZI7?oRUURipapo zgh`x*n3a+J;>%~&w&arcgt#T#J&*9;6XO&K2%_P;$IK)8CMsH?s8~+spLMMq^;bIZ z8lEF!;QK#`@LvlV_lHmZ2%*31&qO$9^xd%RS@-5*TM!T>q`(dgZt7$nlRg@c8wc%u zJt;5RMcdx~^GKivxb#zPOo|9siSDBVyFa71^MnStQzFltUGu?zuRq*|+4n}E@|a5P zbeF*fO+nGZD7rgF1;M@KDxUAu7Qd`HijUWnXLRe?>B@U8S@8J->z!q=`2zM=YIJ({ zv0GKe4^HV*&Lxcr6MzzuNoj|}ZtstTpG@gi`rPT@<@O0lh&s@x=>S@b_sG-^fdD08 z_&Ja3FM2qSyG=!`z3)42E*Hvo^=(h3EKiF3o5ZS*2D=wBIHTO3o{Qx>_A%xuclb#` z@kOnI1M9IMf7Wr^iL{Xl{L^pErTW&b8B?$n3+0W4m1a`&Dz&Oi;9wxM`~ghG7q8RxeI!>htP?*)Xd)J>p|57Pm|D{rTDc&(qz0B$_ z?{v>ROVr=nJd@Plzw)#{6w2=(!^&SM<-Z(ui{Dkq(CjP`LXNLQab0I1fI4LP#uob7 zw&SsjbnULRh1=Q+T8dd5r{2DPytsLG@RakA;F6nZ@wTeeV0J3=ROg3vchs8%9RJKg*FAn6IOPv){IY*z zqwGrq=<)OaZ0p-qY>7V`+Wm}4eroFu+ih)FWP)_a}W8gkjW=l3Q>XI0*^b`7E*RF;&Ul@$YPPxtp7&wA z{H+h@V)UOn=z1k*emwVI_P6K$tkHgUqmW&g2}amQ_s1X(w;?9o-N6pT&<%FCOV#$E zalSMWekaqGOUKD%>)=jElMmSCMuTSx)*w{$%EtM<`h${KJKD|kFjC5Nt(Z?xprRf;dtfYC{3aI8dy!=-owQlw$3dkt8b9GU5nY_hC4eiHygKf zPf9qUl?kve(EXl-V%x#`LX;vVtMc6u8$+;A^?v69zw3sD>;TBMhO=HGdL z`+28A4N-$VnF)mRtyodyX7{BdXGy89k)6Cv%zc$cK>Fe-w)5g-w3O!3ykbXA-rzeL zE6sFDRFdWWZE8lr+kY?)>eZ&(o8Tyfz)}29-S%G^={BL~ew^7a`o^SL-uarWb&F8)a?QGR&r18j z&iH!5jVzcCRaUNh<@MZ6`-q#xN+aLwFQZ~V+CO%1GwfGN*;fF~?rF`gH)QM9{iyi6 zd9IzJeID5#T6t|>4riH%wG-p-m+z8B1u*$51_eF8 zHCsn{I_#_!UovC)ercCeUmQ);upC@@gf>-&*~xc2M4sj0(+Bru-^g5H$^E98FE4Os zLO!>;v+d1q3E`(R2#RWL8v?R$`2C+p`_K0E;V&G14hOIgKmV6INUl=-c(lLlFLwa1 zNA)@KA+Hex8UhY;SNVxg5}dGVoBc5YEHV(*Egq;mS=z+bwf5DuezP}JP*izrZ>R{y zIJmAHRZ@A3o_6GCy`Y*cqxnD`hsVc7c&@K5&UAUMp$YJ>e2q~Tq+@Qh_KZ%|8LEi! z49ydITkF5g?3ZPyX}fD8b}&vZ-XW2hGRb@^mAnQzx_jf6(E+N@t<<~Q>(R5&`8jyU z6b=Nj+Lk_ZgU4Sg#=2T-J~j~^nca#ji3;otoZcjS?2ljjbQU%F?Ar=~FN}5{15~`{ z0WNy7)^w0&!Eg>W$Ah{fYGKImidgm9ztipr0smJhOX z^3fQAqmE2{TmN>C+C6n7RzliB6m4HBA(NVcR5u3#P3fWJxWAmXm08HfH**qXpM;G zj=-r?^1CFTPlEru0KXG*$Idq%NqNqzq0Ga3$FIF!>NMF084dg9CQ1s*7Zbg+imyZ2 zCa!6ev%VxgNztw&AnWw-@;?icb5G`C+CYd<1rYt8MEjq*$gP9te}MUy{X0&$FSPyD zr4wM;l7N7H@|$nKhQQLOFm0GQ#AiYmbb~t!36hJ_u3S=RurW}Di2=I;l3=EJmUj_M zQQKus9S-_~J%OZPC?0}a1Zx1GSL|JV1_{aQPC-GdtCBIxL(yP0pa!0XT6vZxeEzv- zs6?KSrsRf)^5$axo!M;+$~XN^T~!K$DaKDsiVUQy$@8?GL?RVjHSA**E$<^<&(4EQ z?5P&E)N5>2chLdGg}%x8u*~%5vlpd=9;piIKH#Jp%5YMmEO(bJ?y}a^v=iQ{qMF6l zuGHVOt+&d*ECV^mE>3@ktmEiA|Khtxy~&S~_?|0?i59kMgajy z=?)Q*de`3Pcw}$%JmT-X=eqR!T+biy@t#>Tvu4d+dvV{ZdjjZ#bHE?sf3_oluN?=y zl0?kO-rmI7&BFZq*N^{oDgF2xVidgB1LLCC3rpjQ5AHbM^X#|n-u&y^cCWj$!7;?S zOBqQa1&1Ad^vBV;d$R{FqTLh;iHhBFRb{jT6EB9*C5#@mM~R6+iCNYHMY^ktsei`} zLxrAeh-;9G+x=wK98*1ZacSm~>2#ClfJ6@xJUQVCeU+MhRPbB3jS4#T@$GM$%_U!2 z;Vynb;&{d-xUoE|*-MCrC+I?}l_TTgS7jGE^M!TzTF(aX;vBWFo~)D8+vW$s1Np<` zFH}@*eV^xKx!awPxxwG){v@*0wSUDxxbvsq#tW+Eh-f1HFi@UJ;Lnd^w0~Dq!rR%z z(foYHRF5YB7xR1m|1T!~8n~E3RR@$Cu<+!xpJ?~kPU^h`73$aLmJT}uqWkri9)FFC zM3hT(f46a1s8$-{fIk?s7MkkL?HU!LyWXG6+%&{>lrXz_64QrzgpX>o5p0qQXFbn{Yi8BoD6V6Xbe4vU+;f|IEY@XgQX zc#QH_O++ExzAbn>GU0VY!<%A;wfQxY%;#$)%W*LnuI`aelfud4KTrQ z7e=6GV|T{mKyhpLw%49&Zg1(z=qsk$a^}Ltz5n_iA_nW4JeobarJ%F((&JKfHTtg! zAKv#;Wu@nI+FG`zipfpZEX|VsfT;1G(Hwc-Xr!e>G z|0>M){Hrjt7E`8QdwMr78y+s~W=>+h@K#$nbn%>6*d2coH*|d4d*8rs>fj+N8`q#A zVe%ng-CFO8)JfxQ<4cH{#@>IwFyavWJWPq*`73+7+ors;vAwk=Vf@8*V{Py1#K*4{ zrP5nU9;+x%v`I`0f4X~{fWL-L=msw@J0k}g%Iept4}ytCvAx0~EiIV_^xBG2Car<3 z1?(d0aZP?fj@?jhgvM-TBP=-xaYuj?s#_(aIx zaU*Hx_~@Xrh+isd4%1QZWO=Z2cxNnRU1nxOw1d|eMh|8zR*3ybl4y_icdV8M@K?4|44YsBsup@v{f<|cUM-g<1s^x~ z?Y-#s)TwkG?1=d6@bsDt09IIBeHZ__p?zTa_XnRR-eY&*j1P+g6F+i2_6ygK+Ffa^vA4>xl&OiU509TKjnX8SnyBpj8`i^w;+eF|_ z@;&)GLT8Q=`cHkBE!0(7YUK^%m#~X4F!o}9-B^GB>87s0uy5mN#cJ#JzkU%+3f2`Y zxPI90zvz38>m4|fRt=sA2~XT5ziDlmJXkPWD?ugUNV<>n)YINL_8UBD>r{`kS7K^v zVpK}3#v7#}p>NW+g3?;YoE-;bJ>O+WVy~@7-oL-FeT~rdcz@5o%QB~Fy@{irmHR|6Z?G2c>+HiR z1|NgC#OLvHqNaz(Yq)!2s+|whHqByHUUMcmyYpQ;{Iq&J-M_ILNFi%6%*T|^)S_i4 zF*O|sPs-sC{Ul1tNAdF|8H8y0RqgCt?i0gU(XG-*2iN=3>##m8YASDCb0ryUYzggH zJ8-T(i3`dgeV)rht%sD{L&Ko`HY;o9(etQHhuAU}rWo?5ccvQe@LNY7p+S)9Iwzt$E9#|Q0y>f#C-92CUk^s60~0HC zwr7{@jHTJvgbeA>8K>=ZE}&1d#T(;s;@7K6FKQuQvMUKq5sI^RlziCyg4tVx z1Cbnt+-f8)-A?ss-5nq7T-g?7vCYs76`SNScFpN2mOLFp{G}xQA|mS)`dZ4ND4Na| zOdTZRah1CvhJCM7a@{tE)Ha9Zwxv;g@s$+6kqX3LkHnYT$N4B#viIm!?*bw2WhS(q zh>wHxj*KmG<;aT+);KMWTDpNA|3EM#9CY;Dtw8DE#>Nqn_WcJ$vh0Ps4HJy1-z$ ze@pLPU~d!G6S_E9DQPzE;}0f*bR;=bcj^#@jWiTc)oeJauvscUqup0gmM%o-MqR~v zb%}5n!MsJJEDlZ<)&u5iiG&(M%Zl4;SnJ(Kjy|ZXDS;1pIN|Ofq`>IIi6f6ZZ59!K zdBggJoij2|pwh5lr!YyUs-9BWJwxnE?1wIh)i1j)qg>SrYq?ufeqsIDkeHdvs8EFT z>w5?(7KnEu3-Zx2VuQp#(GpMG;fBwvZ}(|g#nHbUM6H0?lvCktm|dIzUrWP=@%8Zw znHX_jN~1PQ{g+g__5L-XnQQZ3#|U?JLim04xM7{C?_*~O-P}hEcw&Iq&Zts`yOU|e zIQka8Xx0TmPP?|$(D*&Q=2m}T?g59@YqXg+u>48dIM-=$Tk=w}ySDFtx^a6SvGYn< z=mlp-!ac#dNTGIjvApZ%GSea`@N6LqSGw(;PqsrW46OZ2o8A!Vsj@dN3{euRJjI!! zy3sewJiMG|I+fVq)9!wc!w*%U`|@@tTNW3B6duo|$<0i9v`TwI$<$SX{;9ZRDl*eF zJ@<(W+-sp)cjEDIZkpIN#^UqwXwx5}2|Xw^EUf5t>P!vhbS7z^LAbPyeu!9aF7ggz zhNL!aJD)|{kbnu*)YkR+D?tquqp#CqW$-b@Pf3&bDOYi$U2b`Kq`kh_7LntNheofw z&&eANUxN5*481;s*gnvLz{1l5XTYvsp7DAMr|5cW<)Zv(nLz$b6BXkW4t-x456x8g zZgfemM+a>$9LZd=c_m>1LqvJjZ)skge3l^kBS;?oy&IOn83BV^LB^%$i zEH$G|v5`=-@{Ep)WkGGGHrasPzqu*Zpuj=aH@V5*%xs<&uORJiLWbKNn?A-eC69eG zvNo5=*mL#vM$yN&H#CjwW4TkfL*NI>%~*nAFZ563w}!rK856@2B}<;8EN+ck6aL(; z)75d+{7&EQ7gUpz3$Bjk-I;0Ebx~U7=?4SZU#+uWy<3iOhqg=t^;Jx%ae@d#D0lG& zFInqkLP(Hc)3g&uV}0Ni4m7@X+C?}N!|2AAS`H)s@lTW21^6zF64PVB7Y-413LB6Z z`tYIZ4}>g|xSm)J!@rEE$Rc>OWBpDUAD`qNZR7yaosV(53olI($G7l(IugG|z4 z5T!mfPDWs@Q!u+&u1@;6c&+7nh1z6p-r%)8`cl$%laH->hI_%^jL?F3%y}}VYICwz zV24V8iE;%e8Jl;!eC`>GUD6{xV!JOFN%CEqE?h!WkFMwI+kO4IlM5y#0CB6K^>O$L zOWL9Im$YXBQu9bP_HE6ctZxM0l0_wfdy@ab5FplPX560dY=_v2?5qzPd!d5|K_ zkil3!5rD046KIy+4R9co|9~^G1AHk0(b&_6J&#Ma?lt2&B-2+r@-<;;Q3R*sZxb3- zWT~Tsx6vfzA!-U1V-3Z{S76(dJat)|!KS;E|K(+i_+n`l`J$#)qBb9zqbr-RWuJ3U znZrB8nFcl7_x#rkhX$`*4VBRtI0ZhwTWu@f?VXLQTgl8 zPsg`+l=es#R)R*9wpUJ)feyJY5-F!!jD+636jt@H3KfP{%jL7&dxaS1?Ka8viH%iR zw|>2TgdPlW@&-qtj0glODeR$lxRdsRRypt_Wsls-CP*7!KcaLlSf9e8ZlT5IVWV_8 zIG%a!Hr0ZA!}nTsC6BUR>*ZMw0mb-dAC&Jlh}iR55>3K6PMJ>dJkeLi?OL4!;>z%9u(tVz#>~&`)gMRxu??w+igikwj#%>*i z7b`ns=09}yr#ANlu*x>$*oCj%8ho>i;p6QqXMa~G?Y>_E(NO;}O3Bh7YgKUFb^CeD z&8wJ!)Fg*Dv;A0vPH3&`T}0qhpP*j$H+cS0jcb_mvrPN`6X8BR`)_Vk%NW?T3!gZ$ z8VFq8Jl;#v5DI^G{i^Yl0%u6ZEnm~3FMgKEqU+3;;Zxdr;zbTAML%$+Umps>Fi;HI zRemSJHG8{nA;q&=)21)TsIAguobBGtO!q9K^0%Fc-5l^k2x*Bg0&}-}M2l0S7H@mC zj+;L}vRMfIw%0?q+ui2tUNGzVW%`cpXm`imLS39xi?&*>Ph7MEwR3fu3 z_<1&S7gs-y^tZt&6_0c1Kg-UTU^Px6Ith-DOIT8CkZJ=HuI<1=S-J?Yl zDaVA#*<$GwonEP~(JOr28@eoa=Xx6ElFIhSUpN-@2rsw~Th3s%y@Mm7E{%q@Q?bZC zu=S3)uLVCN>Ge(Ja$@b29zn7b(}Bal@{MbWWqbI9^Y)4@^mzLLkA+Ba5*RyFWAvJ1 z<#2Wa?0wSQIw*NQ8(^DDsTpslu8$z-duZN|#D*W4jLK{kJKRA&X*$4y8xkPDgV2va zm6l?vHawbmk>l9cH2$g*ye5vu4L=u-t1A5$3ZLsf>B(r`mha(m?Ye!;SIm8B$v4vN z+A^FNhuVih{@&61P9``Hl~SJ^$kHwE?r5A z4vQ%CX1tGu<#Uy;+;{cfd(1#F@>PDjY4Stga4C6~2I5=aq$X2>qmfJTynS0L2YGI} zzfqRjPrA+a*kv|=v;X+L`Am1q2QBH&PV_~89#`pk+X%|cV$yqzHtUAfYeMywd%9i^ zsI$M#i_XlwoT22pAE0Y+wCk&QFLo&{>e?e(nIts^gABrF@Yd+_`)Hf`v18VxB)Vf1 z+lzM0Q%Pv=bzfPP1XpSxkTiMahfON8RmnuC@p9M}$WGW*N$-!FHMX*x2s&@qws*R7 zRlY3z7IXbmW2JEeFXlB>2k#XEc#(m-VKnPS8ejTsd#~v7y+($4bW#`j(2MG!JBQ83 zT;jvgUWGyh4CF@EL={GZ5TYBYO)O5s-m2|Wi@SGk6W>K2m!x`Hx7k7-kojSHCe6(3 z&fa4N_&xGA>MA9n!cg~7b4PNqIGrgB4L|gl88ZL4X%g6~d*29{Cx{MicvRe)E_O57 zRLl==HOU$JIBfZaE=)KW_`ww|`j1}3z6`lY8@8%HTk~ly^_`+&=|XUu({h4c!;|#D zTSc(^S;NE0hjQ?>gMF~K{Tz%DC((^IMzbURnXWJk+?|o|nNPd$z7h73(m2(yk0&Pq zQE4e5@*&Ltp8PFmew$}DSB+!ne3CzU2;Et>$`x$yy}_HP!$g`|j;qyrn@xQmGnT>+ zl~&h~){rM6H=}B$9z&)1Ho(>^~uu5+axq6&*M{F@l{XP&NtGS7~v$^DHfP46Ptnc|iDTv{Qyt)!d|a+Pf^g z{E;iY!e6-yz)i z&HWYjbs|;xFGGa^7_=3591;R*N-YL&j#+Ai)*S`yIz3-;`R=$B-IwhCs80R)y{ZE5 zd{@St-V+kEEyM>;E|1#_BFV7rFXyy-BsQBOHriJLkPE6>C_)#*bqJ7|d+V-U>R5dD(FCNQ-`LIqL~?`petY(Bmzliv1TYKE(wq4Xt%n1I9t4*kWAG_5sj%MLy45_!qO1P4CUC?u&W zBd3?v2gS+79)>GR1liT%mk}HN=7bKCBUR)))2H*a@48h#NoDWeFnC2YZB?8`T%^45 z$}TxKcw~tD%X~%a!i{Vz!`j&oa`9ijDd;9^afM|rdBF}U5PVy=?*_hUeMF;EGkad~ zD|Ja!;f~6QU8#wHo78KHBUa@@az|{MUHA>0q|Wj6N7csug6mK^tZj-}Vs)cOPCw+}-<>(;$Z}bIq5r0}n^x+e zmauD7zrrl^T5^?`ewoQ~+f?kMJE+PhVK=9)VaV7Ky7(zv*XaAmFD+r?zSFVGEbmfBDf2W`1LE>_w$@6 zFe1QL9R`#=s2@Orf$_%w>vMqLcYUmFtgP*UKkmP??W42Xy3ErDo5B2=|JLn^|wL!b0DyQ<)i!Ro%qU35vT-fla0j}y>|E5HPu@c;! zfqZoXb+i(zv_zkI3#+>EqbCO=qpP0N_9o0vUG%+e4dvTV4X!PGiK1%W z2XJQQ_mq43g$#PAfi#@Pr4JXv_#7B;FlBg2Tv(!HV&OTW zKI&|9!^GbV)<#Mdl#(dz8{19CW=p|d|ThMurh_H@ws_{^?kuj$xV3`%{Cl@L( zt}tcaok)Gky-FRTB8hh&*AeUb7#m?LpO%x~5wf`(?k(3OdA!Z1a_X1Rqh%|F?+DYx z9Hei|p)GpUi2LM@r69{%Ct?`|huTWoXl<-7N#`v_F?M&zJPyZu=c4^Ik2yrH@j340 znU!#+&hYy!#cT47Ey!&`Z;Z@mQ;fzi@v#~NRN9V?CaUb;5Ut%AywK!r|4o^{f#lZo z<6WFqt)piq-PduD#*Y?W3N}1&@=Y~zs^hunWGpdjdhO;n!4tn6nY5d`0*V72-V9e| zN|qkbcNWhH=lk^Ay>8C)Y#y3NqS8yX8s{bq^r_*qipJ&rRM@=SO!x|^QXPF?B6j@7 zMGSxSJE9%Y4^wLi$Ho$3!Z0|p5AQK#X5V;vYr%E(f+YW`EUR94c%x%g5Cj)S&J>9X;n`~sN!NuR1iz4QB4 zjq%oQ8{`<;V5Ci8ETggr4_B~zH4<-{?~YwiG}R(Rs(BN`=^OqITmI356&P_571c%x z60{Ow%ux%=;m3>>K3A1-t}URYd*aHcqDO~?4i-)@=2k^0W-}e0q$vB3a&H-Fu2*Uq z;BNXcvwu{S;``{r!Q+Ki$EtR`lw=em>X3oFl;7dmAxa7q|c{O0} z?zm%0tsJ$CMcGWc%UM}lcbb60ObP2f^Xuzzl_}DkX3l(wY?jOU z&D1RFz5}Ttm*R6Amzyxd{5Ub*j`P#!@l%%i8#z)cK4*pK|NBV({SxulcH1&?N>j6iK|)6tn<@zcDa)BL$o%nu(gdECzoJR zj{ccDVPF`cp2r}Ap2xWR*jxPX$1%<&bl}G^-}CI_n6E)T;%zl{Eu6sP9?(-C(6jiz zfB5&OF)U_oEMmH>W^Vucp^U9o`aS7hSZiWp@UQ)z?}k-TSY?Ebo=MvVNlY)ic^M?>)$m36h#)tv<|0c9_Wsy`pPYrYM z$iTwy`9p|4;DHX^4gW_gf3u#GEIj(QO$a*N ze+j>5?Bj0RR(9-ry&PZ32t=P^&=je;K6jIITO9YfTTxM|ZZ9Lf!u#~|c>dS>G<~YR zk;3d;-z=}{G^a5>L)FG{Py0wt^z;>{APfHs!Dv=gUB)Z6b9&E11GQ|Kvy^j#1(~Dx zbQOkDlrUPXNW0OZz7~acrn_|?=_>~rwCpG<8#GD^DdKvE| zMV$6Z)-5Ii(TPDcb zL8;xGaX6p6;{9c=*!C${Ds40zPK-HF%@>JcZ_gD@6Z2e+j1HnJxFE=6-~ZBcL7?#> zVw$w)=DGk0b(VVVW`aC|pWEHm&2BIERIFhaG6EY4!FIhXHK9{C>aXAC(9?(^4I2u2 z{h~y%pZBCZ&X~ZSfkTaq<-sgl(q`TkSJWjtiwoP-HUzSn3gQCOp+SL922oW!aClqL zjVcVCtJ28!n0M5$1SFWRGz5V5=~Zf>YD# zP)*$I-WQ`1yN=uObNhEv_c{!(mD!b6Jg42G`%!w(Kz!#t%*%hfL~YzzWYmAF>VMA^ zK5`V`s(;UaF44^k{ks=b&Ns~YCMAgPKIFSx4NMimKnMBRC2DKJBCGsc!uMFi%*MU2 zVKS6p;rA@;<3M}Kj)ycgBD}siA2n(~$AIaH^JtypR;+LrlMJc2{<4p_NXzT7&oB)E zuSKvuF6QjDVo@BjJ*31MKx~(E;YAdaB@Vq6Bpa_QlC*$*C57er2j|MU0<9fTv3jZY$S=dYn7P=$aQsh z<(8{%Ds;)Pb*nk|vURk}52>IiD)cI8pzOX^L6KvTmFbduuj0)7R=%qwc!{Z}K(<1a zy^rgvLU)B`-*722J#3<3XQzg83>vSI2<&UPg~R%p!<1L1WR&^k^jsCvQdC!k*qW*- zIrufCrak=kl1DI{cpXZRl40?>-!U;f4d?IJXUNsQDIX>BO&6`mhk*|sA8I{9D@Yde zZk(XYAD7|4HkaSA40T2475L3)73q5Uj8?s zyDN+OxoS8kLIW0l&mTh60Swf0)^NiUS0W=hmn;W3--vJl28QG(GohA+shbV(Wu?Ef zboW@0{aV)xdn|MXZ2X=Tnq!Wic(HGJ-Z_N7n=XCzfqloe1`=F(3#)Sa2e@R11Nn#L zUBR@7k1C@H4mLWI%VXrFd>9anq+Noo9IY%}k<(_GUc+SgV^(}LqqQrZgG+HX#C>Sz ze6^;LSgZI|lj~=+OCVjj+DN_?oSJ2clEJVI`D~bs*=4D=6`}1~_Eq%1x#`N&WBL0nJ5p-Eo z1;8#$c(`0?!x7A-2!tZ`m~_^AzQ|}n22T{V?<-GZJJ#2hn zTmZ{xIe-MU?)qNFsJ`5nXS;BOC?WDX?Oo4ai@et_WKv8ClEr-dDGX_oh&(Kk6NRzC z*X~_*u);I?ej5Z+Ec0mQ%!ap5kZcEp9TW%?L}kK}f+Pl~h8bh^P~fiaiwZS{4ROfy zx_+w5;?XBbw|CmguMe+uR$8<}a(v?4!SQvcO3(R(kN}0#`y_-i^4oNXVLePZy-9V& zJ(rTI`y@i*m1*yByWvpCfzLLQnylrd=8ZfrGQN9jttWYtazCOoBSo%b&oJ~zyTz|h z#}e(UoBxJ1x73FudcMJyCYgcP1qq2Xuh=+6tEb>b*=xj?CS%shImoWq)Q0cO2JB;D zR38`J-&&2u!hc+wq5PUHr`~(wGZCXsgNFaDHM7_+qFe^paVKBk>U$nXN`3kebFZU5 zx-%t3?K39D-uM)k&Igr+_hb1VhJ5ZN>SG@CQEDDXXWiirh>1Z<&MUy=Zlz<-`TA*c z$XJR}nK8L1iN)hxASY3M*kRZL~|^Ye~p5Jt?kRZ~=FqzRpVR#qbxhks1S!POl%cdonP)CtgE3r~_tq(_hT)zSb;a zioZ1~NFf}87C}|swBS+Ud;T+WJ=pH^_@ef!W!kT1cMQ!3@}H%Z>78C_CUqj z?Cz4=>$ouZ>*dh=T;ALqBfTtQa#s2s(-^nghAy`iO-nE%HFRSVb+a-flb^&J=|?7{ zVm@N)&8{*J0M62+;7Prv?6Nj`^~ zlMoabm}Z8*5AOc84fTDe=(h@0qGSB>8?0^*%5+`&6e267a?Q#-CB^_Dyymu_*3H4aR)p%O1HM z2)7$&T9Tvl$)c@Y(Gi>V${sP|IGv&0D zXC?T2lugr1tPN#VQZ6MnA#jk973(qW-t||zN9Dz zBF0r+RFaER&VI)f|L~~#L-D1F=K5a-ybZs~1r>m85=0!bv`Ui@Aoz0Erawp_rs#wiP8|s}F3}#}`yWV+*M-IXSlo3!cwLJf8|}Tdd<#kHCtN==*eIGz|ZlX5H?Wg>FsUON<%< z+0O1&g!NrBiDm2$2S1J7Y*6ie7Km(p6HAaWK#a9$lEn7bq6OL970rkwSQzz#aQPE9tdXIms5vUEhs zh5cz!x(5knR77`5p``2*3-dRt?MV19m;7P0P2%W2P+YsAzlmpM>AmmnI8W5X3Y^pN zM_u4b>eJJFXY$(hPThk?4=(zD=xd)bdl*DU)H%w*7hmtW&O?|*!ZNXSftP|+aY~DU z{vsXy91)uk%sZ@=nN} z?31uzzJKQ|4U=KpTD2#SR$x1K-L1$?$3(I0_S*K~Xp_c~u{ZHuU78Maw@}@le``eB4OBrv)g~2a?9cXhnEYUd5F5y=MpxIg#(1$uBYe=qz|oXxN!-bhEv`l# zSt-Izx}7zRG+0EG{Bbp&`Iwut^GLm(JC9IB=a&*2oIUP}w*kY1y_5AwO?mGa<}O82 z`dxYM<(ektu@_7ERf{VlbM@V^v^x4sX{BD{Bo`;K=Mhi0ZZE*xqPP8@Y?p`D_7?gS^um#)iwXj@s7>#z}^W;e;+=_e7 zTR1k&2<5|VYzw-oCdF(fV(G8I*FYO8B1?+cy_0PhhZS$vN-b}PDNhYD6<`!k7e z<5Me?>%FGBvll4x$`(*kDq-+=y9rsw6Rpq+0$yNf9xcsYEjZc`#DAInAg`=Yg|FO! zOWSL$TR~Fi!)J1*JmQ1R`dYNr_@v>MtiIzQnir+-6IPu&vY(MX$&Ir0)Z$Rft}EWv zu+27I=ThIn98F@VtAp7@yRmyb6xB;`w1AiYn1Q}&F2%rXTFZU(#)rl|rFuktlf1D%kp3d&Iq=cU;`W8$tPd0I7~_u1D%_oNJ~44Lm#-^^Oh*=HmV4?8OMMZs z>t<}v+gwD8d@Mx+>wE0c(P!+DA8mG5?Q+hA9F7i}aTTtiif@!e(YB+aCE{Y42kDmO zvd_NBw%fjKJPOv4A#M-L5NOv-ce~2Q6Fy|8#a=ldpV3(MylonN*ZUKvVNEG4%c6q| zV%_aFxm?$q{$erqMWipA>?8WwGTpAdAA&uB?W%tCg3)U4vtymbw0~5B>FkT_`Ru%1 z!hnVdY~89ZHMz|vf&oIG`|{zo7O-zhamv(kQ=6h^D^b}NI2OS;qL8=QGi{F?q`h^r zzEw-I(4yyFc(4~r7*r}Hci=a6-0)EFNmAie@c?(;9aV~{2YD;QrM1`PG&NTI9yHYW z=T15Ml0RQ4EelAS(zNWJC(&)UWZn^6tRBNs(DVhH?bD?ULGq}^DSREVkjhe zOtrD1w6FYf<8tl@{f-X;*Jp#f3VC@OG1<4WXWxHmL8rui5GnsaR?w|n_zF!5eH#vm zM+VAFX@ick!K7G(f6W2%kHxfPASoeTlU;X#fu^*>ae&_C5%FTGp zrx*77^SAF=p`j2l%8uQjwd`M9x$F@5azWHp6eYajGqSp(APsO#bJzu~eA)j6Sv~gs z)k>T(Y3WyKiF=3hKAem`Drg5>7vlruD4V3i;XFidy#AuYtXe8%laX|C?_NR7)`p+1 zi;HYKl0{g+P{gcBVAywu<*V0ro=*{#AP#;QhJ)ej+lkjMA+6f$<)L>4ttv!;(x5rhBAXUK{Sm&=i4 z6?Rv80PQ&FH4l8_RS}ArFFssz$oOFrsMm%&**~JZ$?}+l{g~udY5cTM7k$^B$3?T# z{+fu<5SoILc|rKA+W4}NCAI^#_;*zq0(0%UIB>Z^!;VKu`Mp_fg%$8=I35xbvfGlw z>krUs%5UGonAY1*yMz=@YZ{rE9h@oupy6}+xbU(O6)KJq%?+ck7WP&_8*;P-bO*zV zX&x0ihEs9I>dDc?ONJkfJA0qHvo@6OI=mGz`7vhH)P`%CAh@`NkD=%ZYEEZ{z09>hA3h@nLqU!6jkxPFQ)OLf&KGlYZax$8P}M zu>kc18}Xmt0K8lRCIR@p*6t4WY^Q&0HP;9s=*NA}lt|^qQEQz9`iSNvR434KkzRThVbkGFR%dr zGykVY%*oZlND}w}x0;WeyM=?AnTew#@GuKXq$@Qv3ljOo4?^T=(K;ZCyw3jA2@vrC z6%vFHm16y_ND8Qs5$La9)`toG))GkLI^YM9r!|{^20_^X9i+JoXapcMWx%n(->Z+j zu9lI!uh%av8${hJAd7j`TZlYunFB1owr!*~fW-~42tim%Nq*Pzy&s91xLN!X)GJ9l z2?7=EUxvujpe+DIuCS8i34pQykT?XWnCf>y>L#v6GLD`m_BQ6y7AEEvuD?{hRa996 zsf1P)Are|eB>9++9Z&@WU78O<)l7FD6(AFFHM6$yw1Do)Je7H1L69G0o|b$D>cc$W zQ}6K8&U2gPoRVKwh41+K7N{!FdD?OWSa=w+Vo3o@7*LgK5LNL59vb{!M+RM0k|u8M zpbHB;NI@4yK49elgn`b}7-V2@#ZCEYXaCc}(DR=M^KVzU<|RQy(1;A3r!AlnkiAvH zX9pPuCgm~=j4VW9XoS97emNBXeCRV$c6BndaB~y4aRpwt;^gWBT_LGW5h)vA1zc)C%_JaPqe}nNb*2~n&vMnoYaW7FoIz?3d71@k$~jlbWIv!= zeFhc^kdv8-_TMZ?8w-2$f16x?-lEWjGFKY~Phy)9BM^C7vdTl^nM3MP&~&oYOWamA@Ef@DGWR3Q>tW~i#Q{t9S5yGzhBf3yAX%Kn-8 z#he_0m!|*=DQJzzAO(2FhtAU)&^iQuFFY#)&?FE*uhaNUb8diINxGB+B2Pm=Q$8K0xD_X`a!vydr$R!Wgq{=f*K!EDyZDTx zgXeoruQZ4}4cP-A%#qhs(}31VC4#<~4CBrT`IpWszjgE(R2H-71Bg7W`37hxa&VT4 zf%bs|I`4Ie_6bitr{>?fE^d1J9*A=*{0&5&=3D^QA5OT{BA7sN6oHXO6oS*A`MVs@ zG$sao7dL251#ZBM#4RlCP2A7+oDKLzbkI5kI!~K00MpYM&tyGdPJJW@10x4v^2+20vxOZFKqwkqz~PeGLC<><=-@QSBo?E0BE=IFM@c~ zd$rxJpr2%pu!yL4npK< z3kqNnWI18R2MWUiT%kM=?N>K)P77!&2YTAcQbk7wF`)A_107(*(lG->xyneOT}i51pqu zp!<{fD!OKTV2D>D1HO+PqK&dvzH`ods|lKd>@D0a%zxHuZD?@d`%CDAhHdlIN?rtD zF#rtm9$0hdPhtPu{7RbG*n7C1=~0{A$Y2|ELfhyfUfQ7mHVnW9d9R6l@TWFVt$x8e z`iu!?RYqNaNN5&=Jr@!(z&Zg|zmTjvIM~0Zo%6Qk-`fU1Ysp9vaxe!vPqRRGcfLpd zgVzAoEWm=?UzSJvpRBVtPezhrN(u@Rit5ngf#@ME_%3QCkp?26Ju4~qxETOXG~j_8 z4@hwS$RnYxt||hp8Kq(aE1(lv(>98qN(*Rw0S)BrF+}u78fh_AF=)(~G%px)Z=MSx zp)n6lFlwj)%*`{HFseVoD2gaZKx6bBZ-5ae=zm<%Xylc|ZrN{MnNYuDzzb1LJUB$ z0w~B`zzVJNqks!bLQz~o{HLUk6ZgTS+c$$C5}KsWDjEIWPo_k_&nSk}_8KAP>$!9D#4)`@O5`?*@{R5&sE9+cIMtv{MV6 z(2#X*ivd0WQUO39hhon9^Fl!DpUk$UeZWJOdk63X&31O1Dq$jArcx= zXBx=Q3_x_wK#G7b4L(;-0U)CCXI6fV2t!~1bV5VORl?KR0Eo#Mh}GEnA!5?1&=omm z8V5s4J4PWA8X`=lHVK*}!vP57;70xF4M~N$76X+zuwglD79vkuz5oNQt(n3U zBVbWKQPFS zK=(R*=#6TW5{$ULMGleB7)!Qxdlmp=2Vfvi2$_95KSokUQVCk(&Q1pwnCQ?#B(y~B zIfbPlAOVfDkP>n@xN~1UQouSKTH+|c3>M5PF+n7>WFy~K+5?b`0;3z`R2rDF39#$dhq^AuXKj5D5*Mw5cLf0YDl62yzo(`{JL0d^U(3Jp@+!@gb(VvTcwrg`u@fuiCX(j-X&?0Lk`V>V#bp4E|k?PMx3L5h2 zGMY+frUMENVX!1gQV1fUMfsI#x(a}Z91ua?$z?G7nFv&$GYcxehZ11MW|}xeLURHu z$+STWs$Sswg4_-b;P^9+nzD$h+L;^Oi>p##2XsPva_=C}@5#I5YlGik#o`vx^IUNF6NbFosNM$)Nn^6le?J;Tg#X z>GMkzB-GDr62DK<0ZX70T5=)rqcvznb03gE&fh7@=a(odsVaz^xttzfHV0cS@R>m* zwB;f*@1i_lc@J11r%i3`^IMeU#X+1iQ^bNb7=ayR36ank)F|Tnpq)O@wg@DK$N2mh zH64YY^%vFx2QUIUp)uu`7jr@V1+ z#XY21R1a8!*wYD-&=Rcvc^Xi!jXxt93qPj>wBP!Z2I4Q;2MeGRTB7@s?6D>w=?5f` zTMbX*&MEo%oox9#Sn!cBeU}q3=zE@qfDWpWhpjvTl>{{0LP7%4&I!@@=~jb_0VNnh zd_V?~(2zOm56YlD56~?NeffDF%o zsJs6JWNqRmZR0MXBne$1U4twzgw-SiBB4Q=-@J`q03bA=BSGHLy?_5FAmB8$`Oi=5 z;s`E-B^4tJ5D6_R-8mFk1NO%G&XkB~{7*#gCaymRMN?k;0_xYhSNS3GGzfG~)+}F* z)(t2TBRTY`lH}Rn1wlO61wJZZ;b3a-^K;fw_cHjLEV=X|L_)J1FKnHd0IYi8wgqws z$X)#-mMQ2_%g;?r;d@}q^z>(lgf`(_ev^0%w4EBzc2IYkpa0DC(}UkuqA*`UEvM>m z4CZ{#Gn`dSRwAH8qG!4i*Wn*=%sgCOe|GunU*raZ;L|uE5*m~*^T-Nx*sLA^K|YL{ zhKK*n@d%t>Pc(NLS{y$OBr*yxc zxc=wtq!DmfNm?X} z{Pk;KAK4fmL_#}rDCF3$1I~G1#882#V+i$s2&`~+y3*VrKPE7wHQB7V+3wp-9wJHy$F+GxnNN8dc_nR=#L4*rHYpX$2QHATj zB&sW^N{B-vZ{wzsEF&{EgGgwh8KJU0 zs3#Vmsi2_Te;||=QIr1Zv5$8`E@0Qef&)ZC`wS!Noo@iXnlnBUwg1ZZvqN8vAN|0t z?Pop^3GKUYVdo9HU1|Y*kh98>?tkS|la`S@Gt}T#27zJl(SZ;N4NS4vdI`FPsy$P{ zkEZ__@F(Z5;;+eoNN8UifL%s6yC4$U$3-|L3>u?L&iKNj{v)5( z&(18;%8!9vpXf&*655A1*LVlCQ~wVh*A=^i~|ga zk^=~KH)1Px2iS<+-G$u>w%CdJ*50W1taT2`oZX_=HNSQ-Ig1@sbf9~2r$^K|I)afa;7WUGs#P!!tOIrN}u-K&Q{y4gY#jP0YJ76BN`Fp$rr;lF7KmIq^djft{SloOh-ixh)E&&Dp$9^6}3{O zS8>ypt;zDQg$=bSoych4-__SJ#C_+db2ANX$$j2wUb|fur%*>6e%`!o{xPEz`8+_DiL)dbQLe?J`LmLn^=u7h8@lkJ@cmpbL=m&C=q&x0a0 zt@|3%#t=+wH!nWGU!}7Q)4#4eI9I$F=hUlih$3aRXzO@5FR%{7&=7wlKkFld^_QCt zPA)0MB`xonph!ir1AHP_KgjmQU{PRz4AEaMIq0&cJD1Q%ML!NL&twOnBSC~e{eBIR zC*n6F(wZ2N>dQGa3OVc=7+<@|VQi;5`zD81)}}<~h$FoJMe*y-(YCQsYNfq0O6eIC z7^;ktxIm-nQ5{{@n5Fss;5Wnkj+ECT!fEV0;JpSO-YYX|u;x5FwnX6Q+H{|-7I%V#!pk?`R%l7H4+;#5QU+&R z?G7)j&50o`YNAMqpI9vLc+uI^rL z3btO|R{C~=m621q=k2D+C{ovy+lFn|fonY!HheSRy(5~tSetIIiu6+lL88G9pKMz9 zMQ0arl-WrfDel3g>qjjC*9)=|CtB^Z+T+A$;UlIm=PnwlYwws(g_eVBgs544ds%ZA zbUG4Ee9t=Dxuw{dEhth;VxmnZyMJRaSnzPZ+8r5|P=B`oyR6pi&!{ike6)SLhudhR zM#olOMOl?>0Y>fR*+?pC`x6V^WIH*lTVH7E7<2KVf4FMDkMTkt->&O6w!y6^=ktEylV^FjV=fqSsMv<~k zCw!UD*8NWd3y+cCH3pD%#PqNtHSvdI1YBxK-HfBSVyRG>I+R(YH#?58k7|P=MZIq76|@OZ zcL9ahgVICgqddJl;Qj(dTUR?av61+Msu<->;tAN>F9SG^Mj@^+WV45T<(KR`))Xj( z_zdCm_?+TcS}8iH`bT=GBBJ3j8`0AqW5%B;$c7VTuN_BGh+$7x`PhYAW$!aof=k*P zp^p`-X8pprsG@p@{q<=U!MkU)y|~roB7doB^vClk3LWhEwJkGe{$NdNTT!2wG+&M* z+h>^?pDE1WT^ll^5Q-G!RM|Y%!2rHC!V4$3PaL{j4oL6`jHc0+ixW7-eEkR%g`~%j zMjh_n@UsEZTOi?&H9a=VAqhWmQq!JZarfEjDwpP?P!yV;fNAet_l|2I-xkBWVt8S+ z;lUi6?0T#G`bI{FL@I3jgH`GV^{K|;{FXGPc^|SFMXLES=GO9^pcxMuJm*uNl%cUx z`-v^(s+3D-mV{nqQ50I9Ldv8*K6Rrce4SZtN^ca|ohrlP^gEGg+T1o7${j;f2BAnj zwTc{`xD?W65~K|tBKTjI;eoM~GBi*nan17RB^Np5ahvlfQqbhMDEB##K+Vd~;ymwu z&Oz*n!#|5X{Ov3obzme-q|F2E_;XM+Qj=3c##*+Sn0->iRqXT=%}nr_2)28{>!!-6 z-q2c0yg$-rYa}<(C^WIl=|2oyX?O|JX&_v2j9a2buQfBVUgNJ%L4H|yfs=-(oJWz8 z=IuB!!3lZ|$KteX7yhgn$;nk2qVj^G6d4ev7Cpga7u$?qu1+KM+{$-xiUoKki{8+C z{9Qv2dn8jjzsC3N#W7vH^4HE-+Sr8h3q7St zgKYY9O7*+_P^6^c3H~F$04Ww8WX0`bn7-yDY0KW`8@M6(`dSo)mgi8M&%T(n>IxL+ z8c>|EC9{NPmh7w6@r+uJSQ~x21&-8GWcH*Y31F!OO%Tp1MOh6kzaH_+wgn15+MSae zV{xRUj&?1~X96h`o`=Gp(Bms>Mq(v7TaK0PI?lPUFbPG2k9`>-d>s>=Mgs!Whia-749TgNT>NAoa*5vQ? zt*KQFMT+^>%Y4ZvNTN$npz&(J{-&B?ItPXNhs8v)axE#^cXU3N&`3q~>&|{S7T!9` zXhM527n>Z5{#z#b>+6Q=FJ9oLOoKBh3Qg?&i$V?WPIw3=>y~sqF1UlXrfi-!oYtZ> zf7Y=$=x>vt!+Ab%(W3#+P^6+4_EEYspa7*qn~i7mJx1kN zL|#Yg8yD8Fx=Mj?hhj9qJH%@=GYT^foH#tfgRDJI*(Q*7Enj#*!4KZ+Dn=3Kz3 zF;IBsgwV3=FTkWX+>fKcKt)dU44Q{IYF3m9~M=y1c zH!sZBJ7^S&*h}3LcI3a^7DV$vguk9NO3JZ_-IkxTr@B{I*zpIl&05-`NLg2J8g-hf z4=dbF>6Ke1$r`bMmd#t;4z(9^Li(u%C<-a;1yRS=CdbVR!|0&UQH>|n`OH# zuFNmRKdr)1C}A%e-1TktX$y2=dF#*%(ViUFRMM8+wMDD=k$nwcvts<@OI;L&5cZa- z(T=Eh>|zIT6|a6#V@Rx@ioan@F%PdbMP)i!^fbw_hkcr4JAQsOik|RE243c- zNu*P%O(tsyejII$qL9R%QEYI}vwp22aBF2N`ju@^1&v5Kc`tWB!R!1nMbA8`C<;;R zDyc$!Ldq?K$=L);I?}g=&mK7}R4kpOP;Em4gF;2=)lt74Ki*j{v@ME48hb6*=*5eV-$rpcJy>XnL42@!8WxPwKapbUQ3(1^wHD( z4KMN|ryVbzN0Hj}E+lNI1a16S==t#1TvPZKDAV@)a1bs0-@LwX%yRutC<;;R7@#V$ z_Xs_xkHcV{4R6f507u-lL>eTu62`MKCW zN)&}qc7ASu*Xy-rLJ}rIoxqo>O^MJN`n&w`j!Qa054*Q0$-bgSzG{S`(8&(Zjo!M? zP2Ug(WNPZX02f@zEQ-Gq6gjj0BTdhMybJl`%q>b!MN#N90cXXl9h*OeDzm*BJq$e# zPJL+U%<5ya*03nB_f`{AmXLi48ly;op9UC=d<7Xk9qJ4|g=jKeYhYH|!D3NRcr+ZA z6u;cH^V(3ZtJ7~Vib5qD3B3GLwZ|kFHhmYZ(QcTpk@COo=4^WbO|)&1<9Y8-Bjs2X zR8>$xqK&hn1Cw*hG~)zC_Wk?7#Y*Mej8uOPX*k9YMGErmaerkdfVx=F-4}}88i9Tt!=xoBXwFOi`xE@1qbPK+ zW1v-on>=H;f1ZG$E&huC;IJGAU*H!lsGn$fi@)AZqfny*t&~%9wat~%D_$`hM zm``cYN;&<#Fgr{c&yNw(NIj+n5A>@9Ul-p)mx;d;O@J+Knt1Ggm1cH&P_iUHpZS^Aq@voX%?Ejb=w&hbk@4#T%|u?xz(AG1R3&fzdL}od zPMVIQ(4q^)x$gEiAK6F7E}~Cpcb{ow5$^ZO_7hr|;w;zDNLAnJo8M4Cr!fsW4LqbT z_Esa6iz*~c-T&`3&0!Au10f)zxPK-oelgv168a?YhucjZm&$+2`9s zyE`1=(f1~b6l1vY=!znMNrpZQ*D<}k1vRPm9?F>PHJ!Iw{$xp$W@~{W)%5*Z+4B~Z zqBQu*i1TZCVU0Aus@PvU)DP2!aLiX#42l#L_@;lkDS$cw10nn}L+Rogp}bU)Q4AI> z>NF+?t>uK81(Hw{QrKDV7hjD}vlF_NV6_dWPm|IbQGR`d{p-Gzg6nGWlieMUR!5Pd zswDR{xd*7HFr3BZIk=KWC|C~pbD1{nd^vJZEZ~s+T>InMGCTObjxJ~fab%{0vDhKQ?vnzHcnsp+?+$^c5jLz z1*Mx7i@64%ad0L9gHjT-0X3j0G=EPU4xy2PHm^2MF9x7GaDoGaDlO3jB&h8QyWp@$ zQ4`dv);SKMk%B5+3UXqX?K~A_*|F7fK@P#uk-cdOo%FcMK_Ra%p-4fs8i!764IRZ= z7{KFRwA)6xAP;!BhkDjU>hKc)g-U$qp5IaEVW$&zHz{Q(23v{pxGzcB3StimuR-1#XsYwNj0CKNKKn8`-g1>(+x1;Y2ospvP}*_p~_&1 zTMQ%p^6}$Iv-0SoNKyKocfVnMNhb6qIP2aOC?q%QBs-Iv6ZE-+Mxlru<9atDZgnYW z1MHzQ!QJgxL)jv!-egL6Qx0lk&=^GuD)#vLoFR~JqoBIse6udC6-cTLNX%@*F`XK= zLXn~Z^2LsY@wCnzI7Wd}sRMi+ms#bc`jhsVP8{-fmLrN3)TFyki8GK&Q(z*3KeM=1 z*8-GHhoXMv$u(1Yd!R^FHT&LNwhoeMuLUjMTkFeKN%knK*Tis%=PfmgRP-#uU%3y` zsjn!VGMj5Bk}6JL>yPA`H0u#43RSEHuQ=D>Ni?Wdh?)Tpd)X?+}xu{M;d*nn3G_&rmrB{*&_iAnBjewh9lG#Ph0N1yXtGUA6oiiqztKWBMmHrhN{p zd3eF9W|$0%ceuY&Jan|)n$8h-YTZGRV(#@BIjAu7V^^Rb!)GT-#>&Qs%dUCecbrk6 z)k_p9=X|FGyBm;CY+8*un}*Bhh-Ud0Cw%9OI@Q0RNI7Lot|)m5#vS8CNAD_3kin5` zY8Kx=!40-UkD*8{-%s61==rM%<7eXgPu0M}k7!F5V7EQZ`1#`*JsP7(C6_k+yzT}C zI2{Tw{)pi}M`MX}@qO%I&k5rn*q}%$lT(MBHiF{22Z}GQOSVg8QpAP#!S?PPar%Qd ziWGCZk%8YO$e}8f=o&g zwJ=2w$GT0UIle&9`uoTggpC{794RQPO{&~A(=hbp-4ei z{xdtX>(X3B>xdUGX#)}!cB?d--0Iq zT0lHC-v2@ykGKSV{9KgZad5V?K8jSd()ZdGcBhCf)G#b+_em>}s0h9KWXdH8GmTNC zqEX|fKHdZ^&}wLba1l!QDNiKXARgNMm}eD@loRpHt|z-_vkMd@4qVs6i$&Y$|yh4 zDy!c7CEP-z(8Rip(*;dS>Vl~@ENbFZN-8DWB$;pZRHM1*V4jgEQc;U@sr?Fps0ZX5 zP9>X4+KI%KEqTHuZYgUy5k+chYBQ*Ie=rq+>W@unR$7`w)y?nP9B$dWX$Fcy6Dv)T z&)~01+58YLx2ERDN?}R0a)YEA|-@VS@2@-W_ zBbv+gNEW0;srPxp&`3e~#~)vp0H8LIKzM(opPg19iE?E9l#^Z(wrn4&s6 z1M5Otxd7U4T%dHLbA}P!FO(h0s!cqnoVq;`MM^4LXQXv`AdL_$kRKl`mn7LVb>BXc zLujO+NUOdZU< zZHXeayqS48aw=HZFv z7r6ZdccFI*=;vthBkNQuzweEwib6EQSUjRHH{9D3fFiZTM~!{R7GJkO4&im7G9@&( zu-zLD(ZRu@Y^ptF7-#h9Iv7RDdHHJGgs1Q^<7-X27VK3{3ywIiTn9|zkc83`P^6&f zk#?7^Laow)mKfi)lv*ukAbLTc!d@K~&YEYBu&^jP#`yVS8RsmWxCBKZi`|UZVDSFY z2O!&qThe=C?CboKmCY@Eziz}+*r`?UH5EQM^OwNXl$ba10KXaU(ZgLRQsSn|Z(@!E zFh+9*0#C{5pDBTWyJss!)|0($T3C zO~9+=u5lHORA)Y?yna#8u@^S*%LC_}a!Uut11ZnL_8#Z0xqBN$%8ODIymJs%luyBO z34WhwXh&^%lEZ}1tNl6X%#m0Wg)r9XG+lE(e?usEj<9NqVRyR7g(-e#Cp%9`Q*73b zpS-d*==>c;3Nr~PaA`ZFSRT>dosCM_Fv+AEU-%`L)L8u-MWKjY8(GA9k`=p@pe~%b zz{Bq!z5gltb9?1KPFz%}F_GWR*mC)J6e*_X1Z9O2P~Huosl{DUxp3JSam!!0<1EfN zR%-@|l;dBiLi3@(*$cUaIkBzO zGN6S=5@*CdSb-wtc+@ZK`wA*qNmz8pU$lRW%Q;7Q(n4zI=ZwXp`6Zg4ehxyBYEtws zc3}hYd!oD=I!&HNvRd7@vf_+U$Eu-7IbQFA-@gFPC0IeiU$hhEYQYhg^LRq zkPV8IblS+HCR?gq3C$rUx$cxn^2~;`Os4~a_PAKPotEj5toQvUmf?=lR;5s+o{kUZtV{zBtM~YO zZNMdMJmQL9?7KOaRCBM0qEN&x_H7f`^FTaw@Fhft?eEXV0f(YHC-k}oGt?*pKwfEi$^F@OscwSUzDunBj(QJ7cXDGJOxE6N}cT!(ioB_0XhquSCsAliKHL`XGm~qPIw%n~{{weCYx)jF>M85^CjA2R zRgElY+MKqOXYWBg2)Uqe0o&^K=R9jWEo=76MDV7UxSvv@pMtG+x-Hm7Zp*A?QR zhz9S@h3PG&XTy@Cn3A?oSm}psly^9=>n`Rc#QM0hc+H@ zUw-FAPc9h~*d0YG%G=VvF6+zhLz9d}o+_cLqFy6pR{_{p_&k_}?41*ZX znY=a%Mar5n=IT5)x%dGcEN1PWq&-VivO=tfa?X?^FL29Q zIb!|y+Jp2-@`cY|bHFzLS13}*PQL<#yr=lSj*1v&ufvdW4yB(a$2r zC{kI6E4Q3lK%(V^K?>f~GiP7!$i%4@Hmd?RnOc`aQD|eYofzMFt7NyR7(mI#htZ;s zYii5p>IC1!YMfx?SOrB&(e+&a7H)slsSb@4o~wnOmq`()OVs&V98o#628tBpvnVa? zJYco~2CtwUzNRS#HutNQeo=6t9z4+*6-n#fkV1_(g+@y9-_j&;6OiJ7glB9u?rTcQ z?na4Kbz5>v)3eP`q?W4zBRjBSvslz%20zu*;v5v2ZQ86Wpx}-J!+N4fJ;Ns(6t4(X zY!htn!Ii)78%;fKq3*x7`nbT6X?QJz-+fAR&3kwt7g>*1p-5#nzr9=k4N}TcG*Gep zqNxnlU~MA(f`a(AXSh*ZVx!@R@%uUFVE?@+QdaE5635^&VZPjm%lE!KMgO%h!UlE! zHH!*hbx^6o-GcquUT0DHZsm58Q}PTsiXtVAN-8tG3`{IL!^9GQrLxkOLGq4Nso^U7 zFq(0d4qV}kD@QM)NIApwcP&^1Md~}W+W0Hgm6Dor_#9XA4$D1resaZ~yO}5oHEa;> zb!y?rI2eRCfI&DODix@psYY^6dAs9r-t)V>I)WmFm>Qhj+y)BHX&AHN4#TXfEQq*` zE?|6?6SgFuLXlF6mpAOj-ZEoL_?YslraX#hfW0{S8Yh%!aT!G+g+0}^^TwB5d4X~O zj>zF>?GIV!l#=x%g!DjmPuCv&$uJtJBk;wmC40cJP&Cl@XrZYCjT@!kt7tORpR+EP z^F@)eYB{anQ61{iYFNa=FHhVE&>UnJtyaSz zjk{cM5@pr307Q>0E*?7N^plp&EMN ztW2oCTfnb*H_tv=pw!JabB*D(jVMyp`Q*b}&0rj22xCb+4{0@CbCsKeBxXmI{T$Kh z;2sny#-(n7Rih!x?!Z7B5BgtC(-6bH&`4VHd%fg___XIJQj5>D*GUCoao z#aNjrMzagZ`awCyBiAQMvN7T&I;MaLXH+mOj-rsm=JXH4OYd3?`ScbZfWU(h%M=Yc zl0(HhMO}E_&?t1UL6N#kqrHNExG_=^K=QblC$_ zLfm7`I;|mtkI{I#IHh??avsJp2CoLANKplirdKirRChq(zQOjg92CqCxr^qN z_p&kEL8H*a-kkNR_okCMcs7Fv7vdMUHS@HMh*k!RW~IGPPU4Qjy(gkb9ggcf+-E|W zi4qMj=0DQR0mGd?$CO#p1c|50(ft>3jJfFo6e-HB>FWx5kT`xYJj5S~PQKI_#Yzq2 zmh@Y=E(xo+@$i~Vp&foJrg9uMW0+f zDrqM9Z=FZFHnsDu$X}FhU|bGGp@{XI%E<4HTY<B)ekz@y6>VgwbkS(E( zC{o6WXBo!uWR%W&sML7TDXE?ehImACuZtH4jQrRUMInTB23Afd(x$%`lia1?fws+x}8c&^3q?koJ&Ss1S zOemBSjG5~s7b98&+iB>*5j0XvMA6YkwSX?7;}?7-(Un!+v4%vlRg?kU?9UkL$G~PqDFU|+K@Zm zY%hW$_1N|Dz3T-TWC(2w?xS}_Y3|8x#9-`Gnky!JH9?VTj&)ZxXIBdK0}bwsmJHHd zBQ-}E`nWO|&`2fc*3J4<7V>Gl6&)=c8zoO7nN0<(>vN7rSS=JOC*ak9>+ON_Ky;`! zI$jHoxXIfZV$UG~MOvdsL0c;wU0M}DZ2KWzfAmVw1|(|sj(hau5Z|N-6e;L%`_%8Q z0BQ;q3xf=nY6B8AeO75>IplfMktkBowIv_QGy_m7q!6y@Z`NoIa`TH)21^#9X07LO z$NicKC<;9vp(*}ww^?)s)U8U;1mc>$Z;OT=ccnT~CB3r##rw)T)(*~pcM(OZaT~rW zWDhjRu@-a@tL0uf8mYSe;PyRk@EmvtMQVwe+=K5kt^gL?eNQ+h$HMc9_LxyAFF3+A z@EM9i%qPgE_0N@yibBE+5oJ@xc?~gq7%V*k{?fnedzMXh(>tLk)Uf`0WV0SmR>O$z zyJ!t-;&lx*l0)ED6?XA{+uCUdib4lVm8mUs18YIy4TtqtoJITY<<#-d0|b!;+J0b( zQg($cibBk1z>GIYxye4-mxV0CpV0-RlfO+!%#WECfEhurgS}g1jYlRCB5W% zB2}WL^|I@AdBvlVVyqk|&c6Z`u#*MNDD&QOFj5Eg+$tBzvRu+fky=crw!XCmGU_Qb z2KbD{_y~EHtR_91$EH7*EX6tVl8sTMtU;69Qf(oLz5xqQPp|iv$&!BlF>QWj4w=%- z3`Ghmkmjyr7jJ%mwg^|QjU!}%U@HNwT&Y!Ral@*y)lsCD&ZZ69*g{302NfL`=C%{% zSop+;Vp=b5&k=EH4k%L0`y!2uydhy4!f+4gRH>P=F;Z21aZ*Z`&=3E zIIb6z=m62`a-M~9K$1haq7H_<-T64D2#OSwZ`Yz3X91&zVuQb;y;~t0Bkr#9bSupn zjm%9^6mq^m+I-w{fATkI22VoT;6)9u^*QDI`%V`}Qzk`Op-4#{W44Z~2&8V1Ksdij@0CT8zNF<$Xmif!Q=}=1 zl;fjg>c!r7ek01SQ%B@+q~21#KGT*f1~q7dBGoLaS+z!0ls>2Q<%Kes8#eTDN7{T#eXP% zg-`uxq?+M2TpS38E0O@ z8AVF;NwO-~9*E^d9e=Z0a*5d-<5Vs0#3?UZc%ev113SN%&jxCiFySB8_2R0Lr+T7DbsP1fyH|h)GamA^16m20*ix>}McG&NhbMK>^!ZyVj-rv` z8m$~z-4bx2fWx=8ws(+=a|>66I)tgSb{ftM zpRt=6`;?QSyO5Yo#8(hHwPH}9Mykln9$ap54P!d?{sM=DjY zYZWe?QvLo{TF$x_jxhKEEvutXD2kM3r3ZMkAR$Hhj_5gD^OdVt4ie`$v-<#UBlF2T=g_;2#Qqa`QyX!yO4J5 zu3P+>D=Lr#{g4`GBv$luE1>kgH>vpY`%RLab04e1t?No zEGK$pJ?!e8_^Pomlg0>CYnoZ3Go8)bt&7BW%Q?-}_C{kO! zGDQxvz15e&hU-K09Bplq?e8T0E*wN7g^l@Y8pkdl%!C0g?ym+ekqv7X9S{(r3{}_$ z!IT!pN|B;%;P-rV4Ott!tocvQ{2eLp^VEG2pP;&CKy`ITeZ6jy*1X?chvdPbi)KZ+ zaMt(2C{kfPvyAPxpvt;Jjlc=GaFff?4ik#JO#Zo6IgdJgr1|9??9@ZM^6v>{Xpbg$!^X{Bf z^JZrhg)}1=pR_Fzf9oC;KqDxC_!RHd(^}Icd$Pti7I9I7nhQ~+GV7lDRoGo3YoSTO zpH>YoX)W`F^Aa|}!Cq>WczbBsV~HF#F8^v2DX?>qiPzbM9xY*Lhes%?TUrCXl<>?5 zOmjrvoi?a9aaBj74JcCGw7I62ZbI@|L&Jw>5!D{%j?Otqgu7?Bi=*<--HxIV$412) z8?B0G-37Zz7?--GFSN!<_80Z`f8q^s;lm$L6v|kA*cnnZcpKCQH&J~^{2*KA4y6qq z?vmcs-{tyEo>psH;wY3A1zG+_tz5#PxP^(9K7V|ZEz52WG4hOe5!QeCn0uf|QD3`+ ztxtsU(t23E!e0~%=oS0d>J?jm_}xbdr#HV*;$@LpX1zIQsfizol(plW?H(H_U&hej z;{7WfjO4SVm-oXv4ds?+GX|qbP4kv1%Cf2HI56Q4AXQ3fVUk+opW12+r!>7a5=BaS zb?j_cYao4v!j9MYtvHI1ynep@>t4ON%lp-tu}B{ zjW+91q@?N=d8++{y7w8Lk-{DL!8-Cuf1RQJQrb(?gQ2^i24+AF#O-{q zrny8D*Ta;O$2rQ#{Sb;2XBD8j(I0RfEocGTZKoAZaw4^JdMelW)jN+ORUO$KKO`Ph zXRYXsD(76ZSBXz0}Pr0VWibp6? z)#{_G9~=6bwOiavD;2!*28&sNqPhB%d|x@}iRWh&DQwWBVP5R&;NfuM4!09l zLGodeqlbl0jX8xzN~+xNtsOh`Tm!~6`154Pa4kvVVzuXDWscftR31f&@>Rcnup3Z$ zV4R9kuVb}EiH@XP{$j;3GzwA0U^Mfg-gv`OfGP(|@Oa|ec7(<#xI>Mvi~gFIvr#>~ zXcgtzKg2goG&7n}r&TdFv?&_e0!1nuRJ_!Awg;A-(8k02yc2UpC|S~iz0J64S7><@ zg*rA)-CpPYDKBWl8djs3I(E8jo#IzQ(#hmeg^dwQvfbBPqDWE3kEh)I38+VK5(|$8 zqZVk55?6qt4?A*B7c&akR3xg#klie6e(#%i|&Te zQ2f~!C_JFJxIsSYuLBCd=kc7RGd>PQN*k&?xqUZeVn7W#pm@AJmuTXw{5on0M^$<{ z4@HVw&~xN^6G*o>Q5R`{NGqJ=fFj~)3fJuR+K8f1#TqkZ>Y2lAm~+C44k+HA(q1J_ zEo0N8+_T^D0E$8vYb5-_i*~&XJ!CwbP{KWAp)2xTlI>Qi%7Rm9q@*E@9!~rYbx{XC z>)_5P`nHxNaXJ;5RGXtVRIiDm5XJIuQNco0-?Mar1_C$r`j0e5{hI9mx+>8oI4CgG zD@Lb;FdVKIfp!hgs0lwd94CI>|#KryEV-uJnkBC{mYmr;P6GQ&T=j zHGDB)kxyE>B-_^Y$5wGqv+gTUq^`#ORlyseh&jR_4Cm(LA6mMyGSWt^R*FWgr(dq; zDv!9eC{o?&)#8b(K@j4&Ziu8cv>2Y6jx@{kqc~%e?H(`(bt<=^>Pj8;%Q6swfEgO z+@&svqtM4XhVeT64=#Wv?l?>_aT7P9sg^#;UbM?*f9}%h=!+tC-Oqb>e+;BsIyAj_ z{d`xO+;EAz(iY9bxMU$&cLoEZcMC=f}1v zQtia`Pb#zbf7e2?c0$^3F}bUi{=~7ae^2gP`@S2B)OjpD;;sUmhN4nhdsr?zr9OMy z&(oXp3{R_2q|BT9Yo~XB>6$xKd=*O0CgXCK=@c3i6{HM?`-g4Xdb%qkBV*upWLjn$ zo*TirjUM$wk+L_JYqp&2J^loxz!$MwP5XbbvojwZIg?w5kDrDjHP0!R`J@{pwF#^U zc_H(bxw&hW>Iu|t=eTZZpHnDO<*bkrx4%HjX26)d3sUY_p8HCvxnTWvx4E$L%WEi7 z=>@Z4miM9E+H6VFQ@Jj8rBbIXyz4yUy6`WLP^8K_ja*;5fU-Os`M`sKjIFt?%;xyT zV*gK^Sm)h)6e+dibIVt!f!Y+7Zg9u?WMA%5CHw!~LkgB;9jn)-JSb9TlDF%*TTnvx zK?%hvsyOj~U`iFyHg$?|V)y|A6opha0^IaMv6O97w1X8MoTASzb7~VN!y(;_c6n4gLLThp*56T2o`2%V{S% zH*p9rl{8Z1iyKvLv&FO&NKM>{2EET!Blbj7hHTIeIMBFP6^y>RemOl)LhJT zyFGi!DhO&6uKcgR=epThB~|&C+b-Zl8Y#78gu7V)PY0D)TiX;x>g`xR@iV&y z`ZjzvR3Pv9y1D9wFNvtu(V{#1rW1#HZFfYGg14^Rkq`%9T`0PE{6C~=u7V}U0&B*3 z^Xzx6=7}Ozj#+>H++I+ci{{rUHo319XaB4Y-MR1X({3mVoyKf&txo&iQLthaU`;!M z3hi^pnbqVf_}ZG}fOSrz$2`LmEgzsrsdctqdfWk$^s6Z2ZM<`pD!E?utW5zER{v?F z%2R9iIQfCHDJ)pvAxop4xvG>JvJ`DoiX#(m8>2{(1(la?vU?$lijvY+mAgo(MU|C{ zD|21xz=|kRWo-Ep+Xuif^)$@%aZ-K{&Q+zzOk4>M)z~~Pn z&0=yDDK&d`Dmj7UHk=!UB1M`myFHQ3o-4xa8IPfohUGFco5^#VpEJ1dVahZVskHW! zv4LSA-2ywyaB{8~pSx0t3zSxlTEcN}q86bjM4CXOdB4N!#q1iKSlD-sZ`9l~Eq9So zVd3^FKXw1`DA?>zd(6`Nw{Yf~kaZ|hu3@2pZP{JT+hO|+?lFVs<|KnjFVB6Y)Qlvh%qK1^+5J6=LMiJrqaIAXumoDqCZg6eXkD&K zB}X9DGWYUsQg_yF6sa=bk(Mvm)?aq74PN0-*^>K8@d%{ioC{p8z z@%qLMAr;#}ZewH0jodS49k8VB<-oPJ+*Ybh8x*Or>!qQSyrF)-gytQ$ms8Vo#|S%# zZTcyLf|b6(q75RYBOJMoMyl-ey4dqhpnNM*PI;bdN(b2Y>=~}~6DhlgxpC#)hR!Hb zWl%)*2{Dl0sgU1zJI0iExuf(@g{zdJI@7ImXYP7>(;G$Vv#xgRkpZOQdstz_XOY)@ z%Pn7|_^QuIt(Bbh?UoOUl-Fo(OydHOe6yhu$Gjf-O3GdQLXD1OpPlzaAI@46&>Ka{ zn=rO$iGwf@Iw49uy`s6plk5UZ8dl>h?<-YMq`aC%Up71s4dOYNK;W*WZ%Ns_tof{q zGBhYW8jc8r!5!_;ZnN=(Xp`I>zlGfAqB|c&>O9u{SrqH4Z@^*!{=V_JLM}S()nVaM zd->XLT*rCwmdjA2%**Hc#JU1=H!Kz5c5#tKE;6BUlu{OsPUboqsj}6{GHLBW*#ML{ zF=yA!MWwq+)mMtyT(OTcX{5}4hW*cFLe<#|RR?#3aZPiPDY@X;JYJewQjfFgAn1p7YP2@UIP$UA(IMA&jIT$0&mw!bB}Z133| zMQWNG7dPNFWM4XDA1+S^*5t_4Ha3bq7wqpH8WhW$duS(Eq=|HXQ5=U1X*mH!3L0KE zU%3#-JWpuw@ws(}6nP-0$WE|p(jWd2Et<^sI5LB4Xr!vh%K=mK!hGT`EU@5Ya@iwK z#g11>BvYG)$s9DM=^7L%=&03&>B&%*bfGNa>&71*l?Re6Mgv2_Iper>7>Yv9cc^lW z%U5};1GzRFiV@DW>SuGraZpA^!4)oT`>8^sA{B0->?)UFRg}t~z1B_3(#jiV-&jZE z8e0KHs)|)@OJKJ}uZOlA-!^dgiY(Qi_skt&2`5@Dg3a=+!9hQNTB1l{Q;zgr##TO? z0}QtWDR*VTSSn>>sL6Mq#C$+L-=e7DnuZ$CG!4p{~cXgPbDl+mcztILJRkF(XICIO{uTCgZ(=El-DI1{rt%5N! ze$=DQ7a1nWx;H)e^H)~NX%t#mcemiv%`$AR77J|?e#>>Ju5nIQihk9-UoS*KEu=Zs zBHEfu%-_~UQ7B=pz<@@H!`LUh($MkZRM}lvoT*NgCezbeb!>}3a~7P zRKb>AC1hGe9}ou3@Zg5#_1#gVmXJ1^o3gDI<}F}%09u}ZT}~qlbhc`xA8ROS7J0-+ zaYD$cP!uWU{OEmgPoN`P(u6)Q@XkUeMVv=Nf+ui9zD1)@q!@F<`8EcSM`q9r;^%0B z>&wN6GU-TO5 zHvjV1j?mcchkm^gQdG0mTp`Yy_db>Q?-#vR5k;Xx2flf|ygbTe1UNQ}4pU}2<;dYA zZ_+)*e;IFhFWyQ(k@^geIoPK{Znc007~h>=(L8C(x0{np^6o^D(vp34t~>^`v(SIy^PO9jvS|ODYxiq*l#AS3 z9mcVPZk}2?C3ST8P;qLz&)y}I=78)mBpN=2UAB)bSq>)JmNm|D)7RRkQKYHXd8yAL zLui|(z&r%sE#alkna%#!EHVc($c_%5IOfp0_b5_S+*G5J7a+kJLxSNk+P48YL!l=j zSw{XDo=Lub)NyEy?`#ax@rxyj6!x{_&lon+j)By|#lO$UT!D#OvgCYCIO*a!YZNKX z@Kf`5$05!3!SWm)KK6){Nn;~N$>jQB*PdGfuCzswnpP)Pd1eR6^%mCW@N{YS3~f!~ zlsdG{n`?q+d7wyDi(l1wv<_50a4{iP%~_zeO4Ki>tW|N1&0PhGR5kNrtW`D0zwM$` zlY1+3rt*wZM!{-M4(j2gx8u0QYUo%Lg(h9-9ecNO%Nq`+09eMygUf~Mb7t~V1_rA9 z|F&S#D$g2jppjbgesr!s7;^11%-e`%tHzdWRwY(6-^ML7ER#{Bmge^_bYO=I9*FX4 z&AuF2I;i?bdZ;3zgW#5Iz7}Ak4vdukg79W#I=7^JzK<=`XlOPw@;zsxp54epVW!R8LUh-HwaS=SbzE3JFv9mp8~tF%SO1T6MpdJ}6RT zv(^==c>(eTG@ZB)tbScSGMkZB-AjoaQ~vZa6e+6yYI~D4fNBA4C*D_LdS5>3-@~n& z_4jjE=9;}IQs2p!`$n2Wc?*F0h(90%JeBYJ=a|d5+cD0fk@CvhH zC(nSgnv1gO7n}JR{A3NOp-mwaDP}~)3boclnH~?bRlESCS53mWRm}!K=VB z81e~Uf9mOwBg?N*Zw|j1I3?vXS&K~Nv71)I%7Cx zW9N}5Qc}sW71y#8&8s2T8lxq%qn&a@@=`@cvDAvrW~6!4a|Z{6zS)YR5Rw;Kh{{W?42=v3Q->&iHHPdz(na45b9(8p?cq4sDAfC5w+6g8#qkLHx6;qrA?=WF>`b^P}9GK!RTrF$2PSwK4uE1!5r;?i@u zL=&f5u;Cq!qLJbrFWI`8rQ15uV)6BBvT@liVaGOl$W=8jrJ+bw-CCSm84s!eNHSb4 zN8Hz5B~Gp951(-ljnp;pOvK_x;QC@oU2C7^f=jfF9T)YUyR3`9MN#O|gVJ93LjXwmktwsyW&tG+`(7KPRCs;?JjcU*&7Wxz;G(YVNqU zWCe=UQ?gR)QscnW4OUpNXKG&4oUE|0yi!O}Jp$H6vzCk%qTDi!OXiMERvS?i zdh$bV747z9R!t~HDNyI|gnga9Mji#bwkcFel=?-J9tX-zDDlp#C2^>i8b6sBlUedXS9J`tHtgxz*|Qr zS!?R!*~l|glw6hUZg9?kde>2;oJzV&CwF1V1=DxDeQit&%{X3R(j!f~D>}Tghc5WZ zCBLIk!YX~8*=5rwfn)(B46bRx_L@l~+vf0MM|nlB|MC!ul;Qd;tydFhd#XT%$LkrR zoMkY?1trP&EC(ElKaHXg!Uk;Bzg>Gj4XS(%=(2Dl=;WPaNUWa>6w`_u91uVB7}S9AOHkVz4z%c!Jo98;-X7ZfSx^ML#frUGUfG(Q+~z+Wy# z)Kg8lpyUV|DP~2fe$Chu5S^g3U`%?jTucMn^cDLQ#4(980#T%xowdeZNCC`PsLL4R z6rFPn>~Z8D#%=uh2Xcx@c%I4;9&gT}NHI$S;?;$r9vy@-gWI|I!Ll*pQnRIV8fOG= zxQ!y^Y_mLbqcfyUBD5}e09a#;ERN(36x~U$xFV@<28u#WL8#kc7xJo8R@?OTVv+Hq( zQ&b%ksb~MDR;la);VaPQ;L|W>8)bQ1RWXvKxlyC$9Fi2(6h#X9aC>E5_BNHP==<8# z?V5x5O{=uksdvPd6O<|&6e*?47}d^8kT$`PHuxLThkcq;>{aX#47CiK*ohnVFZDu^ zT0Bf^8ukK9by0KN^|%a6P-J*mqzF@_y+21(h*zLUG0~;<>{v&|<}rAj*Z#cb7XKVGeGRgPv-R zVmIwcUA=YJaSB%qdN>J1s_Eifx3z`O(u?l#|8 z<`l!$v=uhKuz2Gg?hmg)(}pkgv#J0ai%$ORiz2l&Ztt$X50(Z{Z0e&Gw}W*xv-pep zs3?ap{@Zyj2ct+0bpocHo&|>WqRgq$R8vE?AHnrL?&63A(|4dqF+rb;M6wl$AMgbg zAC2;`(G(*tBEEZL`L928?uQ~(Y+f!XuGVO%zwQ}#ds8{V&>)vWp9Au7!(hzDAZkJg=ihNMZvlJ z*E{S9(8Cmz&;BaP)m<-#{uV?`sX zXfiX2E6&wljUrV{IoBtx8KgxO_@aVyMBAL@ibb}kP^23B zZ;Rb$LjF95@0EBoJ3L;tM%0QJ_P)p!G*V6P#on#9L)sh_)!)^#HPT4lSiU1AjVoxR zitxLU=MR9w4Hkj$nEKfw%@koFAwk*nx|WMxaZK@687NZBqbemXvQ9=1DiB_MZ?Rf4 zj2do*6m|Yje&`isoqxYc`B0>cH6M*V>H(uWqzPVq|G7~HLtJ2sDT{G{WnM!RDa5yQ zuPfalb1Fdf!RfJQhei&$C+J&=le?x%_tjgn|q5 zKJJDhl{9qt=CKAOXQ1lhB$<}3k>vMU3Qdwqo_#o=$%jA`Da5Ru+P@+|rU3*u@+UJi zheU^{)a;s1s_DErnk(wuQ=>>VCw=R;JOi2|kU@A}KJbI48vbNe)~XKW3^_EMGiGla zj3VVUX}R8K0V^+%IC$0e<_|46;u_uBAf7`uMNdSLg0`RNzOfR3Izm&6zb_UoSUQL6 z7JSYJ+y3D*euzr^u=UUe?>J%0xz{LC%C%a%GX_DW9to`+o__8z(ul(LlK(oCNAt<} zW4=PH2iiV84~o?Ct$Rhk_mC_KOInCel#*)^XVU(`hFoD;z6gp!4V##o+8Fhy4H{=? zcJa8@t+GZM$+e0rquTL7fx5B-id506#|IsDzMS2Lj2r&~@O8R(R7h|g7lo6ZXK$q% z_Uihp6#P%HJHa`~R{??jj~5lL5U0knyq^5`cdl?pkva~Pep#R@I7YxCHg-H}Aj2UV zKi;_0o&SEdmEBMjI`kn|M%jPg$=;zjB>DtByG2eNf+huaDM_sCw|iBgFe|VJBX>AncmX0)C@%QSzq_*>5%f#0@baFd zX--THZaNfei6S+X7~JwM+he-lf;KUiz2umro~}tQ*_<0_q?SEaRkrqr^l1%a82mx; zYfrfrsm1-*9c;O0_|w)XQcuT(ct_^BFDlLj1LSxl+nUbT@^gf3-h3!h%$5p!Kime) z87R)U+b$j|8zXLVD%lp{j5p=i}^r6U&#Gt-&Y+QUzT~|!VlY&`6le+XAhpI4EjZ#Ll~Oo}gJ=|jia<}hKD9`# zW9A}wM@(@DC@f9tkHW`S1Z|*6uQw=pY^xN4Xjb5q`MxON$iEep)e%FSr)rV z771peL6N;_2`W3qhBHjlTBArgKMlKHX1j4Oin8p)4p|)NZJky9RHA2jJ#9O1h;cFAjv0A&Mu1MiV`=+qDVE#-9M}y2IV>x$~9h082m_-tL^gMv;5*?m+q_xQp$MQ<(=u}1@ zN%cPc^0;OUv|z@CTsqg?cY{m*IVV+H!?az z^h!+gxM^wZ*T0(JDE#%O@awCV1~g+YOH+&<8ihZc z0YBXC<7agfmdQpsINzxxJ$*DU|Bzz_Ox2WdU}yD8QG`MX|9(MsjwsnuVw-z}eM zfuitt*{cFRX^op$8$gfQjs9-c#{c|XiFA&$sL5~WFT2$WMd9zV!BtGd=LYMc!T$*F zQ{tT#m)qv#ci}X4NVpmz{4^e)u9zQT`q)9aX-UK~boB461$pO(I)BZ8&2>uaD^OBSVEo!`WO0Hmt|G`;4|= z_G%OXa5pZwa>GldElsk!9y>CHgJ=}OScl;dQE2BQfb}w^D^TP6<`nj) z-%!~22dmT#>MNu_$WPjNkar__y6i`hnk-aL?Vf?DC7AF!T>-V`COfrXwxSW0YoxR6 zdu3>eqEN&-wh~K@`2GY@VNrP>8>_j<>34!qsx=o6^-BX4oSz|! z8)ic_S3#4Y3=LG-dDvycvU!=tIm0I1MUk>v&2Os9dc)&T4e|9d3r6Rd1%m;_?e3=k1vz(LBP?QT>AySp33!0!0lEp~SY=3RTk z=vnKWfjOi1eLmdZeed%=uJ5cJXYaMwUb`t@&m8R72q^_B`OMv+JOHIa$HLQl!c4t^ zSRB|PDmYj~^|pvDr%5>62C0yWt+KkLteJQUs0zV8ryE-AI4;nY>d#uw$F*;NsFxD# z3m;`acq`Et%A97tERgx0wfI1FhEMntHeIx86O5FSx-VV%A0sU+B0aeLpOR+&95Ly2 z&z_uc<~UEJLef{@({B?#cz=c=(FBGBK7eSsURP4Kfc0VjkcqrQ>sELw$u*$R&$FVP)!6X97#U1Q#KV^ zT1a9w@;Blua6=QULaaA{_0_WJbk=~mp#kx?^3XnAv0x+Ml`QQIq(cp zAragBIy7ut+7vo}X9(0{M|C=?E0N|@)W$bLnGM#r`&N8sJb#!aQXv-GvUI8bwrCE( zss>m%bzCFt2o3=tH+X1UrT#MEH#$WMej05d} zPn4+~%rECoq!ci?c*n}G0B|-8PCN?M-_;XP%YuKW#ePoG``8|&l;}iYz3+>Gs5~?& z4ujQuq9>8$JmGV56X)1aY8_G`&pYV;`|p;0y8(Edp$Ty*iaxJo^4LTL1i+HVmZvXj zdRWH)k#?{%_Zz=vlPgt9XB%?v_9mc%Cn!iQ;vFCUhVFO&lE#~|vIWPh=g@mI3YH~sK<_~VB>(o5@at8Ct|2Ba#a`2aNEqlQjWfQJf*K0_r8<tPor-h-qFsi>D#FUT2U^2UHkL^xT-opz%q%Hn?e81Twn`b}Q}O_B`jv5?m=C|U8I6?E8s$2% z_678@VbJfpAX@8ke?jXg#LbGc+vyLSZ{)tWNQIoA!K+jD8&&iG&UP>s@c6t|=`T1X zC)}vhxj!=B{i>e}sgUU_FdaJDVWcN8^#&$-2zj5~!?2vrDT zh|0r1>zx9q7-&$u2-;CwS17jH7lbo??34lU$UJno%>P0svU#z) z{{)8f~YKG^*=oa9JYdh7*v7gZry zQ6SsA;g&}inDgK=4e4|ZJLpU17@FDXGXD$p+VF%zMVZ&AQno2ue@43i8ziifPFJ(@ zU$bS|=~|U8#R;cvFM*U2POshKMLM)=XZT{^PFJD(zaW(Ebc-u;sKIS2Af<5o&5F6Q z`NR#@ZMf6z@cC;v$xhd+t05=q-7Pm#Az3l#bl2WL37HFIWkf5=$^rV4xxxd&P#`vQ z{VR!AYN9tkK%pwcV~06Lotjuq1-#xcCh$6-cd)*AnP)nhd03tOXQP7gjN)vRq;5_^ zDx@s|v=tsy`T788FF+skLsRo|_21HJMl$b*nXYA_LMY!ay=Y(R>r#S2H~Q59sSw%- zpxsLiSQZP=P^Vbog`jQY{vXiN{h@^ehb%=@2x|{|Lu(%Jvu7t6Lq!cKn){n!_0Vo2#E;ual zB|#q`?a!*lyBFsq7pE6SN{OQHPtG#}hyq|$if>ZJ&D4iTvc1No{p62um$vzVR0zY~ z?)~ioNKr1I&h$v|vYWsb1Z?;Tvyc=2 zicO;O{-GA1IaZ0Z_eh0!y!`L3$bCZr&l>t0-qF51D-#bzOtPQhepycDm1L<>LhsyV z{n#>eD~wgVxiGr&w}e{fID3!j94_r$B2o%BuImFw7AtE5Ur!uCak%+6aFQc6U*B;Y z=Ct7$q(UfGdw1@;i1PQqW8=YN_&vni_w|8-XLAI>lx!+H|LC=g7s6d>vI8lF+?m$2 zO;3Pa3OTPhHXQU!FGxw3?W(?!Q+Ow@M=GRYrKBpk>|FgFXs*L3#j7CCH*#sRjt&1x zYr~5-QKdv%oerE@14R2p@xm9MWD{xXk!h&{dplqSXS#iNDN@SR>Zj+e&A^l{iWge_ z_!}n4WyZ1on>ftHkL!_As0*p_&ieqWE6iZH>H6m^C*zCBlLIu4lI%PPn3vz1>Rpu(NV!dxG!EbjGtd~3x~!qr%XNNk9?e2w2Q z9+2Q^d$LD#w9*Gja=cG7F2-S~3Srm<@-2@nR=5LG;Rph%U@?Y{k1@-8cfvRX#n$k7YTTd!sGg2%&^+KMz ze!0keq(Ur~yFTEmzj=A+Rg>Y?503ZUQ_8{8q+>^D^4BSl!L*$`VVx=kD)OxSh;jhb z4}kE6*J*wA1LDc+6sJvx$~*y^st|`|t)Fo(Ild0yG%iNJEq49%!}*=LPLbM$jp9ga z*Nj9;kxWMC>S+W>i@-y8%oT{y4+$a&nQ7~kDI(x1XQ4`&4mJpOV6n74@QJ|*i`xdu zVq!V#ziXJdLpG%;|%S~djnND@D<)ZjhH5z zid{9(N)+X{fs;_BL{`gI+XVvA4p@@oyBX1Q^dfTbRRu?>m0H23U%Ae~T18z&Dg$K*iK+i@DL9Fx?hz; zBzc#Bx@qzGvi$Zy!d?@kLMV2Nz`A8*v0DI@7Yb70Bcy$|Wn%@lkR1jjm_?)@a z8$D>GGeN$X*WxMC(~g=W6~eGo>EUxP9()WRJve?OMH7#I(gQ{^qI%^~3!W%VRmj2; zrSAvd`oX4b@wjjELmw7RK%91)qHPZJ@SGc}LMj&F>0NL^x1T^&83sJg39_y%mr8IT_B)x4a_vmG z&x1RQ67L}uauo)yr>%@OvL(0zHg|XdcfF}grj2ke%rdE_RqTLNNXJrR zKQ+4Hp#r)=upGw+*w?N81zl#wB6VKPgeyfD-tPY{Bc*r;azvfG2a^Lt>q(_yv?3u&Qk-PiAH&c9=3l2msNTvWj)(;JWuG1xH1N*kd@^~Mt|sj{|z{@DAW|` zj#%qD{R>u2L-Uzf`XjE2vE~_)RE4N4L-K3oV?*nJTR&8zsAoI>bJPr9Q?HI$yMgCL zj(1##RETNk-Z{u!Z4iLAc%h-m^uo)EIc zAGb?^vWZ0LrL;k}RzAn6dTl<9R7k}VOP#+|d+7yKQ$>eRD?;Q_X(DkRp{iIZPZ=x> z;z^UeCaI88rm3~RnzV+wxd{wid=Nf6LM~Hg!Yg%8hYg=OLO#DwNQEdr*ox$rI=BY7 zrvNk>j>GrquO|wRCy7F*4ZI%k>{hBmAeLA<+OD>T1prkP1-`2el?&vU_4-JaGUYqp z&3a5iN|BbCpENQDq?{rjJ%X(O&pp&>oy}HlDBqPfS_zNBJUw&4&VooOkYgP$lQIA_ zL3CEJbb@Rkc)bzIXGnGD=tXllM%R|JkP2~FLTiQgW@}kk*%v0*ocdH zS_>%!sx{86(MbSGh8+nGh^&XFt>rn0WmULE`bI{HrX<(en>d9?I~e4!WSb6!p@QWe ze}B2X>2jcPg#Q!nMg=y?rIE@%rrl`5#l}20)oyGfq(Uz-uC0YV+Fb=MHyC%g8#!;2 z%O%V{raTtYPI8Xqug8%Jd02ks^2<%$BtxaWxs7P7W=EY!a z#~7&dM|=6bxLX`(NXay$6s+_$rw>U0RuG(p=K_y%`hqzrLjxm4#qc8+JmMrJTRuQa ziL6wUTeX65w?=eOJEV%fM6O{GDpq2FdTHvBmz<@c|8t~5CYEN_@mKmNHhFh|900rr z@UWD_B%B0%c)1qVt0I*mFptFJJi+X2ouf!8*xTi6&d&ibKT%%~YN$7umMI~Bx6_=3 zDrNfNJRpiq31X&sE&ql|YEFn8bU7mtuiOQsl*#1Pj0p>XDF*z6k8Cg4{|%Gmq>#My zCWq;2a|0=bnl$ZZiB|ws3nm48WLv;RZ>TJ1grxbUvOexUpjnq(T;!Q~9Z0QCs%t(hYDB ze$3K4Oa@CvQDRAw7l9$1ASriWq?F{B^P3(qKr$0j5%B)@Sd0vk-zlBaesTG*k5k-E z*n^bPSikRM%sLKhBb@qrZioyT_||HQ5KB5I-qeg|DQ-U9<~s#`>LBvdz(x8qsY0dv6!bZTGqpLt4Jl<(dij z3=V_)N-Zb+iM zV5ox@8mS76Qg)6C4VAdZ{^N8QPkLP#9DGfax) z98@XK-9ZCeYyh57FneNG^}L`jkE>Gc2O04!wJNN8y!Rz7P6fNp{jaAr`h@4B{H?Jo_!nGK4VgDRXJ(E*Rv{A0(ce0@#+2QFv=bTZ{ZD)nJ~QPnE(wzU7(x72y0KzY-6`1?B!04$e7gGxl)%z_E(HeT$T09Xh5O@)WQN z0ahoJqSB!1-(oo_1AT*kJ5IDpej59oqrF@74Jk#e*y!pvw$nNTD=l1f{E+28K?L`) zmK6b3UYL{LaX8Y_0I3j=rSP|~9(!ya02;#_i?=)ujj{#I%-h!?Mr>Se70;9Rudxs* z#kp{BSK-BgQ(1%)-AYd!saQ~L+l?IK?45N;DNaP~)}@(uY61>ESX|?vCyrzoXhWav zoWnfNHl&niqI;7TKY^#GD6)~}q7P4&5uoP_FLIc-way`>P=z)(D$Rm;uV9wPd-#a1 z`anqse|{Xj!6}w0uOX#0_BYgfYs22AH^hW-lP&Slheli6XZyrEoP(;6hh4UK?9l7h zC-6=?XfhnRQ})T0Co>^k^B#hAczAG}M}$%hDT!gM%9mQ@FCO~u4&LV18FL=ZiSGL~Ye!QQ?lF)o`&c_ODptMe=(aq!cCfX!zsHfYKRI@Rb7R;d-G+EeVQl&wnZYikJ%SO2bJLQ?%Z15u$h%$d%0W8T>VlL4*`HA~O9h~@;2k{V z-%phb#KJ$WYGr^bmUbIO-bhYyWK1YhN^@;tyEfrC8Q!S) z0x4zj=`-zW9IzCF^%|kWw5Q^Kr$70Zs_u;P0p9fBNBM3@PfK zmlH>Gj*@vsA*DRd)ADY32|UALaAO{uOEP(~ocfA3y3IKfQZFN=JT41*{9wcTEOZ|H zVK{hGCXe>Hre&Tl9AcB*C!|6cb`h__!;wE(C}JYOG(bC`^oP2_@a!@lsU)HEucz_r zfTokDBBd10j(MU-0EG>7nZ}6X)k}F4T0YuC&h6j;Tl;NCN<#@cW^&`~2WE8l@DAOZ8W?r;vZa z*u|Z-XL)%P&_dEzR%b5C%~7aQlrMwoTxD~<1vsP;8o*7f$wQG|B-F}Llyj^(RuC!W zh}*Pk!ARf;0uH=fai}eyL#m66a4pFRs=X?KR7mm>CRT&0Emw^JlC`47>DEYBlFS#E zG-vm8@Xl8s;0WKw?L$gYCf8h+J{(X6fm3il32h}4#ZDRR>>DJ$YPDwgM~=|+&P${e z#j;wt+iap2qYQD-14R`oM%mi@J4g69@heh_5;MG5xov=AF6t@?a3Y<}QE%pyrg;)e zdZ)OfS?W8sQ@j_If|Qbc`93s&g{+zb30~P=>Y@*cRJXn7dyq54{o03=vi$5eJZ31c zKvb4&>GS%?WPy^teUyHEBcehehe0J;_irq7oRd%$5`BV!bm_<%TC)-9tj*!SS9$?g#6Zr44MM_DI$LtC& z0Rz|tNN`ke_fB0&ghw~l(NG4>x3~DR$iQw@_$z@Ao>f3ff$q1xoMSe)MtqhOa8Ms0 zEy=|_X4K*s4d+-Or8o<6HFMd*It_%Ja9}0zq@FlZXGziB>T`_JpXwl`IDz+$r>+B> zK7fM*8P_i8i6eQIRPRnp&M|37Go(VEFEG!fnk+G8*%d!vaN|SWGHLqoI6_{by02SQ zczBpPQk;g;=h<40bGODCq!jCQ^^b3!0ahCHYMdM6@<2bVEUrFy|J=r5o=;3hN});> z3o5~Oj0a%;!4boAFZ6+uKH_RsVjrg{SZWVaO7p7cc~^GrVWH@V>&*v!XtW)16$(7h zIoj4ai}yQNl38FKp=WJ&v_ z!9V!ZQN=`G9?8k*>ibe0sBMA?QVLZ5`modN($gy#^|)k)b9udhvW)d!`OlrxMBM9y zlu|V=QK#*Apkl)we?cx((~C-a+?!hYa*Um)dLpGb|8>2k*aSE$MIZb(we`Z$Ht@G} zjN%{@-6D`upk2w47ud4w8w`A$N7bmYUO?JM{wU`K9HnQcc}RswtQySgwP%{m1f>6< zXXB3K)H+)v>1tv=9^w9Qs12b{(O%1IK@6|C@~A}=QXy3lxF9-v%-q2tKxGIW3112u z+*T(lscK>wRl73EebW{G@Xvm{W>=MIzDOxpzqQ+XvZUQI(53Jz0AoA;Ef~875vdFm zrFXgepX5wUCm%;j*`9=7F3y~022R5Xypy~BEt`8-q;IgJ=q}yy))zU_)P(a$g=p*v z>PKtVq_HpFD^bUv_<{-gBWdsPZ-aYqo>}=lky5VR$N%fVF51oqE}Zk}58lfroW(vt z!pZ)(s~jUTd%X51;Aah2alT< z+tYzx6LUa6yD9o0nXJ~It+O)37v?c7(}ma6Sk9EMPBc;>8>`r8tgzra_z>_Lo-Vd; z)}KwwbTO^MWe!t*{RN~Hs^hnypDZ^l5}@#O@e^{%_3dpON@BWbGW0p8S>$;KDWy_) z&iTr2xLAw6-8KhhQ=y8MJ~k@2e-jldn#st@@L*HNcW6u>bTklnK{i`P+#}+5^;x>1g~T$y zKI~W@UIwC{g|Zi4@|v5b>z^T|z>j;S&S8gNQ7~L_mBV~>NB(VQu zP{}=ejduBr*h1yR!#qfZq^$00qb*~+p)i>x46=~e3zs(oNw01RY)o4A)n^=*s`X$r~~ZIUFn~809W6L zh#1IrrGsCQe;X&9G;<45O1i91qeB+Z0R~p3UA21Qe@v>SD9cCFeVnjs!#zlaq$QxM z&T(*4vUxQ|qB*-RzD7jauEIYh zwGCGKs@;{bqVK40kswYux^W;+_&tB2H1-y8^ zif-~xd7)6HRMFGTXGd{Ps+2R&!JhGxfO8^n;t$sMHvgJax(Af}6wgU_Bu+poBxTjN zS1o?>Jq1YF9ZO8w#PQ#dW~^X*w9Wz-9^T|dw{0(`A*H0#Hy5tXa>6GADQ^3Do&G7Q zmUE4A*IseHp+{dLrJP?2jSJfdoC`#p@4EkMPN_xJyyVZEuYT%#q?GeS+u&-9ljXYL zWvWZ>f6XbmrmCAerwLnA%?dI=Nq`D^PpMqw&q^hoJ%_%p0 zZh@527VKhmitRmvz^xvLRu%D2X{E>g`W@{!Ug84>q!jZ<^tTp2QFRXEq;%%x^tLYr_>y1RD6!xjd#Q`j_co2M} zFl^woe+c_KMkg5p>pXiWhurRiRS3(Du%=8r$ICwT23Q=?nLAG>Sp15??{K10@><)2 z8guy3)tDnQky5G$Gc3xovpyC!!6{g&%k-jBixMbfT$XTzJI@y)r6?|iia%fpl;Z&f zXWX7xrw@u$w%&-S)ttf1XeCl13wu>z#Lg|Rio)D79X7$ZIG@Uiw| zbzG$KDaTBTaFi#-RNrI-XBoG32vW)vG1uf2 zOI9<3oE3Zxy3SGknBY8C6`=C-WyLzB$iBMF=R{F2<{+hHe(j%EV|9YqaKnfE_n>Nn z4gnWY3qsj>Vom6 zntM$W@yCnv%=sf3D;8BpD#T*miat;@njOTt0~Wq!HSmcnEPlO7OI`DWgMBzeuX5f< zDNItHg-6x^%s6N|oFz8?jVu_JpQ?5LSasVXPVsTdLZl*^U-P!J2^(rKkmTK?Uu4l} z3lp7-S;YZ{7_UG|L8ir=eZ%rF;TW2n<6lrzmeX}Q!vh9Tq|Z7MLe{;bU^&n+6vm#~ z*H09~nAc)GN1{s6_O0xd%%Uxj4@&Yfs^-%NjTPl%bCFiC=~3G_SSzDsq!es~RhM}_ zY{?2>IP-c^F?$p`idO|PwGPILqhy%A+P^e>|m2zh!Y zi)0$N{8#x@6g=WGQlW1c(ukFfEy4lG0epi$xxFgsh9n&9K3NX7^NDKyz{;{2;Yfu{ z?B$myS9W@P0n;&f=M`V3=wqQ9)1S9Od?ddgXN&LU1nP~cNGZww=*0yF07+vQ_IRT1 zR8J=o$%kk7{a~rI`QldT9H+47XQUJ>WoDoECjl!2CIMV*B(T|EU`bSuI+s5Of9u7v zumUM1nmQ>xaW4?f6^;F4HaZbWJ%j^(3iS=n*mBV!SHEux2RfRbj8q859>w`@XRJei z04ob%I8nSx2c5uN1TW!aes84~NH14B;~Y*7Pmod`|7|~(vOsUVXuQ>Plh5Pi8xg5} ziCf0w2WO#5nLP6*`?Cbrve2FIa?;C7Kc?)KlRg7;@i%ge%H%*w$r8<0EZq)dp5QIK zPm1@GPbN7P0~A;Z5tNI4bwWW;82LyAiCdqy<_J&1S|g<> zms(wjy9g-vp}p{yt!JbjD3We@k*61D7`fCNDP?)-Uq6Da8CeAfyx>1DP$!l@4=H67 z=4b!AI6*FU^C6CLtN%Wv6vyXq>H-JAsR%guQ-6M>Tpa#kqw~(}Q#<8tuCpfI2rC!*PuB%4O94pU1ejU*m_ z&MDR>JwZxoUKNim=K(Zbfd=0l-3-UyI&6OgeMYL(Mvv!TxP8CvACOXx3USZxI|9c& z;K2Kx#HDgMI)*DDL094en)BtH{CTV976wR#Fznf_(gP~pX2~BvVXDIkx*=RUBwC4>y!0I>#Ph9_VrVSD8<=FQ%t*FhS4c%cP#E&JvNYx+AU9Adn4D|~OffP4ZFG>{Ey)bMF$17Da9;py7 z7c{AP$LZH>Vc(&GPX&>lji>b!W)cHN~J?-GeA8rh4>9FRCmzZQo~o=QMpAe?>~Etd9ER zUI@Or2U{gfmGD|GDz~g!a8pkM{^}c5N>%b!CC42=)eugr@bdrUXML%lzPsoWxH?x6 z&f_+$08$|jd(6=9+v{=cP$~*~6kfWOf@2>YK7BAH@X_aEZSR&@u9o)h2V*bsM+_%c zyMUCkxcz$i=>V{FhZe(2w`fCoEO78`2c`Z(!qpILr#K-OZgGsSMX*ww?V*&(*Ojr`^gQHAsys_urnex zM26VfU;9V?WlL|)lc!#Hq?F6|?L*TD=r3OIiNG<2&u+50)V@+1`;}8eIl_o1K}ade z^QwdEEX$`*?5IYIrlj|fhr$Y#h-Tux$pg4~+qFh`+I4p>NaFS@woX7QqZa=8>8>E!OHFWr}ufXvM zIIuS+?UKhKm4kEd%NK6_W53TxDMil<5AWWE*#$-~SuYenB#%N%MW!=14f#g0#(+FX zDM(tak9#(QJJy3c@F*JkpI#u&zWz!ZQ4p+NNMnvsWV8iRiWA@9(x~--!&Y=SpnLd| zJRI1Gu-U~i)L$v8(q1^;o>Qbvu|+DRVXvB(`SfCNGiaqgu*k)`?cBF?reVkZY`Nl- zS?Zcy36rE6J>Mx0+nqFD>WGw5^_>~>o)tiF6nzY?J(5o)ou_)$Y#e8xN?EKvS4$lX zEbo8?S7kZ-NHy+Daq_r;}~Hd(p%~8uk_D+hJ~*6EU(Y!Bu}@^MM{aL-y2z&gA z-gOI7N@Mi6X#tj>y&qhI$MvixGHH0R9*J=0(}=wsVaT=JNGVF%pXDTTQ3r1&sakULt`I#b%ohR~WxIBWV{PVuqfEu@sD_L$6ezOUv6J@!$P|F^CURb!K0xTmKyue_QL8j3I(6IxDJ5$+tL@i%(2t8k zln770<%jD-CcUWoII#|=m}yZPDWz#1Y?_a46DoqAaDe{acztNJjq+uk8gh>Auj?VD zJY!}xzPkr_asdy{@2rxjD-Sv!^kK*2(oamO*3RK9x!cb|Dr71Mo%>160Y5hZlep4d z|2eucq52!z%M8`E@+iQ%xBr*UNGVd2g4>4FfKCLJ2+4RmutYB;ZS&E`EkikoZ`r{} zg+LD>7k}=nlLbxz&=819*G8upL)K;jxodrW-3BJ1dOrL=>H4Zm{gby@kxi;X`;Wl> zzAwSa6ALL6uAS+`d}ga0`&yruHENUN4g)Fo;3o&tCmH*p?=%A`r8qX;VRs7jl0<8T zq8{p{i@wRAfHMLy!=j%?_ZfrN++s+D3{Sxm_YWH93WQUFl9n`lcPC%9jJ>1wk@CkA zj+*~UeX;m;47ZWE;QcauXz^S?qm`CacSs|q~+kA#!ehU3#M^id`G;gdM&F{k+ejUwPEk5Bp^S%jZ z7@N=tDP?irzq2Is%puX|F4;yVOXh>(TAbsVw>JkVyvzqF1+xCs2YJ!z=ylI{=kZl=H!A=eDTkolLnp$=New8&m_*$ev=7?_MXEhw z{bJ|!N=PZgx+miYv)Z`LMZt9oVeGaz8@*blv${$r&Onv2xNU0bSq`SN&!X;8 zWQEQwfh?O&>r{XJwFgI89q)#eqLkg_r9KL7F$cHc2+PjR@=&z+#J2Ms4siYTOr#Vf zDKtg782ZSXMl`vl@Gjjz*s#^=k4ra}a`PkN79*t?i)U}1xe722HKvP#=0|kL$ei7^ z((L*EAEyYIeG;jV<^>F#f`v~VtpFWmT1z^aMW54=CK67jLOdc>!J>Sh!pqA%W+Uf; zR|%vPqW(T_r@Y{j2DNFjTKSv0L1f-NV1rna#T+`=Zpw?`_IIVGVWdgb`99(o5(qb!`=^XF)@mL*K=ZYV|g(p50cbEd&L8*nilD zg+@gBhKj4zI5-p)R+DLZ{t&xFVr+m5jHF>>} zQjA;kHm+@N0L-<{IM{m6ohG_yV0&Oa9Fk&Zhd^!;V@urd?S=v9TL>^2j2{v zUipetNb(j)+FIU;ONCbH=S~keDox3jguU_U7z!0nRQ?%R^;&TrUT*r5Ic7=jMo1}6 zjvTvV*mYWCNHfCcE&b-}grlj&;tY!Z6wOl70@Q{{6KHA!i&KwnP=nN3+r{s$O>V>L3Yw|~MkAACxltPqVVG$HoT%q_fkG6x?Q(Yl4 z1_>n?`Blv=A8#0nR7k)ct+bkRXMlGpD6N@F=PuXpx)NkDcdho1=T9N#>@@(X5QDvG zH|2%L3v>9Gn8Df<-$-p@TqC>HM&_%)0t_GCH8K-Xto?l<1zHrM8Gk$Anxl}7Hk;9v8yx26z$-{8RFx7Ztvy-0-!tm@u_6$yLiLf2^uF$o+VY0^O#1b%Nhlfwq%S7r_aDd!s0vBgv8RvUrm#cBV7(ebQ_`(xSE%)d(Ykaz@t+BQ7$=}_38X@* z!a!BGzn|(O^qT{AbkB8dkls`oPkV_R^`JR_mFjqOQ=~#9_S)E?NJHbJfHc*b9-u47 z>y6YdDj*=lSM*}mGJ`vuWnk@_NQF%7{h&=ppT{r$ic|>09=vIIeN?_A7;{)JyyI+Ln5OlC)NS1UyY z0am@r$)88@`=CHdxuV{D3<`$MRH-e^?fi9AHWzwbhI%S#U^`A?Q^oZ#jN;qBJMfLAQb|#$2yi5Uiv`^F1zNcP`IFl z^41r618VvgUouHAo>*<#p%tIZ%_Ka;mhzU_1{|4 za9%n5UIjm-LOxcSc|n`BhruwXHi4BTE-2EusCjlPOBTiwe3N}N4VBC9_2+!!TJ^$_5KQMK+3jLD4bBkdX>`~ECWzbGn&%1-V(#9DozYXDx_npstGkV z6t{pGWE`Bb;JDjG3!Uh2En|w2W5Y|yfTbMBL;%;0+-7r)UeY0NN z%|5V$qg?xuj8uri3aPGJeQ-g0@W{)0G?-t@MmLnWP~Q-hpB)gfn=o!+QEETYOq$o! zl2@6Xv&I4`rLjt>zQYN2C9|8;=(VA;VQN)mAJKi)k4HOmhMIjkA*C$! z%9ick7>3w)V8O>e54z~a0++1ehLXRglrrrtWl#6u05cnUBBdY?;)Zs83hRQmqCn5e z-g<%fNZxIBnRtq0de+9w&H1~d!b!6!{EV}{L044vCmJQL?=F;YtQpSq}LtKBBc})uT`F~6dGkRWar=s z*ngxP3YdsP161mej?qeW4D?r}oibP%2x~U#o>M*tIgs^_eMl)-#XE&k4+EGdB=h3B z3CkwR0{cxwNybz;#tEoWk}_4MZ`=kXrQzHZPqtr@bR&UdWbKa~A50D7by){_h9DJU zu==bQ&TYPZ1ZKE+NC3e>g{Jd#!f306oDbh%c%49U+?eN#=Ju&ljyiUSlfJ^-R>6UW z<|eGviKE@`EBNAa-lu90;t>5$^+!q}^2O)3-w%8F!sgT&g}3MgLF(tyzM(oflG~4e zKMX15s8}q?hg~#hg|hJ%&?{9p4!g|nj@EBZkE6`y(??2rr+#;cRo}cz_@aMJzI7$4v zIHZ&$W?^2lXF$>gCJ>wrv*D6%B!6lL)9z8~_#|$ds*r)zFAlL*B_4n=TM#n+aNc3X zTRJgFRt=^!>t`S5G##28MM`OUTg0?>gD+mg_H+{*^;9PssnWa@rdF52KUr)tAR!-8 zAq*?W`yjUNK1cZcg|(p5NcT@V!MF&@@luG_hS#|9naeLDr4U0l%yOCx?Q;`$;`kd} zGlzvP+YeOAl~S0Dsq~AvqU1F*q?BTF^+Y#Yph$tWE55;KS4by{%psHI()Fx+7>6*P z5`>h(yz|=9k(Da+v7jy~RZ1rqR+3X|4NQw}Gr9G8^`;@E6miAXL9f9jPhsHT$n`@r zohg`GqC_hr<A01bUqN0l^7*m+ zNGU{%Nw=S~YT8ba!Ho~%8aL1hLfh?=wUbJ4!)|4bkWzrg!DEM}!7v>Ms}9^Z2ei-$ zK&lui9VphlD{_cZlglHeFqikX3LXN-l8*+_CVA3MCzz~qUIu?$&W+ohUVu~x!3y_X z{E_>)Ed=ks_n}Slrkk!1l4qk<1t;^;bCGSwBNYO$Vn|ILYHqFo)A;QUbnUY}NEU#W ztKgG5c=L)AeVTVdD&$}_G1u)luu}yy#T7^v!xzf@V)WtgVb#>3)}vHa#dcm5cs0f4 zj^&Y3CXY!QDkMVK=4U6`L;Q#8%%tty_``r&+<41r=13_-bI+13%R;J0gcpSvI!Sj3 zhB4Hcqs?ou?}V%YUU~^+eg%yp}}pju%LU z_F16-)zL+1=V9jB4Ko+sSXSC3$G(qf38W>#BQUNGzewA1n*~w|ri{Hm#{kaM)ArEq zT*3}r!32ldBLCFu!p#SDbVMq|VE1}!cswgw4JOu=u>Qee8PoH+Vq}>`zouwge)p29 z5QH5@s^_O9g_edj@(DVfoV}?lNLGi{Ca+F%j(*Aeky4JxG`E9qp~JXBhrwT(6Q6bE zU~3O}&IXDjYw0ArtIyzvp~}NaNdLezr(+9fCRzdnhGe~8yaDiUtz}o zzYG+m6rJr$)naF38qJgPwkG@Eh5xSUoDFvVPm`Yn<$%Iu@MrS--yI77&dT5at~FdO zinR5O;x)v>Lj#3&6me#T>%-3&OgfSA?`xFWIp1gS*`@G}V1Gu)&fuIHes0Gl3_>(o zj2KUR&wqqQsgdtJYA^Y00J-h(R}vYSP!t()Q~E_gOejv9AzPnM+>l0vhV0r$*yYVT z+t~>`#{LQ+L$8Z#4B0w#tsSTeK+ak?=IkWfGX^D}Wc>3Q{qxToDp;eW4~jSelY!z8 z{28Nve!lVVe;!IT+sFEbgu{%e#a*WzKl5LqQK1?3D^{F35)e>Rp~%x)p(uvT95vCH z3Gj_(ovSwdhtw}wd_Kd3MyZLl3oe}d2(1wUj>65JWTP<=u2x0+v4m)C?yA1~3;!J& zrAE4rT-v;FPHg&>p&eyt zREVbJz7|tm?`4?MC^hBM!O8V8_{~n_w_oj%sc0qCsMlg-Zr88;_h^(FY5!x_taf0a z7yRMj($N_iVe$3|_JDvELo;iCe~ zMyZjzo73Z;fe}a1uW8X)Xhg+c$P0k-{@M(kcKgnMjYg@V*y;8&8-fup_$z_BL880R zP)J6tU@bn|lJf_*qETvP`M!m{OF*YCFY46wx(cm?tHa=Z2bjvV*!kA+C%2?gFN z!&K0sVh(Ofqtw*SI_Bo7V5))0Z(&MgDyykrpp2`p1ePw{r4SQhFTx zoXYTX@EXlGOlXBo1ip}xsBJ3PKPAJCMyVZ_(Sv(k0~=N)4^89k<;J92X9M#nDV%C+4@IsNPx5I4+&@ zavK_@HinJeakC7}(`?4UYqj^W0vp*)IQ4TFax)tJV{|+Fi-Ve~m_|jl~K1J(J}2$SiS@QA9Kit26yruT`o~B{ zRUQN4 zG&u9dYwW<5lkJ~v!-9i-!z19LCEc`*Jgw;Gb;h8I+L+tYD7AIXW>$?WVCOdc;gyHS zBx1`xHXQ1LXgB3P!-SjCsL&Mqy4~IPbmJB<6A#lHo<8SH)|iS2b`I;!qH8+#720__I2gK@n(!KDS8KB00_(XpCr7Xv8|Pp~LVk zV^h!Pfv*VUWa1S}yXAk3^ic)&35LH&YNh+fgU=eCHJDp-GXDu0{bNO;uprT^yvRu- z*MXJDxL_srQTV3n+(#Of^3j)3adt;`^xY4Klu-ANj)uE`{$Y)aEd3%ZZ9QxIMPN?_ zbzL~J-5G;EWy)}q8vXMd3>C~&_X@?0>Pwm$zW(=b_-)ExX=!J#&6M+r3{x7Vrlz&6 zu}<1ll?`H3%1}!WH*Kc&#h2y3N~6@2$BEo~rA-}?G8JKIuhmqle>rYSqtsNd+{2Bf zP4(F*{#5~LONY+de$|Q+rreZ9g{HptdFZh2$JciyVa&INF^?z7{F}t4+9`v>>xxXJ zowx6qa@Jt#p$tBU}^}MD*wA{4~330WwW%YE-GaV+%Kcu@Z{^x z%wEY2<@rz3sL&qkhC?qZ4oG{kK(g4LD$>%?U1Tb=$H#T3z)fjXXsZA0nRXw?HL0{6 ze#mI}dDx5VBuoYQTDEr;nYviyO08aJ4B{QlxG9YaP3-_vUAL_oeg;ep6q&lXRs5^^ zhFNwH_l^2WQ%f*q+MpsgrBR_N=D=z#Op~M?SUg2+Dm>WI)k*ZLG98%XL53-fQd94? zTkViGl`Lf{($Yr!t1?aX99oJ0DveT8Gi)A&OPlJlUHq%mQI?%OwEZgEI+eL8jZ#y) zmW4l)HuXiqRHWL{UF)xUXkCSy(x}kX>u4kU#dB7fu7H(6E;uzPiw4*19pYcrRoOcN z5SharpZipLib en-US #ziplib compression library - Summary, Parameter, Returns, AutoDocumentCtors, Namespace, TypeParameter + Summary, Parameter, Returns, Value, Remarks, AutoDocumentCtors, Namespace, TypeParameter, IncludeTargets, AutoDocumentDispose InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected @@ -26,8 +26,8 @@ VS2013 - - + + The root namespace for this library. @@ -48,6 +48,15 @@ True False True + 0.87.0.0 + 2 + False + Standard + Blank + False + False + MemberName + AboveNamespaces diff --git a/Documentation/future/ARCHIVES.TXT b/Documentation/future/ARCHIVES.TXT new file mode 100644 index 000000000..7b2b7ab73 --- /dev/null +++ b/Documentation/future/ARCHIVES.TXT @@ -0,0 +1,1346 @@ + + + [[[[[[[[[ ARCHIVE FORMATS AND DATA ]]]]]]]]] + + (C) 1989 Raymond Clay + Permision to freely distribute and modify + is granted so long as credit is given + and all of the text through the disclaimer + is retained and unchanged + + October 31, 1989 + +If you want to submit corrections, changes or source code (in plain ASCII), +you can reach me via: + + + CIS : 74730,1344 + GEnie : R.CLAY1 + AppleLink : Raymond6 + StarText : 209287 511 bytes, < 128k DOS 3.3 256 + $3 > 129k HFS 524 + $5 extended file + $D subdirectory + +20 NXCRTIM HEX 000000 ;file creation time and date +23 NXCRDAT HEX 0000000000 +28 NXMDTIM HEX 000000 ;time and date file last modified +2B NXMDDAT HEX 0000000000 +30 NXARCTIM HEX 000000 ;time and date file archived +33 NXARCDAT HEX 0000000000 + . + . + +Any other attributes are added here. NXATRBCNT points to the NXFNL, which +is always the last attribute. + + . + . +NXATRBCNT-2 + NXFNL DW 0000 ;filename length + + +FILENAME SECTION +---------------- + +NXFNL+2 + NXFILE DS NXFNL ;Filename, partial pathname or disk + ;volume name. Names ported across + ;systems may have illegal characters + ;or characteristics. + + + + + + + + + + Page 12 + + +THREAD SECTION +-------------- + +Thread records are 16 byte records which immediately follow the filename and +describe the types of data structures which are included with a given record. +The number of threads is in the attribute section under NXNUMTHR. + + +A thread record can be represented as follows: + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 THRCLASS DW 0000 ;describes the class of the thread + + 0000 CLS_MSG + 0001 CLS__CNTRL + 0002 CLS_DATA + 0003 CLS_SPRSE + +02 THRFRMT DW 0000 ;format of the data within the thread + + 0000 ;Uncompressed + 0001 ;SQueezed (SQ/USQ) + 0002 ;Dynamic LZW [ShrinkIt] + 0003 + . ;RESERVED, contact the author + FFFF + +04 THRKIND DW 0000 ;describes data in thread + + if THRCLS = and THRKIND = THEN THE THREAD CONTAINS: + ---------------- -------------- --------------------------- + CLS_MSG 0000 ASCII text + all others undefined + + CLS_CNTRL 0000 create directory + all others undefined + + CLS_DATA 0000 data_fork of file + 0001 disk image + 0002 resource_fork of file + all others undefined + +06 DS 2 +08 THREOF HEX 00000000 ;length of the uncompressed thread +0C THRCMPEOF HEX 00000000 ;length of the compressed thread + +POSITIONING IN FILE +------------------- + +Start of the thread list = (beginning of header) + NXATRBCNT + NXFNL + +End of the thread list = (beginning of header) + NXATRBCNT + NXFNL + + (16 * NXNUMTHR) + +Start of a data_thread = (beginning of header) + NXATRBCNT + NXFNL + + (16 * NXNUMTHR) + (THRCMPEOF of all threads + in the thread list which are not data prior + to finding a CLS_DATA = 0000) + + + + + Page 13 + + +Start of a resource_thread = (beginning of header) + NXATRBCNT + NXFNL + + (16 * NXNUMTHR) + (THRCMPEOF of all the + threads in the thread list which are not + resources prior to finding a + CLS_DATA = 0002) + +Next record = (beginning of header) + NXATRBCNT + NXFNL + + (16 * NXNUMTHR) + (THRCMPEOF of each thread) + + ************************************************** + + + PACKIT + ====== + +System of Origin : Macintosh + +FILE HEADER +----------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 PITFLN HEX 00 ;filename length +01 PITFNAM DS 63 ;filename +40 PITTYP HEX 00000000 ;file type +44 PITCRT HEX 00000000 ;Creator +48 PITFFLG DW 0000 ;Finder flags +4C PITLOK DW 0000 ;locked? +4E PITDSIZ HEX 00000000 ;data fork uncompressed size +52 PITRSIZ HEX 00000000 ;resource fork uncompressed size +56 PITCDSIZ HEX 00000000 ;data fork compressed size +5A PITCRSIZ HEX 00000000 ;resource fork compressed size +5E PITCRC DW 0000 ;CRC + + ************************************************** + + + STUFFIT + ======= + +System of Origin : Macintosh + +Original author : Raymond Lau + +FILE FORMAT +----------- + + Master Header + file header 1 + file 1 resource fork + file 1 data fork + file header 2 + file 2 resource fork + file 2 data fork + . + . + file header n + file n resource fork + file n data fork +EOF + + + + Page 14 + + +MASTER HEADER +------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 SITHSIG ASC 'SIT!' ;STUFFIT archive signature +04 SITHNUM DW 0000 ;number of files in archive +06 SITHLEN HEX 00000000 ;length of entire archive incl hdr +0A SITHID2 ASC 'rLau' ;authors name - R. Lau +0E SITHVER DB 00 ;version number +0F DS 7 ;reserved + + +FILE HEADER +----------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 SITFRCMP DB 00 ;rsrc fork compression method +01 SITFDCMP DB 00 ;data fork compression method +02 SITFNL DB 00 ;file name length +03 SITFNAM DS $3F ;filename +41 SITFTYP DB 00000000 ;filetype +45 SITFCR DB 00000000 ;file creator +49 SITFFFL DW 0000 ;Finder flags +4B SITFCRD HEX 00000000 ;creation date +4F SITFMDD HEX 00000000 ;modification date +53 SITFRLN HEX 00000000 ;uncompressed resource fork length +57 SITFDLN HEX 00000000 ;uncompressed data fork length +5B SITFCRLN HEX 00000000 ;compressed resource fork length +5F SITFCDLN HEX 00000000 ;compressed data fork length +61 SITFRCRC DW 0000 ;resource fork CRC +63 SITFDCRC DW 0000 ;data fork CRC +65 SITFRPAD DB 00 ;pad bytes for encrypted files, +66 SITFDPAD DB 00 ;resource and data forks +6A DS 4 ;reserved +6E SITFHCRC DW 0000 ;CRC of file header + + + STUFFIT METHODS + + NAME METHOD DESCRIPTION + ----------- ------ -------------------------------------------- + noComp 0 uncompressed + rleComp 1 RLE compression + lzwComp 2 LZW compression, 18k buffer, 14 bit code size + hufComp 3 Huffman compression + encrypted 16 bit set if encrypted. ex: encrypted+lzwComp + startFolder 32 marks start of a new folder + endFolder 33 marks end of the last folder started + + + + + + + + + + + + + + Page 15 + + +POSITIONING IN FILE +------------------- + +First File Header = SITHSIG + $15 + +Begining of Resource Fork = SITFRCMP + $6F + +Begining of Data Fork = Begining of Resource Fork + SITFCRLN + +Next File Header = Begining of previous Data Fork + SITFCDLN + or + = Previous File Header + $6F + SITFCRLN + SITCDLN + + ************************************************** + + + ZIP + === + +System of Origin : IBM + +Original author : Phil Katz + +FILE FORMAT +----------- + + +Files stored in arbitrary order. Large zipfiles can span multiple +diskette media. + + Local File Header 1 + file 1 extra field + file 1 comment + file data 1 + Local File Header 2 + file 2 extra field + file 2 comment + file data 2 + . + . + . + Local File Header n + file n extra field + file n comment + file data n + Central Directory + central extra field + central comment + End of Central Directory + end comment +EOF + + + + + + + + + + + + + Page 16 + + +LOCAL FILE HEADER +----------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 ZIPLOCSIG HEX 04034B50 ;Local File Header Signature +04 ZIPVER DW 0000 ;Version needed to extract +06 ZIPGENFLG DW 0000 ;General purpose bit flag +08 ZIPMTHD DW 0000 ;Compression method +0A ZIPTIME DW 0000 ;Last mod file time (MS-DOS) +0C ZIPDATE DW 0000 ;Last mod file date (MS-DOS) +0E ZIPCRC HEX 00000000 ;CRC-32 +12 ZIPSIZE HEX 00000000 ;Compressed size +16 ZIPUNCMP HEX 00000000 ;Uncompressed size +1A ZIPFNLN DW 0000 ;Filename length +1C ZIPXTRALN DW 0000 ;Extra field length +1E ZIPNAME DS ZIPFNLN ;filename +-- ZIPXTRA DS ZIPXTRALN ;extra field + +CENTRAL DIRECTORY STRUCTURE +--------------------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 ZIPCENSIG HEX 02014B50 ;Central file header signature +04 ZIPCVER DB 00 ;Version made by +05 ZIPCOS DB 00 ;Host operating system +06 ZIPCVXT DB 00 ;Version needed to extract +07 ZIPCEXOS DB 00 ;O/S of version needed for extraction +08 ZIPCFLG DW 0000 ;General purpose bit flag +0A ZIPCMTHD DW 0000 ;Compression method +0C ZIPCTIM DW 0000 ;Last mod file time (MS-DOS) +0E ZIPCDAT DW 0000 ;Last mod file date (MS-DOS) +10 ZIPCCRC HEX 00000000 ;CRC-32 +14 ZIPCSIZ HEX 00000000 ;Compressed size +18 ZIPCUNC HEX 00000000 ;Uncompressed size +1C ZIPCFNL DW 0000 ;Filename length +1E ZIPCXTL DW 0000 ;Extra field length +20 ZIPCCML DW 0000 ;File comment length +22 ZIPDSK DW 0000 ;Disk number start +24 ZIPINT DW 0000 ;Internal file attributes + + LABEL BIT DESCRIPTION + ----------- --------- ----------------------------------------- + ZIPINT 0 if = 1, file is apparently an ASCII or + text file + 0 if = 0, file apparently contains binary + data + 1-7 unused in version 1.0. + +26 ZIPEXT HEX 00000000 ;External file attributes, host + ;system dependent +2A ZIPOFST HEX 00000000 ;Relative offset of local header + ;from the start of the first disk + ;on which this file appears +2E ZIPCFN DS ZIPCFNL ;Filename or path - should not + ;contain a drive or device letter, + ;or a leading slash. All slashes + ;should be forward slashes '/' +-- ZIPCXTR DS ZIPCXTL ;extra field +-- ZIPCOM DS ZIPCCML ;file comment + + + Page 17 + + +END OF CENTRAL DIR STRUCTURE +---------------------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 ZIPESIG HEX 06064B50 ;End of central dir signature +04 ZIPEDSK DW 0000 ;Number of this disk +06 ZIPECEN DW 0000 ;Number of disk with start central dir +08 ZIPENUM DW 0000 ;Total number of entries in central dir + ;on this disk +0A ZIPECENN DW 0000 ;total number entries in central dir +0C ZIPECSZ HEX 00000000 ;Size of the central directory +10 ZIPEOFST HEX 00000000 ;Offset of start of central directory + ;with respect to the starting disk + ;number +14 ZIPECOML DW 0000 ;zipfile comment length +16 ZIPECOM DS ZIPECOML ;zipfile comment + + +ZIP VALUES LEGEND +----------------- + + HOST O/S + + VALUE DESCRIPTION VALUE DESCRIPTION + ----- -------------------------- ----- ------------------------ + 0 MS-DOS and OS/2 (FAT) 5 Atari ST + 1 Amiga 6 OS/2 1.2 extended file sys + 2 VMS 7 Macintosh + 3 *nix 8 thru + 4 VM/CMS 255 unused + + + GENERAL PURPOSE BIT FLAG + + LABEL BIT DESCRIPTION + ----------- --------- ----------------------------------------- + ZIPGENFLG 0 If set, file is encrypted + or 1 If file Imploded and this bit is set, 8K + ZIPCFLG sliding dictionary was used. If clear, 4K + sliding dictionary was used. + 2 If file Imploded and this bit is set, 3 + Shannon-Fano trees were used. If clear, 2 + Shannon-Fano trees were used. + 3-4 unused + 5-7 used internaly by ZIP + + Note: Bits 1 and 2 are undefined if the compression method is + other than type 6 (Imploding). + + + + + + + + + + + + + + + Page 18 + + + COMPRESSION METHOD + + NAME METHOD DESCRIPTION + ----------- ------ -------------------------------------------- + Stored 0 No compression used + Shrunk 1 LZW, 8K buffer, 9-13 bits with partial clearing + Reduced-1 2 Probalistic compression, L(X) = lower 7 bits + Reduced-2 3 Probalistic compression, L(X) = lower 6 bits + Reduced-3 4 Probalistic compression, L(X) = lower 5 bits + Reduced-4 5 Probalistic compression, L(X) = lower 4 bits + Imploded 6 2 Shanno-Fano trees, 4K sliding dictionary + Imploded 7 3 Shanno-Fano trees, 4K sliding dictionary + Imploded 8 2 Shanno-Fano trees, 8K sliding dictionary + Imploded 9 3 Shanno-Fano trees, 8K sliding dictionary + + + EXTRA FIELD + + OFFSET LABEL TYP VALUE DESCRIPTION + ------ ----------- ---- ---------- ---------------------------- + 00 EX1ID DW 0000 ;0-31 reserved by PKWARE + 02 EX1LN DW 0000 + 04 EX1DAT DS EX1LN ;Specific data for individual + . ;files. Data field should begin + . ;with a s/w specific unique ID + EX1LN+4 + EXnID DW 0000 + EXnLN DW 0000 + EXnDAT DS EXnLN ;entire header may not exceed 64k + + ************************************************** + + + ZOO + === + +System of Origin : IBM + +Original author : Rahul Dhesi + +FILE FORMAT +----------- + + Master Header + file 1 header + file 1 + file 2 header + file 2 + . + . + file n header + file n +EOF + + + + + + + + + + + Page 19 + + +MASTER HEADER +------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 DS 20 +14 ZOOSIG HEX A7DCFDC4 ;File signature +18 ZOO1PTR HEX 00000000 ;pointer to 1st header +1C ZOO? HEX 00000000 ;? +20 ZOOMVER DB 00 ;version making archive +21 ZOOMIN DB 00 ;minimum version needed to extract + + +FILE HEADER +----------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 ZOOFSIG HEX A7DCFDC4 ;signature +04 ZOOFTYP DB 00 ;? +06 ZOOFCMP DB 00 ;Compression method +08 ZOOFNXH HEX 00000000 ;Nxt hdr ofst frm Start of ZOO file +0A ZOOFCUR HEX 00000000 ;Offset of this hdr +0E ZOOFDAT DW 0000 ;Last mod file date (MS-DOS) +10 ZOOFTIM DW 0000 ;Last mod file time (MS-DOS) +12 ZOOFCRC DW 0000 ;CRC-16 +14 ZOOFOSZ HEX 00000000 ;Uncompressed size +18 ZOOFNSZ HEX 00000000 ;Compressed size +1C ZOOFMVER DB 00 ;version that made this file +1D ZOOFMIN DB 00 ;minimum version needed to extract +1E Z00FDEL DB 00 ;1 if file deleted from archive +1F ZOOFCMTP HEX 00000000 ;pointer to comment, 0 if none +23 ZOOFCMTL DW 0000 ;length of comment +25 ZOOFNAM DS 13 ;filename + + +ZOO METHOD +---------- + + NAME METHOD DESCRIPTION + ----------- ------ -------------------------------------------- + Stored No compression used + Crunched Packing, LZW, 4K buffer, var len (9-12 bits) + +POSITIONING IN FILE +------------------- + +Begining of 1st File header = Begining of File + ZOO1PTR + or + = Begining of File + $21 + +Begining of File Data = Begining of File Header + $31 + +Begining of Next File = Begining of File + ZOOFNXH + +Begining of File Comment = Begining of File Header + ZOOFCMTP + + ************************************************** + + + + + + Page 20 + + + TIME VALUES + =========== + +MS-DOS TIME FORMAT +------------------ + + LABEL BIT DESCRIPTION + ----------- --------- ----------------------------------------- + DATE 15-9 Year + 8-5 Month + 4-0 Day (all zeroes means no date) + + TIME 15-11 Hours (military) + 10-5 Minutes + 4-0 Seconds + + +ProDOS/SOS TIME FORMAT (APPLE) +------------------------------ + + LABEL BIT DESCRIPTION + ----------- --------- ----------------------------------------- + DATE 15-9 Year (0-99) + 8-5 Month + 4-0 Day + + TIME 15-8 Hour (military time) + 7-0 Minutes + + ************************************************** + + + EXTENDED FILES + -------------- + +Extended files are a storage format used by a variety of operating +systems. The filename information points to a file that points to 2 other +files known as the DATA FORK and the RESOURCE FORK. + +The resource fork contains information about, and/or for the use of, the +data fork. In porting amongst systems the resource fork is probably of +no use. + +The data fork contains the actual file. + + ************************************************** + + + FILENAMES + --------- + +File name lengths, legal characters and format vary amongst the various +operating systems. MS-DOS allows a wider variety of characters while the +Apple operating systems allow longer names with no set format (no +extensions). Any program must be ready to convert a filename into the +current operating system format as well as handle any paths (either by +creating or ignoring them). + + + + + + + Page 21 + + +A suggestion would be to use a more universal standard for the filenames +of files that are likely to be ported (ie; Text, ASCII Source, GIF, ASCII +data files, etc) while making no special effort with executable code +(including tokenized BASIC) filenames. + +Such a standard might be: + + a filename of no more than 13 or less than 6 characters + legal characters A-Z (all uppercase) the '.' and 0-9 + periods to be used only once in a file to make an MS-DOS + type extension (ie; .TXT, .DOC, etc) + the filename MUST start with an alphabetic character (A-Z) + +********************************************************************** + + +Information taken from files by Alex Bamdad, Rahul Dhesi, Jim Dorsey, Don +Elton, Colin James, Phil Katz, Raymond Lau, Gary Little, Andrew Nicholas, +Haruhiko Okumura, Martin Peckham, Mike Sax, Tim Swihart and probably +others. + diff --git a/Documentation/future/FILEFMTS.DOC b/Documentation/future/FILEFMTS.DOC new file mode 100644 index 000000000..5005033e6 --- /dev/null +++ b/Documentation/future/FILEFMTS.DOC @@ -0,0 +1,162 @@ + + Definition of the data types used in the file format list + +In the file format list, several short mnemonics are used to describe +the structure of the data stored. Here I describe the structure (and +possible conversion) between some of these types. As some types have +different sizes across the platforms, for most types the byte order and +bit size is given to describe it. + +ASCIIZ A sequence of characters(->char), terminated + with the special character with the value 0. + Note that ASCIIZ strings as most structures on + Intel machines should not be larger than + 64Kb due to the ancient segmentation used. +BCD Binary coded decimal + A decimal number is converted into a hexadecimal number + which has the same digits as the decimal number. + (10d becomes 10h, 21d becomes 21h) +Bitmap If a value is declared as bitmapped, that means that + every bit in this value might have a different meaning. + The bytes are numbered from right to left, the least + significant bit has the number 0. After the bit number, + there are either two statements, separated by a + slash("/"), which are the two meanings if the bit is + set / not set, or one single statement, which is the + meaning of this bit, if it is set. +Byte 8 bit unsigned number. Smallest unit a record + consists of. All offsets are in the unit bytes. + (0-255) +Char Synonym for byte, most values are between 32 and + 255. (#0-#255) +DWord 32 bit signed number. Well, maybe some of the + formats use a DWord which is a 32 bit unsigned + number, but as files tend not to be greater than + 2GB, this won't be my concern. To convert + between Intel and Motorola format, you have to + swap bytes #2 & #3 and bytes #1 & #4.(-2Gb-+2Gb) +Int Integer. Signed 16-bit number. + (-32767-+32767) +LString A string which is preceeded by the length. Also + named "counted" string. Used by most Pascal + implementations Maximum length is 255 bytes, but it can + contain any char. +Nybble The upper or lower four bits of a byte. A nybble + is a single hex digit and can have values from + 0 to 15. A signed nybble can have values from + -8 to 7 with bit 3 being the sign bit. +Paragraph A multiple of 16. A paragraph was the resolution of the + Intel chip 64K segments. +Word 16 bit unsigned number. Note that byte order is + important, wether you have a Motorola machine or + an Intel one. Conversion between the two formats + is simply by swapping byte #1 with byte #2. + (0-65535) + + How to identify different files + +While searching for different file formats, I found the following programs +helpful to gather information about different files. They all are DOS programs +since I'm not familiar with other platforms (except Windows). Most of them +should be available on SimTel CDs or via FTP at ftp.cdrom.com, except for my +program TF, which is still in beta. + +LIST.COM v9.0a by Vernon Buerg + List is a file lister which supports both text and hex-view. + +HIEW.EXE v4.18 by Sen + Another file lister with build-in disassembler. + +FILE.EXE v2.0 by Felix von Leitner + File is a file identification program. + +Q.COM v3.01 by SemWare + QEdit is the editor I'm editing the list with. + +TF.EXE v0.38 by me + The program that started it all. A "simple" file identification + program - no more, since it has grown too big by now. + Still unreleased, since it is not really extensible yet. + + The file formats list meta list ;) + +The file format list uses a certain format to make it readable by programs which +convert it into the WinHelp format or create program structures out of the +lists. This format is very similar to the format used by Ralf Brown in his PC +interrupt list but was extended by me to accomodate for the specific needs of +this list : + +Each topic in the list is delimited by a line of 45 chars, in which the +first 8 contain the char '-'. After these, there follows one character which +contains the type of topic. The different topics are described in the list +itself, the char '!' denotes an information topic - like the list of chars and +their meaning. After the topic identifier, there follows another '-' char and +then the topic name, not containing any '-' chars. After the topic name, there +may be some other descriptors like for Motorola byte ordering, guesswork marking +or other purposes, see the main list for further information. The line is ended +with at least one '-' char. Take the following prototype : + +--------?-TEST------------------------------ + +OFFSET Count TYPE Description +EXTENSION: +OCCURENCES: +PROGRAMS: +REFERENCE: +SEE ALSO: +VALIDATION: + +Sub-topics like different records are mostly delimited by three dashes ('-'). +I suggest folding them up and making them available as a popup window. + +Tables have the following format : +(see table 0000) +for a table reference and +(Table 0000) +for the beginning of a table. The end of a table is undefined (yet). + + + A primer on file formats + + Abbrevations +Throughout the list, many abbrevations are used, some in the reference +section. Here some are explained : + +c't +The c't is a german computer magazine, which developed the Borland +Pascal for OS/2 patch. They release source code in files called +CTmmyy.*. Note that comments in the source code and the language in +the issues tend to be german :-) + +DDJxxyy +(Doctor Dobb's Journal) +The DDJ is a monthly publication by M&T/US which is intended for the +professional programmer. The four digits after the name indicate the +month/year of the issue referred to. Most of the sourcecode published +in the issue is available electronically on Compu$erve and other BBSes. +The files have the name DDJyymm. + +PDN +Programmer's Distribution Net +A network dedicated to the distribution of source code useful to +programmers. Often linked with Fido-nodes. + +Contributions to this list were made by : + Ralf Brown (The .EXE file formats from the INTERRUPT List, general layout) + David Dilworth (david.dilworth@sierraclub.org) + Daniel Dissett (ddissett@netcom.com) + Marcus Groeber (marcusg@ph-cip.uni-koeln.de) + Darrel Hankerson (hankedr@mail.auburn.edu) + Carl Hauser (chauser.parc@xerox.com) + Jouni Miettunen (jon@stekt.oulu.fi) + Jan Nicolai Langfeldt (janl@ifi.uio.no) + Mark Ouellet (Telix .FON structures) + Greg Roelofs (roe2@midway.uchicago.edu) + Robert Rothenburg Walking-Owl (wlkngowl@unix.asb.com) + Jesus Villena (CONVERT.EXE, a digital sample conversion program) + Christos Zoulas (christos@deshaw.com) + JAL / Nostalgia + David McDuffee, (75530,2626@compuserve.com) + +Information gleaned from other programs : + Formats for Word and WordPerfect (Selke's filetype) diff --git a/Documentation/future/FILEFMTS.LST b/Documentation/future/FILEFMTS.LST new file mode 100644 index 000000000..0669ac756 --- /dev/null +++ b/Documentation/future/FILEFMTS.LST @@ -0,0 +1,7496 @@ +File format list Release 3.00 Last change 02/04/96 +This compilation is Copyright (c) 1994,2002 Max Maischein +--------!-CONTACT_INFO---------------------- +If you notice any mistakes or omissions, please let me know! It is only +with YOUR help that the list can continue to grow. Please send +all changes to me rather than distributing a modified version of the list. + +This file has been authored in the style of the INTERxxy.* file list +by Ralf Brown, and uses almost the same format. + +Please read the file FILEFMTS.1ST before asking me any questions. You may find +that they have already been addressed. + + Max Maischein + +corion@corion.net +Corion on #coders@IRC +--------!-DISCLAIMER------------------------ +DISCLAIMER: THIS MATERIAL IS PROVIDED "AS IS". I verify the information +contained in this list to the best of my ability, but I cannot be held +responsible for any problems caused by use or misuse of the information, +especially for those file formats foreign to the PC, like AMIGA or SUN file +formats. If an information it is marked "guesswork" or undocumented, you +should check it carefully to make sure your program will not break with +an unexpected value (and please let me know whether or not it works +the same way). + +Information marked with "???" is known to be incomplete or guesswork. + +Some file formats were not released by their creators, others are regarded +as proprietary, which means that if your programs deal with them, you might +be looking for trouble. I don't care about this. +--------!-FLAGS----------------------------- +One or more letters may follow the file format ID; they have the following +meanings: + Cx - Charset used : + 7 - Unix 7-bit characters + A - Amiga charset (if there is one) + E - EBDIC character format + U - Unicode character set + W - Windows char set + Default is the 8-Bit IBM PC-II Charset. Note that Microsoft + introduced codepages which might be relevant with other + programs. + G - guesswork, incomplete, unreliable etc. + M - Motorola byte order + Default is Intel byte order + O - obsolete, valid only for version noted below + X - Synonym topic. See topic named under see also. +--------!-CATEGORIES------------------------ +The ninth column of the divider line preceding an entry usually contains a +classification code for the application that uses those files. + +The codes currently in use are: + ! - User information ( not really a file format ) + A - Archives (ARC,LZH,ZIP,...) + a - Animations (CEL, FLI, FLT,...) + B - Binary files for compilers etc. (OBJ,TPU) + H - Help file (HLP,NG) + I - Images, bit maps (GIF,BMP,TIFF,...) + D - Data support files (CPI,FON,...) + E - Executable files (EXE,PIF) + f - Generic file format. RIFF and IFF are generic file formats. + F - Font files (TTF) + G - General graphics file + M - Module music file (MIDI,MOD,S3M,...) + R - Resource data files (RES) + S - Sound files (WAV,VOC,ZYX) + T - Text files (DOC,TXT) + W - Spreadsheet and related (WKS) + X - Database files (DBF) +--------!-FIELDS---------------------------- +After a format description, you will sometimes find other keywords. The +meanings of these are : + EXTENSION: + This is the default extension of files of the given type. + On DOS systems, most files have a 3 letter extension. + On Amiga systems, the files are prefixed with something. + The DOS extensions are all uppercase, extensions for other systems + are in lower case chars. On other systems, which do not have the con- + cept of extensions, as the MAC, this is the file type. + OCCURENCES: + Where you are likely to encounter those files. This specifies + machines (like PC,AMIGA) or operating systems (like UNIX). + PROGRAMS: + Programs which either create, use or convert files of this format. + Some might be used for validation or conversion. + REFERENCE: + A reference to a file or an article in a magazine which is mandatory + or recommended for further understanding of the matter. + SEE ALSO: + A cross reference to a topic which might be interesting as well. + VALIDATION: + Methods to validate that the file you have is not corrupt. Normally + this is a method to check the theoretical file size against the + real filesize. Some file formats allow no reliable validation. +--------!-FORMAT---------------------------- + The block oriented files are organized in some other fashion, since the + order of blocks is at best marginally obligatory. + + Each block type starts with the block ID (eg. RIFFblock for a RIFF file) and + in square brackets the character value of the ID field (eg. [WAVE] for RIFF + WAVe sound files). The block itself is descripted in the format description, + that means you will have to look after RIFF or FORM. In the record + description, the header information is omitted ! + + If a record is descripted, the record ends when the next offset is given. + + Bitmapped values have a description for each bit. The value left of the + slash ("/") is for the bit not set (=0), the right sided value applies + if the bit is set. + + A note on the tables section. The tables were added as they were introduced + into Ralf Browns interrupt list - so not everything was pressed into a table. + The tables (should) have unique numbers, but they sure are out of order ! +--------!-MACHINES-------------------------- + Machines that use Intel byte ordering + PC + Machines that use Motorola byte ordering + AMIGA, ATARI ST, MAC, SUN + +--------M-669------------------------------- +The .669 format is a module format for digital music. + +OFFSET Count TYPE Description +0000h 1 word ID=6669h +0002h 108 byte ASCII song message +006Eh 1 byte Number of saved samples (0-40h) + ="NOS" +006Fh 1 byte Number of saved patterns (0-80h) + ="NOP" +0070h 1 byte Loop order number +0071h 128 byte Order list +00F1h 128 byte Tempo list for patterns +0171h 128 byte Break location list for patterns +01F1h "NOS" rec Sample data + The sample data is in the file + for "NOS" + 13 byte ASCIIZ filename of instrument + 1 dword Length of instrument sample + 1 dword Offset of beginning of loop + 1 dword Offset of end of loop +01F1h+ "NOP"*600 rec The note patterns + "NOS"*19h Those patterns are repeated for each row, + and the array of these is repeated 64 times + for each pattern. + 3 byte Note(see table 0000) +01F1h+ ? byte Sample data (unsigned) + "NOS"*0x19+ + "NOP"*0x600 + +(Table 0000) +669 Note format +Each note looks like this : +BYTE[0]: BYTE[1]: BYTE[2]: +nnnnnnii iiiivvvv ccccdddd + + n : note value + i : 6-bit instrument number + v : 4-bit volume + c : command data (Protracker format mapped) : + 0 = a + 1 = b + 2 = c + 3 = d + 4 = e + 5 = f + d : command value (Protracker format) + +Special values for byte 0 : + 0FEh : no note, only volume + 0FFh : no note or no command, if byte 2 = 0FFh + +EXTENSION:669 +OCCURENCES:PC +SEE ALSO:MOD +PROGRAMS:669 Mod Composer, DMP +VALIDATION: +--------S-8SVX-MG--------------------------- +The 8SVX files are IFF files used for digital audio data. The format of +the VHDR block is complete guesswork. These files use Motorola byte order. +The 8SVX file format is fixed to 8-bit mono sample data - at least GoldWave +does not support saving files in any other format than 8-bit mono. + +FORMblock [VHDR] +This is the sample information block. The normal size is 20 bytes. +OFFSET Count TYPE Description +0000h 1 dword Sampling rate of digital data in Hz. + This count seems not to be too accurate, + at least GoldWave v2.0 creates different + rates for Wave and 8SVX files. +0004h 4 dword Other data, unknown + +FORMblock [BODY] +This block contains the raw sample data, maybe the usual IFF compression was +used. The details of both the compression and the information about the IFF +format are unknown to me. +EXTENSION:IFF +OCCURENCES:PC,Amiga +PROGRAMS:GoldWave +SEE ALSO:IFF,WAVE +VALIDATION: +--------S-AIFC-MG--------------------------- +The AIFC files seem to be a variation of the AIFF files - but I don't know +anything about them. +EXTENSION:IFF +SEE ALSO:AIFF +--------S-AIFF-MG--------------------------- +The Audio Interchangeable File Format files are digital audio files +stored in the IFF format; the samples are stored in signed PCM. The header +block is [AIFF], different subblocks are : + +[AUTH] +The authors information; optional +[COMM] +This record stores information about the sampled data : +OFFSET Count TYPE Description +0000h 1 word ??? number of channels ??? + ??? number of instrument samples ??? +0002h 1 dword Sample length +0006h 1 dword lower frequency +000Ah 1 dword maximum frequency +000Dh 1 dword ??? +[MARK] +[NAME] +The name of the instrument / sample +[SSND] +The stored sample data. + +Further information wanted. +EXTENSION:AIF,IFF +--------E-AMIGA EXECUTABLE-MG--------------- +All Amiga executables I've seen start with this signature. Of course the +bytes are in Motorola byte order, as you would exspect from a Motorola +based machine. This info here is based completely on my guesswork, maybe +somebody from the Amiga could help flesh out this part. + +OFFSET Count TYPE Description +0000h 1 dword ID=03F3h +EXTENSION:EXE +OCCURENCES:AMIGA +SEE ALSO: +VALIDATION: +--------M-AMS------------------------------- +The AMS format is a multichannel module format created by the X-Tracker (not +to be mistaken for he tracker of the same name by D-Lusion). +The X-Tracker by Extreme PC is a multichannel tracker that features 32 digital +channels, 64 MIDI channels, 255 samples, 64K patterns and positions. The tracker +is currently in beta status and not enough information is yet available yet. + +OFFSET Count TYPE Description + +EXTENSION: +OCCURENCES: +PROGRAMS: +REFERENCE: +SEE ALSO:MOD +VALIDATION: +--------A-ARC------------------------------- +The ARC files are archive files created by the SEA ARC program. The compression +has been superceded by more recent compression programs. Similar archives can +be created by the PAK and PkPAK programs. There have been many variations +and enhancements to the ARC format though not as many as to the TIFF format. + +You may have to use some (paranoid) checks to ensure that you actually are +processing an ARC file, since other archivers also adopted the idea of putting +a 01Ah byte at offset 0, namely the Hyper archiver. To check if you have a +Hyper-archive, check the next two bytes for "HP" or "ST" (or look below for +"HYP"). Also the ZOO archiver also does put a 01Ah at the start of the file, +see the ZOO entry below. +OFFSET Count TYPE Description +0000h 1 byte ID=1Ah +0001h 1 byte Compression method (see table 0001) +0002h 12 char File name +000Fh 1 dword Compressed file size +0013h 1 dword File date in MS-DOS format (see table 0009) +0017h 1 word 16-bit CRC +0019h 1 dword Original file size + ="SIZ" +(Table 0001) +ARC compression types + 0 - End of archive marker + 1 - unpacked (obsolete) - ARC 1.0 ? + 2 - unpacked - ARC 3.1 + 3 - packed (RLE encoding) + 4 - squeezed (after packing) + 5 - crunched (obsolete) - ARC 4.0 + 6 - crunched (after packing) (obsolete) - ARC 4.1 + 7 - crunched (after packing, using faster hash algorithm) - ARC 4.6 + 8 - crunched (after packing, using dynamic LZW variations) - ARC 5.0 + 9 - Squashed c/o Phil Katz (no packing) (var. on crunching) + 10 - crushed (PAK only) + 11 - distilled (PAK only) +12-19 - to 19 unknown (ARC 6.0 or later) - ARC 7.0 (?) +20-29 - ?informational items? - ARC 6.0 +30-39 - ?control items? - ARC 6.0 + 40+ - reserved + +According to SEA's technical memo, the information and control items +were added to ARC 6.0. Information items use the same headers as archived +files, although the original file size (and name?) can be ignored. + +OFFSET Count TYPE Description +0000h 2 byte Length of header (includes "length" + and "type"?) +0002h 1 byte (sub)type +0003h ? byte data + +Informational item types as used by ARC 6.0 : + +Block type Subtype Description + 20 archive info + 0 archive description (ASCIIZ) + 1 name of creator program (ASCIIZ) + 2 name of modifier program (ASCIIZ) + + 21 file info + 0 file description (ASCIIZ) + 1 long name (if not MS-DOS "8.3" filename) + 2 extended date-time info (reserved) + 3 icon (reserved) + 4 file attributes (ASCIIZ) + + Attributes use an uppercase letter to signify the + following: + + R read access + W write access + H hidden file + S system file + N network shareable + + 22 operating system info (reserved) + +(Table 0009) +Format of the MS-DOS time stamp (32-bit) +The MS-DOS time stamp is limited to an even count of seconds, since the +count for seconds is only 5 bits wide. + + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + |<---- year-1980 --->|<- month ->|<--- day ---->| + + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + |<--- hour --->|<---- minute --->|<- second/2 ->| + +EXTENSION:ARC,PAK +OCCURENCES:PC +PROGRAMS:SEA ARC,PAK,PkPAK +SEE ALSO:HYP,ZOO +VALIDATION:FileSize="SIZ" +--------A-ARJ------------------------------- +The ARJ program by Robert K. Jung is a "newcomer" which compares well to PKZip +and LhArc in both compression and speed. An ARJ archive contains two types of +header blocks, one archive main header at the head of the archive and local +file headers before each archived file. + +OFFSET Count TYPE Description +0000h 1 word ID=0EA60h +0002h 1 word Basic header size (0 if end of archive) +0004h 1 byte Size of header including extra data +0005h 1 byte Archiver version number +0006h 1 byte Minimum version needed to extract +0007h 1 byte Host OS (see table 0002) +0008h 1 byte Internal flags, bitmapped : + 0 - no password / password + 1 - reserved + 2 - file continues on next disk + 3 - file start position field is available + 4 - path translation ( "\" to "/" ) +0009h 1 byte Compression method : + 0 - stored + 1 - compressed most + 2 - compressed + 3 - compressed faster + 4 - compressed fastest + Methods 1 to 3 use Lempel-Ziv 77 sliding window + with static Huffman encoding, method 4 uses + Lempel-Ziv 77 sliding window with pointer/ + length unary encoding. +000Ah 1 byte File type : + 0 - binary + 1 - 7-bit text + 2 - comment header + 3 - directory + 4 - volume label +000Bh 1 byte reserved +000Ch 1 dword Date/Time of original file in MS-DOS format +0010h 1 dword Compressed size of file +0014h 1 dword Original size of file +0018h 1 dword Original file's CRC-32 +001Ah 1 word Filespec position in filename +001Ch 1 word File attributes +001Eh 1 word Host data (currently not used) +? 1 dword Extended file starting position when used + (see above) + ? char ASCIIZ file name + ? char Comment +????h 1 dword Basic header CRC-32 +????h 1 word Size of first extended header (0 if none) + ="SIZ" +????h+"SIZ"+2 1 dword Extended header CRC-32 +????h+"SIZ"+6 ? byte Compressed file + +(Table 0002) +ARJ HOST-OS types + 0 - MS-DOS + 1 - PRIMOS + 2 - UNIX + 3 - AMIGA + 4 - MAC-OS (System xx) + 5 - OS/2 + 6 - APPLE GS + 7 - ATARI ST + 8 - NeXT + 9 - VAX VMS +EXTENSION:ARJ +OCCURENCES:PC +PROGRAMS:ARJ.EXE +REFERENCE: +SEE ALSO: +VALIDATION: +--------S-AU-MG----------------------------- +The AU files are digital audio files used by the Sun and NeXT +workstations. +Further information wanted. +OFFSET Count TYPE Description +0000h 4 char ID='.snd' +0004h 1 dword Offset of start of sample +0008h 1 dword Length of stored sample +000Ch 1 dword Sound encoding : + 1 - 8-bit ISDN u-law + 2 - 8-bit linear PCM (REF-PCM) + 3 - 16-bit linear PCM + 4 - 24-bit linear PCM + 5 - 32-bit linear PCM + 6 - 32-bit IEEE floating point + 7 - 64-bit IEEE floating point + 23 - 8-bit ISDN u-law compressed(G.721 ADPCM) +0010h 1 dword Sampling rate +0014h 1 dword Number of sample channels +EXTENSION:AU +OCCURENCES:SunOS +--------B-BGI-G----------------------------- +The BGI files are graphic drivers used by the Borland compilers to +provide graphics output for different graphics cards. They are loaded +dynamically. The exact format is not known to me ... +OFFSET Count TYPE Description +0000h 4 char ID='FBGD' +0004h 1 dword ID=08080808h + used to backspace over ID if typing the file +0008h ? char Driver ID string, terminated with #26 +EXTENSION:BGI +OCCURENCES:PC +PROGRAMS:Borland Pascal, Borland C, Turbo Pascal +--------I-BMP------------------------------- +The BMP files are the way, Windows stores bit mapped images. The BMP image +data is bit packed but every line must end on a dword boundary - if thats not +the case, it must be padded with zeroes. BMP files are stored bottom-up, +that means that the first scan line is the bottom line. The BMP format has four +incarnations, two under Windows (new and old) and two under OS/2, all are +described here. +OFFSET Count TYPE Description +0000h 2 char ID='BM' - BitMap + OS/2 also supports the following IDs : + ID='BA' - Bitmap Array + ID='CI' - Color Icon + ID='CP' - Color Pointer (mouse cursor) + ID='IC' - Icon + ID='PT' - Pointer (mouse cursor) +0002h 1 dword Filesize of whole file +0006h 4 byte reserved +000Ah 1 dword Offset of bitmap in file + ="BOF" +000Eh 1 dword Length of BitMapInfoHeader + The BitMapInfoHeader starts directly after + this header. + 12 - OS/2 1.x format + 40 - Windows 3.x format + 64 - OS/2 2.x format +0012h 1 dword Horizontal width of bitmap in pixels +0016h 1 dword Vertical width of bitmap in pixels +001Ah 1 word Number of planes +001Ch 1 word Bits per pixel ( thus the number of colors ) + ="BPP" +001Eh 1 dword Compression type, see ALGRTHMS.txt for descrip- + tion of the different types + 0 - none + 1 - RLE 8-bit/Pixel + 2 - RLE 4-bit/Pixel +0022h 1 dword Size of picture in bytes +0026h 1 dword Horizontal resolution +002Ah 1 dword Vertical resolution +002Ah 1 dword Number of used colors +002Ah 1 dword Number of important colors +0036h ? rec Definition of N colors + N=1 shl "BPP" + 1 byte Blue component + 1 byte Green component + 1 byte Red component + 1 byte Filler +"BOF" ? byte Image data +EXTENSION:BMP,RLE,LGO +OCCURENCES:PC +PROGRAMS:Windows,Paintbrush +REFERENCE:DDJ0994 +VALIDATION: +SEE ALSO:rDIB +--------I-CEG------------------------------- +The CEG (Continous Edge Graphic)-format is a raw picture format used by the +Edsun cards with CEG-chips which provide some better look through anti-aliasing +or something like that. The header before the data looks like this : + +OFFSET Count TYPE Description +0000h 1 word Version number of the CEG-format +0002h 9 char ID='Edsun CEG' +000Bh 1 byte Number of pixels per byte +000Ch 9 byte Reserved +0015h 80 char ASCIIZ copyright notice for the image +0065h 1 byte CEG-revision number (1) +0066h 1 byte Used CEG-mode (0..15) +0067h 1 Word Number of pixels per line +0069h 1 word Number of lines +006Ah 1 byte Old VGA-mode +006Bh 1 byte VGA Data flag : + 0 - VGA registers are invalid + 1 - VGA registers are valid +006Ch 92 byte VGA register data +00C2h 256 rec VGA palette entries + 1 byte Value for red + 1 byte Value for green + 1 byte Value for blue +03C2h 1 word Year of file creation +03C4h 1 byte Day of file creation +03C5h 1 byte Month of file creation +03C6h 1 byte Hour of file creation +03C7h 1 byte Minute of file creation +03C8h 1 byte Second of file creation +03C9h 24 byte Reserved for future use +EXTENSION:??? +OCCURENCES:PC +PROGRAMS:??? +--------a-CEL------------------------------- +CEL files contain one or more frames of image data used by the Autodesk +Animator and Animator Pro animation pakages. Both Animator Pro and the original +Animator produce CEL files, but each uses a different file format. + +--- Animator Pro CEL Files + +An Animator Pro CEL file is identical to a FLC file in all respects. A CEL file +should have a Celdata block in the file prefix block which describes the x,y +placement of the CEL. If the Celdata placement block is not present, assume a +placement of 0,0. + +--- Original Animator CEL Files + +The original Animator also produced CEL files. These were still-picture files, +not the multi-frame files Animator Pro now uses. A CEL file from the original +Animator is identical to a PIC file from the original Animator in all respects. + +EXTENSION:CEL +OCCURENCES:PC +PROGRAMS:Autodesk Animator +SEE ALSO:FLIc,FLC,PIC +VALIDATION: +--------F-CHR------------------------------- +The CHR files are scalable fonts used by the Borland graphics interface +(BGI) to display fonts in graphics mode. +OFFSET Count TYPE Description +0000h 4 char ID='PK',08,08 +0004h 4 char ID='BGI ' +0008h ? char Font description, terminated with #26 +0008h 1 word Headersize ++???? ="SIZ" + 4 char Internal font name + 1 word Font file size in bytes + 1 byte Font driver major version + 1 byte Font driver minor version + 1 word 0100h + "SIZ" word Zeroes to pad out the header +0080h 1 char Signature byte, '+' means stroke font +0081h 1 word Number of chars in font file + ="NUM" +0083h 1 byte undefined +0084h 1 byte ASCII value of first char in file +0085h 1 word Offset to stroke definitions +0087h 1 byte Scan flag ?? +0088h 1 byte Distance from origin to top of capital +0089h 1 byte Distance from origin to baseline +008Ah 1 byte Distance from origin to bottom descender +008Bh 4 char Four character name of font +0090h "NUM" word Offsets to character definitions +0090h+ "NUM" byte Width table for the characters +"NUM"*2 +0090h+ Start of character definitions +"NUM"*3 + +The individual character definitions consist of a variable number of words +describing the operations required to render a character. Each word +consists of an (x,y) coordinate pair and a two-bit opcode, encoded as shown +here: + +Byte 1 7 6 5 4 3 2 1 0 bit # + op1 + +Byte 2 7 6 5 4 3 2 1 0 bit # + op2 + + Opcodes + + op1=0 op2=0 End of character definition. + op1=0 op2=1 Do scan + op1=1 op2=0 Move the pointer to (x,y) + op1=1 op2=1 Draw from current pointer to (x,y) + +EXTENSION:CHR +OCCURENCES:PC +PROGRAMS:Borland Pascal, Borland C +REFERENCE:BGIKIT.ZIP +SEE ALSO: +VALIDATION: +--------M-CMF-G----------------------------- +The CMF files are music files used by the SoundBlaster sound card family. The +Creative Labs Music Format might be proprietary, the info is guesswork. +OFFSET Count TYPE Description +0000h 4 char ID="CTMF" +********* +EXTENSION:CMF +OCCURENCES:PC +PROGRAMS:PLAYCMF.EXE +--------I-COL------------------------------- +A COL file stores the rgb values for entries in the color palette. Both +Animator Pro and the original Animator produce COL files, but the formats +are different. To process a COL file for input, check the file size. If it is +exactly 768 bytes, the file is an original Animator COL file. If the file is +any other size, it is an Animator Pro COL file - which makes identification +almost impossible. + +Animator Pro COL Files do have a 8-byte header : + +OFFSET Count TYPE Description +0000h 1 dword File size, including this header +0004h 1 word ID=0B123h +0006h 1 word Version, currently 0 + +Following the file header are palette entries in rgbrgb... order. Each of +the r, g, and b components is a single byte in the range of 0-255. Generally, +there will be data for 256 palette entries, but this cannot be assumed. +The actual number of palette entries is ((size-8)/3); if this value is not +an even multiple of three, the file is corrupted. + +Original Animator COL Files + +A COL file created by the original Animator is exactly 768 bytes +long. There is no file header or other control information in +the file. + +EXTENSION:COL +OCCURENCES:PC +PROGRAMS:Autodesk Animator, Autodesk Animator Pro +SEE ALSO:FLIc,FLT +--------E-COM------------------------------- +The COM files are raw binary executables and are a leftover from the old CP/M +machines with 64K RAM. A COM program can only have a size of less than one +segment (64K), including code and static data since no fixups for segment +relocation or anything else is included. One method to check for a COM file is +to check if the first byte in the file could be a valid jump or call opcode, but +this is a very weak test since a COM file is not required to start with a jump +or a call. In principle, a COM file is just loaded at offset 100h in the segment +and then executed. + +OFFSET Count TYPE Description +0000h 1 byte ID=0E9h + ID=0EBh + Those are not safe ways to determine wether a + file is a COM file or not, but most COM files + start with a jump. +Further information not available. +EXTENSION:COM +OCCURENCES:PC +SEE ALSO:EXE,MZ EXE,NE EXE +--------E-CORE-G---------------------------- +The core images are dumps of the system core from different unix machines (as +far as I gather). Info comes from a magic file - so this is only good for +identification. What you would do with a core image on a foreign machine, eludes +me anyway. Maybe the information below is wrong and the 386 core dump also +belongs to the word at 0174h... +OFFSET Count TYPE Description +0000h 4 char ID='core' +0174h 1 word Executable type 1 + 015Dh - B370 executable + 5D01h - B370 executable + 0158h - B370 executable + 5801h - B370 executable + 015Fh - XA370 executable + 05F01h - XA370 executable + 015Ah - XA370 executable +0176h 1 word Executable type 2 + 0176h - 386 executable + +EXTENSION:??? +OCCURENCES:Unix flavours +PROGRAMS:N/A +SEE ALSO: +--------D-CPI-G----------------------------- +The DOS CPI files are data files which are loaded by the country drivers of +MS-DOS. The information comes from a magic file, which makes it good for +identification only. +OFFSET Count TYPE Description +0000h 9 char ID=255,'FONT ',0 +EXTENSION:CPI +OCCURENCES:PC +PROGRAMS:MS-DOS +--------X-CRD-G----------------------------- +The Windows 3.1 Cardfile.EXE is a (simple) addressbook application included +with the Windows 3.1+ operating system by Microsoft. + +OFFSET Count TYPE Description + +EXTENSION:CRD +OCCURENCES:PC, ALPHA? +PROGRAMS:CARDFILE.EXE +--------X-DBase II-O------------------------ +The DBase II file format. +The dBASE II file header has a fixed size of 521 bytes. +OFFSET Count TYPE Description +0000h 1 byte dBASE version, 02h = dBASE II +0001h 1 word Number of data records in file + ="NDR" +0003h 1 byte Month of last update +0004h 1 byte Day of last update +0005h 1 byte Year of last update +0006h 1 word Size of each data record + ="DRS" +0008h 64 rec Field descriptors + 11 char ASCIIZ field name, 0Dh as first + char indicates end of list. + 1 char Data type + 'C' - Char + 'N' - Numerical + 'L' - Logical + 1 byte Field length + 1 word Field data address ( set in RAM ) + 1 byte Number of decimal places +0208h 1 byte If 0Dh, then all 32 field descriptors were used; + otherwise 00h +EXTENSION:DBF +OCCURENCES:PC +PROGRAMS:DBase +SEE ALSO:DBASE III,XBase +VALIDATION:FileSize="NDR"*"DRS"+0208h +--------X-DBase III------------------------- + DBASE - File header structure (DBASE III) +OFFSET Count TYPE Description +0000h 1 byte dBASE version, + 03h = dBASE III w/o *.DBT + 83h = dBASE III w *.DBT +0001h 1 byte Month of last update +0002h 1 byte Day of last update +0003h 1 byte Year of last update +0004h 1 dword Number of data records in file + ="NDR" +0008h 1 word Header size + ="HSZ" +000Ah 1 word Data record size + ="DRS" +000Ch 12 byte reserved +0020h ? rec Field descriptors + The list of field descriptors is + terminated with a terminator + byte 0Dh. + 11 char ASCIIZ field name + 1 char Data type + 'C' - Char + 'D' - Date + 'L' - Logical + 'M' - Memo + 'N' - Numerical + 1 dword Field data address ( set in RAM ) + 1 byte Field length + 1 byte Number of decimal places + 14 byte reserved +EXTENSION:DBF +SEE ALSO:DBASE II,XBase +OCCURENCES:PC +PROGRAMS:DBase +VALIDATION:FileSize="NDR"*"DRS"+"HSZ" +--------X-DBASE IV-------------------------- +**** Description missing **** +EXTENSION:DBF,DBT +OCCURENCES:PC +PROGRAMS:DBase 4.0, Clipper +REFERENCE: +SEE ALSO:DBASE II,DBASE III,XBase +VALIDATION: +--------M-DCM------------------------------- +The DCM module format was designed by Winfried Welti, and is based on a +RIFF / IFF style format called WUFF - Welti's Universal File header Format. + +The header for WUFF files is built much like the RIFF header : + +OFFSET Count TYPE Description +0000h 4 char ID="WUFF" +0004h 4 char Subformat ID, see below +0008h 1 dword File length including the WUFF header +000Ch 1 word File format version as BCD. + Bits 15-12 are flags : + 12 - Archive file. If set, the data after the + header contains only WUFF style files. + 13-15 - reserved. +000Eh 1 word Length of subheader following this header. + +The DCM format has a header ID of "DCMw" and a version word of 0100h. It extends +the header with the following values: + +0010h 1 word Song flags, bitmapped + 0 - Samples present + 1 - Songdata present + 2 - Infotext present + 3-15 - reserved +0012h 1 word Number of instruments + +After the header, there follow the included (WUFF) files; Allowed fileformats +for include are : MDCw (Patterns), EDIw (Instrument), TXTw (Text); see below. + +The MDC format is a module format which uses compiled pattern data. It has the +subformat ID "MDCw", the current version is 1.01, it extends the header with +the following fields : + +OFFSET Count TYPE Description +0010h 1 word Flags for the song (see table 0011) +0012h 1 word Internal frequency for replay +0014h 1 dword Length of packed data channels +0028h 1 byte Number of used channels + 24 : Chnls : Byte Used Channels (0..chnls-1) + +(Table 0011) +MDC song flags + 0 - Stereo enable + 1 - Free Frequency (can replay freq change in song ?) + 2-3 - Offset size : + 00 - Byte (mod offsets, multiply by 256) + 01 - Word (16 bit offsets) + 10 - DWord (32 bit offsets) + 11 - reserved + 4-5 - Panning range + 00 - GUS panning (4 bit, byte value) + 01 - 8 Bit panning + 10 - reserved + 11 - reserved + 6-7 - Instrument number range + 00 - Byte + 01 - Word + 10 - reserved + 11 - reserved + 8 - S3M compatibility bit (all ranges are like s3m : mod offsets, + GUS panning, Ins Num Range : Byte) + 9 - Tuning control + 0 - Use Period values (word) (s3m) + 1 - Use Frequency values (Dword) +10-15- reserved + +After the header, there comes the packed data for the module. This format +consists of one control byte and depending on the value some other data +bytes. + +Values of control byte : + 0 - Next Frame + 1 - End of File + 2 - Order Num. follows [byte] + 3 - Loop to Ord Num (1 byte follows) + 4 - Frames to wait follows [byte] + 5 - New Replay freq follows [byte] + 6..31 - reserved + +If the byte is greater than 31 then it has the following bitmapped format : + + 0-4 - Channel Nr. + 5 - Key Byte follows + 6 - Period Value follows [word] + 7 - Volume Value follows [byte] + +Key byte format, bitmapped : + + 0 - Start Sample + 1 - Stop Sample + 2 - Instr Nr follows [byte/word/??] + 3 - Offset follows [byte/word/??] + 4 - Pan pos follows [byte/??] + 5-7 - reserved + +The EDI format has an ID value of "EDIw" and a version of 0100h, and it extends +the header with the following information : + +OFFSET Count TYPE Description +0010h 1 word Sample flags, bitmapped + 0-1 - Loop type + 00 - none + 01 - forward loop + 10 - bidirectional loop + 11 - reserved + 2 - 32 bit values for sample length etc., see below + 3 - Sample is 16 bit + 4 - Frequency is 32 bit. + 5-15 - reserved +0012h 1 word C2 frequency of sample +0014h 1 dword Loop start, this may be a word, depending on + the sample flags. +0018h 1 dword Loop end, see loop start +001Ch 1 dword Sample length + +The song text is plain ASCII. +EXTENSION:DCM +OCCURENCES:PC +SEE ALSO:S3M +--------M-DMF------------------------------- +The Digital Music Files are high quality MOD style files with up to +32 channels/1024 beats per track. The X-Tracker by the demo group +D-Lusion produces this format. In general, the format is well organised +due to the ID/Blocklength structure wich makes downward compatibility to +older version files easy, but the Version 4 (current version) of the file +format, produced by X-Tracker 0.30á still requires some manual scanning for +the next ID which I regard as not so nice. Version 5 of the format has the +[SEQU] block length fixed, but the [SMPD] block has the length 0. + +The file consists of several blocks, each with a 4 char (dwordint) ID tag +and a length of the record data. The main file header looks as follows : +OFFSET Count TYPE Description +0000h 4 char ID='DDMF' +0004h 1 byte Version id. + 4 -> XTracker 0.30á +0005h 8 char Tracker name, e.g. 'XTRACKER', 'HACKTRAK' :-) +000Dh 30 char Song name (ASCIIZ?) +002Bh 20 char Name of composer (ASCIIZ?) +0049h 1 byte Day of creation +004Ah 1 byte Month of creation +004Bh 1 byte Year of creation + +The other headers have the standard skip record format, in this section +named DMFblock. The offsets start _after_ this header record : +OFFSET Count TYPE Description +0000h 4 char Record tag (see below) +0004h 1 dword Size of data bedwording to this tag + +DMFblock [INFO] + Contains some message in ASCII. Length of the message is the size of + the record. + +DMFblock [CMSG] + Contains the message the composer wants to bring to us. After the ID + record, another fill byte preceeds the real message ! +OFFSET Count TYPE Description +0000h 1 byte Junk byte +0001h ? char Composer message + +DMFblock [SEQU] + Contains the information necessary for sequencing the different tracks. +OFFSET Count TYPE Description +0000h 1 word Song loop start +0002h 1 word Song loop end +0004h ? word Sequencer data + +DMFblock [PATT] + This block contains the information about the different patterns and tracks. +0000h 1 word Maximum pattern (=Songlength) + ="MPT" +0004h 1 byte Number of channels of this song (<= 16) +0005h "MPT" rec Pattern data. + 1 byte Track entries. (<=32) + ="TET" + How many tracks this pattern has. + XTracker allows a different number of + tracks for each pattern. + 1 byte Beat information + High nibble : Ticks per beat + Low nibble : Beats per measure + 1 word Maximum number of ticks (<=512) + 1 dword Number of bytes to skip for the + next pattern information. + ? rec Track data stream + 1 byte Global track effect + 1 byte Global track data (only if global + effect >0 !!!) + "TET" rec + 1 byte Information byte, bitmapped + For each bit set in the info byte, one + or two data byte(s) follow. This info byte + must not always be there, see below. For + effects, 2 bytes follow. + 0 - reserved + 1 - Volume effect + 2 - Note effect + 3 - Instrument effect + 4 - Volume set + 5 - Note set + 6 - Instrument set + 7 - Counter to next information byte. + Not set means, that next info byte + follows in 1 tick, unit is in + ticks. + The maximum number of effects is 3 at a time, + the maxximum size of a track information is + 11 bytes (with info=0FEh). + ? rec Effect bytes + 1 byte Effect number + 1 byte Effect data + ? byte Set data +** Here follows the pattern data, but it's too late today ** + +DMFblock [INST] + This block contains the information about the instrument data. + If this block does not exists, then the instrument numbers in the patterns + point directly to the samples in the [SMPI] block. +OFFSET Count TYPE Description +0000h 1 byte Number of instruments +0001h ? rec Instrument information block + 30 char The name of the instrument + 1 byte Instrument type, bitmapped + 0 - Instrument type + 1 - Instrument type + 00 - Sample in [SMPI] block + 01 - MIDI device + 10 - FM instrument + 11 - reserved + 2 - valid attack envelope + 3 - sustain on + 4 - reserved + 5 - reserved + 6 - reserved + 7 - reserved + 1 byte Range entries + ="REN" + Like the GF1 patterns, an instrument can + consist of several samples. + "REN" rec Range definition + 1 byte Sample to be played in this range + 1 byte Length of this range in half tone steps up + 6 byte Not yet defined 6-point envelope + +DMFblock [SMPI] +This block contains the information about the samples stored in the file. +OFFSET Count TYPE Description +0000h 1 byte Number of samples (<= 250) + ="NUM" + "NUM" rec Sample record + 1 byte Length of sample name + ? char Name of the sample + 1 dword Length of sample in bytes + 1 dword Start of sample loop + 1 dword End of sample loop + 1 word Frequency used for C-3 + 1 byte Volume for sample + 0 - Don't change current volume + otherwise volume (linear scale) + 1 byte Sample type, bitmapped + 0 - not looped/looped + 1 - 8/16-bit sample + (16-bit not supported with X-Tracker v0.30) + 2,3 - Pack type : + 00 - unpacked, signed sample + 01 - pack type 0 + 10 - pack type 1 + 11 - pack type 2 + 4-6 - reserved, set to zero + 7 - Sample stored in dmf/bib + 1 word reserved, set to zero + 1 dword crc32 of sample to identify samples + in BIB. + +DMFblock [SMPD] +This block contains the sample data (raw or packed, see [SMPI] block) in the +following format : + etc. +OFFSET Count TYPE Description +0000h 1 dword Length of the following sample + ? byte Sample data (might be packed) + +DMFBlock [ENDE] +This block serves as a end of file marker and can be used for validation. +Note that the four ID characters are _not_ followed by a length dword ! Each DMF +file simply ends with the four characters 'ENDE'. +EXTENSION:DMF +OCCURENCES:PC +PROGRAMS:X-TRACKER,PLAY_DMF +SEE ALSO: +VALIDATION: +--------?-DMS------------------------------- +The DMS (Digital Music System??) are some other files I found on a +mixed system CD, so I include them in my listing. They are Amiga files, +so here's the call to the Amiga folks again. + +OFFSET Count TYPE Description +0000h 4 char ID="DMS!" +EXTENSION:DMS +OCCURENCES:Amiga +--------A-DWC-?----------------------------- +The DWC archives seem to be a relict from ancient computing times - I've never +seen any program that dealt with them or could create them. They are yet +included in this compilation for reasons I don't know. But maybe one of you +stumbles over such a file, he might find this documentation helpful. +The DWC archives consist of single file entries with one archive trailer. The +archive entries seem to be at the start of the archive, but maybe they are +stored at the end of the archive, before the trailer. Each file header has the +following format : + +OFFSET Count TYPE Description +0000h 13 char Name of the original file in ASCIIZ. +000Dh 1 dword Size of the original file +0011h 1 dword MS-DOS date and time of the original file +0015h 1 dword Size of the compressed file +0019h 1 dword Offset of compressed data in archive file +001Dh 3 byte reserved +0020h 1 byte Method : + 1 - crunched + 2 - stored + +The trailer at the end of each archive has the following format : +OFFSET Count TYPE Description +0000h 1 word Length of trailer (=27) +0002h 1 word Size of the directory entries (=34)?? +0004h 16 byte reserved +0014h 1 dword Count of the directory entries +0018h 3 char ID="DWC" + +EXTENSION:DWC?? +OCCURENCES:PC?? +PROGRAMS:DWC.EXE?? +--------S-EFE------------------------------- +The EFE files are instrument files for the Ensoniq sampler system. +Further information wanted. +EXTENSION:EFE +SEE ALSO:GKH,INS +--------E-EXE-X----------------------------- +Different types of executables have emerged on the Intel DOS related platforms - +but all contain at least a stub MZ Exe before their actual EXE body... +SEE ALSO:MZ EXE,NE EXE +--------M-FAR------------------------------- +The Fandarole composer is a 16 channel composer created by the group +Digital Infinity / Daniel Potter for digital music in module style. + +The Fandarole modules have the following format : +OFFSET Count TYPE Description +0000h 4 char ID='FAR',254 +0004h 40 char Song name +002Ch 3 char ID=13,10,26 + This ID makes it possible to see the song name + by simply typing the .far file. +002Fh 1 word Remaining header size +0031h 1 byte Version number as BCD, + high nibble = major version + low nibble = minor version +0032h 16 byte Channel on/off map + <> 0 means that channel is used +0042h 1 rec Editing data. + This data is not necessary for playback, + but is stored by the composer for resume of + edit. + 1 byte Current octave + 1 byte Current voice + 1 byte Current row + 1 byte Current pattern + 1 byte Current order + 1 byte Current sample + 1 byte Current volume + 1 byte Current top of screen display + 1 byte Current editing area + 0=samples, + 1=patterns, + 2=orders + 1 byte Current tempo (default tempo) +004Ch 16 byte Panning map for each channel, 0=left,15=right +005Ch 1 byte Marked block start +005Dh 1 byte Marked block end +005Eh 1 byte Grid granularity +005Fh 1 byte Edit mode +0060h 1 word Song text length + ="STL" +0062h "STL" char Song text +0062h+ 256 byte Order bytes for pattern ordering + "STL" +0162h+ 1 byte Number of stored patterns + "STL" +0163h+ 1 byte Song length in patterns + "STL" +0164h+ 1 byte Loop position. This is the restart position + "STL" if the end of the song is reached. +0165h+ 256 word Length of each pattern. The number of rows in + "STL" each pattern is ( this word-2 )/(16*4) + +After this block, there might be additional data in the future (see remaining +header size, above), after that, the pattern data follows. + +The pattern data : +OFFSET Count TYPE Description +0000h 1 byte Length of pattern in rows + ="LIR" +0001h 1 byte Tempo for this pattern - Unsupported, + use not recommended +0002h 4*"LIR" rec Note data for each pattern in 4 channels + 1 byte Note value (Octave*12+Note)+1 + 0 means no note + 1 byte Sample number + 1 byte Volume byte. The volume is stored reversed, + the lower nibble is the major volume, the lower + nibble is the minor volume adjust. + 1 byte Effect byte. Upper nibble is effect, lower + nibble is data. (see table 0004) + +(Table 0004) +Note Effects in FAR-modules + 01 - Pitch adjust + 02 - Pitch adjust + 03 - Portamento to note + 04 - Retrigger note data times for one bar + 05 - Set vibrato depth + 06 - Vibrato + 07-0C - ?Possibly undefined? + 0D - Fine tune tempo down 128/Tempo + 0E - Fine tune tempo up 128/Tempo + 0F - Tempo, notes per second = 32/Tempo + +After the pattern data, the sample map follows. This is an array of 64 bits +(eight bytes), each set bit corresponds to a sample record stored in the file, +each zero bit means that the corresponding record is not stored in the file. + +OFFSET Count TYPE Description +0000h 8 byte Sample flags, see above + +After the sample flags, the samples themselves are stored in the FSM format, +except for the ("FSM",254) header. They follow header-data-header-data-etc., +see the FSM entry for further information. + +EXTENSION:FAR +OCCURENCES:PC +PROGRAMS:Fandarole Composer +REFERENCE: +SEE ALSO:FSM +VALIDATION: +--------a-FLT------------------------------- +The FLC files are files created by the Autodesk Animator Pro and contain +animations. The FLC files are a superset of those created by the Autodesk +Animator (FLIc files). In some cases, new data fields or compression methods +were added. The FLC files use a hierarchical block oriented structure and blocks +are a combination of control information and data. The file consists of one +header followed by data blocks. It is possible that new types of blocks not +described in this document will be added to animation files in the future. It is +recommended that you quietly ignore unknown block types you encounter during +animation playback. The size fields in the block headers make it easy to skip +an entire unrecognized block. + +The FLC files consist of one 128-byte header block and one or more of the +following blocks : + +The prefix block, if present, contains Animator Pro settings information, +CEL placement information, and other auxiliary data. + +A frame block exists for each frame in the animation. In addition, a ring frame +follows all the animation frames. Each frame block contains color palette +information and/or pixel data. + +The ring frame contains delta-compressed information to loop from the last frame +of the flic back to the first. It can be helpful to think of the ring frame as a +copy of the first frame, compressed in a different way. All flic files will +contain a ring frame, including a single-frame flic. + +The FLC file header + +OFFSET Count TYPE Description +0000h 1 dword The size of the whole animation file, including + the size of this header. +0004h 1 word ID=0AF12h +0006h 1 word Number of frames in this animation, not + including the ring frame. FLC files have a + maximum length of 4000 frames. +0008h 1 word Screen width in pixels +000Ah 1 word Screen height in pixels +000Ch 1 word Bits per pixel (always 8) +000Eh 1 word Flags - bitmapped + 0 - Ring frame not written / ring frame written + 1 - Flic header not updated / updated + 2-15 - reserved +0010h 1 dword Delay between frames in miliseconds. +0014h 1 word reserved +0016h 1 dword MS-DOS date and time of file creation (see table 0009) +001Ah 1 dword Serial number of the Animator Pro program used + to create the file. If the file was created + with the FlicLib development kit, this value + equals 0464c4942h ("FLIB"). +001Eh 1 dword MS-DOS date and time of last modification (see table 0009) +0022h 1 dword Serial number of program that made the last + modification. See Serial Number. +0026h 1 word X-axis aspect ratio of the file +0028h 1 word Y-axis aspect ratio of the file + (320x200 = 6:5) +002Ah 38 byte reserved (0) +0050h 1 dword Offset from begin of file to the first + animation frame block. +0054h 1 dword Offset from begin of file to the second + animation frame block. This value is used + when looping the animation. +0058h 40 byte reserved (0) + +Each subblock in the animation file has an identical header structure, +which is formatted like this : +0000h 1 dword The size of the whole block and all subordinate + blocks including the size of this header +0004h 1 word Block ID, varies depending on the block type. +0006h 1 word Number of subordinate blocks in this block. + including the ring frame. FLC files have a + maximum length of 4000 frames. +0008h 8 byte reserved(0) + +Immediately after the header there may be an optional prefix block, which is +used to store additional data which is not directly involved in animation +playback. + +The prefix block has the usual header with an ID of 0F100h. +The prefix block should only be created by the Animator Pro programs and never +by any other software, it is to be ignored by other software. + +The FLC frame blocks contain the information to convert the current frame into +the next frame; they have an ID of 0F1FAh. Directly after the frame header, +there are the subordinate data blocks - if the subblock count is 0 this means, +that the current frame is identical to the previous frame, only the appropriate +delay has to be made. +The data blocks have a different header format : +OFFSET Count TYPE Description +0000h 1 dword Size of this block, including header size +0004h 1 word Data type identifier : + 4 - 256-level color palette info + 7 - Word-oriented delta compression + 11 - 64-level color palette info + 12 - Byte-oriented delta compression + 13 - Entire frame is color index 0 + 15 - Byte run length compression + 16 - No compression + 18 - Postage stamp sized image +0006h ? byte Color or pixel data + +The following sections describe each of these data encoding methods in detail. + +--- Block Type 4 (FLI_COLOR256) - 256-Level Color + +The data in this block is organized in packets. The first word following the +block header is a count of the number of packets in the blocks. Each packet +consists of a one-byte color index skip count, a one-byte color count and three +bytes of color information for each color defined. + +At the start of the block, the color index is assumed to be zero. Before +processing any colors in a packet, the color index skip count is added to the +current color index. The number of colors defined in the packet is retrieved. +A zero in this byte indicates 256 colors follow. The three bytes for each color +define the red, green, and blue components of the color in that order. Each +component can range from 0 (off) to 255 (full on). The data to change colors +2,7,8, and 9 would appear as follows: + + 2 ; two packets + 2,1,r,g,b ; skip 2, change 1 + 4,3,r,g,b,r,g,b,r,g,b ; skip 4, change 3 + +--- Block Type 11 (FLI_COLOR) - 64-Level Color + +This block is identical to FLI_COLOR256 except that the values for the red, +green and blue components are in the range of 0-63 instead of 0-255, i.e. in +native VGA values which can be written to the VGA without modification. + +--- Block Type 13 (FLI_BLACK) - No Data +This block has no data following the header. All pixels in the frame are set to +color index 0. + +--- Block Type 16 (FLI_COPY) - No Compression + +This block contains an uncompressed raw image of the frame, from upper left +to the lower right, storing each line sequentially. This type of block is +created when the preferred compression method (SS2 or BRUN) generates more +data than the uncompressed frame image; a relatively rare situation. + +--- Block Type 15 (FLI_BRUN) - Byte Run Length Compression + +This block contains the entire image in a compressed format. Usually this block +is used in the first frame of an animation, or within a postage stamp image +block. + +The data is organized in lines. Each line contains packets of compressed pixels. +The first line is at the top of the animation, followed by subsequent lines +moving downward. The number of lines in this block is given by the height of the +animation. + +The first byte of each line is a count of packets in the line. This value is +ignored, it is a holdover from the original Animator. It is possible to generate +more than 255 packets on a line. The width of the animation is now used to drive +the decoding of packets on a line; continue reading and processing packets until +width pixels have been processed, then proceed to the next line. + +Each packet consist of a type/size byte, followed by one or more pixels. If the +number is negative (the high bit of the packet type is set), the absolute value +is the count of pixels to be copied from the packet to the animation image, +otherwise the next byte contains a single pixel which is to be replicated; +The lower 7 bits are the number of times the pixel is to be replicated. + +--- Block Type 12 (FLI_LC) - Byte Aligned Delta Compression + +This block contains the differences between the previous frame and this frame. +This compression method was used by the original Animator, but is not created by +Animator Pro. This type of block can appear in an Animator Pro file, however, if +the file was originally created by Animator, then some (but not all) frames were +modified using Animator Pro. + +The first word following the block header contains the position of the first +line in the block. This is a count of lines (down from the top of the image) +which are unchanged from the prior frame. The second word contains the number of +lines in the block. The data for the lines follows these two words. + +Each line begins with two bytes. The first byte contains the starting x position +of the data on the line, and the second byte the number of packets for the line. +Unlike BRUN compression, the packet count is significant (because this +compression method is only used on 320x200 flics). + +Each packet consists of a single byte column skip, followed by a packet type/ +size byte, which has the reverse meaning of in the block type 15. + +--- Block Type 7 (FLI_SS2) - Word Aligned Delta Compression + +This format contains the differences between consecutive frames. This is the +format most often used by Animator Pro for frames other than the first frame of +an animation. It is similar to the line coded delta (LC) compression, but is +word oriented instead of byte oriented. The data is organized into lines and +each line is organized into packets. + +The first word in the data following the block header contains the number of +lines in the block. Each line can begin with some optional words that are used +to skip lines and set the last byte in the line for animations with odd widths. +These optional words are followed by a count of the packets in the line. The +line count does not include skipped lines. + +The high order two bits of the word is used to determine the contents of +the word : + + Bit 15 Bit 14 Meaning + + 0 0 The word contains the packet count. The packets follow + this word. The packet count can be zero; this occurs + when only the last pixel on a line changes. + + 1 0 The low order byte is to be stored in the last byte of + the current line. The packet count always follows this + word. + + 1 1 The word contains a line skip count. The number of + lines skipped is given by the absolute value of the + word. This word can be followed by more skip counts, + by a last byte word, or by the packet count. + +The packets in each line are similar to the packets for the line coded block. +The first byte of each packet is a column skip count. The second byte is a +packet type. If the packet type is positive, the packet type is a count of words +to be copied from the packet to the animation image. If the packet type is +negative, the packet contains one more word which is to be replicated. The +absolute value of the packet type gives the number of times the word is to be +replicated. The high and low order byte in the replicated word do not +necessarily have the same value. + +--- Block Type 18 (FLI_PSTAMP) - Postage Stamp Image + +This block type holds a postage stamp - a reduced-size image - of the frame. It +generally appears only in the first frame block within a flic file. When +creating a postage stamp, Animator Pro considers the ideal size to be 100x63 +pixels. The actual size will vary as needed to maintain the same aspect ratio as +the original. +The pixels in a postage stamp image are mapped into a six-cube color space, +regardless of the color palette settings for the full frame image. A six-cube +color space is formed as follows: + + start at palette entry 0 + for red = 0 thru 5 + for green = 0 thru 5 + for blue = 0 thru 5 + palette_red = (red * 256)/6 + palette_green = (green * 256)/6 + palette_blue = (blue * 256)/6 + move to next palette entry + end for blue + end for green + end for red + +Any arbitrary rgb value (where each component is in the range of 0-255) can be +mapped into the six-cube space using the formula: + + ((6*red)/256)*36 + ((6*green)/256)*6 + ((6*blue)/256) + +The full postage stamp block header is defined as follows: + +Offset Length Name Description +OFFSET Count TYPE Description +0000h 1 dword Size of this block, including header size +0004h 1 word ID=18 +0006h 1 word Height of the postage stamp image +0008h 1 word Width of the image +000Ah 1 word Color translation type : + 1 - six-cube color space + +Immediately following this header is the postage stamp data. The data is +formatted as a block with standard size/type header. The type will be one of: + + 15 FPS_BRUN Byte run length compression + 16 FPS_COPY No compression + 18 FPS_XLAT256 Six-cube color xlate table + +The FPS_BRUN and FPS_COPY types are identical to the FLI_BRUN and FLI_COPY +encoding methods described above. + +The FPS_XLAT256 type indicates that the block contains a 256-byte color +translation table instead of pixel data. To process this type of postage stamp, +read the pixel data for the full-sized frame image, and translate its pixels +into six-cube space using a lookup in the 256-byte color translation table. This +type of postage stamp appears when the size of the animation frames is smaller +than the standard 100x63 postage stamp size. +************* +TWE - Tween Data Files + +A TWE file holds information about a tweening operation set up +via the Tween menus. The information includes the starting and +ending shapes, and the optional userD specified links between the +shapes. Animator Pro creates tween files. + +A TWE file begins with an 8-byte header defined as follows: + +Offset Length Name Description + + 0 2 magic File format identifier. Always hex 1995. + + 2 2 version The file format version; always zero. + + 4 4 tcount The number of tween shapes in the file; + always 2. + + 8 8 reserved Unused space; set to zeroes. + + 16 4 linkcount The number of link entries in the file. + +Immediately following the file header are the link entries. If +the linkcount value is zero there are no links. Each link entry +is a pair of 32-bit integers. The first value in each pair is the +index of the point in the first shape, and the second value is +the index of the point in the ending shape. (IE, a link value of +2,7 says to link the second starting-shape point to the seventh +ending-shape point.) + +Following the link entries is the data block that describes the +starting shape, then the data block that describes the ending +shape. The format of these blocks is identical to that of the +polygon (PLY) file, including file header data. In other words, +they appear as if a pair of polygon files are embedded in the +tween file at this point. + +********** +OPT - Optics Menu Settings Files + + +An OPT file holds information about an optics operation set up +via the Optics menus. Both Animator Pro and the original +Animator create OPT files. The file format is the same for both. + +An OPT file starts with a 4-byte header, as follows: + +Offset Length Name Description + + 0 2 magic File type identifier. Always hex 1A3F. + + 2 2 count Number of records in the file. + +Following the file header are optics records of 50 bytes each. A +record is generated for each click on CONTINUE MOVE in the OPTICS +menu. The move records are formatted as follows: + +Offset Length Name Description + + 0 4 link In the file, this field is always zero. + In memory, it's a pointer to the next + move record. + + 4 6 spincenter The x,y,z coordinates of the spin + center point; three 16-bit values. + + 10 6 spinaxis The x,y,z coordinates of the spin axis; + three 16-bit values. + + 16 6 spinturns The x,y,z coordinates of the spin turns; + three 16-bit values. + + 22 4 spininter Intermediate turns. Two 16-bit values. + These are values for a conjugation matrix + that corresponds to spin axis. + + 26 6 sizecenter The x,y,z coordinates of the size + center point; three 16-bit values. + + 32 2 xmultiplier Determines (along with xdivisor) + how to scale along x dimension. + + 34 2 xdivisor Determines (along with xmultiplier) how + to scale along x dimension. + + 36 2 ymultiplier Determines (along with ydivisor) + how to scale along y dimension. + + 38 2 ydivisor Determines (along with ymultiplier) how + to scale along y dimension. + + 40 2 bothmult Like xmultiplier, but applied to both + dimensions. + + 42 2 bothdiv Like xdivisor, but applied to both + dimensions. + + 44 6 linearmove The x,y,z offset for a linear move; + three 16-bit values. + +EXTENSION:FLT +OCCURENCES:PC +PROGRAMS:Autodesk Animator Pro +REFERENCE: +SEE ALSO:FLIc +VALIDATION: +--------a-FLIc------------------------------ +The Flic file format was one of the first graphic animation formats on the PC. +It was developed by <> and used by the Autodesk Animator. It provides relatively +fast animation in 320x200 resolution modes. The FLI use delta updating for +faster animation. The single block information and prefix blocks are missing for +the FLI files, see the FLT format for a discussion. + +OFFSET Count TYPE Description +0000h 1 dword Size of the FLIc file +0004h 1 word ID=0AF11h + AF11h means the file is a FLI file. +0006h 1 word Number of frames +0008h 1 word Width of displayed animation +000Ah 1 word Height of displayed animation +000Ch 1 word Number of used colors ("Depth") +000Eh 1 word Flags (=0003h) +0010h 1 dword Frame speed in sec/1024 ** +0014h 1 word reserved +0016h 1 dword Date/Time of creation in DOS format (see table 0009) +001Ah 1 dword Creator +001Eh 1 dword Date/Time of last change in DOS format (see table 0009) +0022h 1 dword Serial number? of changer +0026h 1 word X-Aspect ratio of animation +0028h 1 word Y-Aspect ratio of animation +002Ah 38 byte reserved +0052h 1 dword Offset of frame 1 in file +0056h 1 dword Offset of frame 2 in file +005Ah 40 byte reserved +EXTENSION:FLI,FLT +OCCURENCES:PC +REFERENCE:DDJ0693 +PROGRAMS:Autodesk Animator +SEE ALSO:QuickTime,AVI,FLT +--------D-FON-?----------------------------- +The Telix .FON files are the telephone books Telix uses to store numbers in. +The format is for Telix 3.22 + +OFFSET Count TYPE Description +0000h 1 dword ID=2E2B291Ah +0004h 1 word Version info (=1) +0006h 1 word Number of entries in directory (count from 1) +0007h 1 char ?will be used for encryption? + Currently 0 +0008h 55 byte reserved +0040h ? rec Actual phonebook entry + 25 char Name (0 terminated) + 17 char Phone number (0 terminated) + 1 byte Baud rate (see table 0006) + 1 byte Parity type (see table 0007) + 1 byte Data bits (7 or 8) + 1 byte Stop bits (1 or 2) + 12 char Script file name + 6 char Date of last call in ASCII + 1 word Number of total calls + 1 byte Terminal type (see table 0008) + 1 byte Protocol + 1 byte Flags, bitmapped + 0 - Local echo on / off + 1 - add linefeeds on / off + 2 - backspace is destructive on / off + 3 - backspace sends DEL / sends BS + 4 - strip high bits on / off + 5-7 - reserved + 1 word unknown + 1 byte Dial prefix index + 14 char Password + +(Table 0006) +Baud rate tables for Telix + + 0 = 300 baud + 1 = 1200 baud + 2 = 2400 baud + 3 = 4800 baud + 4 = 9600 baud + 5 = 19200 baud + 6 = 38400 baud + 7 = 57600 baud + 8 = 115200 baud + +(Table 0007) +Parity types for Telix + + 0 = None + 1 = Even + 2 = Odd + 3 = Mark + 4 = Space + +(Table 0008) +Terminal types for Telix + + 0 = TTY + 1 = ANSI-BBS + 2 = VT102 + 3 = VT52 + 4 = AVATAR + 5 = ANSI + +EXTENSION:FON +OCCURENCES:PC +PROGRAMS:Telix v3.22 +REFERENCE: +SEE ALSO: +VALIDATION: +--------M-FPT------------------------------- +The Fandarole Pattern files are used by the Fandarole Composer to store +single patterns in a file. + +OFFSET Count TYPE Description +0000h 4 char ID='FPT',254 +0004h 32 char ASCII pattern name +0024h 3 char ID=10,13,26 +0027h 1 word Remaining size of file (size of pattern) +0029h 1 byte Break location (length of pattern) +002Ah 1 byte reserved +002Bh ? byte Pattern in raw format like in the .FAR file +EXTENSION:FAR,FPT +OCCURENCES:PC +PROGRAMS:Fandarole Composer +SEE ALSO:FAR,FSM +VALIDATION: +--------S-FSM------------------------------- +The .FSM files are samples to be used for module style music with the +Fandarole Composer. Currently only samples of up to 64K length are supported, +altough the header reserves a dword for the sample size. +OFFSET Count TYPE Description +0000h 4 char ID='FSM',254 +0004h 32 char ASCII name of sample +0024h 3 char ID=10,13,26 +0027h 1 dword Length of sample (<=64K) +0028h 1 byte Fine tune value for sample + (currently unsupported) +0029h 1 byte Sample volume + (currently unsupported) +002Ah 1 dword Start of sample loop +002Dh 1 dword End of sample loop. If the sample is not set + to loop (see below) this should be set to the + end of the sample. +0032h 1 byte Sample type, bitmapped + 0 - 8-bit/16-bit sample + 1-7 - reserved +0033h 1 byte Loop mode, ?bit mapped? + 0-2 - reserved + 3 - loop off/loop on + 4-7 - reserved +0034h ? byte Sample data in signed format + +EXTENSION:FSM +OCCURENCES:PC +PROGRAMS:Fandarole Composer +REFERENCE: +SEE ALSO:FAR,USM +VALIDATION: +--------S-GF1 PATCH------------------------- +The GF1 Patch files are multipart sound files for the Gravis Ultrasound +sound card to emulate MIDI sounds in high quality. Each Patch can consist +of many samples (for example, a string ensemble consists of Violin, Viola, +Cello, Bass) which are played depending on the note to play. A patch can also +contain a part to be played before the loop and a part to be played after +the tone has been released. +OFFSET Count TYPE Description +0000h 12 char ID='GF1PATCH110' +000Ch 10 char Manufacturer ID +0018h 60 char Description of the contained Instruments + or copyright of manufacturer. +0054h 1 byte Number of instruments in this patch +0055h 1 byte Number of voices for sample +0056h 1 byte Number of output channels + (1=mono,2=stereo) +0057h 1 word Number of waveforms +0059h 1 word Master volume for all samples +005Bh 1 dword Size of the following data +0060h 36 byte reserved + +Following this header, the instruments with their headers follow. +An instrument header contains the name and other data about one +instrument contained within the patch. +OFFSET Count TYPE Description +0000h 1 word Instrument number. ?Maybe the MIDI instrument + number?. In the Gravis patches, this is 0, in + other patches, I found random values. +0002h 16 char ASCII name of the instrument. +0012h 1 dword Size of the whole instrument in bytes. +0016h 1 byte Layers. Needed for whatever. +0017h 40 byte reserved + +About the patch, I don't know anything. Maybe somebody could enlighten me. +Each patch record has the following format : +OFFSET Count TYPE Description +0000h 7 char Wave file name +0007h 1 byte Fractions +0008h 1 dword Wave size. + Size of the wave digital data +000Ch 1 dword Start of wave loop +0010h 1 dword End of wave loop +0012h 1 word Sample rate of the wave +0014h 1 word Minimum frequency to play the wave +0016h 1 word Maximum frequency to play the wave +0018h 1 dword Original sample rate of the wave data +001Ch 1 int Fine tune value for the wave +001Eh 1 byte Stereo balance, values unknown** +001Fh 6 byte Filter envelope rate +0025h 6 byte Filter envelope offse +002Bh 1 byte Tremolo sweep +002Ch 1 byte Tremolo rate +002Dh 1 byte Tremolo depth +002Fh 1 byte Vibrato sweep +0030h 1 byte Vibrato rate +0031h 1 byte Vibrato depth +0032h 1 byte Wave data, bitmapped + 0 - 8/16 bit wave data + 1 - signed/unsigned data + 2 - de/enable looping + 3 - no/has bidirectional looping + 4 - loop forward/backward + 5 - Turn envelope sustaining off/on + 6 - Dis/Enable filter envelope + 7 - reserved +0033h 1 int Frequency scale, whatever that means +0035h 1 word Frequency scale factor +0037h 36 byte Reserved + +EXTENSION:PAT +OCCURENCES:PC +PROGRAMS:Patch Maker +SEE ALSO:VOC,WAVe +--------I-GIF------------------------------- +The Graphics Interchange Format (tm) was created by Compuserve Inc. as a +standard for the storage and transmission of raster-based graphics information, +i.e. images. A GIF file may contain several images, which are to be displayed +overlapping and without any delay betwenn the images. The image data itself is +compressed using a LZW scheme. Please note that the LZW algorithm is patented by +UniSys and that since Jan. 1995 royalties to Compuserve are due for every software +that implements GIF images. +The GIF file consists of a global GIF header, one or more image blocks and +optionally some GIF extensions. + +OFFSET Count TYPE Description +0000h 6 char ID='GIF87a', ID='GIF89a' + This ID may be viewed as a version number +0006h 1 word Image width +0008h 1 word Image height +000Ah 1 byte bit mapped + 0-2 - bits per pixel -1 + 3 - reserved + 4-6 - bits of color resolution + 7 - Global color map follows image descriptor +000Bh 1 byte Color index of screen background +000Ch 1 byte reserved + +The global color map immediately follows the screen descriptor and has the size +(2**BitsPerPixel), and has the RGB colors for each color index. 0 is none, 255 +is full intensity. The bytes are stored in the following format : +OFFSET Count TYPE Description +0000h 1 byte Red component +0001h 1 byte Green component +0002h 1 byte Blue component + +After the first picture, there may be more pictures attached in the file +whic overlay the first picture or parts of the first picture. The Image +Descriptor defines the actual placement and extents of the following image +within the space defined in the Screen Descriptor. Each Image Descriptor is +introduced by an image separator character. The role of the Image Separator +is simply to provide a synchronization character to introduce an Image +Descriptor, the image separator is defined as ",", 02Ch, Any characters +encountered between the end of a previous image and the image separator +character are to be ignored. + +The format of the Image descriptor looks like this : +OFFSET Count TYPE Description +0000h 1 char Image separator + ID=',' +0001h 1 word Left offset of image +0003h 1 word Upper offset of image +0005h 1 word Width of image +0007h 1 word Height of image +0009h 1 byte Palette description - bitmapped + 0-2 - Number of bits per pixel-1 + 3-5 - reserved (0) + 6 - Interlaced / sequential image + 7 - local / global color map, ignore bits 0-2 + +To provide for some possibility of an extension of the GIF files, a special +extension block introducer can be added after the GIF data block. The block has +the following structure : + +OFFSET Count TYPE Description +0000h 1 char ID='!' +0001h 1 byte Extension ID +0002h ? rec + 1 word Byte count + ? byte Extra data +????h 1 byte Zero byte count - terminates extension block. + +EXTENSION:GIF +OCCURENCES:PC +PROGRAMS:CSHOW.EXE +SEE ALSO: +VALIDATION: +--------A-GZIP------------------------------ +The GNU ZIP program is an archive program mostly for the UNIX machines developed +by the GNU project. +OFFSET Count TYPE Description +0000h 2 char ID='!',139 +0002h 1 byte Method : + 0-7 - reserved + 8 - deflated +0003h 1 byte File flags : + 0 - ASCII-text + 1 - Multi-part file + 2 - Name present + 3 - Comment present + 4 - Encrypted + 5-8 - reserved +0004h 1 dword File date and time (see table 0009) +0008h 1 byte Extra flags +0009h 1 byte Target OS : + 0 - DOS + 1 - Amiga + 2 - VMS + 3 - Unix + 4 - ???? + 5 - Atari + 6 - OS/2 + 7 - MacOS + 10 - TOPS-20 + 11 - Win/32 +EXTENSION:ZIP +PROGRAMS:GNU gzip +--------S-GKH------------------------------- +The GKH files are disk images of the Ensoniq EPS sampler system. +Further information is missing. +EXTENSION:GKH +SEE ALSO:EFE,INS +--------a-GRASPRT GL-G---------------------- +The .GL animation files are graphic animations, some just .GIF files, others +mini-movies, used mostly for x-rated adult animations. The format of the files +is plain guesswork by me. The analyzed file did not include any animations but +only .GIF files and two text files which seemed to be the animation script. +There is no safe way of identifying a file as a GL animation, maybe except for +adding the subfile sizes and the header size and then check if this matches the +file size. +OFFSET Count TYPE Description +0000h 1 word Length of header, excluding this word + ="HLN" +0002h ? rec The directory entries for each file + 1 dword Offset of the stored file + 12 char DOS file name of the stored file +0002h+ 1 dword Length of the first stored file + "HLN" + ? byte The first file + The other files follow in similar + manner, length->file->length->file +EXTENSION:GL +OCCURENCES:PC +PROGRAMS:GRASPRT +--------?-GRIB------------------------------ +The GRIB weather product information files just might be some satellite images +or something else. I have only seen this signature in a magic file and further +informations about the format is not known to me. +OFFSET Count TYPE Description +0000h 4 char ID='GRIB' +EXTENSION:??? +OCCURENCES:??? +PROGRAMS:??? + +--------A-HA-------------------------------- +HA files (not to be confused with HamarSoft's HAP files [3]) contain a +small archive header with a word count of the number of files in the +archive. The constituent files stored sequentially with a header followed +by the compressed data, as is with most archives. + +The main file header is formatted as follows: +OFFSET Count TYPE Description +0000h 2 char ID='HA' +0002h 1 word Number of files in archive + +Every compressed file has a header before it, like this : + +OFFSET Count TYPE Description +0000h 1 byte Version & compression type +0001h 1 dword Compressed file size +0005h 1 dword Original file size +0009h 1 dword CCITT CRC-32 (same as ZModem/PkZIP) +000Dh 1 dword File time-stamp (Unix format) + ? ? char ASCIIZ pathname + ? ? char ASCIIZ filename +????h 1 byte Length of machine specific information + ? byte Machine specific information + +Note that the path separator for pathnames is the 0FFh (255) character. + +The high nybble of the version & compression type field contains the +version information (0=HA 0.98), the low nybble is the compression type : + +(Table 0012) +HA compression types + 0 "CPY" File is stored (no compression) + 1 "ASC" Default compression method, using a sliding + window dictionary with an arithmetic coder. + 2 "HSC" Compression using a "finite context [sic] + model and arithmetic coder" + 14 "DIR" Directory entry + 15 "SPECIAL" Used with HA 0.99B (?) + + +Machine specific information known: + + 1 byte Machine type (Host-OS) + + 1 = MS DOS + 2 = Linux (Unix) + + ? bytes Information (currently only file-attribute info) + +EXTENSION:HA +OCCURENCES:PC, Linux +PROGRAMS:HA +REFERENCE: +--------I-HSI1------------------------------ +The HSI1 images are a JPEG derivative made by Handmade Software for their +Image Alchemy package. +OFFSET Count TYPE Description +0000h 4 char ID='HSI1' +EXTENSION:JPG +OCCURENCES:PC,SUN +PROGRAMS:Image Alchemy +REFERENCE: +SEE ALSO:JPEG +VALIDATION: +--------A-HYP------------------------------- +The Hyper archiver is a very fast compression program by P. Sawatzki and K.P. +Nischke, which uses LZW compression techniques for compression. It is not very +widespread - in fact, I've yet to see a package distributed in this format. + +OFFSET Count TYPE Description +0000h 1 byte ID=1Ah +0001h 2 char Compression method + "HP" - compressed + "ST" - stored +0003h 1 byte Version file was compressed by in BCD +0004h 1 dword Compressed file size +0008h 1 dword Original file size +000Ch 1 dword MS-DOS date and time of file (see table 0009) +0010h 1 dword CRC-32 of file +0014h 1 byte MS-DOS file attribute +0015h 1 byte Length of filename + ="LEN" +0016h "LEN" char Filename + +EXTENSION:HYP +OCCURENCES:PC +PROGRAMS:HYPER.EXE +--------f-IFF-M----------------------------- +The IFF format is comparable to the RIFF file format, but it +uses Motorola byte ordering. After the FORM header, the different +records follow. Each record has a header ID of 4 bytes and then following +the size of the data (in Motorola byte ordering). Each IFF record starts on +an even byte boundary, that means if the record length is odd, you will have +to skip one more byte to get the next record. +OFFSET Count TYPE Description +0000h 4 char ID='FORM' +0004h 1 dword Size of the whole IFF block +0008h 4 char Type of the IFF file + +Each IFF record has the following format : +OFFSET Count TYPE Description +0000h 4 char ID +0004h 1 dword Blocksize +0008h ? byte Block data, depends on block type. + +OCCURENCES:Amiga,PC +SEE ALSO:8SVX,LBM,RIFF +--------S-INS------------------------------- +The INS files are instrument files for the Ensoniq sampler system. +Further information wanted. +EXTENSION:INS +SEE ALSO:EFE,GKH +--------I-JPEG-G---------------------------- +The JPEG image standard is a standard for lossy (but efficient) image +compression made by the ???? Group. The endianness of the JPEG files is unknown +to me, there seem to exist both types of JPEG files. + +The JPEG files are block oriented, there is a header for each JPG block, +but I was not able to find a list of all blocks - so you'll have to stick +with what I gathered here ;) + +Format of a JPEG block (all data is in Motorola byte order) : +OFFSET Count TYPE Description +0000h 1 word Block ID + 0FFD8h - JPEG signature block(4 chars="JFIF") + 0FFC0h - JPEG color information + 0FFC1h - JPEG color information +0002h 1 word Block size in bytes, without ID word. + +Format of JPEG color information (motorola byte order) : +OFFSET Count TYPE Description +0000h 1 byte 1=Grayscale image +0001h 1 word Height +0003h 1 word Width + +Another try for JPEG identification could be this one : +OFFSET Count TYPE Description +0000h 1 dword ID=FFD9FFE0h + ID=FFD8FFE0h + Big endian JPEG file (Intel) + ID=E0FFD8FFh + Little endian JPEG file (Motorola) + +EXTENSION:JPG +OCCURENCES:PC,Amiga,SUN +PROGRAMS: +REFERENCE: +SEE ALSO:HSI1 +VALIDATION: +--------I-LBM-M----------------------------- +The LBM/ILBM format is used by Deluxe Paint to store bitmap images. It +uses the IFF file format and Motorola byte order. +FORMblock [BMHD] +This block contains the information about the image. +OFFSET Count TYPE Description +0000h 1 word The image width (x-axis) +0002h 1 word The image height (y-axis) +0004h 1 dword reserved +0008h 1 byte Bits per pixel +0009h 1 byte ??reserved?? +FORMblock [BODY] +This block contains the (compressed) image data... **** +FORMblock [CRGN] +This block contains palette information for a range of palette entries. +OFFSET Count TYPE Description +FORMblock [TINY] +This block contains a small image used for previewing. +OFFSET Count TYPE Description +EXTENSION:IFF,LBM +OCCURENCES:AMIGA,PC +PROGRAMS:Deluxe Paint +REFERENCE:??? +SEE ALSO:IFF +--------A-LBR------------------------------- +The LBR files consist of a direcotry and one or more "members". The directory +contains from 4 to 256 entries and each entry describes one member. +The first directory entry describes the directory itself. All space allocations +are in terms of sectors, where a sector is 128 bytes long. Four directory +entries fit in one sector thus the number of directory entries is always evenly +divisible by 4. Different types of LBR files exist, all versions are discussed +here, the directory entry looks like this : + +OFFSET Count TYPE Description +0000h 1 byte File status : + 0 - active + 254 - deleted + 255 - free +0001h 11 char File name in FCB format (8/3, blank padded), + directory name is blanks for old LU, + ID='********DIR' + for LUPC +000Ch 1 word Offset to file data in sectors +000Eh 1 word Length of stored data in sectors + +For the LUPC program, the remaining 16 bytes are used like this : +OFFSET Count TYPE Description +0000h 8 char ASCII date of creation (MM/DD/YY) +0008h 8 char ASCII time of creation (HH:MM:SS) + +For the LU86 program, the remaining 16 bytes are used like this : +OFFSET Count TYPE Description +0000h 1 word CRC-16 or 0 +0002h 1 word Creation date in CP/M format +0004h 1 word Creation time in DOS format +0006h 1 word Date of last modification, CP/M format +0008h 1 word Time of last modification, DOS format +000Ah 1 byte Number of bytes in last sector +000Bh 5 byte reserved (0) + +EXTENSION:LBR +OCCURENCES:PC,CP/M +PROGRAMS:LU.COM, LUU.COM, LU86.COM +SEE ALSO: +--------A-LZH------------------------------- +The LHArc/LHA archiver is a multi platform archiver made by Haruyasu Yoshizaki, +which has a relatively good compression. It uses more or less the same +technology like the ZIP programs by Phil Katz. There was a hack named "ICE", +which had only the graphic characters displayed on decompression changed. + +OFFSET Count TYPE Description +0000h 1 byte Size of archived file header +0001h 1 byte Checksum of remaining bytes +0002h 3 char ID='-lh' + ID='-lz' +0005h 1 char Compression methods used (see table 0005) +0006h 1 char ID='-' +0007h 1 dword Compressed size +000Bh 1 dword Uncompressed size +000Fh 1 dword Original file date/time (see table 0009) +0013h 1 word File attribute +0015h 1 byte Filename / path length in bytes + ="LEN" +0016h "LEN" char Filename / path +0018h 1 word CRC-16 of original file ++"LEN" + +(Table 0005) +LHArc compression types + "0" - No compression + "1" - LZW, 4K buffer, Huffman for upper 6 bits of position + "2" - unknown + "3" - unknown + "4" - LZW, Arithmetic Encoding + "5" - LZW, Arithmetic Encoding + "s" - LHa 2.x archive? + "\" - LHa 2.x archive? + "d" - LHa 2.x archive? + +EXTENSION:LZH,ICE +OCCURENCES:PC +PROGRAMS:LHArc.EXE, LHA.EXE +--------M-MIDI-M---------------------------- +The MIDI file format is used to store MIDI song data on disk. The discussed +version of the MIDI file spec is the approved MIDI Manufacturers' Associations +format version 0.06 of (3/88). The contact address is listed in the adresses +file. Version 1.0 is technically identical but the description has been +rewritten. The description was made by Dave Oppenheim, most of the text was +taken right out of his document. + +MIDI files contain one or more MIDI streams, with time information for +each event. Song, sequence, and track structures, tempo and time signature +information, are all supported. Track names and other descriptive information +may be stored with the MIDI data. This format supports multiple tracks and +multiple sequences so that if the user of a program which supports multiple +tracks intends to move a file to another one, this format can allow that to +happen. + +The MIDI files are block oriented files, currently only 2 block types are +defined, header and track data. Opposed to the IFF and RIFF formats, no +global header is given, so that the validation must be done by adding the +different block sizes. + +A MIDI file always starts with a header block, and is followed by one or +more track block. + +The format of the header block : +OFFSET Count TYPE Description +0000h 4 char ID='MThd' +0004h 1 dword Length of header data (=6) +0008h 1 word Format specification + 0 - one, single multi-channel track + 1 - one or more simultaneous tracks + 2 - one or more sequentially independent + single-track patterns +000Ah 1 word Number of track blocks in the file +000Ch 1 int Unit of delta-time values. + If negative : + Absolute of high byte : + Number of frames per second. + Low byte : + Resolution within one frame + If positive, division of a quarter-note. + +The track data format : +The MTrk block type is where actual song data is stored. It is simply a +stream of MIDI events (and non-MIDI events), preceded by delta-time +values. + +Some numbers in MTrk blocks are represented in a form called a variable- +length quantity. These numbers are represented 7 bits per byte, most +significant bits first. All bytes except the last have bit 7 set, and +the last byte has bit 7 clear. If the number is between 0 and 127, it +is thus represented exactly as one byte. Since this explanation might not be +too clear, some exapmles : + + Number (hex) Representation (hex) + 00000000 00 + 00000040 40 + 0000007F 7F + 00000080 81 00 + 00002000 C0 00 + 00003FFF FF 7F + 001FFFFF FF FF 7F + 08000000 C0 80 80 00 + 0FFFFFFF FF FF FF 7F + +The largest number which is allowed is 0FFFFFFF so that the variable- +length representation must fit in 32 bits in a routine to write +variable-length numbers. + +Each track block contains one or more MIDI events, each event consists of +a delta-time and the number of the event. The delta-time is stored as a +variable-length quantity and represents the time to delay before the following +event. A delta-time of 0 means, that the event occurs simultaneous with the +previous event or occurs right at the start of a track. The delta-time unit is +specified in the header block. + +Format of track information block : +OFFSET Count TYPE Description +0000h 4 char ID='MTrk' +0004h 1 dword Length of header data +0008h ? rec , + +Three types of events are defined, MIDI event, system exclusive event and +meta event. The first event in a file must specify status; delta-time itself +is not an event. Meta events are non-MIDI informations. + +The format of the meta event : +OFFSET Count TYPE Description +0000h 1 byte ID=FFh +0001h 1 byte Type (<=128) +0002h ? ? Length of the data, 0 if no data + stored as variable length quantity + ? byte Data + +A few meta-events are defined. It is not required for every program to support +every meta-event. Meta-events initially defined include: + +FF 00 02 ssss Sequence Number +This optional event, which must occur at the beginning of a track, +before any nonzero delta-times, and before any transmittable MIDI +events, specifies the number of a sequence. + +FF 01 len text Text Event +Any amount of text describing anything. It is a good idea to put a text +event right at the beginning of a track, with the name of the track, a +description of its intended orchestration, and any other information +which the user wants to put there. Programs on a computer which does not +support non-ASCII characters should ignore those characters with the hi-bit +set. Meta event types 01 through 0F are reserved for various types of text +events, each of which meets the specification of text events(above) but is +used for a different purpose: + +FF 02 len text Copyright Notice +Contains a copyright notice as printable ASCII text. The notice should +contain the characters (C), the year of the copyright, and the owner of +the copyright. If several pieces of music are in the same MIDI file, +all of the copyright notices should be placed together in this event so +that it will be at the beginning of the file. This event should be the +first event in the first track block, at time 0. + +FF 03 len text Sequence/Track Name +If in a format 0 track, or the first track in a format 1 file, the name +of the sequence. Otherwise, the name of the track. + +FF 04 len text Instrument Name +A description of the type of instrumentation to be used in that track. + +FF 05 len text Lyric +A lyric to be sung. Generally, each syllable will be a separate lyric +event which begins at the event's time. + +FF 06 len text Marker +Normally in a format 0 track, or the first track in a format 1 file. +The name of that point in the sequence, such as a rehearsal letter or +section name ("First Verse", etc.). + +FF 07 len text Cue Point +A description of something happening on a film or video screen or stage +at that point in the musical score ("Car crashes into house", "curtain +opens", "she slaps his face", etc.) + +FF 2F 00 End of Track +This event is not optional. It is included so that an exact ending +point may be specified for the track, so that it has an exact length, +which is necessary for tracks which are looped or concatenated. + +FF 51 03 tttttt Set Tempo, in microseconds per MIDI quarter-note +This event indicates a tempo change. Another way of putting +"microseconds per quarter-note" is "24ths of a microsecond per MIDI +clock". Representing tempos as time per beat instead of beat per time +allows absolutely exact dword-term synchronization with a time-based sync +protocol such as SMPTE time code or MIDI time code. This amount of +accuracy provided by this tempo resolution allows a four-minute piece at +120 beats per minute to be accurate within 500 usec at the end of the +piece. Ideally, these events should only occur where MIDI clocks would +be located Q this convention is intended to guarantee, or at least +increase the likelihood, of compatibility with other synchronization +devices so that a time signature/tempo map stored in this format may +easily be transferred to another device. + +FF 54 05 hr mn se fr ff SMPTE Offset +This event, if present, designates the SMPTE time at which the track +block is supposed to start. It should be present at the beginning of +the track, that is, before any nonzero delta-times, and before any +transmittable MIDI events. The hour must be encoded with the SMPTE +format, just as it is in MIDI Time Code. In a format 1 file, the SMPTE +Offset must be stored with the tempo map, and has no meaning in any of +the other tracks. The ff field contains fractional frames, in 100ths of +a frame, even in SMPTE-based tracks which specify a different frame +subdivision for delta-times. + +FF 58 04 nn dd cc bb Time Signature +The time signature is expressed as four numbers. nn and dd represent +the numerator and denominator of the time signature as it would be +notated. The denominator is a negative power of two: 2 represents a +quarter-note, 3 represents an eighth-note, etc. The cc parameter +expresses the number of MIDI clocks in a metronome click. The bb +parameter expresses the number of notated 32nd-notes in a MIDI quarter- +note (24 MIDI Clocks). + +FF 59 02 sf mi Key Signature + sf = -7: 7 flats + sf = -1: 1 flat + sf = 0: key of C + sf = 1: 1 sharp + sf = 7: 7 sharps + + mi = 0: major key + mi = 1: minor key + +FF 7F len data Sequencer-Specific Meta-Event + Special requirements for particular sequencers may use this +event type: the first byte or bytes of data is a manufacturer ID. +However, as this is an interchange format, growth of the spec proper is +preferred to use of this event type. This type of event may be used by +a sequencer which elects to use this as its only file format; +sequencers with their established feature-specific formats should +probably stick to the standard features when using this format. + +The system exclusive event is used as an escape to specify arbitrary bytes +to be transmitted. The system exclusive event has two forms, to compensate +for some manufacturer-specific modes, the F7h event is used if a F0h is to +be transmitted. Each system exclusive event must end with an F7h event. +The format of a system exclusive event : +OFFSET Count TYPE Description +0000h 1 byte ID=F0h,ID=F7h +0001h ? ? Length as variable length qty. + ? byte bytes to be transmitted + +EXTENSION:MID,MIDI +OCCURENCES:PC,MAC +PROGRAMS:Cubase +VALIDATION: +--------M-MOD-M----------------------------- +The Protracker composer is a composer for digital music. The MOD files are a +quasi standard for digital music, all words are in Motorola byte order. The +original MOD format allowed only 4 digital channels and 15 instruments, the +specification became enlarged (maybe by Mahoney and Kaktus??) to 4 channels and +31 instruments. Check the file at offset 1080d for the signatures 'M.K', '4CHN', +'6CHN','8CHN','FLT4','FLT8. If you find any of them, the module uses 31 +instruments. With rising sound quality on the PC and other platforms, the old +MODule format has been replaced by numerous other formats. The 4/15 format has +almost become extinct. Below, only the 4/31 format is descripted. + +The digital sample data is signed (two's complement) as necessary for the Amiga, +the sample data immediately follows the pattern data. +Maybe this is not valid for some 8CHN files; One of the two I have, uses Intel +byte ordering and unsigned samples. + +OFFSET Count TYPE Description +0000h 20 char Song title, padded with spaces +0014h 31 rec Sample description record + For original MOD files, the number of + instruments would be 15. + 22 char Sample name, padded with zeroes to + full length. + 2 word Sample length / 2. Needs to be multiplied + by 2 to get the actual length. If the sample + length is greater than 8000h, the sample + is bigger than 64k. + 1 byte Sample finetune. Only the lower nibble is + valid. Fine tune table : + 0 1 2 3 4 5 6 7 8 9 A B C D E F + 0 +1 +2 +3 +4 +5 +6 +7 -8 -7 -6 -5 -4 -3 -2 -1 + 1 byte Sample volume (0-40h) + 1 word Sample loop start / 2 + 1 word Sample loop length / 2 + +950d 1 byte Song length in patterns (0-80h) +951d 1 byte Restart byte for song looping (Noisetracker?) +952d 128 byte Pattern play sequences +1080d 4 char ID='M.K.', ID='4CHN',ID='6CHN',ID='8CHN' + ID='4FLT',ID='8FLT' + If this position contains 'M.K.','8CHN', + '4CHN','6CHN','FLT4' or 'FLT8' the module + has 31 instruments. +1084d ? rec Patterns + Each pattern has 64 rows. + Depending on the number of channels, each row + has from 4 to 8 notes. The channel count is + determined by the ID. (see table 0005) + The number of patterns is the highest pattern + number stored in the pattern list. + + Each note has four bytes. Four notes make + up a track in a four channel MOD file. Each + track is saved sequentially : + byte 0-3 4-7 8-11 12-15 + Chn #1 Chn #2 Chn #3 Chn #4 + byte 16-19 20-23 24-27 28-31 + Chn #1 Chn #2 Chn #3 Chn #4 + 1 word Instrument / period + The instrument number is in bits 12-15, the + 12-bit period in bits 0-11. + 1 byte Upper nibble : Lower 4 bits of the instrument, + Lower nibble : Special effect command. + 1 byte Special effects data +(Table 0005) +Protracker 16 note conversion table / MOD Period table + +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +PT16 : I 1I 2I 3I 4I 5I 6I 7I 8I 9I 10I 11I 12I +MOD : I 1712I 1616I 1524I 1440I 1356I 1280I 1208I 1140I 1076I 1016I 960I 906I +Note : I C-0I C#0I D-0I D#0I E-0I F-0I F#0I G-0I G#0I A-0I A#0I B-0I + +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ + I 13I 14I 15I 16I 17I 18I 19I 20I 21I 22I 23I 24I + I 856I 808I 762I 720I 678I 640I 604I 570I 538I 508I 480I 453I + I C-1I C#1I D-1I D#1I E-1I F-1I F#1I G-1I G#1I A-1I A#1I B-1I + +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ + I 25I 26I 27I 28I 29I 30I 31I 32I 33I 34I 35I 36I + I 428I 404I 381I 360I 339I 320I 302I 285I 269I 254I 240I 226I + I C-2I C#2I D-2I D#2I E-2I F-2I F#2I G-2I G#2I A-2I A#2I B-2I + +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ + I 37I 38I 39I 40I 41I 42I 43I 44I 45I 46I 47I 48I + I 214I 202I 190I 180I 170I 160I 151I 143I 135I 127I 120I 113I + I C-3I C#3I D-3I D#3I E-3I F-3I F#3I G-3I G#3I A-3I A#3I B-3I + +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ + I 49I 50I 51I 52I 53I 54I 55I 56I 57I 58I 59I 60I + I 107I 101I 95I 90I 85I 80I 75I 71I 67I 63I 60I 56I + I C-4I C#4I D-4I D#4I E-4I F-4I F#4I G-4I G#4I A-4I A#4I B-4I + +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ + +EXTENSION:MOD,module +OCCURENCES:AMIGA,PC +PROGRAMS:DMP,ModEdit +VALIDATION:NONE +--------A-MS COMPRESS 5.0-G----------------- +Microsoft ships its files compressed with COMPRESS.EXE, for expansion the +program EXPAND.EXE (how original ;) ) is used. The program EXPAND.EXE is +available with every copy of MS-DOS 5.0+, the program COMPRESS.EXE is available +with several development kits, I found it with Borland Pascal 7.0. The +compression seems to be some kind of LZ-Compression, as the fully compatible? +LZCopy command under Windows can decompress the same files. This compression +feature seems to be available on all DOS-PCs. + +OFFSET Count TYPE Description +0000h 4 char ID='SZDD' +0004h 1 long reserved, always 3327F088h ? + +0008h 1 byte reserved +0009h 1 char Last char of filename if file was compressed + into "FILENAME.EX_". +000Ah 1 long Original file size +000Eh 1 byte reserved, varies... +EXTENSION:*.??_ +OCCURENCES:PC +PROGRAMS:COMPRESS.EXE, EXPAND.EXE, LZEXPAND.DLL +REFERENCE:?Windows SDK? +SEE ALSO:MS COMPRESS 6.22+ +VALIDATION: +--------A-MS COMPRESS 6.22+-G--------------- +At least with the version 6.22 of MS-DOS, Microsoft changed their compression +program to a new signature; The program seems no more to be able to restore +files to their original name, if it is not given on the command line. +OFFSET Count TYPE Description +0000h 4 char ID="KWAJ" +0004h 1 long reserved, always 0D127F088h ? +0008h 1 long reserved, always 00120003h ? +000Ch 1 word reserved, always 01 ? +EXTENSION:*.??_ +OCCURENCES:PC +PROGRAMS:COMPRESS.EXE, EXPAND.EXE, LZEXPAND.DLL +REFERENCE:?Windows SDK? +SEE ALSO:MS COMPRESS 5.0 +VALIDATION: +--------I-MSK------------------------------- +The MSK files are mask files used by the Autodesk Animator and Animator Pro +packages. Two types of MSK files exist. The Animator Pro version is simply a PIC +file with the depth 1; A MSK file created by the original Animator is exactly +8000 bytes long. There is no file header or other control information in the +file. It contains the image bit map, 1 bit per pixel, with the leftmost pixels +packed into the high order bits of each byte. The size of the image is fixed at +320x200. The image is stored left-to-right, top-to-bottom. + +EXTENSION:MSK +OCCURENCES:PC +PROGRAMS:Autodesk Animator +SEE ALSO:PIC,FLIc +--------M-MTM------------------------------- +The MTM format is generated by the Multi Track Module tracker by the demo group +Renaissance. The tracker features up to 32 channel digital music. Instead of +saving whole patterns, the tracker only saves the different tracks and the data +which tracks should be played together at which time, thus saving some pattern +space. + +OFFSET Count TYPE Description +0000h 3 char ID='MTM' +0003h 1 byte Version data + upper nibble is major version number + lower nibble is minor version number +0004h 20 char ASCIIZ song name +0018h 1 word Number of saved tracks. + ="NOT" +001Ah 1 byte Highest pattern number saved + ="NOP" +001Bh 1 byte Last order number to play(=Songlength-1) +001Ch 1 word Length of extra comment field in bytes + ="XSZ" +001Eh 1 byte Number of samples + ="NOS" +001Fh 1 byte Attribute byte (currently defined as 0) +0020h 1 byte Beats per track +0021h 1 byte Number of tracks +0022h 32 byte Pan positions of the voices + (0=left, 15=right??) +0042h "NOS" rec Instrument data + 22 char Sample name + 1 dword Sample length in bytes + 1 dword Start of sample loop in bytes + 1 dword End of sample loop in bytes + 1 byte Fine tune value for sample + 1 byte Default volume for sample + 1 byte Attribute byte, bit mapped + 0 0=8 bit sample,1=16 bit sample + 1-7 undefined (set to zero) +0042h+ 128 byte Pattern order data + "NOS"*37 +01C2h+ + "NOS"*37 "NOT" rec Track data + Each track is saved independently and has + the size of exactly 192 bytes. Each track + is arranged as 64 3-byte notes with the + following format : + 64*3 byte BYTE 0 BYTE 1 BYTE 2 + ppppppii iiiieeee aaaaaaaa + p = pitch value (0=no pitch stated) + i = instrument number (0=no instrument number) + e = effect number + a = effect argument + The effects are the standard Protracker + effects. +01C2h+ ("NOP"+1)*32 word Track sequencing data + "NOS"*37+ This is the list of which track is used + "NOT"*192 as which voice in each pattern. One track + can be part of many patterns, the drums + for example. + Track 0 is never saved but is always + considered as an empty track. That means + that counting really starts at one. + The data is organized in sets of 32 voices. + The first word contains the information which + track is used in pattern 0, voice 0. The next + word is for pattern 0, voice 1, etc., this + is repeated for each pattern, 32 words for each + saved pattern. +01C2h+ "XSZ" char Extra comment field. This contains some + "NOS"*37+ message or something. + "NOT"*192+ + ("NOP"+1)*32*2 +01C2h+ ? byte Raw sample data(unsigned). + "NOS"*37+ + "NOT"*192+ + ("NOP"+1)*32*2+ + "XSZ" +EXTENSION:MTM +SEE ALSO:MOD +OCCURENCES:PC +PROGRAMS:MMEDIT,DMP +VALIDATION: +--------M-MTS------------------------------- +The Master Tracker program by the french demo group Arkham is a tracker +for AdLib, SB and speaker - the further limits of this tracker are unknowm +to me. +OFFSET Count TYPE Description +0000h 6 char ID="MTRAC " +0006h 20 char Song name, zero padded +EXTENSION:MST +OCCURENCES:PC +PROGRAMS:Master Tracler v1.0 +SEE ALSO:MOD +--------E-MZ EXE---------------------------- +The old EXE files are the EXE files executed directly by MS-DOS. They were a +major improvement over the old 64K COM files, since EXE files can span multiple +segments. An EXE file consists of three different parts, the header, the +relocation table and the binary code. +The header is expanded by a lot of programs to store their copyright information +in the executable, some extensions are documented below. +The format of the header is as follows : +OFFSET Count TYPE Description +0000h 2 char ID='MZ' + ID='ZM' +0002h 1 word Number of bytes in last 512-byte page + of executable +0004h 1 word Total number of 512-byte pages in executable + (including the last page) +0006h 1 word Number of relocation entries +0008h 1 word Header size in paragraphs +000Ah 1 word Minimum paragraphs of memory allocated in + addition to the code size +000Ch 1 word Maximum number of paragraphs allocated in + addition to the code size +000Eh 1 word Initial SS relative to start of executable +0010h 1 word Initial SP +0012h 1 word Checksum (or 0) of executable +0014h 1 dword CS:IP relative to start of executable + (entry point) +0018h 1 word Offset of relocation table; + 40h for new-(NE,LE,LX,W3,PE etc.) executable +001Ah 1 word Overlay number (0h = main program) + +Following are the header expansions by some other prorams like TLink, LZExe and +other linkers, encryptors and compressors; all offsets are relative to the start +of the whole header : + +---new executable +OFFSET Count TYPE Description +001Ch 4 byte ???? +0020h 1 word Behaviour bits ?? +0022h 26 byte reserved (0) +003Ch 1 dword Offset of new executable header from start of + file (or 0 if plain MZ executable) + +---Borland TLINK +OFFSET Count TYPE Description +001Ch 2 byte ?? (apparently always 01h 00h) +001Eh 1 byte ID=0FBh +001Fh 1 byte TLink version, major in high nybble +0020h 2 byte ?? + +---old ARJ self-extracting archive +OFFSET Count TYPE Description +001Ch 4 char ID='RJSX' (older versions) + new signature is 'aRJsf'" in the first 1000 + bytes of the file) +---LZEXE compressed executable +OFFSET Count TYPE Description +001Ch 2 char ID='LZ' +001Eh 2 char Version number : + '09' - LZExe 0.90 + '91' - LZExe 0.91 +---PKLITE compressed executable +OFFSET Count TYPE Description +001Ch 1 byte Minor version number +001Dh 1 byte Bit mapped : + 0-3 - major version + 4 - Extra compression + 5 - Multi-segment file +001Eh 6 char ID='PKLITE' +---LHarc 1.x self-extracting archive +OFFSET Count TYPE Description +001Ch 4 byte unused??? +0020h 3 byte Jump to start of extraction code +0023h 2 byte ??? +0025h 12 char ID='LHarc's SFX ' +--LHA 2.x self-extracting archive +OFFSET Count TYPE Description +001Ch 8 byte ??? +0024h 10 char ID='LHa's SFX ' + For version 2.10 + ID='LHA's SFX ' (v2.13) + For version 2.13 +---LH self-extracting archive +OFFSET Count TYPE Description +001Ch 8 byte ??? +0024h 8 byte ID='LH's SFX ' +---TopSpeed C 3.0 CRUNCH compressed file +OFFSET Count TYPE Description +001Ch 1 dword ID=018A0001h +0020h 1 word ID=1565h +---PKARC 3.5 self-extracting archive +OFFSET Count TYPE Description +001Ch 1 dword ID=00020001h +0020h 1 word ID=0700h +---BSA (Soviet archiver) self-extracting archive +OFFSET Count TYPE Description +001Ch 1 word ID=000Fh +001Eh 1 byte ID=A7h +---LARC self-extracting archive +OFFSET Count TYPE Description +001Ch 4 byte ??? +0020h 11 byte ID='SFX by LARC ' + +After the header, there follow the relocation items, which are used to span +multpile segments. The relocation items have the following format : +OFFSET Count TYPE Description +0000h 1 word Offset within segment +0002h 1 word Segment of relocation +To get the position of the relocation within the file, you have to compute the +physical adress from the segment:offset pair, which is done by multiplying the +segment by 16 and adding the offset and then adding the offset of the binary +start. Note that the raw binary code starts on a paragraph boundary within the +executable file. All segments are relative to the start of the executable in +memory, and this value must be added to every segment if relocation is done +manually. + +EXTENSION:EXE,OVR,OVL +OCCURENCES:PC +PROGRAMS:MS-DOS +REFERENCE:Ralf Brown's Interrupt List +SEE ALSO:COM,EXE,NE EXE +--------E-NE EXE---------------------------- +The NE EXE files are the new exe files used by windows and OS/2 executables. +They contain a small MZ EXE which prints "This program requires Microsoft +Windows" or something similar but Some files contain both DOS and Windows +versions of the executable. The position of the new EXE header can be found +in the old exe header - see the MZ EXE topic for further information. All +offsets within this header are from the start of the header if not noted +otherwise. + +OFFSET Count TYPE Description +0000h 2 char ID='NE' +0002h 1 byte Linker major version +0003h 1 byte Linker minor version +0004h 1 word Offset of entry table (see below) +0006h 1 word Length of entry table in bytes +0008h 1 dword File load CRC (0 in Borland's TPW) +000Ch 1 byte Program flags, bitmapped : + 0-1 - DGroup type : + 0 - none + 1 - single shared + 2 - multiple + 3 - (null) + 2 - Global initialization + 3 - Protected mode only + 4 - 8086 instructions + 5 - 80286 instructions + 6 - 80386 instructions + 7 - 80x87 instructions +000Dh 1 byte Application flags, bitmapped + 0-2 - Application type + 1 - Full screen (not aware of + Windows/P.M. API) + 2 - Compatible with Windows/P.M. API + 3 - Uses Windows/P.M. API + 3 - OS/2 family application + 4 - reserved? + 5 - Errors in image/executable + 6 - "non-conforming program" whatever + 7 - DLL or driver (SS:SP info invalid, CS:IP + points at FAR init routine called with + AX=module handle which returns AX=0000h + on failure, AX nonzero on successful + initialization) +000Eh 1 byte Auto data segment index +0010h 1 word Initial local heap size +0012h 1 word Initial stack size +0014h 1 dword Entry point (CS:IP), + CS is index into segment table +0018h 1 dword Initial stack pointer (SS:SP) + SS is index into segment table +001Ch 1 word Segment count +001Eh 1 word Module reference count +0020h 1 word Size of nonresident names table in bytes +0022h 1 word Offset of segment table (see below) +0024h 1 word Offset of resource table +0026h 1 word Offset of resident names table +0028h 1 word Offset of module reference table +002Ah 1 word Offset of imported names table + (array of counted strings, terminated with a + string of length 00h) +002Ch 1 dword Offset from start of file to nonresident + names table +0030h 1 word Count of moveable entry point listed in + entry table +0032h 1 word File alignment size shift count + 0 is equivalent to 9 (default 512-byte pages) +0034h 1 word Number of resource table entries +0036h 1 byte Target operating system + 0 - unknown + 1 - OS/2 + 2 - Windows + 3 - European MS-DOS 4.x + 4 - Windows 386 + 5 - BOSS (Borland Operating System Services) +0037h 1 byte Other OS/2 EXE flags, bitmapped + 0 - Long filename support + 1 - 2.x protected mode + 2 - 2.x proportional fonts + 3 - Executable has gangload area +0038h 1 word Offset to return thunks or start of gangload + area - whatever that means. +003Ah 1 word offset to segment reference thunks or length + of gangload area. +003Ch 1 word Minimum code swap area size +003Eh 2 byte Expected Windows version (minor version first) + +EXTENSION:DLL,EXE,FOT +OCCURENCES:PC +PROGRAMS: +REFERENCE:Windows 3.1 SDK Programmer's Reference, Vol 4. +SEE ALSO:EXE,MZ EXE +--------H-NG-G------------------------------ +Information about this format comes only from a magic file, thus is only good +for file identification. I did not test it, since I don't have any NG files. +The Norton Guides are a popup help program for the IBM PCs which provide instant +help anywhere... + +OFFSET Count TYPE Description +0000h 2 char ID='NG' +0002h 1 dword ID=0 +EXTENSION:NG +OCCURENCES:PC +PROGRAMS:NG.EXE +SEE ALSO:TPH,HLP +--------B-OBJ------------------------------- +Most of the description was taken from the Microsoft Product Support +Services Application Note SS0288. The .OBJ files are binary files used +by compilers to link in precompiled code. They contain symbol and relocation +information necessary to link the data and code contained in the files. The +.OBJ files have no common header which makes a validation or identification +guesswork at best. The .OBJ files consist of at least one record, each of the +following type : + +OFFSET Count TYPE Description +0000h 1 byte Record type (see below) +0001h 1 word Record length + ="LEN" +0003h "LEN" byte Record data +0003h 1 byte Checksum or 0 + +"LEN" (that much for validation) + +The maximum size of the entire record (unless otherwise noted for specific +record types) is 1024 bytes. + +For LINK386, the format is determined by the least-significant bit +of the Record Type field. An odd Record Type indicates that certain +numeric fields within the record contain 32-bit values; an even +Record Type indicates that those fields contain 16-bit values. The +affected fields are described with each record. Note that this +principle does not govern the Use32/Use16 segment attribute (which +is set in the ACBP byte of SEGDEF records); it simply specifies the +size of certain numeric fields within the record. It is possible to +use 16-bit OMF records to generate 32-bit segments, or vice versa. + +LINK ignores the value of the checksum byte, but some other utilities may +not. Microsoft's Quick languages write a 0 byte instead of computing a checksum. + +The contents of each record are determined by the record type, but +certain subfields appear frequently enough to be explained separately. +The format of such fields is below. + +Names : + +A name string is encoded as an 8-bit unsigned count followed by a +string of count characters. The character set is usually some ASCII +subset. A null name is specified by a single byte of 0 (indicating a +string of length 0). + +Indexed References : + +Certain items are ordered by occurrence and are referenced by index. +The first occurrence of the item has index number 1. Index fields may +contain 0 (indicating that they are not present) or values from 1 +through 7FFF. The index number field in an object record can be either +1 or 2 bytes long. If the number is in the range 0-7FH, the high-order +bit (bit 7) is 0 and the low-order bits contain the index number, so +the field is only 1 byte long. If the index number is in the range 80- +7FFFH, the field is 2 bytes long. The + +Type Indexes : + +Type Index fields occupy 1 or 2 bytes and occur in PUBDEF, LPUBDEF, +COMDEF, LCOMDEF, EXTDEF, and LEXTDEF records. They are encoded as +described above for indexed references, but the interpretation of the +values stored is governed by whether the module has the "new" or "old" +object module format. + +"Old" versions of the OMF (indicated by lack of a COMENT record with +comment class A1), have Type Index fields that contain indexes into +previously seen TYPDEF records. This format is no longer produced by +Microsoft products and is ignored by LINK if it is present. See the +section of this document on TYPDEF records for details on how this was +used. + +"New" versions of the OMF (indicated by the presence of a COMENT +record with comment class A1), have Type Index fields that contain +proprietary CodeView information. For more information on CodeView, +see Appendix 1. + +Ordered Collections : + +Certain records and record groups are ordered so that the records may +be referred to with indexes (the format of indexes is described in the +"Indexed References" section of this document). The same format is +used whether an index refers to names, logical segments, or other +items. + +The overall ordering is obtained from the order of the records within +the file together with the ordering of repeated fields within these +records. Such ordered collections are referenced by index, counting +from 1 (index 0 indicates unknown or not specified). + +For example, there may be many LNAMES records within a module, and +each of those records may contain many names. The names are indexed +starting at 1 for the first name in the first LNAMES record +encountered while reading the file, 2 for the second name in the first +record, and so forth, with the highest index for the last name in the +last LNAMES record encountered. + +The ordered collections are: + + Names Ordered by occurrence of LNAMES records and + names within each. Referenced as a name + index. + + Logical Ordered by occurrence of SEGDEF records in + Segments file. Referenced as a segment index. + + Groups Ordered by occurrence of GRPDEF records in + file. Referenced as a group index. + + External Ordered by occurrence of EXTDEF, COMDEF, + Symbols LEXTDEF, and LCOMDEF records and symbols + within each. Referenced as an external name + index (in FIXUP subrecords). + + +Numeric 2- and 4-Byte Fields : + +Certain records, notably SEGDEF, PUBDEF, LPUBDEF, LINNUM, LEDATA, +LIDATA, FIXUPP, and MODEND, contain size, offset, and displacement +values that may be 32-bit quantities for Use32 segments. The encoding +is as follows: + + - When the least-significant bit of the record type byte is set (that + is, the record type is an odd number), the numeric fields are 4 + bytes. + + - When the least-significant bit of the record type byte is clear, + the fields occupy 2 bytes. The values are zero-extended when + applied to Use32 segments. + + NOTE: See the description of SEGDEF records in this document for an + explanation of Use16/Use32 segments. + + +The general record ordering is not mandatory, but should be (for link speed) +like this : + +THEADR or LHEADR record : + + Records Processed by LINK Pass 1 : + All records may occur in any order but must stand before the link pass + separator, if it is present. + + COMENT records identifying object format and extensions + COMENT records other than Link Pass Separator comment + LNAMES or LLNAMES records providing ordered name list + SEGDEF records providing ordered list of program segments + GRPDEF records providing ordered list of logical segments + TYPDEF records (obsolete) + ALIAS records + PUBDEF records locating and naming public symbols + LPUBDEF records locating and naming private symbols + COMDEF, LCOMDEF, EXTDEF, LEXTDEF, and CEXTDEF records + +Link Pass Separator (Optional) : + +COMENT class A2 record indicating that Pass 1 of the linker is +complete. When this record is encountered, LINK stops reading the +object file in Pass 1; no records after this comment are read in Pass +1. All the records listed above must come before this COMENT record. + +For greater linking speed, all LIDATA, LEDATA, FIXUPP, BAKPAT, INCDEF, +and LINNUM records should come after the A2 COMENT record, but this is +not required. In LINK, Pass 2 begins again at the start of the object +module, so these records are processed in Pass 2 no matter where they +are placed in the object module. + +Records Ignored by LINK Pass 1 and Processed by LINK Pass 2 : + +The following records may come before or after the Link Pass +Separator: + + LIDATA, LEDATA, or COMDAT records followed by applicable FIXUPP + records + FIXUPP records containing only THREAD subrecords + BAKPAT and NBKPAT FIXUPP records + COMENT class A0, subrecord type 03 (INCDEF) records containing + incremental compilation information for FIXUPP and LINNUM records + LINNUM and LINSYM records providing line number and program code or + data association + +Terminator : + + MODEND record indicating end of module with optional start address + +Details of each record (form and content) follow below. +Conflicts between various OMFs that overlap in their use of record +types or fields are marked. + +Below is a combined list of record types defined by the Intel 8086 OMF +specification and record types added after that specification was +finished. Titles in square brackets ([]) indicate record types that +have been implemented and that are described in this document. Titles +not in square brackets indicate record types that have not been +implemented and are followed by a paragraph of description from the +Intel specification. + +For unimplemented record types, a subtle distinction is made between +records that LINK ignores and those for which LINK generates an +"illegal object format" error condition. + +Records Currently Defined + + 6EH RHEADR R-Module Header Record + This record serves to identify a module that has + been processed (output) by LINK-86/LOCATE-86. It + also specifies the module attributes and gives + information on memory usage and need. This record + type is ignored by Microsoft LINK. + + 70H REGINT Register Initialization Record + This record provides information about the 8086 + register/register-pairs: CS and IP, SS and SP, DS + and ES. The purpose of this information is for a + loader to set the necessary registers for + initiation of execution. This record type is + ignored by Microsoft LINK. + + 72H REDATA Relocatable Enumerated Data Record + This record provides contiguous data from which a + portion of an 8086 memory image may eventually be + constructed. The data may be loaded directly by + an 8086 loader, with perhaps some base fixups. + The record may also be called a Load-Time + Locatable (LTL) Enumerated Data Record. This + record type is ignored by Microsoft LINK. + + 74H RIDATA Relocatable Iterated Data Record + This record provides contiguous data from which a + portion of an 8086 memory image may eventually be + constructed. The data may be loaded directly by + an 8086 loader, but data bytes within the record + may require expansion. The record may also be + called a Load-Time Locatable (LTL) Iterated Data + Record. This record type is ignored by Microsoft + LINK. + + 76H OVLDEF Overlay Definition Record + This record provides the overlay's name, its + location in the object file, and its attributes. + A loader may use this record to locate the data + records of the overlay in the object file. This + record type is ignored by Microsoft LINK. + + 78H ENDREC End Record + This record is used to denote the end of a set of + records, such as a block or an overlay. This + record type is ignored by Microsoft LINK. + + 7AH BLKDEF Block Definition Record + This record provides information about blocks + that were defined in the source program input to + the translator that produced the module. A BLKDEF + record will be generated for every procedure and + for every block that contains variables. This + information is used to aid debugging programs. + This record type is ignored by Microsoft LINK. + + 7CH BLKEND Block End Record + This record, together with the BLKDEF record, + provides information about the scope of variables + in the source program. Each BLKDEF record must be + followed by a BLKEND record. The order of the + BLKDEF, debug symbol records, and BLKEND records + should reflect the order of declaration in the + source module. This record type is ignored by + Microsoft LINK. + + 7EH DEBSYM Debug Symbols Record + This record provides information about all + local symbols, including stack and based symbols. + The purpose of this information is to aid debug- + ging programs. This record type is ignored by + Microsoft LINK. + + [80H] [THEADR] [Translator Header Record] + + [82H] [LHEADR] [Library Module Header Record] + + 84H PEDATA Physical Enumerated Data Record + This record provides contiguous data, + from which a portion of an 8086 memory + image may be constructed. The data + belongs to the "unnamed absolute segment" + in that it has been assigned absolute + 8086 memory addresses and has been + divorced from all logical segment + information. This record type is ignored + by Microsoft LINK. + + 86H PIDATA Physical Iterated Data Record + This record provides contiguous data, + from which a portion of an 8086 memory + image may be constructed. It allows + initialization of data segments and + provides a mechanism to reduce the size + of object modules when there is repeated + data to be used to initialize a memory + image. The data belongs to the "unnamed + absolute segment." This record type is + ignored by Microsoft LINK. + + [88H] [COMENT] [Comment Record] + + [8AH/8BH] [MODEND] [Module End Record] + + [8CH] [EXTDEF] [External Names Definition Record] + + [8EH] [TYPDEF] [Type Definition Record] + + [90H/91H] [PUBDEF] [Public Names Definition Record] + + 92H LOCSYM Local Symbols Record + This record provides information about + symbols that were used in the source + program input to the translator that + produced the module. This information is + used to aid debugging programs. This + record has a format identical to the + PUBDEF record. This record type is + ignored by Microsoft LINK. + + [94H/95H] [LINNUM] [Line Numbers Record] + + [96H] [LNAMES] [List of Names Record] + + [98H/99H] [SEGDEF] [Segment Definition Record] + + [9AH] [GRPDEF] [Group Definition Record] + + [9CH/9DH] [FIXUPP] [Fixup Record] + + 9EH (none) Unnamed record + This record number was the only even + number not defined by the original Intel + specification. Apparently it was never + used. This record type is ignored by + Microsoft LINK. + + [A0H/A1H] [LEDATA] [Logical Enumerated Data Record] + + [A2H/A3H] [LIDATA] [Logical Iterated Data Record] + + A4H LIBHED Library Header Record + This record is the first record in a library + file. It immediately precedes the modules + (if any) in the library. Following the + modules are three more records in the + following order: LIBNAM, LIBLOC, and LIBDIC. + This record type is ignored by Microsoft + LINK. + + A6H LIBNAM Library Module Names Record + This record lists the names of all the + modules in the library. The names are listed + in the same sequence as the modules appear + in the library. This record type is ignored + by Microsoft LINK. + + A8H LIBLOC Library Module Locations Record + This record provides the relative location, + within the library file, of the first byte + of the first record (either a THEADR or + LHEADR or RHEADR record) of each module in + the library. The order of the locations + corresponds to the order of the modules in + the library. This record type is ignored by + Microsoft LINK. + + AAH LIBDIC Library Dictionary Record + This record gives all the names of public + symbols within the library. The public names + are separated into groups; all names in the + nth group are defined in the nth module of + the library. This record type is ignored by + Microsoft LINK. + + [B0H] [COMDEF] [Communal Names Definition Record] + + [B2H/B3H] [BAKPAT] [Backpatch Record] + + [B4H] [LEXTDEF] [Local External Names Definition Record] + + [B6H/B7H] [LPUBDEF] [Local Public Names Definition Record] + + [B8H] [LCOMDEF] [Local Communal Names Definition Record] + + BAH/BBH COMFIX Communal Fixup Record + Microsoft doesn't support this never- + implemented IBM extension. This record type + generates an error when it is encountered by + Microsoft LINK. + + BCH CEXTDEF COMDAT External Names Definition Record + + C0H SELDEF Selector Definition Record + Microsoft doesn't support this never- + implemented IBM extension. This record type + generates an error when it is encountered by + Microsoft LINK. + + [C2H/C3] [COMDAT] [Initialized Communal Data Record] + + [C4H/C5H] [LINSYM] [Symbol Line Numbers Record] + + [C6H] [ALIAS] [Alias Definition Record] + + [C8H/C9H] [NBKPAT] [Named Backpatch Record] + + [CAH] [LLNAMES] [Local Logical Names Definition Record] + + [F0H] [Library Header Record] + Although this is not actually an OMF record + type, the presence of a record with F0H as + the first byte indicates that the module is + a Microsoft library. The format of a library + file is given in Appendix 2. + + [F1H] [Library End Record] + + +80H THEADR--TRANSLATOR HEADER RECORD + +The THEADR record contains the name of the object module. This name +identifies an object module within an object library or in messages +produced by the linker. + +OFFSET Count TYPE Description +0000h 1 byte ID=80h +0001h 1 byte Record length + ="LEN" +0002h "LEN" char Name +0002h 1 byte Checksum ++"LEN" + + +82H LHEADR--LIBRARY MODULE HEADER RECORD + +This record is very similar to the THEADR record. It is used to +indicate the name of a module within a library file (which has an +internal organization different from that of an object module). +This record type was defined in the original Intel specification with +the same format but with a different purpose, so its use for libraries +should be considered a Microsoft extension. + +OFFSET Count TYPE Description +0000h 1 byte ID=82h +0001h 1 byte Record length + ="LEN" +0002h "LEN" char Name +0002h 1 byte Checksum ++"LEN" + +EXTENSION:OBJ,OBP,OBW,LIB +OCCURENCES:PC +PROGRAMS:MS Link, TLink, OBJDUMP +REFERENCE:**** +--------H-OS/2 HELP------------------------- +The OS/2 help files are different from the WinHelp help files,since the WinHelp +format is proprietary to MicroSoft because of the patented LZ-packing they +implemented. +OFFSET Count TYPE Description +0000h 3 char ID='HSP' +0003h 1 byte Flags : + 0 - INF style file + 1-3 - unknown + 4 - HLP style file + Patching this file allows reading HLP files + using the VIEW command, while HLP files seem to + work with INF settings as well. +0005h 1 word Total size of header +0007h 1 word Unknown +????h other data +0047h ? char ASCIIZ name of the HLP/INF file +EXTENSION:HLP,INF +OCCURENCES:OS/2 +REFERENCE:INF02A.DOC +SEE ALSO:WinHelp HLP +--------X-PARADOX DATAFILES-?--------------- +The data files for the paradox database engine have the following format : + +OFFSET Count TYPE Description +0000h 1 byte Number of bytes per record +0001h 32 byte ???? +0021h 1 byte Number of fields per record +0022h 1 byte ?Password protected? / other flags ? + - if password protected, 32 more bytes seem + to be inserted. +0023h ?? byte ????? +0058h ? rec + 1 byte Field type ? + 1 - character field + 5 - currency? + 6 - integer + 1 byte Field length + +After that, my information becomes really blurry :-I There seems +to follow the name of the file, and some 0-filled areas, and after +that the "first ASCII character after 0C0h" is said to be the start +of the field names. Each field name is in ASCIZ. The actual records +start after the field names, either at the 4th byte after 00h 02h (the +sequence ending the field names section) or after 00h 02h 00h 00h 00h. + +EXTENSION:??? +OCCURENCES:PC +PROGRAMS:Paradox engine +SEE ALSO: +--------I-PBM-G----------------------------- +The PBM files are image files, which were used at least by DMGraph, an utility +to insert new graphics into a DOOM WAD file. The image dimensions seem to be +stored in ASCII format delimited with CR/LF, after that follows the raw binary +image data. +OFFSET Count TYPE Description +0000h 1 char ID='P' +0001h 1 char Bitmap type : + '1' - PBM bitmap + '2' - PGM greymap + '3' - PPM pixmap + '4' - PBM raw bitmap + '5' - PGM raw greymap + '6' - PPM raw pixmap +EXTENSION:PBM,PGM,PPM +OCCURENCES:PC +PROGRAMS:DMGraph.EXE +--------I-PCX------------------------------- +The PCX files are created by the programs of the ZSoft Paintbrush family +and the FRIEZE package by the same manufacturer. A PCX file contains only +one image, the data for this image and possibly palette information for +this image. The encoding scheme used for PCX encoding is a simple RLE +mechanism, see ALGRTHMS.txt for further information. A PCX image is stored +from the upper scan line to the lower scan line. + +The size of a decoded scan line is always an even number, thus one additional +byte should always be allocated for the decoding buffer. + +The header has a fixed size of 128 bytes and looks like this : +OFFSET Count TYPE Description +0000h 1 byte Manufacturer. + 10=ZSoft +0001h 1 byte Version information + 0=PC Paintbrush v2.5 + 2=PC Paintbrush v2.8 w palette information + 3=PC Paintbrush v2.8 w/o palette information + 4=PC Paintbrush/Windows + 5=PC Paintbrush v3.0+ +0002h 1 byte Encoding scheme, 1 = RLE, none other known +0003h 1 byte Bits per pixel +0004h 1 word left margin of image +0006h 1 word upper margin of image +0008h 1 word right margin of image +000Ah 1 word lower margin of image +000Ch 1 word Horizontal DPI resolution +000Eh 1 word Vertical DPI resolution +0010h 48 byte Color palette setting for 16-color images + 16 RGB triplets +0040h 1 byte reserved +0041h 1 byte Number of color planes + ="NCP" +0042h 1 word Number of bytes per scanline (always even, + use instead of right margin-left margin). + ="NBS" +0044h 1 word Palette information + 1=color/bw palette + 2=grayscale image +0046h 1 word Horizontal screen size +0048h 1 word Vertical screen size +004Ah 54 byte reserved, set to 0 + +The space needed to decode a single scan line is "NCP"*"NBS" bytes, the last +byte may be a junk byte which is not displayed. + +After the image data, if the version number is 5 (or greater?) there possibly +is a VGA color palette. The color ranges from 0 to 255, 0 is zero intensity, +255 is full intensity. The palette has the following format : + +OFFSET Count TYPE Description +0000h 1 byte VGA palette ID (=0Ch) +0001h 768 byte RGB triplets with palette information + +EXTENSION:PCX +OCCURENCES:PC +PROGRAMS:PC Paintbrush +SEE ALSO: +--------I-PIC------------------------------- +PIC files contain images in an uncompressed format. Both the original Animator +and Animator Pro from Autodesk produce PIC files. The file formats are +different; Animator Pro produces a hierarchial block oriented file, while the +original Animator file is a simpler fixed format. See PIC(Pro) for further +information on the Animator Pro PIC format. + +The original Animator uses this format to store a single-frame picture image. +This format description applies to both PIC and original Animator CEL files. The +file begins with a 32 byte header, as follows: + +OFFSET Count TYPE Description +0000h 1 word ID=9119h +0002h 1 word Width of image; PIC files have always a width + of 320, CEL images may have any value. +0004h 1 word Height of image, 200 for a PIC, any value for + a CEL file. +0006h 1 word X offset of image, always 0 for a PIC image, + may be nonzero in a CEL image. +0008h 1 word Y offset of image. Zero for a PIC file. +000Ah 1 byte Bits per pixel (8) +000Bh 1 byte Compresion flag, always zero +000Ch 1 dword Size of the image data in bytes +0010h 16 byte reserved(0) + +Immediately following the header is the color map. It contains all 256 palette +entries in rgb order. Each of the r, g, and b components is a single byte in the +range of 0-63. Following the color palette is the image data, one byte per +pixel, from left to right, top to bottom. +EXTENSION:PIC,CEL +OCCURENCES:PC +PROGRAMS:Autodesk Animator +SEE ALSO:CEL,FLIc,PIC(PRO) +--------I-PIC(PRO)-------------------------- +This format description applies to both PIC and MSK files created with the +Autodesk Animator Pro package. The file begins with a 64-byte header defined +as follows: + +Offset Length Name Description +0000h 1 dword The size of the whole file including the size + of this header. +0004h 1 word ID=9500h +0006h 1 word Width of the image +0008h 1 word Height of the image +000Ah 1 word X offset of image +000Ch 1 word Y offset of image +000Eh 1 dword User ID, set to zero +0012h 1 byte Bits per pixel (8 for PIC, 1 for MSK) +0013h 45 byte reserved (0) + +Following the file header are the data blocks for the image. Each data block +within a PIC or MSK file is formatted as follows: + +OFFSET Count TYPE Description +0000h 1 dword The size of the block, including this header. +0004h 1 word Data type ID : + 0 - Color palette info + 1 - Byte-per-pixel image data + 2 - Bit-per-pixel mask data +0006h ? byte Data + +The type values in the block headers indicate what type of graphics data the +block contains. + +In a PIC_CMAP block, the first 2-byte word is a version code; +currently this is set to zero. Following the version word are all 256 palette +entries in rgb order. Each of the r, g, and b components is a single byte in the +range of 0-255. This type of block appears in PIC files; there will generally be +no color map block in a MSK file. + +In a PIC_BYTEPIXELS block, the image data appears immediately following the +6-byte block header. The data is stored as one byte per pixel, in left-to-right, +topD to-bottom sequence. + +In a PIC_BITPIXELS block, the bitmap data appears immediately following the +6-byte block header. The data is stored as bits packed into bytes such that the +leftmost bits appear in the high-order positions of each byte. The bits are +stored in left-to-right, top-to bottom sequence. When the width of the bitmap is +not a multiple of 8, there will be unused bits in the low order positions of the +last byte on each line. The number of bytes per line is ((width+7)/8). This type +of block appears in MSK files. + +EXTENSION:PIC,MSK +OCCURENCES:PC +PROGRAMS:Autodesk Animator Pro +REFERENCE: +SEE ALSO:PIC,FLT +--------E-PIF------------------------------- +The Program Information Files have stayed a long time with the PC. They origi- +nated from IBMs Topview, were carried on by DoubleView and DesqView, and today +they are used by Windows and Windows NT. The PIF files store additional +information about executables that are foreign to the running multitasking +system such as ressource usage, keyboard and mouse virtualization and hotkeys. +The original (Topview) PIF had a size of 171h bytes, after that, there come the +various extensions for the different operating environments. The different +extensions are discussed in their own sections. + +OFFSET Count TYPE Description +0000h 1 byte reserved +0001h 1 byte Checksum +0002h 30 char Title for the window +0020h 1 word Maximum memory reserved for program +0022h 1 word Minimum memory reserved for program +0024h 63 char Path and filename of the program +0063h 1 byte 0 - Do not close window on exit + other - Close window on exit +0064h 1 byte Default drive (0=A: ??) +0065h 64 char Default startup directory +00A5h 64 char Parameters for program +00E5h 1 byte Initial screen mode, 0 equals mode 3 ? +00E6h 1 byte Text pages to reserve for program +00E7h 1 byte First interrupt used by program +00E8h 1 byte Last interrupt used by program +00E9h 1 byte Rows on screen +00EAh 1 byte Columns on screen +00EBh 1 byte X position of window +00ECh 1 byte Y position of window +00EDh 1 word System memory ?? whatever +00EFh 64 char ?? Shared program path +012Fh 64 char ?? Shared program data file +016Fh 1 word Program flags + +EXTENSION:PIF,DVP +OCCURENCES:PC +PROGRAMS:Topview, DesqView, Windows +REFERENCE:see DDJ #202, July 1993, QuarterDeck SDK +SEE ALSO:Windows PIF, Windows NT PIF +VALIDATION: +--------I-PLY------------------------------- +The PoLYgon files created by the Autodesk Animator packages contain a set of +points that describe a polygon. +OFFSET Count TYPE Description +0000h 1 word Number of points in the file +0002h 1 dword reserved (0) +0006h 1 byte Closed shape flag. If nonzero there is an + implied connection between the last and the + first point. If it is zero, the shape is open. +0007h 1 byte ID=99h + +After the header, there follows the point data, organized in records like this : +OFFSET Count TYPE Description +0000h 1 word X coordinate +0002h 1 word Y coordinate +0006h 1 word Z coordinate, always zero + +EXTENSION:PLY +OCCURENCES:PC +PROGRAMS:Autodesk Animator +--------I-PNG-M----------------------------- +"excerpted from the PNG (Portable Network Graphics) specification, tenth draft." + +The PNG format (pronounced PiNG) was the replacement the Internet found, after +the GIF format/CompuServe/LZW compression-patent stuff. PNG is a lossless image- +compression format, which allows a large range of applications. The PNG format +is in the public domain, the latest versions of the standard and related +information can always be found at the PNG FTP archive site, +ftp.uu.net:/graphics/png/. The maintainers of the PNG specification can be +contacted by e-mail at png-info@uunet.uu.net. + +The PNG format uses Motorola byte order, scanlines always begin on byte +boundaries. When pixels are less than 8 bits deep, if the scanline width is not +evenly divisible by the number of pixels per byte then the low-order bits in the +last byte of each scanline are wasted. The contents of the padding bits added to +fill out the last byte of a scanline are unspecified. + +An additional "filter" byte is added to the beginning of every scanline, +as described in detail below. The filter byte is not considered part of the +image data, but it is included in the data stream sent to the compression +step. + +PNG allows the image data to be filtered before it is compressed. The +purpose of filtering is to improve the compressibility of the data. The +filter step itself does not reduce the size of the data. All PNG filters are +strictly lossless. + +PNG defines several different filter algorithms, including "none" which +indicates no filtering. The filter algorithm is specified for each scanline +by a filter type byte which precedes the filtered scanline in the +precompression data stream. An intelligent encoder may switch filters +from one scanline to the next. The method for choosing which filter to +employ is up to the encoder. + +A PNG image can be stored in interlaced order to allow progressive +display. The purpose of this feature is to allow images to "fade in" when +they are being displayed on-the-fly. Interlacing slightly expands the file +size on average, but it gives the user a meaningful display much more +rapidly. Note that decoders are required to be able to read interlaced +images, whether or not they actually perform progressive display. + +With interlace type 0, pixels are stored sequentially from left to right, +and scanlines sequentially from top to bottom (no interlacing). + +Interlace type 1, known as Adam7 after its author, Adam M. Costello, +consists of seven distinct passes over the image. Each pass transmits a +subset of the pixels in the image. The pass in which each pixel is +transmitted is defined by replicating the following 8-by-8 pattern over +the entire image, starting at the upper left corner: + +1 6 4 6 2 6 4 6 +7 7 7 7 7 7 7 7 +5 6 5 6 5 6 5 6 +7 7 7 7 7 7 7 7 +3 6 4 6 3 6 4 6 +7 7 7 7 7 7 7 7 +5 6 5 6 5 6 5 6 +7 7 7 7 7 7 7 7 + +Within each pass, the selected pixels are transmitted left to right within +a scanline, and selected scanlines sequentially from top to bottom. For +example, pass 2 contains pixels 4, 12, 20, etc. of scanlines 0, 8, 16, etc. +(numbering from 0,0 at the upper left corner). The last pass contains the +entirety of scanlines 1, 3, 5, etc. + +The data within each pass is laid out as though it were a complete +image of the appropriate dimensions. For example, if the complete +image is 8x8 pixels, then pass 3 will contain a single scanline containing +two pixels. When pixels are less than 8 bits deep, each such scanline is +padded to fill an integral number of bytes (see Image layout). Filtering is +done on this reduced image in the usual way, and a filter type byte is +transmitted before each of its scanlines (see Filter Algorithms). Notice +that the transmission order is defined so that all the scanlines +transmitted in a pass will have the same number of pixels; this is +necessary for proper application of some of the filters. + +Caution: If the image contains fewer than five columns or fewer than +five rows, some passes will be entirely empty. Encoder and decoder +authors must be careful to handle this case correctly. In particular, filter +bytes are only associated with nonempty scanlines; no filter bytes are +present in an empty pass. + +A PNG file consists of a PNG signature followed by a series of chunks. +This chapter defines the signature and the basic properties of chunks. +Individual chunk types are discussed in the next chapter. + + +PNG Header +OFFSET Count TYPE Description +0000h 8 char ID=89h,'PNG',13,10,26,10 + +Chunk layout +OFFSET Count TYPE Description +0000h 1 dword Number of data bytes after this header. +0004h 4 char Chunk type. + A 4-byte chunk type code. For convenience in + description and in examining PNG files, type + codes are restricted to consist of uppercase + and lowercase ASCII letters (A-Z, a-z). + However, encoders and decoders should treat the + codes as fixed binary values, not character + strings. For example, it would not be correct + to represent the type code IDAT by the EBCDIC + equivalents of those letters. +????h ? byte Data +????h 1 dword CRC calculated on the preceding bytes in that + chunk, including the chunk type code and chunk + data fields, but not including the length + field. The CRC is always present, even for + empty chunks such as IEND. The CRC algorithm + is specified below. + +Chunk naming conventions +======================== + +Chunk type codes are assigned in such a way that a decoder can +determine some properties of a chunk even if it does not recognize the +type code. These rules are intended to allow safe, flexible extension of +the PNG format, by allowing a decoder to decide what to do when it +encounters an unknown chunk. The naming rules are not normally of +interest when a decoder does recognize the chunk's type. + +Four bits of the type code, namely bit 5 (value 32) of each byte, are used +to convey chunk properties. This choice means that a human can read +off the assigned properties according to whether each letter of the type +code is uppercase (bit 5 is 0) or lowercase (bit 5 is 1). However, decoders +should test the properties of an unknown chunk by numerically testing +the specified bits; testing whether a character is uppercase or lowercase +is inefficient, and even incorrect if a locale-specific case definition is +used. + +It is also worth noting that the property bits are an inherent part of the +chunk name, and hence are fixed for any chunk type. Thus, TEXT and +Text are completely unrelated chunk type codes. Decoders should +recognize codes by simple four-byte literal comparison; it is incorrect to +perform case conversion on type codes. + +The semantics of the property bits are: + +First Byte: 0 (uppercase) = critical, 1 (lowercase) = ancillary + Chunks which are not strictly necessary in order to meaningfully + display the contents of the file are known as "ancillary" chunks. + Decoders encountering an unknown chunk in which the + ancillary bit is 1 may safely ignore the chunk and proceed to + display the image. The time chunk (tIME) is an example of an + ancillary chunk. + + Chunks which are critical to the successful display of the file's + contents are called "critical" chunks. Decoders encountering an + unknown chunk in which the ancillary bit is 0 must indicate to + the user that the image contains information they cannot safely + interpret. The image header chunk (IHDR) is an example of a + critical chunk. + +Second Byte: 0 (uppercase) = public, 1 (lowercase) = private + If the chunk is public (part of this specification or a later edition + of this specification), its second letter is uppercase. If your + application requires proprietary chunks, and you have no interest + in seeing the software of other vendors recognize them, use a + lowercase second letter in the chunk name. Such names will + never be assigned in the official specification. Note that there is + no need for software to test this property bit; it simply ensures + that private and public chunk names will not conflict. + +Third Byte: reserved, must be 0 (uppercase) always + The significance of the case of the third letter of the chunk name + is reserved for possible future expansion. At the present time all + chunk names must have uppercase third letters. + +Fourth Byte: 0 (uppercase) = unsafe to copy, 1 (lowercase) = safe to copy + This property bit is not of interest to pure decoders, but it is + needed by PNG editors (programs that modify a PNG file). + + If a chunk's safe-to-copy bit is 1, the chunk may be copied to a + modified PNG file whether or not the software recognizes the + chunk type, and regardless of the extent of the file modifications. + + If a chunk's safe-to-copy bit is 0, it indicates that the chunk + depends on the image data. If the program has made any + changes to critical chunks, including addition, modification, + deletion, or reordering of critical chunks, then unrecognized + unsafe chunks must not be copied to the output PNG file. (Of + course, if the program does recognize the chunk, it may choose + to output an appropriately modified version.) + + A PNG editor is always allowed to copy all unrecognized chunks + if it has only added, deleted, or modified ancillary chunks. This + implies that it is not permissible to make ancillary chunks that + depend on other ancillary chunks. + + PNG editors that do not recognize a critical chunk must report + an error and refuse to process that PNG file at all. The + safe/unsafe mechanism is intended for use with ancillary chunks. + The safe-to-copy bit will always be 0 for critical chunks. + +For example, the hypothetical chunk type name "bLOb" has the +property bits: + + bLOb <-- 32 bit Chunk Name represented in ASCII form + |||| + |||'- Safe to copy bit is 1 (lower case letter; bit 5 of byte is 1) + ||'-- Reserved bit is 0 (upper case letter; bit 5 of byte is 0) + |'--- Private bit is 0 (upper case letter; bit 5 of byte is 0) + '---- Ancillary bit is 1 (lower case letter; bit 5 of byte is 1) + +Therefore, this name represents an ancillary, public, safe-to-copy +chunk. + +See Rationale: Chunk naming conventions. + +CRC algorithm +============= + +Chunk CRCs are calculated using standard CRC methods with pre and +post conditioning. The CRC polynomial employed is as follows: + +x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1 + +The 32-bit CRC register is initialized to all 1's, and then the data from +each byte is processed from the least significant bit (1) to the most +significant bit (128). After all the data bytes are processed, the CRC +register is inverted (its ones complement is taken). This value is +transmitted (stored in the file) MSB first. For the purpose of separating +into bytes and ordering, the least significant bit of the 32-bit CRC is +defined to be the coefficient of the x^31 term. + +Practical calculation of the CRC always employs a precalculated table +to greatly accelerate the computation. See Appendix: Sample CRC +Code. + +4. Chunk Specifications +======================= + +This chapter defines the standard types of PNG chunks. + +Critical Chunks +=============== + +All implementations must understand and successfully render the +standard critical chunks. A valid PNG image must contain an IHDR +chunk, one or more IDAT chunks, and an IEND chunk. + +IHDR Image Header + This chunk must appear FIRST. Its contents are: + + Width: 4 bytes + Height: 4 bytes + Bit depth: 1 byte + Color type: 1 byte + Compression type: 1 byte + Filter type: 1 byte + Interlace type: 1 byte + + Width and height give the image dimensions in pixels. They are + 4-byte integers. Zero is an invalid value. The maximum for each + is (2^31)-1 in order to accommodate languages which have + difficulty with unsigned 4-byte values. + + Bit depth is a single-byte integer giving the number of bits per + pixel (for palette images) or per sample (for grayscale and + truecolor images). Valid values are 1, 2, 4, 8, and 16, although + not all values are allowed for all color types. + + Color type is a single-byte integer that describes the + interpretation of the image data. Color type values represent + sums of the following values: 1 (palette used), 2 (color used), and + 4 (full alpha used). Valid values are 0, 2, 3, 4, and 6. + + Bit depth restrictions for each color type are imposed both to + simplify implementations and to prohibit certain combinations + that do not compress well in practice. Decoders must support all + legal combinations of bit depth and color type. (Note that bit + depths of 16 are easily supported on 8-bit display hardware by + dropping the least significant byte.) The allowed combinations + are: + + Color Allowed Interpretation + Type Bit Depths + + 0 1,2,4,8,16 Each pixel value is a grayscale level. + + 2 8,16 Each pixel value is an R,G,B series. + + 3 1,2,4,8 Each pixel value is a palette index; + a PLTE chunk must appear. + + 4 8,16 Each pixel value is a grayscale level, + followed by an alpha channel level. + + 6 8,16 Each pixel value is an R,G,B series, + followed by an alpha channel level. + + Compression type is a single-byte integer that indicates the + method used to compress the image data. At present, only + compression type 0 (deflate/inflate compression with a 32K + sliding window) is defined. All standard PNG images must be + compressed with this scheme. The compression type code is + provided for possible future expansion or proprietary variants. + Decoders must check this byte and report an error if it holds an + unrecognized code. See Deflate/Inflate Compression for details. + + Filter type is a single-byte integer that indicates the + preprocessing method applied to the image data before + compression. At present, only filter type 0 (adaptive filtering + with five basic filter types) is defined. As with the compression + type code, decoders must check this byte and report an error if it + holds an unrecognized code. See Filter Algorithms for details. + + Interlace type is a single-byte integer that indicates the + transmission order of the pixel data. Two values are currently + defined: 0 (no interlace) or 1 (Adam7 interlace). See Interlaced + data order for details. + +PLTE Palette + This chunk's contents are from 1 to 256 palette entries, each a + three-byte series of the form: + + red: 1 byte (0 = black, 255 = red) + green: 1 byte (0 = black, 255 = green) + blue: 1 byte (0 = black, 255 = blue) + + The number of entries is determined from the chunk length. A + chunk length not divisible by 3 is an error. + + This chunk must appear for color type 3, and may appear for + color types 2 and 6. If this chunk does appear, it must precede the + first IDAT chunk. There cannot be more than one PLTE chunk. + + For color type 3 (palette data), the PLTE chunk is required. The + first entry in PLTE is referenced by pixel value 0, the second by + pixel value 1, etc. The number of palette entries must not exceed + the range that can be represented by the bit depth (for example, + 2^4 = 16 for a bit depth of 4). It is permissible to have fewer + entries than the bit depth would allow. In that case, any + out-of-range pixel value found in the image data is an error. + + For color types 2 and 6 (truecolor), the PLTE chunk is optional. + If present, it provides a recommended set of from 1 to 256 colors + to which the truecolor image may be quantized if the viewer + cannot display truecolor directly. If PLTE is not present, such a + viewer must select colors on its own, but it is often preferable for + this to be done once by the encoder. + + Note that the palette uses 8 bits (1 byte) per value regardless of + the image bit depth specification. In particular, the palette is 8 + bits deep even when it is a suggested quantization of a 16-bit + truecolor image. + +IDAT Image Data + This chunk contains the actual image data. To create this data, + begin with image scanlines represented as described under Image + layout; the layout and total size of this raw data are determinable + from the IHDR fields. Then filter the image data according to + the filtering method specified by the IHDR chunk. (Note that + with filter method 0, the only one currently defined, this implies + prepending a filter type byte to each scanline.) Finally, compress + the filtered data using the compression method specified by the + IHDR chunk. The IDAT chunk contains the output datastream + of the compression algorithm. To read the image data, reverse + this process. + + There may be multiple IDAT chunks; if so, they must appear + consecutively with no other intervening chunks. The compressed + datastream is then the concatenation of the contents of all the + IDAT chunks. The encoder may divide the compressed data + stream into IDAT chunks as it wishes. (Multiple IDAT chunks + are allowed so that encoders can work in a fixed amount of + memory; typically the chunk size will correspond to the encoder's + buffer size.) It is important to emphasize that IDAT chunk + boundaries have no semantic significance and can appear at any + point in the compressed datastream. A PNG file in which each + IDAT chunk contains only one data byte is legal, though + remarkably wasteful of space. (For that matter, zero-length + IDAT chunks are legal, though even more wasteful.) + + See Filter Algorithms and Deflate/Inflate Compression for + details. + +IEND Image Trailer + This chunk must appear LAST. It marks the end of the PNG + data stream. The chunk's data field is empty. + +Ancillary Chunks +================ + +All ancillary chunks are optional, in the sense that encoders need not +write them and decoders may ignore them. However, encoders are +encouraged to write the standard ancillary chunks when the +information is available, and decoders are encouraged to interpret these +chunks when appropriate and feasible. + +The standard ancillary chunks are listed in alphabetical order. This is +not necessarily the order in which they would appear in a file. + +bKGD Background Color + This chunk specifies a default background color against which + the image may be presented. Note that viewers are not bound to + honor this chunk; a viewer may choose to use a different + background color. + + For color type 3 (palette), the bKGD chunk contains: + + palette index: 1 byte + + The value is the palette index of the color to be used as + background. + + For color types 0 and 4 (grayscale, with or without alpha), bKGD + contains: + + gray: 2 bytes, range 0 .. (2^bitdepth) - 1 + + (For consistency, 2 bytes are used regardless of the image bit + depth.) The value is the gray level to be used as background. + + For color types 2 and 6 (RGB, with or without alpha), bKGD + contains: + + red: 2 bytes, range 0 .. (2^bitdepth) - 1 + green: 2 bytes, range 0 .. (2^bitdepth) - 1 + blue: 2 bytes, range 0 .. (2^bitdepth) - 1 + + (For consistency, 2 bytes per sample are used regardless of the + image bit depth.) This is the RGB color to be used as background. + + When present, the bKGD chunk must precede the first IDAT + chunk, and must follow the PLTE chunk, if any. + + See Recommendations for Decoders: Background color. + +cHRM Primary Chromaticities and White Point + Applications that need precise specification of colors in a PNG + file may use this chunk to specify the chromaticities of the red, + green, and blue primaries used in the image, and the referenced + white point. These values are based on the 1931 CIE + (International Color Committee) XYZ color space. Only the + chromaticities (x and y) are specified. The chunk layout is: + + White Point x: 4 bytes + White Point y: 4 bytes + Red x: 4 bytes + Red y: 4 bytes + Green x: 4 bytes + Green y: 4 bytes + Blue x: 4 bytes + Blue y: 4 bytes + + Each value is encoded as a 4-byte unsigned integer, representing + the x or y value times 100000. + + If the cHRM chunk appears, it must precede the first IDAT + chunk, and it must also precede the PLTE chunk if present. + +gAMA Gamma Correction + The gamma correction chunk specifies the gamma of the + camera (or simulated camera) that produced the image, and + thus the gamma of the image with respect to the original scene. + Note that this is not the same as the gamma of the display device + that will reproduce the image correctly. + + The chunk's contents are: + + Image gamma value: 4 bytes + + A value of 100000 represents a gamma of 1.0, a value of 45000 a + gamma of 0.45, and so on (divide by 100000.0). Values around + 1.0 and around 0.45 are common in practice. + + If the encoder does not know the gamma value, it should not + write a gamma chunk; the absence of a gamma chunk indicates + the gamma is unknown. + + If the gAMA chunk appears, it must precede the first IDAT + chunk, and it must also precede the PLTE chunk if present. + + See Gamma correction, Recommendations for Encoders: + Encoder gamma handling, and Recommendations for Decoders: + Decoder gamma handling. + +hIST Image Histogram + The histogram chunk gives the approximate usage frequency of + each color in the color palette. A histogram chunk may appear + only when a palette chunk appears. If a viewer is unable to + provide all the colors listed in the palette, the histogram may + help it decide how to choose a subset of the colors for display. + + This chunk's contents are a series of 2-byte (16 bit) unsigned + integers. There must be exactly one entry for each entry in the + PLTE chunk. Each entry is proportional to the fraction of pixels + in the image that have that palette index; the exact scale factor + is chosen by the encoder. + + Histogram entries are approximate, with the exception that a + zero entry specifies that the corresponding palette entry is not + used at all in the image. It is required that a histogram entry be + nonzero if there are any pixels of that color. + + When the palette is a suggested quantization of a truecolor + image, the histogram is necessarily approximate, since a decoder + may map pixels to palette entries differently than the encoder + did. In this situation, zero entries should not appear. + + The hIST chunk, if it appears, must follow the PLTE chunk, and + must precede the first IDAT chunk. + + See Rationale: Palette histograms, and Recommendations for + Decoders: Palette histogram usage. + +pHYs Physical Pixel Dimensions + This chunk specifies the intended resolution for display of the + image. The chunk's contents are: + + 4 bytes: pixels per unit, X axis (unsigned integer) + 4 bytes: pixels per unit, Y axis (unsigned integer) + 1 byte: unit specifier + + The following values are legal for the unit specifier: + + 0: unit is unknown (pHYs defines pixel aspect ratio only) + 1: unit is the meter + + Conversion note: one inch is equal to exactly 0.0254 meters. + + If this ancillary chunk is not present, pixels are assumed to be + square, and the physical size of each pixel is unknown. + + If present, this chunk must precede the first IDAT chunk. + + See Recommendations for Decoders: Pixel dimensions. + +sBIT Significant Bits + To simplify decoders, PNG specifies that only certain bit depth + values be used, and further specifies that pixel values must be + scaled to the full range of possible values at that bit depth. + However, the sBIT chunk is provided in order to store the + original number of significant bits, since this information may be + of use to some decoders. We recommend that an encoder emit an + sBIT chunk if it has converted the data from a different bit + depth. + + For color type 0 (grayscale), the sBIT chunk contains a single + byte, indicating the number of bits which were significant in the + source data. + + For color type 2 (RGB truecolor), the sBIT chunk contains + three bytes, indicating the number of bits which were significant + in the source data for the red, green, and blue channels, + respectively. + + For color type 3 (palette color), the sBIT chunk contains three + bytes, indicating the number of bits which were significant in the + source data for the red, green, and blue components of the + palette entries, respectively. + + For color type 4 (grayscale with alpha channel), the sBIT chunk + contains two bytes, indicating the number of bits which were + significant in the source grayscale data and the source alpha + channel data, respectively. + + For color type 6 (RGB truecolor with alpha channel), the sBIT + chunk contains four bytes, indicating the number of bits which + were significant in the source data for the red, green, blue and + alpha channels, respectively. + + Note that sBIT does not have any implications for the + interpretation of the stored image: the bit depth indicated by + IHDR is the correct depth. sBIT is only an indication of the + history of the image. However, an sBIT chunk showing a bit + depth less than the IHDR bit depth does mean that not all + possible color values occur in the image; this fact may be of use to + some decoders. + + If the sBIT chunk appears, it must precede the first IDAT + chunk, and it must also precede the PLTE chunk if present. + +tEXt Textual Data + Any textual information that the encoder wishes to record with + the image is stored in tEXt chunks. Each tEXt chunk contains + a keyword and a text string, in the format: + + Keyword: n bytes (character string) + Null separator: 1 byte + Text: n bytes (character string) + + The keyword and text string are separated by a zero byte (null + character). Neither the keyword nor the text string may contain + a null character. Note that the text string is not null-terminated + (the length of the chunk is sufficient information to locate the + ending). The keyword must be at least one character and less + than 80 characters long. The text string may be of any length + from zero bytes up to the maximum permissible chunk size. + + Any number of tEXt chunks may appear, and more than one + with the same keyword is permissible. + + The keyword indicates the type of information represented by + the text string. The following keywords are predefined and + should be used where appropriate: + + Title Short (one line) title or caption for image + Author Name of image's creator + Copyright Copyright notice + Description Description of image (possibly long) + Software Software used to create the image + Disclaimer Legal disclaimer + Warning Warning of nature of content + Source Device used to create the image + Comment Miscellaneous comment; conversion from GIF comment + + Other keywords, containing any sequence of printable characters + in the character set, may be invented for other purposes. + Keywords of general interest may be registered with the + maintainers of the PNG specification. + + Keywords must be spelled exactly as registered, so that decoders + may use simple literal comparisons when looking for particular + keywords. In particular, keywords are considered case-sensitive. + + Both keyword and text are interpreted according to the ISO + 8859-1 (Latin-1) character set. Newlines in the text string + should be represented by a single linefeed character (decimal + 10); use of other ASCII control characters is discouraged. + + See Recommendations for Encoders: Text chunk processing and + Recommendations for Decoders: Text chunk processing. + +tIME Image Last-Modification Time + This chunk gives the time of the last image modification (not the + time of initial image creation). The chunk contents are: + + 2 bytes: Year (complete; for example, 1995, not 95) + 1 byte: Month (1-12) + 1 byte: Day (1-31) + 1 byte: Hour (0-23) + 1 byte: Minute (0-59) + 1 byte: Second (0-60) (yes, 60, for leap seconds; not 61, a common error) + + Universal Time (UTC, also called GMT) should be specified + rather than local time. + +tRNS Transparency + Transparency is an alternative to the full alpha channel. + Although transparency is not as elegant as the full alpha + channel, it requires less storage space and is sufficient for many + common cases. + + For color type 3 (palette), this chunk's contents are a series of + alpha channel bytes, corresponding to entries in the PLTE + chunk: + + Alpha for palette index 0: 1 byte + Alpha for palette index 1: 1 byte + etc. + + Each entry indicates that pixels of that palette index should be + treated as having the specified alpha value. Alpha values have + the same interpretation as in an 8-bit full alpha channel: 0 is + fully transparent, 255 is fully opaque, regardless of image bit + depth. The tRNS chunk may contain fewer alpha channel bytes + than there are palette entries. In this case, the alpha channel + value for all remaining palette entries is assumed to be 255. In + the common case where only palette index 0 need be made + transparent, only a one-byte tRNS chunk is needed. The tRNS + chunk may not contain more bytes than there are palette entries. + + For color type 0 (grayscale), the tRNS chunk contains a single + gray level value, stored in the format + + gray: 2 bytes, range 0 .. (2^bitdepth) - 1 + + (For consistency, 2 bytes are used regardless of the image bit + depth.) Pixels of the specified gray level are to be treated as + transparent (equivalent to alpha value 0); all other pixels are to + be treated as fully opaque (alpha value (2^bitdepth)-1). + + For color type 2 (RGB), the tRNS chunk contains a single RGB + color value, stored in the format + + red: 2 bytes, range 0 .. (2^bitdepth) - 1 + green: 2 bytes, range 0 .. (2^bitdepth) - 1 + blue: 2 bytes, range 0 .. (2^bitdepth) - 1 + + (For consistency, 2 bytes per sample are used regardless of the + image bit depth.) Pixels of the specified color value are to be + treated as transparent (equivalent to alpha value 0); all other + pixels are to be treated as fully opaque (alpha value + (2^bitdepth)-1). + + tRNS is prohibited for color types 4 and 6, since a full alpha + channel is already present in those cases. + + Note: when dealing with 16-bit grayscale or RGB data, it is + important to compare both bytes of the sample values to + determine whether a pixel is transparent. Although decoders + may drop the low-order byte of the samples for display, this must + not occur until after the data has been tested for transparency. + For example, if the grayscale level 0x0001 is specified to be + transparent, it would be incorrect to compare only the + high-order byte and decide that 0x0002 is also transparent. + + When present, the tRNS chunk must precede the first IDAT + chunk, and must follow the PLTE chunk, if any. + +zTXt Compressed Textual Data + A zTXt chunk contains textual data, just as tEXt does; + however, zTXt takes advantage of compression. + + A zTXt chunk begins with an uncompressed Latin-1 keyword + followed by a null (0) character, just as in the tEXt chunk. The + next byte after the null contains a compression type byte, for + which the only presently legitimate value is zero (deflate/inflate + compression). The compression-type byte is followed by a + compressed data stream which makes up the remainder of the + chunk. Decompression of this data stream yields Latin-1 text + which is equivalent to the text stored in a tEXt chunk. + + Any number of zTXt and tEXt chunks may appear in the same + file. See the preceding definition of the tEXt chunk for the + predefined keywords and the exact format of the text. + + See Deflate/Inflate Compression, Recommendations for + Encoders: Text chunk processing, and Recommendations for + Decoders: Text chunk processing. + +Summary of Standard Chunks +========================== + +This table summarizes some properties of the standard chunk types. + +Critical chunks (must appear in this order, except PLTE is optional): + + Name Multiple Ordering constraints + OK? + + IHDR No Must be first + PLTE No Before IDAT + IDAT Yes Multiple IDATs must be consecutive + IEND No Must be last + +Ancillary chunks (need not appear in this order): + + Name Multiple Ordering constraints + OK? + + cHRM No Before PLTE and IDAT + gAMA No Before PLTE and IDAT + sBIT No Before PLTE and IDAT + bKGD No After PLTE; before IDAT + hIST No After PLTE; before IDAT + tRNS No After PLTE; before IDAT + pHYs No Before IDAT + tIME No None + tEXt Yes None + zTXt Yes None + +Standard keywords for tEXt and zTXt chunks: + +Title Short (one line) title or caption for image +Author Name of image's creator +Copyright Copyright notice +Description Description of image (possibly long) +Software Software used to create the image +Disclaimer Legal disclaimer +Warning Warning of nature of content +Source Device used to create the image +Comment Miscellaneous comment; conversion from GIF comment + +Additional Chunk Types +====================== + +Additional public PNG chunk types are defined in the document "PNG +Special-Purpose Public Chunks", available by FTP from +ftp.uu.net:/graphics/png/ or via WWW from +http://sunsite.unc.edu/boutell/pngextensions.html. + +5. Deflate/Inflate Compression +============================== + +PNG compression type 0 (the only compression method presently +defined for PNG) specifies deflate/inflate compression with a 32K +window. Deflate compression is an LZ77 derivative used in zip, gzip, +pkzip and related programs. Extensive research has been done +supporting its patent-free status. Portable C implementations are freely +available. + +Documentation and C code for deflate are available from the Info-Zip +archives at ftp.uu.net:/pub/archiving/zip/. + +Deflate-compressed datastreams within PNG are stored in the "zlib" +format, which has the structure: + +Compression method/flags code: 1 byte +Additional flags/check bits: 1 byte +Compressed data blocks: n bytes +Checksum: 4 bytes + +Further details on this format may be found in the zlib specification. At +this writing, the zlib specification is at draft 3.1, and is available from +ftp.uu.net:/pub/archiving/zip/doc/zlib-3.1.doc. + +For PNG compression type 0, the zlib compression method/flags code +must specify method code 8 ("deflate" compression) and an LZ77 +window size of not more than 32K. + +The checksum stored at the end of the zlib datastream is calculated on +the uncompressed data represented by the datastream. Note that the +algorithm used is not the same as the CRC calculation used for PNG +chunk checksums. Verifying the chunk CRCs provides adequate +confidence that the PNG file has been transmitted undamaged. The zlib +checksum is useful mainly as a crosscheck that the deflate and inflate +algorithms are implemented correctly. + +In a PNG file, the concatenation of the contents of all the IDAT chunks +makes up a zlib datastream as specified above. This datastream +decompresses to filtered image data as described elsewhere in this +document. + +It is important to emphasize that the boundaries between IDAT chunks +are arbitrary and may fall anywhere in the zlib datastream. There is not +necessarily any correlation between IDAT chunk boundaries and deflate +block boundaries or any other feature of the zlib data. For example, it is +entirely possible for the terminating zlib checksum to be split across +IDAT chunks. + +PNG also uses zlib datastreams in zTXt chunks. In a zTXt chunk, the +remainder of the chunk following the compression type code byte is a +zlib datastream as specified above. This datastream decompresses to the +user-readable text described by the chunk's keyword. Unlike the image +data, such datastreams are not split across chunks; each zTXt chunk +contains an independent zlib datastream. + +6. Filter Algorithms +==================== + +This chapter describes the pixel filtering algorithms which may be +applied in advance of compression. The purpose of these filters is to +prepare the image data for optimum compression. + +PNG defines five basic filtering algorithms, which are given numeric +codes as follows: + +Code Name +0 None +1 Sub +2 Up +3 Average +4 Paeth + +The encoder may choose which algorithm to apply on a +scanline-by-scanline basis. In the image data sent to the compression +step, each scanline is preceded by a filter type byte containing the +numeric code of the filter algorithm used for that scanline. + +Filtering algorithms are applied to bytes, not to pixels, regardless of the +bit depth or color type of the image. The filtering algorithms work on +the byte sequence formed by a scanline that has been represented as +described under Image layout. + +When the image is interlaced, each pass of the interlace pattern is +treated as an independent image for filtering purposes. The filters work +on the byte sequences formed by the pixels actually transmitted during a +pass, and the "previous scanline" is the one previously transmitted in the +same pass, not the one adjacent in the complete image. Note that the +subimage transmitted in any one pass is always rectangular, but is of +smaller width and/or height than the complete image. Filtering is not +applied when this subimage is empty. + +For all filters, the bytes "to the left of" the first pixel in a scanline must +be treated as being zero. For filters that refer to the prior scanline, the +entire prior scanline must be treated as being zeroes for the first scanline +of an image (or of a pass of an interlaced image). + +To reverse the effect of a filter, the decoder must use the decoded values +of the prior pixel on the same line, the pixel immediately above the +current pixel on the prior line, and the pixel just to the left of the pixel +above. This implies that at least one scanline's worth of image data must +be stored by the decoder at all times. Even though some filter types do +not refer to the prior scanline, the decoder must always store each +scanline as it is decoded, since the next scanline might use a filter that +refers to it. + +PNG imposes no restriction on which filter types may be applied to an +image. However, the filters are not equally effective on all types of data. +See Recommendations for Encoders: Filter selection. + +Filter type 0: None +=================== + +With the None filter, the scanline is transmitted unmodified; it is only +necessary to insert a filter type byte before the data. + +Filter type 1: Sub +================== + +The Sub filter transmits the difference between each byte and the value +of the corresponding byte of the prior pixel. + +To compute the Sub filter, apply the following formula to each byte of +each scanline: + + Sub(x) = Raw(x) - Raw(x-bpp) + +where x ranges from zero to the number of bytes representing that +scanline minus one, Raw(x) refers to the raw data byte at that byte +position in the scanline, and bpp is defined as the number of bytes per +complete pixel, rounding up to one. For example, for color type 2 with a +bit depth of 16, bpp is equal to 6 (three channels, two bytes per channel); +for color type 0 with a bit depth of 2, bpp is equal to 1 (rounding up); for +color type 4 with a bit depth of 16, bpp is equal to 4 (two-byte grayscale +value, plus two-byte alpha channel). + +Note this computation is done for each byte, regardless of bit depth. In a +16-bit image, MSBs are differenced from the preceding MSB and LSBs +are differenced from the preceding LSB, because of the way that bpp is +defined. + +Unsigned arithmetic modulo 256 is used, so that both the inputs and +outputs fit into bytes. The sequence of Sub values is transmitted as the +filtered scanline. + +For all x < 0, assume Raw(x) = 0. + +To reverse the effect of the Sub filter after decompression, output the +following value: + + Sub(x) + Raw(x-bpp) + +(computed mod 256), where Raw refers to the bytes already decoded. + +Filter type 2: Up +================= + +The Up filter is just like the Sub filter except that the pixel immediately +above the current pixel, rather than just to its left, is used as the +predictor. + +To compute the Up filter, apply the following formula to each byte of +each scanline: + + Up(x) = Raw(x) - Prior(x) + +where x ranges from zero to the number of bytes representing that +scanline minus one, Raw(x) refers to the raw data byte at that byte +position in the scanline, and Prior(x) refers to the unfiltered bytes of +the prior scanline. + +Note this is done for each byte, regardless of bit depth. Unsigned +arithmetic modulo 256 is used, so that both the inputs and outputs fit +into bytes. The sequence of Up values is transmitted as the filtered +scanline. + +On the first scanline of an image (or of a pass of an interlaced image), +assume Prior(x) = 0 for all x. + +To reverse the effect of the Up filter after decompression, output the +following value: + + Up(x) + Prior(x) + +(computed mod 256), where Prior refers to the decoded bytes of the +prior scanline. + +Filter type 3: Average +====================== + +The Average filter uses the average of the two neighboring pixels (left +and above) to predict the value of a pixel. + +To compute the Average filter, apply the following formula to each byte +of each scanline: + + Average(x) = Raw(x) - floor((Raw(x-bpp)+Prior(x))/2) + +where x ranges from zero to the number of bytes representing that +scanline minus one, Raw(x) refers to the raw data byte at that byte +position in the scanline, Prior(x) refers to the unfiltered bytes of the +prior scanline, and bpp is defined as for the Sub filter. + +Note this is done for each byte, regardless of bit depth. The sequence of +Average values is transmitted as the filtered scanline. + +The subtraction of the predicted value from the raw byte must be done +modulo 256, so that both the inputs and outputs fit into bytes. However, +the sum Raw(x-bpp)+Prior(x) must be formed without overflow +(using at least nine-bit arithmetic). floor() indicates that the result +of the division is rounded to the next lower integer if fractional; in other +words, it is an integer division or right shift operation. + +For all x < 0, assume Raw(x) = 0. On the first scanline of an image (or of +a pass of an interlaced image), assume Prior(x) = 0 for all x. + +To reverse the effect of the Average filter after decompression, output +the following value: + + Average(x) + floor((Raw(x-bpp)+Prior(x))/2) + +where the result is computed mod 256, but the prediction is calculated in +the same way as for encoding. Raw refers to the bytes already decoded, +and Prior refers to the decoded bytes of the prior scanline. + +Filter type 4: Paeth +==================== + +The Paeth filter computes a simple linear function of the three +neighboring pixels (left, above, upper left), then chooses as predictor the +neighboring pixel closest to the computed value. This technique is taken +from Alan W. Paeth's article "Image File Compression Made Easy" in +Graphics Gems II, James Arvo, editor, Academic Press, 1991. + +To compute the Paeth filter, apply the following formula to each byte of +each scanline: + + Paeth(x) = Raw(x) - PaethPredictor(Raw(x-bpp),Prior(x),Prior(x-bpp)) + +where x ranges from zero to the number of bytes representing that +scanline minus one, Raw(x) refers to the raw data byte at that byte +position in the scanline, Prior(x) refers to the unfiltered bytes of the +prior scanline, and bpp is defined as for the Sub filter. + +Note this is done for each byte, regardless of bit depth. Unsigned +arithmetic modulo 256 is used, so that both the inputs and outputs fit +into bytes. The sequence of Paeth values is transmitted as the filtered +scanline. + +The PaethPredictor function is defined by the following pseudocode: + + function PaethPredictor (a, b, c) + begin + ; a = left, b = above, c = upper left + p := a + b - c ; initial estimate + pa := abs(p - a) ; distances to a, b, c + pb := abs(p - b) + pc := abs(p - c) + ; return nearest of a,b,c, + ; breaking ties in order a,b,c. + if pa <= pb AND pa <= pc + begin + return a + end + if pb <= pc + begin + return b + end + return c + end + +The calculations within the PaethPredictor function must be performed +exactly, without overflow. Arithmetic modulo 256 is to be used only for +the final step of subtracting the function result from the target pixel +value. + +Note that the order in which ties are broken is fixed and must not be +altered. The tie break order is: pixel to the left, pixel above, pixel to the +upper left. (This order differs from that given in Paeth's article.) + +For all x < 0, assume Raw(x) = 0 and Prior(x) = 0. On the first scanline +of an image (or of a pass of an interlaced image), assume Prior(x) = 0 +for all x. + +To reverse the effect of the Paeth filter after decompression, output the +following value: + + Paeth(x) + PaethPredictor(Raw(x-bpp),Prior(x),Prior(x-bpp)) + +(computed mod 256), where Raw and Prior refer to bytes already +decoded. Exactly the same PaethPredictor function is used by both +encoder and decoder. + +For more information, check out the above ftp sites. + +EXTENSION:PNG +OCCURENCES:PC,UNIX,AMIGA +PROGRAMS:???? +REFERENCE:The PNG Specification +--------M-PTM------------------------------- +Poly Tracker is a Scream Tracker 3 like tracker written by Lone Ranger of AcmE. +This is a description of version 2.03 of the PTM format. Early formats are no +longer used or supported by the current version of Poly Tracker (it still says +"version 1.0á", but there have been about a dozen different versions, including +some customized test versions). The samples are stored using delta-compression. + +OFFSET Count TYPE Description +0000h 28 char Songname in ASCIZ format, 0 padded +001Ch 1 char ID=#26 +001Dh 1 word File type version, currently 0203h +001Fh 1 byte reserved (0) +0020h 1 word Number of orders + ="ORD" +0022h 1 word Number of instruments + ="INS" +0024h 1 word Number of patterns + ="PAT" +0026h 1 word Number of voices used + ="CHN" +0028h 1 word File flags (always 0 ??) +002Ah 1 word reserved (0) +002Ch 4 char ID='PTMF' +0030h 16 byte reserved (0) +0040h 32 byte Pan settings for each channel : + 0 = left, 7 = middle, 15 = right +0060h 256 byte Order list, valid entries are 0.."ORD" +0160h 128 word (Pattern offsets) div 16 + +The instruments data follows immediately after the header. +--- PTM instrument format +There are 0.."INS" instruments in the file, each of the following format : +OFFSET Count TYPE Description +0000h 1 byte Sample type (bit mapped) + 0,1 : 0 - no sample (instrument info only) + 1 - normal sample (FileOfs / Length fields are valid) + 2 - OPL2 / OPL3 instrument (not used) + 3 - MIDI instrument (not used) + 2 - sample loop (0 = no loop, 1 = loop) + 3 - loop type (0 = unidirectional, 1 = bidirectional) + 4 - sample resolution (0 = 8 bits, 1 = 16 bits) +0001h 12 char Name of external sample file +000Dh 1 byte Default volume for sample +000Eh 1 word C4 speed +0010h 1 word reserved (0) +0012h 1 dword absolute? offset of sample data +0016h 1 dword Size of sample in bytes +001Ah 1 dword Start of loop +001Eh 1 dword End of loop +0022h 13 byte reserved (0) +0030h 28 char ASCIZ name of sample +004Ch 4 char ID='PTMS' + +EXTENSION:PTM +OCCURENCES:PC +--------M-PS16------------------------------ +The Protracker Studio 16 Modules are yet another digital music format. +The Protracker modules can have up to 255 different patterns and a length of +up to 255 patterns with 31 instruments. The samples can only have a size of +up to 64K, there is a maximum of 16 tracks supported. +The header of each MOD file looks like this : +OFFSET Count TYPE Description +0000h 5 char Header string + ID='PS16',254 +0005h 75 char Song name, ending with ^Z so that if typing + the file will result in PS16 +0050h 1 byte File type : + 0 - Module with patterns and samples + 1 - Song with patterns but without samples +0051h 1 dword Offset of comment field from start of file. + Zero if no commend is stored. +0055h 1 byte Format version byte (0) +0056h 1 byte Number of patterns in the file + ="PAT" +0057h 1 dword Total size of all patterns in bytes, stored + for quick disk reads. +005Bh 1 byte Songlength, number of sequences. +005Ch 128 byte Sequencing information for file +00CCh 31 rec Sample information + 1 byte Sample flags, bitmapped : + 0 - synthesized / digital + 1 - Waveform / FM + (only if bit 0 is set) + 2 - 16 bit / 8 bit + 1 byte Default volume for the sample (0-64) + 1 byte Sample fine tuning (signed nibble) + 1 dword Sample length - Protracker does only support + samples with a size less than 64K. + 1 dword Sample loop start + 1 dword Sample loop length + 1 word Default playback frequency for C2 + Can be used to fine tune a sample. +00CCh+ "PAT" rec The pattern information + 31*17 The tracks are stored sequentially after each + other, first all rows of track 1, then all rows + of track 2 and so on. + 1 word Pattern size+3, rounded up to a paragraph + boundary. + 1 byte Number of rows in pattern + ="ROW" + "ROW" rec + 2 byte Note information, bitmapped : + 0-5 - Note (see table 0005) + 6 - Bit 4 of instrument + 7 - Compression bit + If this bit not set, there is another + byte following the note record + specifying the row where the next + event takes place - if it is set, + the next note follows immediately. + A track is terminated by a 0FFh byte. + 8-11 - Effect bits + 12-15 - Bits 0-3 of instrument + 1 byte Effect data +00CCh+ ? byte Sample data in delta format + 31*17+ See algorthm.txt for details. + ???? + +The comment block contains information about the sample names as well +as some comments to the module. It is formatted like this : +OFFSET Count TYPE Description +0000h 4 char ID='INST' + 1 byte Instrument name length + ="LEN" + 1 byte Sample name count + ="CNT" + "LEN"*"CNT" char Sample names +0000h+ 4 char ID='TEXT' + "LEN"*"CNT"+4 + 1 word Length of following text +EXTENSION:MOD +OCCURENCES:PC +PROGRAMS:Protracker +REFERENCE: +SEE ALSO:DMF,MOD,S3M,STM +VALIDATION: +--------I-QFX------------------------------- +QFX files are yet another graphic file format used to store received +fax images. The .QFX file format is proprietary to Smith Micro Software, Inc. +and is used by the Quick Link II fax software. +The QFX file header is exactly 1536 bytes long. The fax pages themselves +are stored in byte aligned, bit reversed T4 format terminated with 6 EOL's. +See CCITT Recommendation T.4 for full documentation on this coding scheme. + +OFFSET Count TYPE Description +0000h 8 char ID='QLIIFAX',0 +0008h 1 word Number of pages in the QFX file +000Ah 1 word Number of scan lines on last page +000Ch 1 dword Number of scan lines for all pages +0010h 1 word Horizontal scaling + 1 - High res (200x200), + 2 - Normal res (200x100) +0012h 1 word Vertical scaling (always = 1). +0014h 12 byte reserved +0020h 375 dword Offsets of the single pages in the document. + Page 1 always starts at offset 1536. The last + non-zero dword points to the end of the last + page, the first zero dword marks the end of + the pages. +0600h ? byte Start of fax page images + +EXTENSION:QFX +OCCURENCES:PC +PROGRAMS:Quick Link II +--------S-RAW------------------------------- +The RAW files are raw signed PCM sound files. PCM means Pulse Code +Modulation - which can be played through most sound devices without +further manipulation. There is no header or whatsoever. +The properties include 8/16-bit samples in INTEL order, +stereo or mono format. No identification is possible. +EXTENSION:RAW +SEE ALSO:SND +--------I-RDIB------------------------------ +The RDIB files are Device Independent Bitmaps used by Windows. They are RIFF +format files. The blocks are unknown to me. +SEE ALSO:RIFF +--------f-RIFF------------------------------ +The RIFF (Resource interchange file format) format was created by Microsoft and +is used by many applications like Windows, Corel Draw etc.. It is block +structured, each block has a header ID and a size, so that even a program that +works with an old version of the file format can skip the unknown parts of the +file and work on the known parts of the file. All RIFF blocks begin on a word +boundary so it might be necessary to skip an additional byte. In the present +specification, only one RIFF block per file is allowed, and only the RIFF and +LIST blocks may contain subblocks. + +The order of blocks in a RIFF file is not mandatory, so you should always scan +the whole file for the block ID you seek. Throughout this file, the RIFF block +IDs are given in square brackets []. Each ID is always 4 characters dword. + +OFFSET Count TYPE Description +0000h 4 char ID='RIFF' + Each RIFF format file has a header with the + signature and the size of the following + blocks. +0004h 1 dword Block size. This size is the size of the block + controlled by the RIFF header. Normally this + equals the file size. + ="BSZ" +0008h 4 char Format name. This is the format name of the RIFF + file. +After this RIFF header comes the first RIFF record. Each RIFF record has the +following format : +OFFSET Count TYPE Description +0000h 4 char Signature. This is the description of what is + contained in this block. +0004h 1 dword Block size. This is the size of the following + data block. To get the offset of the next RIFF + block record, you have to add this value + 8 to + the offset of the current record. + +---RiffBLOCK [LIST] +This block contains a string list, again in the RIFF subblock format. This list +is used for messages and/or copyright messages. All strings in the LIST block +share the same format, each block contains one ASCIIZ string - the most common +LIST block is the [INFO] block, which can contain the following subblocks : + +[INAM] +The name of the data stored in the file +[ICRD] +Creation date of the file + +SEE ALSO:BMP,rDIB,IFF,WAVe,RIFX +OCCURENCES:PC +PROGRAMS:Windows,Corel Draw +REFERENCE:DDJ0994 +VALIDATION:FileSize="BSZ"+8 +--------f-RIFX-M---------------------------- +The RIFX file format is identical to the RIFF file format except that all values +are in Motorola byte order. +OFFSET Count TYPE Description +0000h 4 char ID='RIFX' +0004h 1 dword Block size. This size is the size of the block + controlled by the RIFX header. + ="BSZ" +0008h 4 char Format name. +REFERENCE:DDJ0994 +SEE ALSO:RIFF +--------S-S3I------------------------------- +This is the Digiplayer/ST3.0 digital sample file format. The sample +files include information about the loop of the instrument. The AdLib +instruments have another format listed below. + +OFFSET Count TYPE Description +0000h 1 byte ID=01h +0001h 12 char DOS filename +000Dh 1 byte reserved (0) +000Eh 1 word Paragraph offset of the raw sample data + from beginning of file. +0010h 1 dword Sample length in bytes +0014h 1 dword Start of sample loop +0018h 1 dword End of sample loop +001Ch 1 byte Playback volumne of sample +001Dh 1 byte ??? "DSK" what ever that means +001Eh 1 byte Pack type + 0 - unpacked + 1 - DP30ADPCM 1 +001Fh 1 byte Flags (bitmapped) + 0 - loop on/off + 1 - stereo sample (length bytes for left channel, + then another length bytes for right channel!) + 2 - 16-Bit samples (in Intel byte order) +0020h 1 dword C2 frequency +0024h 1 dword reserved +0028h 1 word reserved +002Ah 1 word ID=512 +002Ch 1 dword ?? Date of last modification ?? (see table 0009) +0030h 28 char ASCIIZ Sample name +003Ch 4 char ID='SCRS' +0040h ? byte Raw sample data + +Here follows the AdLib instrument format for which I don't know the +extension (yet) : + +OFFSET Count TYPE Description +0000h 1 byte Instrument type + 2 - melodic instrument + 3 - bass drum + 4 - snare drum + 5 - tom tom + 6 - cymbal + 7 - hihat +0001h 12 char DOS file name +000Dh 3 byte reserved +0010h 1 byte Modulator description (bitmapped) + 0-3 - frequency multiplier + 4 - scale envelope + 5 - sustain + 6 - pitch vibrato + 7 - volume vibrato +0011h 1 byte Carrier description (same as modulator) +0012h 1 byte Modulator miscellaneous (bitmapped) + 0-5 - 63-volume + 6 - MSB of levelscale + 7 - LSB of levelscale +0013h 1 byte Carrier description (same as modulator) +0014h 1 byte Modulator attack / decay byte (bitmapped) + 0-3 - Decay + 4-7 - Attack +0015h 1 byte Carrier description (same as modulator) +0016h 1 byte Modulator sustain / release byte (bitmapped) + 0-3 - Release count + 4-7 - 15-Sustain +0017h 1 byte Carrier description (same as modulator) +0018h 1 byte Modulator wave select +0019h 1 byte Carrier wave select +001Ah 1 byte Modulator feedback byte (bitmapped) + 0 - additive synthesis on/off + 1-7 - modulation feedback +001Bh 1 byte reserved +001Ch 1 byte Instrument playback volume +001Dh 1 byte ??? "DSK" +001Eh 1 word reserved +0020h 1 dword C2 frequency +0024h 12 byte reserved +0030h 28 char ASCIIZ Instrument name +004Ch 4 char ID='SCRI' + +EXTENSION:S3I,SMP +OCCURENCES:PC +PROGRAMS:ScreamTracker 3.0 +SEE ALSO:MTM,S3M,STM +--------M-S3M------------------------------- +The ScreamTracker composer and the ScreamTracker Music Interface Kit (STMIK) +were written by the demo group Future Crew for their demonstrations and +released. S3M files are the files of the version 3 of the ScreamTracker. + +OFFSET Count TYPE Description +0000h 20 char Song name, ASCII, 0 padded +001Ch 1 byte ID=1Ah +001Dh 1 byte Filetype : + 16=Module + 17=Song + ? What is this supposed to mean ? +001Eh 1 word Reserved +0020h 1 word Number of orders in song + ="ORD" +0022h 1 word Number of instruments in song + ="INS" +0024h 1 word Number of patterns in song + ="PAT" +0026h 1 word Song flags, bitmapped + 0 - ScreamTracker 2.0 type vibrato + 1 - ScreamTracker 2.0 type tempo + 2 - Amiga type slides + 3 - Zero volume optimizations + 4 - Amiga limits + 5 - enable filters / sfx +0028h 1 word Tracker version +002Ah 1 word File format version + 1=Original format + 2=Original format, unsigned samples +002Ch 4 char ID='SCRM' +0032h 1 byte Maximum volume +0033h 1 byte Initial speed +0034h 1 byte Initial tempo +0035h 1 byte Master multiplier + Whats this ???? +0036h 12 byte reserved +0040h 32 byte Channel balance settings + 0=left + 127=right + +128=disabled + 255=unused +0060h "ORD" byte Ordering sequence of the patterns +0060h "INS" word Offset of the instruments in paragraphs from ++"ORD" begin of header (for binary offset, multiply with 16) +0060h "PAT" word Offset of the pattern data from begin of header ++"ORD" in paragraphs ++"INS"*2 + +EXTENSION:S3M +OCCURENCES:PC +PROGRAMS:ScreamTracker 3.0 +SEE ALSO:S3I,STM,S2M +--------S-SND------------------------------- +The SND files are raw unsigned PCM sound files. PCM means Pulse Code +Modulation - which can be played through most sound devices without +further manipulation. There is no header or whatsoever. +The properties include 8/16-bit samples in INTEL order, +stereo or mono format. No identification is possible. +EXTENSION:SND +SEE ALSO:RAW +--------A-SQZ------------------------------- +The SQZ files are yet another archive format. The SQZ archives consist of one +archive header and several file headers. The archive header has the +following format : +OFFSET Count TYPE Description +0000h 5 char ID='HLSQZ' +0005h 1 char Version in ASCII + ID='1' +0006h 1 byte OS byte, + 0 - PC-DOS / MS-DOS + 1 - OS/2 + 2 - MVS + 3 - HPFS (OS/2) + 4 - Amiga + 5 - Macintosh + 6 - Unix +0007h 1 byte Misc. flags, bitmapped : + 0 - Intel byte order / Motorola byte order + 1 - Filetime in ?? / File time in DOS format + 2 - No security envelope / security envelope + 3-7 - reserved + +After the header and each block, there is one byte denoting the type/size of the +next block : +OFFSET Count TYPE Description +0000h 1 byte Block/size specifier : + 0 - End of archive + 1 - Comment + 2 - Password + 3 - Security envelope + 4-18 - reserved + >18 - normal file header, + byte value is size of header + +The normal file header then has the following format : +OFFSET Count TYPE Description +0000h 1 byte Checksum of header +0001h 1 byte Flags, bitmapped : + 0-3 : Compression method : + 0 - + 1 - + 2 - + 3 - + 4 - + 4 - Security envelope should follow + 5-7 - reserved +0002h 1 dword Compressed size of file +0006h 1 dword Original file size +000Ah 1 dword Date and time of file (see table 0009) +000Eh 1 byte File attributes +000Fh 1 dword CRC-32 of file +0013h ? char Filename (see above for length) + +The comment block : +OFFSET Count TYPE Description +0000h 1 word Size of uncompressed comment +0002h 1 word Size of compressed comment data + ="LEN" +0004h 1 byte Flags, bitmapped, see above +0005h 1 dword CRC-32 +0009h "LEN" byte Compressed comment data + +The password block : +OFFSET Count TYPE Description +0000h 1 word Size of password block (=4) +0004h 1 dword CRC-32 of password + +Other blocks : +OFFSET Count TYPE Description +0000h 1 word Size of this block + ="LEN" +0002h "LEN" byte Block data + +EXTENSION:SQZ +OCCURENCES:PC +PROGRAMS:?? +REFERENCE: +SEE ALSO: +--------S-SDK------------------------------- +The SDK files are disk images from disks used by the Roland +S-550/S-50/S-330 sampler devices. +Further information wanted. +EXTENSION:SDK +--------S-SDS------------------------------- +The SDS files are MIDI Sample Dump Standart files and are used +to transfer samples between MIDI devices. +Further information wanted. +EXTENSION:SDS +SEE ALSO:MID,SDX +--------S-SDX------------------------------- +The SDX file are like the SDS files sample dump files used +for transfer of data between MIDI devices. +EXTENSION:SDX +SEE ALSO:MID,SDS +--------S-SMP------------------------------- +The SMP files are digital sample files used by Samplevision software. +Further information wanted. +EXTENSION:SMP +--------M-STM------------------------------- +The ScreamTracker 1.0 format was the module format used by the +ScreamTracker before version 2.0. + +OFFSET Count TYPE Description +0000h 20 char ASCIIZ song name +0014h 8 char Tracker name +001Ch 1 byte ID=1Ah +001Dh 1 byte File type + 1 - song (contains no samples) + 2 - module (contains samples) +001Eh 1 byte Major version number +001Fh 1 byte Minor version number +0020h 1 byte Playback tempo +0021h 1 byte Number of patterns + ="PAT" +0022h 1 byte Global playback volume +0023h 13 byte reserved +0030h 31 rec Instrument data + 12 char ASCIIZ instrument name + 1 byte ID=0 + 1 byte Instrument disk + 1 word reserved + 1 word Sample length in bytes + 1 word Sample loop start + 1 word Sample loop end + 1 byte Sample playback volume + 1 byte reserved + 1 word C3 frequency in Hz + 1 dword reserved + 1 word length in paragraphs + (only for modules,in songs:reserved) +03D0h 64 byte Pattern orders +0410h 4*64*"PAT" rec Pattern data. Each pattern consists of + 64 rows, each 4 channels. The channels + are stored from left ro right, row by row. + 1 byte Note byte : + 251 - last 3 bytes not stored, all bytes 0 + 252 - last 3 bytes not stored, note -0-, + whatever that means. + 253 - last 3 bytes not stored, note ... + 254 - undefined (reserved for run-time) + 255 - undefined (reserved for run-time) + otherwise bit mapped : + 0-3 : note (c=0,c#=1...) + 4-7 : octave + 1 byte Only valid if above byte < 251, bit mapped + 0-2 ; lower bit of note volume + 3-7 : instrument number + 1 byte bit mapped + 0-3 : Effect command in ProTracker format + seems to be overlapped by volume + bits... + 4-6 : upper bits of volume + 1 byte command data in ProTracker format +0410h+ ? byte Raw sample data padded to 16 byte boundaries. + 4*64*4*"PAT" + +EXTENSION:STM +OCCURENCES:PC +PROGRAMS:ScreamTracker 1.0 +REFERENCE: +SEE ALSO:S3M,MOD +--------A-TAR-G----------------------------- +The Unix Tape ARchives mostly have the extension TAR. The info about this +comes from a magic file, thus useful only for identification. +--------A-TAR------------------------------- +The Unix TAR program is an archiver program which stores files in a single +archive without compression. +OFFSET Count TYPE Description +@section The Standard Format +A @dfn{tar tape} or file contains a series of records. Each record +contains @code{RECORDSIZE} bytes. Although this format may be +thought of as being on magnetic tape, other media are often used. + +Each file archived is represented by a header record which describes +the file, followed by zero or more records which give the contents +of the file. At the end of the archive file there may be a record +filled with binary zeros as an end-of-file marker. A reasonable +system should write a record of zeros at the end, but must not +assume that such a record exists when reading an archive. + +The records may be @dfn{blocked} for physical I/O operations. Each +block of @var{N} records (where @var{N} is set by the @samp{-b} +option to @code{tar}) is written with a single @code{write()} +operation. On magnetic tapes, the result of such a write is a +single tape record. When writing an archive, the last block of +records should be written at the full size, with records after the +zero record containing all zeroes. When reading an archive, a +reasonable system should properly handle an archive whose last block +is shorter than the rest, or which contains garbage records after a +zero record. + +The header record is defined in C as follows: + +@example +/* + * Standard Archive Format - Standard TAR - USTAR + */ +#define RECORDSIZE 512 +#define NAMSIZ 100 +#define TUNMLEN 32 +#define TGNMLEN 32 + +union record @{ + char charptr[RECORDSIZE]; + struct header @{ + char name[NAMSIZ]; + char mode[8]; + char uid[8]; + char gid[8]; + char size[12]; + char mtime[12]; + char chksum[8]; + char linkflag; + char linkname[NAMSIZ]; + char magic[8]; + char uname[TUNMLEN]; + char gname[TGNMLEN]; + char devmajor[8]; + char devminor[8]; + @} header; +@}; + +/* The checksum field is filled with this while the checksum is computed. */ +#define CHKBLANKS " " /* 8 blanks, no null */ + +/* The magic field is filled with this if uname and gname are valid. */ +#define TMAGIC "ustar " /* 7 chars and a null */ + +/* The magic field is filled with this if this is a GNU format dump entry */ +#define GNUMAGIC "GNUtar " /* 7 chars and a null */ + +/* The linkflag defines the type of file */ +#define LF_OLDNORMAL '\0' /* Normal disk file, Unix compatible */ +#define LF_NORMAL '0' /* Normal disk file */ +#define LF_LINK '1' /* Link to previously dumped file */ +#define LF_SYMLINK '2' /* Symbolic link */ +#define LF_CHR '3' /* Character special file */ +#define LF_BLK '4' /* Block special file */ +#define LF_DIR '5' /* Directory */ +#define LF_FIFO '6' /* FIFO special file */ +#define LF_CONTIG '7' /* Contiguous file */ + +/* Further link types may be defined later. */ + +/* Bits used in the mode field - values in octal */ +#define TSUID 04000 /* Set UID on execution */ +#define TSGID 02000 /* Set GID on execution */ +#define TSVTX 01000 /* Save text (sticky bit) */ + +/* File permissions */ +#define TUREAD 00400 /* read by owner */ +#define TUWRITE 00200 /* write by owner */ +#define TUEXEC 00100 /* execute/search by owner */ +#define TGREAD 00040 /* read by group */ +#define TGWRITE 00020 /* write by group */ +#define TGEXEC 00010 /* execute/search by group */ +#define TOREAD 00004 /* read by other */ +#define TOWRITE 00002 /* write by other */ +#define TOEXEC 00001 /* execute/search by other */ +@end example + +All characters in header records are represented by using 8-bit +characters in the local variant of ASCII. Each field within the +structure is contiguous; that is, there is no padding used within +the structure. Each character on the archive medium is stored +contiguously. + +Bytes representing the contents of files (after the header record of +each file) are not translated in any way and are not constrained to +represent characters in any character set. The @code{tar} format +does not distinguish text files from binary files, and no +translation of file contents is performed. + +The @code{name}, @code{linkname}, @code{magic}, @code{uname}, and +@code{gname} are null-terminated character strings. All other +fileds are zero-filled octal numbers in ASCII. Each numeric field +of width @var{w} contains @var{w}@minus{} 2 digits, a space, and a null, +except @code{size}, and @code{mtime}, which do not contain the +trailing null. + +The @code{name} field is the pathname of the file, with directory +names (if any) preceding the file name, separated by slashes. + +The @code{mode} field provides nine bits specifying file permissions +and three bits to specify the Set UID, Set GID, and Save Text +(``stick'') modes. Values for these bits are defined above. When +special permissions are required to create a file with a given mode, +and the user restoring files from the archive does not hold such +permissions, the mode bit(s) specifying those special permissions +are ignored. Modes which are not supported by the operating system +restoring files from the archive will be ignored. Unsupported modes +should be faked up when creating or updating an archive; e.g. the +group permission could be copied from the @code{other} permission. + +The @code{uid} and @code{gid} fields are the numeric user and group +ID of the file owners, respectively. If the operating system does +not support numeric user or group IDs, these fields should be +ignored. + +The @code{size} field is the size of the file in bytes; linked files +are archived with this field specified as zero. +@xref{Extraction Options}; in particular the @samp{-G} option.@refill + +The @code{mtime} field is the modification time of the file at the +time it was archived. It is the ASCII representation of the octal +value of the last time the file was modified, represented as an +integer number of seconds since January 1, 1970, 00:00 Coordinated +Universal Time. + +The @code{chksum} field is the ASCII representation of the octal +value of the simple sum of all bytes in the header record. Each +8-bit byte in the header is added to an unsigned integer, +initialized to zero, the precision of which shall be no less than +seventeen bits. When calculating the checksum, the @code{chksum} +field is treated as if it were all blanks. + +The @code{typeflag} field specifies the type of file archived. If a +particular implementation does not recognize or permit the specified +type, the file will be extracted as if it were a regular file. As +this action occurs, @code{tar} issues a warning to the standard +error. + +@table @code +@item LF_NORMAL +@itemx LF_OLDNORMAL +These represent a regular file. In order to be compatible with +older versions of @code{tar}, a @code{typeflag} value of +@code{LF_OLDNORMAL} should be silently recognized as a regular +file. New archives should be created using @code{LF_NORMAL}. Also, +for backward compatibility, @code{tar} treats a regular file whose +name ends with a slash as a directory. + +@item LF_LINK +This represents a file linked to another file, of any type, +previously archived. Such files are identified in Unix by each file +having the same device and inode number. The linked-to +name is specified in the @code{linkname} field with a trailing null. + +@item LF_SYMLINK +This represents a symbolic link to another file. The linked-to +name is specified in the @code{linkname} field with a trailing null. + +@item LF_CHR +@itemx LF_BLK +These represent character special files and block special files +respectively. In this case the @code{devmajor} and @code{devminor} +fields will contain the major and minor device numbers +respectively. Operating systems may map the device specifications +to their own local specification, or may ignore the entry. + +@item LF_DIR +This specifies a directory or sub-directory. The directory name in +the @code{name} field should end with a slash. On systems where +disk allocation is performed on a directory basis the @code{size} +field will contain the maximum number of bytes (which may be rounded +to the nearest disk block allocation unit) which the directory may +hold. A @code{size} field of zero indicates no such limiting. +Systems which do not support limiting in this manner should ignore +the @code{size} field. + +@item LF_FIFO +This specifies a FIFO special file. Note that the archiving of a +FIFO file archives the existence of this file and not its contents. + +@item LF_CONTIG +This specifies a contiguous file, which is the same as a normal +file except that, in operating systems which support it, +all its space is allocated contiguously on the disk. Operating +systems which do not allow contiguous allocation should silently treat +this type as a normal file. + +@item 'A' @dots{} +@itemx 'Z' +These are reserved for custom implementations. Some of these are +used in the GNU modified format, as described below. +@end table + +Other values are reserved for specification in future revisions of +the P1003 standard, and should not be used by any @code{tar} program. + +The @code{magic} field indicates that this archive was output in the +P1003 archive format. If this field contains @code{TMAGIC}, the +@code{uname} and @code{gname} fields will contain the ASCII +representation of the owner and group of the file respectively. If +found, the user and group ID represented by these names will be used +rather than the values within the @code{uid} and @code{gid} fields. + +@section GNU Extensions to the Archive Format +The GNU format uses additional file types to describe new types of +files in an archive. These are listed below. + +@table @code +@item LF_DUMPDIR +@itemx 'D' +This represents a directory and a list of files created by the +@samp{-G} option. The @code{size} field gives the total size of the +associated list of files. Each filename is preceded by either a @code{'Y'} +(the file should be in this archive) or an @code{'N'} (The file is a +directory, or is not stored in the archive). Each filename is +terminated by a null. There is an additional null after the last +filename. + +@item LF_MULTIVOL +@itemx 'M' +This represents a file continued from another volume of a +multi-volume archive created with the @samp{-M} option. The original +type of the file is not given here. The @code{size} field gives the +maximum size of this piece of the file (assuming the volume does not +end before the file is written out). The @code{offset} field gives +the offset from the beginning of the file where this part of the +file begins. Thus @code{size} plus @code{offset} should equal the +original size of the file. + +@item LF_VOLHDR +@itemx 'V' +This file type is used to mark the volume header that was given with +the @samp{-V} option when the archive was created. The @code{name} +field contains the @code{name} given after the @samp{-V} option. +The @code{size} field is zero. Only the first file in each volume +of an archive should have this type. + +@end table +EXTENSION: +OCCURENCES: +PROGRAMS: +REFERENCE: +SEE ALSO: +VALIDATION: +OFFSET Count TYPE Description +0000h 256 byte Other header info ? +0100h 6 char ID='ustar',0 +EXTENSION:TAR +OCCURENCES:PC, Unix +PROGRAMS:TAR +--------G-TDDD------------------------------ +This format is used by the Imagine rendering package. The names of the blocks +are unknown to me. +OFFSET Count TYPE Description +EXTENSION:IFF +OCCURENCES:Amiga,PC +PROGRAMS:Imagine package +REFERENCE:DDJ0794 +SEE ALSO:IFF +--------I-TIFF------------------------------ +The TIFF file format was designed jointly by Aldus and Microsoft with leading +scanner vendors to faciliate incorporating scanned images into publishing. +The described TIFF specification is TIFF 5.0. A TIFF file consists of several +different blocks which define the palette data or the LZW-compressed body +among other things. TIFF files can be in Motorola _or_ Intel byte order, +depending on the first word. If it is 'II', the byte order is in Intel order, +if it is 'MM', then you have Motorola byte ordering. + +Each TIFF file begins with a image file header which points to one or more image +file directories, which contain the image data and image information. + +The format of the image header : +OFFSET Count TYPE Description +0000h 2 char ID='II', ID='MM' + This is the identification, 'II' stands for + Intel byte order, 'MM' for Motorola byte + order. The following data must be interpreted + accordingly ! +0002h 1 word TIFF "version number". This version number + never changed and the value (42) was choosen + for its deep philosophical value. In fact, if + the version number ever changes, this means + that radical changes to the TIFF format have + been made, and a TIFF reader should give up + immediately. + You can consider this word to be a part of the + header ID. +0004h 1 dword Offset of first image directory in file form + start of file. + The first image directory must begin on an + even byte boundary. The image directory may + follow the image data it describes. The + image directory is described below. + +An organization may wish to store information that is meaningful to only that +organization in a TIFF file. Tags numbered 32768 or higher are reserved for +that purpose. Upon request, the administrator will allocate and register a block +of private tags for an organization. +Private enumerated values can be accommodated in a similar fashion. + +The format of the image file directory (IFD) : +All entries are sorted in ascending order by the tag field. +OFFSET Count TYPE Description +0000h 1 word Number of entries + ="NUM" +0002h "NUM" rec Field descriptor + 1 word Field tag, see below + 1 word Field type + 1 - byte + 2 - ASCII string, counted in length. + Most often an ASCIIZ string, the + trailing zero is counted with the + data length. + 3 - word + 4 - dword / uword + 5 - rational (2 dwords, numerator and denominator) + 1 dword Length of the field in units of the data type. + A single 16-bit word has the length 1. + 1 dword Data offset of the field. The data starts + on a word boundary, thus the dword should + be even. The data for the field may be + anywhere in the file, even after the image + data. If the data size is less or equal to + 4 bytes (determined by the field type and + length), then this offset is not a offset + but instead the data itself, to save space. + If the data size is less than 4 bytes, the + data is stored left-justified within the 4 + bytes of the offset field. +0002h+ + "NUM"*12 1 dword Offset of next IFD in file, 0 if none follow + +If a certain field in the IFD does not exist, you have to presume the default +values. The different fields are : + +--- BitsPerSample +Tag = 258 (102) +Type = word +N = SamplesPerPixel +Default = 1 + +Number of bits per sample. Note that this tag allows a different number of +bits per sample for each sample corresponding to a pixel. For example, RGB +color data could use a different number of bits per sample for each of the +three color planes. + +--- ColorMap +Tag = 320 (140) +Type = word +N = 3 * (2**BitsPerSample) +No default.ColorMap must be included in all palette color images. + +This tag defines a Red-Green-Blue color map for palette color images. +The palette color pixel value is used to index into all 3 subcurves. +The subcurves are stored sequentially. The Red entries come first, followed +by the Green entries, followed by the Blue entries. +The width of each entry is 16 bits, as implied by the type of word. +0 represents the minimum intensity, and 65535 represents the maximum intensity. + +--- ColorResponseCurves +Tag = 301 (12D) +Type = word +N = 3 * (2**BitsPerSample) +Default: curves based on the NTSC recommended gamma of 2.2. + +This tag defines three color response curves, one each for Red, Green and Blue +color information. The Red entries come first, followed by the Green entries, +followed by the Blue entries. The length of each subcurve is 2**BitsPerSample, +using the BitsPerSample value corresponding to the respective primary. The width +of each entry is 16 bits, as implied by the type of word. +The purpose of the color response curves is to refine the content of RGB color images. + +--- Compression +Tag = 259 (103) +Type = word +N = 1 +Default = 1. + +1 = No compression, but pack data into bytes as tightly as possible, with no + unused bits except at the end of a row. The bytes are stored as an array + of bytes, for BitsPerSample <= 8, word if BitsPerSample > 8 and <= 16, and + dword if BitsPerSample > 16 and <= 32. The byte ordering of data >8 bits + must be consistent with that specified in the TIFF file header (bytes 0 + and 1). Rows are required to begin on byte boundaries. + +2 = CCITT Group 3 1-Dimensional Modified Huffman run length encoding. + See ALGRTHMS.txt BitsPerSample must be 1, since this type of compression + is defined only for bilevel images (like FAX images...) + +3 = Facsimile-compatible CCITT Group 3, exactly as specified in + "Standardization of Group 3 facsimile apparatus for document + transmission," Recommendation T.4, Volume VII, Fascicle VII.3, + Terminal Equipment and Protocols for Telematic Services, The + International Telegraph and Telephone Consultative Committee + (CCITT), Geneva, 1985, pages 16 through 31. Each strip must + begin on a byte boundary. (But recall that an image can be a + single strip.) Rows that are not the first row of a strip are + not required to begin on a byte boundary. The data is stored as + bytes, not words - byte-reversal is not allowed. See the + Group3Options field for Group 3 options such as 1D vs 2D coding. + +4 = Facsimile-compatible CCITT Group 4, exactly as specified in + "Facsimile Coding Schemes and Coding Control Functions for Group + 4 Facsimile Apparatus," Recommendation T.6, Volume VII, Fascicle + VII.3, Terminal Equipment and Protocols for Telematic Services, + The International Telegraph and Telephone Consultative Committee + (CCITT), Geneva, 1985, pages 40 through 48. Each strip must + begin on a byte boundary. Rows that are not the first row of a + strip are not required to begin on a byte boundary. The data is + stored as bytes, not words. See the Group4Options field for + Group 4 options. + +5 = LZW Compression, for grayscale, mapped color, and full color images. + See ALGRTHMS.txt + +32773 = PackBits compression, a simple byte oriented run length scheme for + 1-bit images. See Appendix C. + + Data compression only applies to raster image data, as pointed to + by StripOffsets. + +--- GrayResponseCurve +Tag = 291 (123) +Type = word +N = 2**BitsPerSample + +The purpose of the gray response curve and the gray units is to +provide more exact photometric interpretation information for +gray scale image data, in terms of optical density. + +--- GrayResponseUnit +Tag = 290 (122) +Type = word +N = 1 +For historical reasons, the default is 2. However, for greater +accuracy, 3 is recommended. + + 1 = Number represents tenths of a unit. + 2 = Number represents hundredths of a unit. + 3 = Number represents thousandths of a unit. + 4 = Number represents ten-thousandths of a unit. + 5 = Number represents hundred-thousandths of a unit. + +--- ImageLength +Tag = 257 (101) +Type = word or dword +N = 1 +No default. + +The image's length (height) in pixels (Y:vertical). The number of rows +(sometimes described as "scan lines") in the image. + +--- ImageWidth +Tag = 256 (100) +Type = word or dword +N = 1 +No default. + +The image's width, in pixels (X:horizontal). The number of columns in the image. + +--- NewSubfileType +Tag = 254 (FE) +Type = dword +N = 1 +Default is 0. + +A general indication of the kind of data that is contained in +this subfile. This field is made up of a set of 32 flag bits. +Unused bits are expected to be 0. Bit 0 is the low-order bit. + + Currently defined values for the bitmap are: + 0 - Image is reduced of another TIFF image in this file + 1 - Image is a single page of a multi-page + 2 - Image is a transparency mask for another image in this file + +--- PhotometricInterpretation +Tag = 262 (106) +Type = word +N = 1 +No default. + +0 = For bilevel and grayscale images: 0 is imaged as white. + 2**BitsPerSample-1 is imaged as black. If GrayResponseCurve + exists, it overrides the PhotometricInterpretation value. + +1 = For bilevel and grayscale images: 0 is imaged as black. + 2**BitsPerSample-1 is imaged as white. If GrayResponseCurve + exists, it overrides the PhotometricInterpretation value. + +2 = RGB. In the RGB model, a color is described as a combination + of the three primary colors of light (red, green, and blue) in + particular concentrations. For each of the three samples, 0 + represents minimum intensity, and 2**BitsPerSample - 1 represents + maximum intensity. For PlanarConfiguration = 1, the samples are stored in + the indicated order: first Red, then Green, then Blue. For + PlanarConfiguration = 2, the StripOffsets for the sample planes + are stored in the indicated order: first the Red sample plane + StripOffsets, then the Green plane StripOffsets, then the Blue + plane StripOffsets. + +3 = "Palette color." In this mode, a color is described with a + single sample. The sample is used as an index into ColorMap. + The sample is used to index into each of the red, green and blue + curve tables to retrieve an RGB triplet defining an actual color. + When this PhotometricInterpretation value is used, the color + response curves must also be supplied. SamplesPerPixel must be + 1. + +4 = Transparency Mask. This means that the image is used to + define an irregularly shaped region of another image in the same + TIFF file. SamplesPerPixel and BitsPerSample must be 1. + PackBits compression is recommended. The 1-bits define the + interior of the region; the 0-bits define the exterior of the + region. The Transparency Mask must have the same ImageLength and + ImageWidth as the main image. + +PlanarConfiguration +Tag = 284 (11C) +Type = word +N = 1 +Default is 1. + +1 = The sample values for each pixel are stored contiguously, so + that there is a single image plane. See PhotometricInterpretation + to determine the order of the samples within the pixel data. So, for + RGB data, the data is stored RGBRGBRGB...and so on. + +2 = The samples are stored in separate "sample planes." The + values in StripOffsets and StripByteCounts are then arranged as a + 2-dimensional array, with SamplesPerPixel rows and StripsPerImage + columns. (All of the columns for row 0 are stored first, + followed by the columns of row 1, and so on.) + PhotometricInterpretation describes the type of data that is + stored in each sample plane. For example, RGB data is stored + with the Red samples in one sample plane, the Green in another, + and the Blue in another. + + If SamplesPerPixel is 1, PlanarConfiguration is irrelevant, and + should not be included. + +Predictor +Tag = 317 (13D) +Type = word +N = 1 +Default is 1. + +To be used when Compression=5 (LZW). + +1 = No prediction scheme used before coding. +2 = Horizontal differencing. See Appendix I. + +ResolutionUnit +Tag = 296 (128) +Type = word +N = 1 +Default is 2. + +To be used with XResolution and YResolution. + +1 = No absolute unit of measurement. Used for images that may + have a non-square aspect ratio, but no meaningful absolute + dimensions. The drawback of ResolutionUnit=1 is that different + applications will import the image at different sizes. Even if + the decision is quite arbitrary, it might be better to use dots + per inch or dots per centimeter, and pick XResolution and + YResolution such that the aspect ratio is correct and the maximum + dimension of the image is about four inches (the "four" is quite + arbitrary.) +2 = Inch. +3 = Centimeter. + +RowsPerStrip +Tag = 278 (116) +Type = word or dword +N = 1 +Default is 2**32 - 1, which is effectively infinity. That is, +the entire image is one strip. Recomended is a strip size of 8K. + +The number of rows per strip. The image data is organized into +strips for fast access to individual rows when the data is +compressed - though this field is valid even if the data is not +compressed. + +--- SamplesPerPixel +Tag = 277 (115) +Type = word +N = 1 +Default = 1. + +The number of samples per pixel. SamplesPerPixel is 1 for +bilevel, grayscale, and palette color images. SamplesPerPixel is +3 for RGB images. + +--- StripByteCounts +Tag = 279 (117) +Type = word or dword +N = StripsPerImage for PlanarConfiguration equal to 1. + = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2 +No default. + +For each strip, the number of bytes in that strip. The existence +of this field greatly simplifies the chore of buffering +compressed data, if the strip size is reasonable. + +--- StripOffsets +Tag = 273 (111) +Type = word or dword +N = StripsPerImage for PlanarConfiguration equal to 1. + = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2 +No default. + +For each strip, the byte offset of that strip. The offset is +specified with respect to the beginning of the TIFF file. Note +that this implies that each strip has a location independent of +the locations of other strips. This feature may be useful for +editing applications. This field is the only way for a reader to +find the image data, and hence must exist. + +--- XResolution +Tag = 282 (11A) +Type = RATIONAL +N = 1 +No default. + +The number of pixels per ResolutionUnit in the X direction, i.e., +in the ImageWidth direction. + + +--- YResolution +Tag = 283 (11B) +Type = RATIONAL +N = 1 +No default. + +The number of pixels per ResolutionUnit in the Y direction, i.e., +in the ImageLength direction. + +--- Artist +Tag = 315 (13B) +Type = ASCII + +Person who created the image. Copyright notice. + +--- DateTime +Tag = 306 (132) +Type = ASCII +N = 20 + +Date and time of image creation. Uses the format "YYYY:MM:DD HH:MM:SS", with +hours on a 24-hour clock, and one space character between the date and the time. +The length of the string, including the null, is 20 bytes. + +--- HostComputer +Tag = 316 (13C) +Type = ASCII + +"ENIAC", or whatever. + +--- ImageDescription +Tag = 270 (10E) +Type = ASCII + +For example, a user may wish to attach a comment such as "1988 company +picnic" to an image. + +--- Make +Tag = 271 (10F) +Type = ASCII + +Manufacturer of the scanner, video digitizer, or whatever. + +--- Model +Tag = 272 (110) +Type = ASCII + +The model name/number of the scanner, video digitizer, or whatever. +This tag is intended for user information only so format is arbitrary. + +--- Software +Tag = 305 (131) +Type = ASCII + +Name and release number of the software package that created the image. +User information only. + +--- Group3Options +Tag = 292 (124) +Type = dword +N = 1 + +Those options are for fax-images stored in TIFF format. +This field is made up of a set of 32 flag bits. Unused bits are expected +to be 0. It is probably not safe to try to read the file if any bit of this +field is set that you don't know the meaning of. + + Bit map : + 0 - 2-dimensional coding used. + 1 - Image is uncompressed + 2 - Fill bits have been added before EOL codes, so that EOL always ends on a + byte boundary. + +--- Group4Options +Tag = 293 (125) +Type = dword +N = 1 + +This field is made up of a set of 32 flag bits and is used for the images +with fax group 4 compression. Unused bits are expected to be 0. It is +probably not safe to try to read the file if any bit of this field is set +that you don't know the meaning of. Gray scale and color coding schemes are +under study, and will be added when finalized. + +For 2-D coding, each strip is encoded as if it were a separate image. In +particular, each strip begins on a byte boundary; and the coding for the +first row of a strip is encoded independently of the previous row, using +horizontal codes, as if the previous row is entirely white. Each strip ends +with the 24-bit end-of-facsimile block (EOFB). + +Bit map : + 0 - reserved (unused) + 1 - uncompressed mode is used + 2-31 - reserved + +--- DocumentName +Tag = 269 (10D) +Type = ASCII + +The name of the document from which this image was scanned. + +--- PageName +Tag = 285 (11D) +Type = ASCII + +The name of the page from which this image was scanned. + +--- PageNumber +Tag = 297 (129) +Type = word +N = 2 + +This tag is used to specify page numbers of a multiple page (e.g. facsimile) +document. Two word values are specified. The first value is the page number; +the second value is the total number of pages in the document. Note that pages +need not appear in numerical order. The first page is 0 (zero). + +--- XPosition +Tag = 286 (11E) +Type = RATIONAL + +The X offset of the left side of the image, with respect to the left side of the +page, in ResolutionUnits. + +--- YPosition +Tag = 287 (11F) +Type = RATIONAL + +The Y offset of the top of the image, with respect to the top of the page, in +ResolutionUnits. In the TIFF coordinate scheme, the positive Y direction is down, +so that YPosition is always positive. + +--- White Point +Tag = 318 (13E) +Type = RATIONAL +N = 2 +Default is the SMPTE white point, D65: x = 0.313, y = 0.329. + +The white point of the image. Note that this value is described using the 1931 +CIE xyY chromaticity diagram and only the chromaticity is specified. The +luminance component is arbitrary and not specified. This can correspond to the +white point of a monitor that the image was painted on, the filter set/light +source combination of a scanner, or to the white point of the illumination model +of a rendering package. The ordering is x, y. + + +--- PrimaryChromaticities +Tag = 319 (13F) +Type = RATIONAL +N = 6 +Default is the SMPTE primary color chromaticities: + + Red: x = 0.635 y = 0.340 + Green: x = 0.305 y = 0.595 + Blue: x = 0.155 y = 0.070 + +The primary color chromaticities. Note that these values are described using +the 1931 CIE xyY chromaticity diagram and only the chromaticities are +specified.For paint images, these represent the chromaticities of the monitor +and for scanned images they are derived from the filter set/light source +combination of a scanner. +The ordering is red x, red y, green x, green y, blue x, blue y. + +--- SubfileType +Tag = 255 (FF) +Type = word +N = 1 + +A general indication of the kind of data that is contained in this subfile. +Currently defined values are: + +1 = full resolution image data - ImageWidth, ImageLength, and StripOffsets are + required fields +2 = reduced resolution image data - ImageWidth, ImageLength, and StripOffsets are + required fields. It is further assumed that a reduced resolution image is a + reduced version of the entire extent of the corresponding full resolution + data. +3 = single page of a multi-page image (see the PageNumber tag description). + +Continued use of this field is not recommended. Writers should instead use the +new and more general NewSubfileType field. + +--- Orientation +Tag = 274 (112) +Type = word +N = 1 +Default is 1. + +1 = The 0th row represents the visual top of the image, and the 0th column + represents the visual left hand side. +2 = The 0th row represents the visual top of the image, and the 0th column + represents the visual right hand side. +3 = The 0th row represents the visual bottom of the image, and the 0th column + represents the visual right hand side. +4 = The 0th row represents the visual bottom of the image, and the 0th column + represents the visual left hand side. +5 = The 0th row represents the visual left hand side of the image, and the 0th + column represents the visual top. +6 = The 0th row represents the visual right hand side of the image, and the 0th + column represents the visual top. +7 = The 0th row represents the visual right hand side of the image, and the 0th + column represents the visual bottom. +8 = The 0th row represents the visual left hand side of the image, and the 0th + column represents the visual bottom. + +It is extremely costly for most readers to perform image rotation "on the fly", + i.e., when importing and printing; and users of most desktop publishing +applications do not expect a file imported by the application to be altered +permanently in any way. + +Threshholding +Tag = 263 (107) +Type = word +N = 1 + +1 = a bilevel "line art" scan. BitsPerSample must be 1. +2 = a "dithered" scan, usually of continuous tone data such as photographs. + BitsPerSample must be 1. +3 = Error Diffused. + +ColorImageType +Tag = 318 (13E) +Type = word +N = 1 +Default is 1. + +Gives TIFF color image readers a better idea of what kind of color image it is. There will be borderline cases. + +1 = Continuous tone, natural image. +2 = Synthetic image, using a greatly restricted range of colors. + Such images are produced by most color paint programs. See ColorList for + a list of colors used in this image. + +ColorList +Tag = 319 (13F) +Type = BYTE or word +N = the number of colors that are used in this image, times SamplesPerPixel + +A list of colors that are used in this image. Use of this field is only +practical for images containing a greatly restricted (usually less than or equal +to 256) range of colors. ColorImageType should be 2. See ColorImageType. + +The list is organized as an array of RGB triplets, with no pad. The RGB triplets +are not guaranteed to be in any particular order. Note that the red, green, and +blue components can either be a BYTE or a word in length. BYTE should be +sufficient for most applications. + +EXTENSION:TIF,TIFF +OCCURENCES:PC,MAC,UNIX +PROGRAMS:Aldus Pagemaker, Paintbrush +REFERENCE: +SEE ALSO: +VALIDATION: +--------I-TARGA----------------------------- +The Targa-File format is an image file format used by a wide variety of both +scanners and imaging software, and exists in many incarnations. The information +has been taken from Appendix C of the Truevision Technical Guide.Requests for +further information could be directed to: + + AT&T + Electronic Photography and Imaging Center + 2002 Wellesley Ave. + Indianapolis, IN 42619 + +The lack of completeness is due to the fact that the Targa recognizes +over half a dozen image file formats, some of which are more widely +used than others. + + +OFFSET Count TYPE Description +0000h 1 byte Length of image identification field (below) +0001h 1 byte Color map type : + 0 - no color map + 1 - 256 entry palette +0002h 1 byte Image type : + 0 - no image data included + 1 - Uncompressed, color-mapped image + 2 - Uncompressed, RGB image + 3 - Uncompressed, black and white image + 9 - RLE encoded color-mapped image + 10 - RLE encoded RGB image + 11 - Compressed, black and white image + 32 - Compressed color-mapped data, using + Huffman, Delta, and runlength encoding. + 33 - Compressed color-mapped data, using + Huffman, Delta, and RLE. 4-pass quadtree- + type process. +0003h 1 word Index of first color map entry +0005h 1 word Count of color map entries +0007h 1 byte Number of bits per color map entry +0008h 1 word X coordinate of the lower left corner of + the image. +000Ah 1 word Y coordinate of the lower left corner of + the image. +000Ch 1 word Width of the image in pixels +000Eh 1 word Height of the image in pixels +0010h 1 byte Bytes per pixel +0011h 1 byte Flags (bitmapped): + 0-3 : Number of attribute bits + 4 : reserved + 5 : Screen origin in upper left corner + 6-7 : Data storage interleave + 00 - no interleave + 01 - even/odd interleave + 10 - four way interleave + 11 - reserved + The byte should be set to 0. Don't know why. +0012h ? char Image identification string, usually not there, + when the length (see up) is 0. +????h ? byte Color map data + Depending on the number of bits per color map + entry, the entries here have a different size. + 4 bytes : 1 byte for blue + 1 byte for green + 1 byte for red + 1 byte for attribute + 3 bytes : 1 byte for blue + 1 byte for green + 1 byte for red + 2 bytes : Bitmapped as a word in Intel byte + order as follows : + ARRRRRGG GGGBBBBB +????h ? byte Image data + For images of type 9 (using RLE), the image + data is divided into packets, the first byte + being the indicator for repetition or copy. + If bit 7 of the first byte is set, then repeat + (first byte and 07Fh+1) times the next byte, + otherwise copy first byte+1 pixels from data + stream. RLE packets may cross scan lines ! +EXTENSION:TGA +OCCURENCES:PC +SEE ALSO: +--------S-TXW------------------------------- +The TXW files are disk images used by the Yamaha TX-16W. +Further information wanted. +EXTENSION:TXW +--------S-UWF-G----------------------------- +The UWF files are sample files used by the UltraTracker. +Further information wanted. +OFFSET Count TYPE Description +0000h 32 char ASCIIZ sample name +0020h 1 char ID=1Ah +0021h 1 char ID=10h +0022h 5 char ID='MUWFB' +0027h 1 char ID=0 +0028h 6 char Length of sample as ASCII long integer +002Eh 1 word Length of sample +????? +EXTENSION:UWF +SEE ALSO:ULT +--------M-ULT------------------------------- +The ULT files are modules used by the UltraTracker. UltraTracker is a +module editor for the Gravis UltraSound soundcard. The version of the +file format used now is 6. + +OFFSET Count TYPE Description +0000h 11 char ID="MAS_UTrack_V" +000Ch 4 char Version number in 4-digit ASCII : + 1 - ULT version 1.0 + 2 - ULT version 2.0 + 3 - ULT version 2.1 + 4 - ULT version 2.2 +000Fh 32 char Song title +002Fh 1 byte Number of song text lines + ="NTL" +0030h "NTL"*32 char Song text +0030h+"NTL"*32 1 byte Number of samples + ="NOS" +0031h+"NTL"*32 "NOS" rec Sample structure + 32 byte Sample name + 12 byte DOS file name of sample + 1 dword Sample loop start + 1 dword Sample loop end + 1 dword Size start + 1 dword Size end + 1 byte Sample volume (linear) + 1 byte Bidirectional loop + 0 - No looping, forward playback, 8bit sample + 4 - No Looping, forward playback, 16bit sample + 8 - Loop Sample, forward playback, 8bit sample + 12 - Loop Sample, forward playback, 16bit sample + 24 - Loop Sample, reverse playback 8bit sample + 28 - Loop Sample, reverse playback, 16bit sample + 1 word Fine tune setting + 1 word C2-Frequency +0031h+"NTL"*32 + +"NOS"*64 256 byte Pattern orders +0131h+"NTL"*32 + +"NOS"*64 1 byte ="NOT" + Number of tracks -1 +0132h+"NTL"*32 + +"NOS"*64 1 byte ="NOT" + Number of patterns -1 +0133h+"NTL"*32 + +"NOS"*64 "NOT" byte Pan-position table (0-left, F-right) + +After the header there comes the event data. + +EXTENSION:ULT +SEE ALSO:UWF +--------S-WAVE------------------------------ +The Windows .WAV files are RIFF format files. Some programs expect the fmt block +right behind the RIFF header itself, so your programs should write out this +block as the first block in the RIFF file. + +The subblocks for the wave files are +RiffBLOCK [data] +This block contains the raw sample data. The necessary information +for playback is contained in the [fmt ] block. + +RiffBLOCK [fmt ] +This block contains the data necessary for playback of the sound +files. Note the blank after fmt ! +OFFSET Count TYPE Description +0000h 1 word Format tag + 1 = PCM (raw sample data) + 2 etc. for APCDM, a-Law, u-Law ... +0002h 1 word Channels (1=mono,2=stereo,...) +0004h 1 dword Sampling rate +0008h 1 dword Average bytes per second (=sampling rate*channels) +000Ch 1 word Block alignment / reserved ?? +000Eh 1 word Bits per sample (8/12/16-bit samples) + +RiffBLOCK [loop] +This block is for looped samples. Very few programs support this block, +but if your program changes the wave file, it should preserve any unknown +blocks. +OFFSET Count TYPE Description +0000h 1 dword Start of sample loop +0004h 1 dword End of sample loop + +EXTENSION:WAV +SEE ALSO:RIFF,VOC +OCCURENCES:PC +PROGRAMS:Windows,GUSWAV,WAV2VOC +VALIDATION:NONE +--------E-Windows PIF----------------------- +Windows also uses the PIF files for better performance under the DOS box. +The Windows extension of the original PIF format starts at offset 0171h. +OFFSET Count TYPE Description +********* not yet implemented ;-) +EXTENSION: +OCCURENCES: +PROGRAMS: +REFERENCE:DDJ #202 +SEE ALSO:PIF, WINDOWS NT PIF +VALIDATION: +--------W-WKS------------------------------- +The WKS files are worksheets/spreadsheets used by the Lotus 1-2-3 and Lotus +Symphony packages. More information has yet to be found since this information +origins from a magic file. +OFFSET Count TYPE Description +0000h 5 byte ID=0,0,2,0,4 +0005h 1 byte WKS type : + 4 - Lotus 1-2-3 v1.A WKS + 5 - Symphony 1.0 WKS + other - ?WK1 file? (Lotus 2.01+, Symphony 1.1+) +EXTENSION:WKS +OCCURENCES:PC +PROGRAMS:Lotus 1-2-3,Lotus Symphony +SEE ALSO:WKS +--------T-WORD-G---------------------------- +The Microsoft Word programs store their documents in files. The info comes +from a magic file and my own (not working) sources, so it is very unreliable +except for identification. +OFFSET Count TYPE Description +0000h 1 dword ID=31BE00 +0002h 1 byte Document type : + 0 - MS Word text + 1 - MS Text building block + 2 - Printer description file(maybe wrong topic) +0003h 1 byte ID=00 +0004h 1 word ID=AB00h + ToolID, different for the different versions ? +0006h 6 word reserved(0) +0008h 1 dword Textbytes??? Whatever +000Ch 1 word Paragraph information +000Eh 1 word Foot note table +0010h 1 word Section property +0012h 1 word Section table +0014h 1 word Page table +0016h 64 char Style sheet path +0056h 1 word Windows Write page count + Can be used to identify Windows Write files, + because it is 0 for MS Word and nonzero for + Windows Write documents. +0058h 8 char Printer name + Used under MS Word / WinWord only +0060h 1 word MS Word page count +0062h 8 byte Document properties +006Ah 1 byte Word version this file was made by +006Bh 1 bool Autosave flag +006Ch 1 word Word 5 page table +006Eh 1 word Mac bkmk (whatever) +0070h 1 word ?Offset of file name for autosave? +0072h 1 word Running head table +0074h 1 word Code page used making this document + +EXTENSION:DOC +OCCURENCES:PC +PROGRAMS:MS Word,Windows Write, WinWord +SEE ALSO: +VALIDATION: +--------T-WORDPERFERCT FILES---------------- +The WordPerfect files all have a common header - even tough I don't know +anything else about them. +OFFSET Count TYPE Description +0000h 4 char ID=255,"WPC" +0004h 4 byte unknown +0008h 1 byte ID=1 +0009h 1 byte Filetype (see table 0003) + +(Table 0003) +File types of WordPerfect files + 01h - macro file + 02h - WordPerfect help file + 03h - keyboard definition file + 0Ah - document file + 0Bh - dictionary file + 0Ch - thesaurus file + 0Dh - block + 0Eh - rectangular block + 0Fh - column block + 10h - printer resource file (PRS) + 11h - setup file + 12h - prefix information file + 13h - printer resource file (ALL) + 14h - display resource file (DRS) + 15h - overlay file (WP.FIL) + 16h - graphics file (WPG) + 17h - hyphenation code module + 18h - hyphenation data module + 19h - macro resource file (MRS) + 1Ah - graphics driver (WPD) + 1Bh - hyphenation lex module +EXTENSION:various +OCCURENCES:PC +--------W-WQ1------------------------------- +Similar to the WKS spreadsheet files, the Quattro Pro spreadsheet files exist, +and their header is somewhat similar. Info again from a magic file which +makes only identification possible. +OFFSET Count TYPE Description +0000h 1 dword ID=00000200h +0004h 1 char ID='Q' +EXTENSION:WQ1 +OCCURENCES:PC +PROGRAMS:Borland Quattro Pro +REFERENCE: +SEE ALSO:WKS +VALIDATION: +--------M-XM-------------------------------- +The .XM files (Extended Module) are multichannel MOD files created by Triton's +FastTracker ][. They feature up to 32 channels and different effects. FT 2 is +a shareware program. After the initial .XM header follows the pattern data, +after the patterns follow the instruments. + +OFFSET Count TYPE Description +0000h 17 char ID="Extended module: " +0011h 20 char Module name, padded with zeroes +0025h 1 char ID=01Ah +0026h 20 char Tracker name +003Ah 1 word Tracker revision number, hi-byte is major version +003Ch 1 dword Header size +0040h 1 word Song length in patterns +0042h 1 word Restart position +0044h 1 word Number of channels +0046h 1 word Number of patterns (< 256) + ="PAT" +0048h 1 word Number of instruments (<128) +004Ah 1 word Flags : + 0 - Linear frequency table / Amiga freq. table +004Ch 1 word Default tempo +004Eh 1 word Default BPM +0050h 256 byte Pattern order table + +--- Pattern header +The patterns are stored as ordinary MOD patterns, except that each note is +stored as 5 bytes: + + ? 1 (byte) Note (0-71, 0 = C-0) + +1 1 (byte) Instrument (0-128) + +2 1 (byte) Volume column byte (see below) + +3 1 (byte) Effect type + +4 1 (byte) Effect parameter + +A simle packing scheme is also adopted, so that the patterns do not become TOO +large: Since the MSB in the note value is never used, it is used for the +compression.If the bit is set, then the other bits are interpreted as follows: + + bit 0 set: Note byte ollows + 1 set: Instrument byte follows + 2 set: Volume column byte follows + 3 set: Effect byte follows + 4 set: Effect data byte follows + +OFFSET Count TYPE Description +0000h 1 dword Length of pattern block/header ?? +0004h 1 byte Pattern pack type +0005h 1 word Number of rows in pattern (1..256) +0007h 1 word Size of pattern data + ="PSZ" + "PSZ" byte Pattern data + +--- Instrument header +Each instrument has one or more sample headers following it. +OFFSET Count TYPE Description +0000h 1 dword Instrument block/header size +0004h 22 char ASCII Instrument name, 0 padded ? +001Ah 1 byte Instrument type (always 0) +001Bh 1 word Number of samples in instrument +001Dh 1 dword Sample header size +0021h 96 byte Sample numbers for all notes +0081h 48 byte Points of volume envelope +00C1h 48 byte Points of panning envelope +0101h 1 byte Number of volume points +0102h 1 byte Number of panning points +0103h 1 byte Volume sustain point +0104h 1 byte Volume loop start point +0105h 1 byte Volume loop end point +0106h 1 byte Panning sustain point +0107h 1 byte Panning loop start point +0108h 1 byte Panning loop end point +0109h 1 byte Volume type, bitmapped + 0 - Volume on + 1 - Sustain on + 2 - Loop on +010Ah 1 byte Panning type, bitmapped + 0 - Panning on + 1 - Sustain on + 2 - Loop on +010Bh 1 byte Vibrato type +010Ch 1 byte Vibrato sweep +010Dh 1 byte Vibrato depth +010Eh 1 byte Vibrato rate +010Fh 1 word Volume fadeout +0111h 1 word Reserved + +--- Sample headers +OFFSET Count TYPE Description +0000h 1 dword Sample length + ="LEN" +0004h 1 dword Sample loop start +0008h 1 dword Sample loop length +000Ch 1 byte Volume +000Dh 1 byte Finetune for sample (-128..+127) + +-127 is one half tone +000Eh 1 byte Sample type, bitmapped + 0,1 : Loop type : + 0 - no loop + 1 - forward loop + 2 - ping-pong loop + 3 - reserved + 4?: sample is 16-bit +000Fh 1 byte Sample pan +0010h 1 byte Relative note number (signed byte) + (-96..+95), 0 -> C-4 sounds as C-4 +0011h 1 byte Reserved +0012h 22 char ASCII name of sample, 0 padded +0013h "LEN" byte Sample data. The sample data is stored + as delta compressed data like the ProTracker. + +EXTENSION:XM,MOD +OCCURENCES: +PROGRAMS: +REFERENCE: +SEE ALSO:MOD,S3M +VALIDATION: +--------A-ZIP------------------------------- +The ZIP archives are created by the PkZIP/PkUnZIP combo produced +by the PkWare company. The PkZIP programs have with LHArc and ARJ +the best compression. +The directory information is stored at the end of the archive, each local +file in the archive begins with the following header; This header can be used +to identify a ZIP file as such : +OFFSET Count TYPE Description +0000h 4 char ID='PK',03,04 +0004h 1 word Version needed to extract archive +0006h 1 word General purpose bit field (bit mapped) + 0 - file is encrypted + 1 - 8K/4K sliding dictionary used + 2 - 3/2 Shannon-Fano trees were used + 3-4 - unused + 5-15 - used internally by ZIP + Note: Bits 1 and 2 are undefined if the + compression method is other than + type 6 (Imploding). +0008h 1 word Compression method (see table 0010) +000Ah 1 dword Original DOS file date/time (see table 0009) +000Eh 1 dword 32-bit CRC of file (inverse??) +0012h 1 dword Compressed file size +0016h 1 dword Uncompressed file size +001Ah 1 word Length of filename + ="LEN" +001Ch 1 word Length of extra field + ="XLN" +001Eh "LEN" char path/filename +001Eh "XLN" char extra field ++"LEN" +After all the files, there comes the central directory structure. +(Table 0010) +PkZip compression types +0 - Stored / No compression +1 - Shrunk / LZW, 8K buffer, 9-13 bits with partial clearing +2 - Reduced-1 / Probalistic compression, lower 7 bits +3 - Reduced-2 / Probalistic compression, lower 6 bits +4 - Reduced-3 / Probalistic compression, lower 5 bits +5 - Reduced-4 / Probalistic compression, lower 4 bits +6 - Imploded / 2/3 Shanno-Fano trees, 4K/8K sliding dictionary + +--- Central directory structure +The CDS is at the end of the archive and contains additional information +about the files stored within the archive. +OFFSET Count TYPE Description +0000h 4 char ID='PK',01,02 +0004h 1 byte Version made by +0005h 1 byte Host OS (see table 0011) +0006h 1 byte Minimum version needed to extract +0007h 1 byte Target OS + see above "Host OS" +0008h 1 word General purpose bit flag + see above "General purpose bit flag" +000Ah 1 word Compression method + see above "Compression method" +000Ch 1 dword DOS date / time of file +0010h 1 dword 32-bit CRC of file (see table 0009) +0014h 1 dword Compressed size of file +0018h 1 dword Uncompressed size of file +001Ch 1 word Length of filename + ="LEN" +001Eh 1 word Length of extra field + ="XLN" +0020h 1 word Length of file comment + ="CMT" +0022h 1 word Disk number ?? +0024h 1 word Internal file attributes (bit mapped) + 0 - file is apparently an ASCII/binary file + 1-15 - unused +0026h 1 dword External file attributes (OS dependent) +002Ah 1 dword Relative offset of local header from the + start of the first disk this file appears on +002Eh "LEN" char Filename / path; should not contain a drive + or device letter, all slashes should be forward + slashes '/'. +002Eh+ "XLN" char Extra field ++"LEN" +002Eh "CMT" char File comment ++"LEN" ++"XLN" + +(Table 0011) +PkZip Host OS table +0 - MS-DOS and OS/2 (FAT) +1 - Amiga +2 - VMS +3 - *nix +4 - VM/CMS +5 - Atari ST +6 - OS/2 1.2 extended file sys +7 - Macintosh +8-255 - unused + +--- End of central directory structure +The End of Central Directory Structure header has following format : +OFFSET Count TYPE Description +0000h 4 char ID='PK',05,06 +0004h 1 word Number of this disk +0006h 1 word Number of disk with start of central directory +0008h 1 word Total number of file/path entries on this disk +000Ah 1 word Total number of entries in central dir +000Ch 1 dword Size of central directory +0010h 1 dword Offset of start of central directory relative + to starting disk number +0014h 1 word Archive comment length + ="CML" +0016h "CML" char Zip file comment + +EXTENSION:ZIP +OCCURENCES:PC,Amiga,ST +PROGRAMS:PkZIP,WinZIP +REFERENCE:Technote.APP +--------A-ZOO------------------------------- +The ZOO archive program by Raoul Dhesi is a file compression program now +superceeded in both compression and speed by most other compression programs. +The archive header looks like this : +OFFSET Count TYPE Description +0000h 20 char Archive header text, ^Z terminated, null padded +0014h 1 dword ID=0FDC4A7DCh +0018h 1 dword Offset of first file in archive +001Ch 1 dword Offset of ???? +0020h 1 byte Version archive was made by +0021h 1 byte Minimum version needed to extract + +Each stored file has its own header, which looks like this : +OFFSET Count TYPE Description +0000h 1 dword ID=0FDC4A7DCh +0004h 1 byte Type of directory entry +0005h 1 byte Compression method : + 0 - stored + 1 - Crunched : LZW, 4K buffer, + var len (9-13 bits) +0006h 1 dword Offset of next directory entry +000Ah 1 dword Offset of next header +000Dh 1 word Original date / time of file (see table 0009) +0012h 1 word CRC-16 of file +0014h 1 dword Uncompressed size of file +0018h 1 dword Compressed size of file +001Ch 1 byte Version this file was compressed by +001Dh 1 byte Minimum version needed to extract +001Eh 1 byte Deleted flag + 0 - file in archive + 1 - file is considered deleted +001Fh 1 dword Offset of comment field, 0 if none +0023h 1 word Length of comment field +0025h ? char ASCIIZ path / filename + +EXTENSION:ZOO +OCCURENCES:PC +PROGRAMS:ZOO.EXE +REFERENCE: +VALIDATION: +--------S-ZyXEL----------------------------- +The ZyXEL Modems are capable of digitizing speech, the ZFAX software and +answering machine software like VoiceConnect store the sampled data in those +files. The Modems are capable of compressing the data down to 19.2k CPS (ADPCM) +and 9.6k CPS (CELP), the algorithms for the compression may be found in the +ZyxelVoc package by N. Igl, but as the firmware on the modems changes, so might +the compression algorithm. Playback on the modem is always possible. + +OFFSET Count TYPE Description +0000h 5 char ID='ZyXEL' +0005h 1 byte 02h, ??? format tag +0006h 4 byte reserved +000Ah 1 word Compression scheme + 0 - CELP + 1 - 2 bit ADPCM + 2 - 3 bit ADPCM +000Ch 4 byte reserved +0010h ? ???? Raw Data + The voice data is just + the data received from U1496 + Modem/Fax. +EXTENSION:ZVD,ZYX +OCCURENCES:PC +PROGRAMS:Voice Connect,ZFAX +REFERENCE:ZYXELVOC.* +VALIDATION:NONE +--------!-ALGORITHMS------------------------ +Some algorithms used for encoding images etc... +--- TIFF PackBits algorithm + + Abstract + + This document describes a simple compression scheme for bilevel + scanned and paint type files. + + + Motivation + + The TIFF specification defines a number of compression schemes. + Compression type 1 is really no compression, other than basic + pixel packing. Compression type 2, based on CCITT 1D + compression, is powerful, but not trivial to implement. + Compression type 5 is typically very effective for most bilevel + images, as well as many deeper images such as palette color and + grayscale images, but is also not trivial to implement. PackBits + is a simple but often effective alternative. + + + Description + + Several good schemes were already in use in various settings. We + somewhat arbitrarily picked the Macintosh PackBits scheme. It is + byte oriented, so there is no problem with word alignment. And + it has a good worst case behavior (at most 1 extra byte for every + 128 input bytes). For Macintosh users, there are toolbox + utilities PackBits and UnPackBits that will do the work for you, + but it is easy to implement your own routines. + + A pseudo code fragment to unpack might look like this: + + Loop until you get the number of unpacked bytes you are + expecting: + Read the next source byte into n. + If n is between 0 and 127 inclusive, copy the next n+1 bytes + literally. + Else if n is between -127 and -1 inclusive, copy the next + byte -n+1 times. + Else if n is 128, noop. + Endloop + + In the inverse routine, it's best to encode a 2-byte repeat run + as a replicate run except when preceded and followed by a literal + run, in which case it's best to merge the three into one literal + run. Always encode 3-byte repeats as replicate runs. + + So that's the algorithm. Here are some other rules: + + o Each row must be packed separately. Do not compress across + row boundaries. + + o The number of uncompressed bytes per row is defined to be + (ImageWidth + 7) / 8. If the uncompressed bitmap is required to + have an even number of bytes per row, decompress into word- + aligned buffers. + o If a run is larger than 128 bytes, simply encode the + remainder of the run as one or more additional replicate runs. + + When PackBits data is uncompressed, the result should be + interpreted as per compression type 1 (no compression). + +--- TIFF LZW Compression + + Abstract + + This document describes an adaptive compression scheme for raster + images. + + Reference + + Terry A. Welch, "A Technique for High Performance Data + Compression", IEEE Computer, vol. 17 no. 6 (June 1984). + Describes the basic Lempel-Ziv & Welch (LZW) algorithm. The + author's goal in the article is to describe a hardware-based + compressor that could be built into a disk controller or database + engine, and used on all types of data. There is no specific + discussion of raster images. We intend to give sufficient + information in this Appendix so that the article is not required + reading. + + Requirements + + A compression scheme with the following characteristics should + work well in a desktop publishing environment: + + o Must work well for images of any bit depth, including images + deeper than 8 bits per sample. + o Must be effective: an average compression ratio of at least + 2:1 or better. And it must have a reasonable worst-case + behavior, in case something really strange is thrown at it. + o Should not depend on small variations between pixels. + Palette color images tend to contain abrupt changes in index + values, due to common patterning and dithering techniques. These + abrupt changes do tend to be repetitive, however, and the scheme + should make use of this fact. + o For images generated by paint programs, the scheme should + not depend on a particular pattern width. 8x8 pixel patterns are + common now, but we should not assume that this situation will not + change. + o Must be fast. It should not take more than 5 seconds to + decompress a 100K byte grayscale image on a 68020- or 386-based + computer. Compression can be slower, but probably not by more + than a factor of 2 or 3. + o The level of implementation complexity must be reasonable. + We would like something that can be implemented in no more than a + couple of weeks by a competent software engineer with some + experience in image processing. The compiled code for + compression and decompression combined should be no more than + about 10K. + o Does not require floating point software or hardware. + + + The following sections describe an algorithm based on the "LZW" + (Lempel-Ziv & Welch) technique that meets the above requirements. + In addition meeting our requirements, LZW has the following + characteristics: + + o LZW is fully reversible. All information is preserved. But + if noise or information is removed from an image, perhaps by + smoothing or zeroing some low-order bitplanes, LZW compresses + images to a smaller size. Thus, 5-bit, 6-bit, or 7-bit data + masquerading as 8-bit data compresses better than true 8-bit + data. Smooth images also compress better than noisy images, and + simple images compress better than complex images. + o On a 68082- or 386-based computer, LZW software can be + written to compress at between 30K and 80K bytes per second, + depending on image characteristics. LZW decompression speeds are + typically about 50K bytes per second. + o LZW works well on bilevel images, too. It always beats + PackBits, and generally ties CCITT 1D (Modified Huffman) + compression, on our test images. Tying CCITT 1D is impressive in + that LZW seems to be considerably faster than CCITT 1D, at least + in our implementation. + o Our implementation is written in C, and compiles to about 2K + bytes of object code each for the compressor and decompressor. + o One of the nice things about LZW is that it is used quite + widely in other applications such as archival programs, and is + therefore more of a known quantity. + + + The Algorithm + + Each strip is compressed independently. We strongly recommend + that RowsPerStrip be chosen such that each strip contains about + 8K bytes before compression. We want to keep the strips small + enough so that the compressed and uncompressed versions of the + strip can be kept entirely in memory even on small machines, but + large enough to maintain nearly optimal compression ratios. + + The LZW algorithm is based on a translation table, or string + table, that maps strings of input characters into codes. The + TIFF implementation uses variable-length codes, with a maximum + code length of 12 bits. This string table is different for every + strip, and, remarkably, does not need to be kept around for the + decompressor. The trick is to make the decompressor + automatically build the same table as is built when compressing + the data. We use a C-like pseudocode to describe the coding + scheme: + + InitializeStringTable(); + WriteCode(ClearCode); + Omega = the empty string; + for each character in the strip { + K = GetNextCharacter(); + if Omega+K is in the string table { + Omega = Omega+K; /* string concatenation */ + } else { + WriteCode (CodeFromString(Omega)); + AddTableEntry(Omega+K); + Omega = K; + } + } /* end of for loop */ + WriteCode (CodeFromString(Omega)); + WriteCode (EndOfInformation); + + That's it. The scheme is simple, although it is fairly + challenging to implement efficiently. But we need a few + explanations before we go on to decompression. + + The "characters" that make up the LZW strings are bytes + containing TIFF uncompressed (Compression=1) image data, in our + implementation. For example, if BitsPerSample is 4, each 8-bit + LZW character will contain two 4-bit pixels. If BitsPerSample is + 16, each 16-bit pixel will span two 8-bit LZW characters. + + (It is also possible to implement a version of LZW where the LZW + character depth equals BitsPerSample, as was described by Draft 2 + of Revision 5.0. But there is a major problem with this + approach. If BitsPerSample is greater than 11, we can not use + 12-bit-maximum codes, so that the resulting LZW table is + unacceptably large. Fortunately, due to the adaptive nature of + LZW, we do not pay a significant compression ratio penalty for + combining several pixels into one byte before compressing. For + example, our 4-bit sample images compressed about 3 percent + worse, and our 1-bit images compressed about 5 percent better. + And it is easier to write an LZW compressor that always uses the + same character depth than it is to write one which can handle + varying depths.) + + We can now describe some of the routine and variable references + in our pseudocode: + + InitializeStringTable() initializes the string table to contain + all possible single-character strings. There are 256 of them, + numbered 0 through 255, since our characters are bytes. + + WriteCode() writes a code to the output stream. The first code + written is a Clear code, which is defined to be code #256. + + Omega is our "prefix string." + + GetNextCharacter() retrieves the next character value from the + input stream. This will be number between 0 and 255, since our + characters are bytes. + + The "+" signs indicate string concatenation. + + AddTableEntry() adds a table entry. (InitializeStringTable() has + already put 256 entries in our table. Each entry consists of a + single-character string, and its associated code value, which is, + in our application, identical to the character itself. That is, + the 0th entry in our table consists of the string <0>, with + corresponding code value of <0>, the 1st entry in the table + consists of the string <1>, with corresponding code value of <1>, + ..., and the 255th entry in our table consists of the string + <255>, with corresponding code value of <255>.) So the first + entry that we add to our string table will be at position 256, + right? Well, not quite, since we will reserve code #256 for a + special "Clear" code, and code #257 for a special + "EndOfInformation" code that we will write out at the end of the + strip. So the first multiple-character entry added to the string + table will be at position 258. + + Let's try an example. Suppose we have input data that looks + like: + + Pixel 0: <7> + Pixel 1: <7> + Pixel 2: <7> + Pixel 3: <8> + Pixel 4: <8> + Pixel 5: <7> + Pixel 6: <7> + Pixel 7: <6> + Pixel 8: <6> + + First, we read Pixel 0 into K. OmegaK is then simply <7>, since Omega is + the empty string at this point. Is the string <7> already in the + string table? Of course, since all single character strings were + put in the table by InitializeStringTable(). So set Omega equal to + <7>, and go to the top of the loop. + + Read Pixel 1 into K. Does OmegaK (<7><7>) exist in the string table? + No, so we get to do some real work. We write the code associated + with Omega to output (write <7> to output), and add OmegaK (<7><7>) to + the table as entry 258. Store K (<7>) into Omega. Note that + although we have added the string consisting of Pixel 0 and Pixel + 1 to the table, we "re-use" Pixel 1 as the beginning of the next + string. + + Back at the top of the loop. We read Pixel 2 into K. Does OmegaK + (<7><7>) exist in the string table? Yes, the entry we just + added, entry 258, contains exactly <7><7>. So we just add K onto + the end of Omega, so that Omega is now <7><7>. + + Back at the top of the loop. We read Pixel 3 into K. Does OmegaK + (<7><7><8>) exist in the string table? No, so write the code + associated with Omega (<258>) to output, and add OmegaK to the table as + entry 259. Store K (<8>) into Omega. + + Back at the top of the loop. We read Pixel 4 into K. Does OmegaK + (<8><8>) exist in the string table? No, so write the code + associated with Omega (<8>) to output, and add OmegaK to the table as + entry 260. Store K (<8>) into Omega. + + Continuing, we get the following results: + + After reading: We write to output: And add table entry: + Pixel 0 + Pixel 1 <7> 258: <7><7> + Pixel 2 + Pixel 3 <258> 259: <7><7><8> + Pixel 4 <8> 260: <8><8> + Pixel 5 <8> 261: <8><7> + Pixel 6 + Pixel 7 <258> 262: <7><7><6> + Pixel 8 <6> 263: <6><6> + + WriteCode() also requires some explanation. The output code + stream, <7><258><8><8><258><6>... in our example, should be + written using as few bits as possible. When we are just starting + out, we can use 9-bit codes, since our new string table entries + are greater than 255 but less than 512. But when we add table + entry 512, we must switch to 10-bit codes. Likewise, we switch + to 11-bit codes at 1024, and 12-bit codes at 2048. We will + somewhat arbitrarily limit ourselves to 12-bit codes, so that our + table can have at most 4096 entries. If we push it any farther, + tables tend to get too large. + + What happens if we run out of room in our string table? This is + where the afore-mentioned Clear code comes in. As soon as we use + entry 4094, we write out a (12-bit) Clear code. (If we wait any + dworder to write the Clear code, the decompressor might try to + interpret the Clear code as a 13-bit code.) At this point, the + compressor re-initializes the string table and starts writing out + 9-bit codes again. + + Note that whenever you write a code and add a table entry, Omega is + not left empty. It contains exactly one character. Be careful + not to lose it when you write an end-of-table Clear code. You + can either write it out as a 12-bit code before writing the Clear + code, in which case you will want to do it right after adding + table entry 4093, or after the clear code as a 9-bit code. + Decompression gives the same result in either case. + + To make things a little simpler for the decompressor, we will + require that each strip begins with a Clear code, and ends with + an EndOfInformation code. + + Every LZW-compressed strip must begin on a byte boundary. It + need not begin on a word boundary. LZW compression codes are + stored into bytes in high-to-low-order fashion, i.e., FillOrder + is assumed to be 1. The compressed codes are written as bytes, + not words, so that the compressed data will be identical + regardless of whether it is an "II" or "MM" file. + + Note that the LZW string table is a continuously updated history + of the strings that have been encountered in the data. It thus + reflects the characteristics of the data, providing a high degree + of adaptability. + + + LZW Decoding + + The procedure for decompression is a little more complicated, but + still not too bad: + + while ((Code = GetNextCode()) != EoiCode) { + if (Code == ClearCode) { + InitializeTable(); + Code = GetNextCode(); + if (Code == EoiCode) + break; + WriteString(StringFromCode(Code)); + OldCode = Code; + } /* end of ClearCode case */ + + else { + if (IsInTable(Code)) { + WriteString(StringFromCode(Code)); + AddStringToTable(StringFromCode(OldCode)+ + FirstChar(StringFromCode(Code))); + OldCode = Code; + } else { + OutString = StringFromCode(OldCode) + + FirstChar(StringFromCode(OldCode)); + WriteString(OutString); + AddStringToTable(OutString); + OldCode = Code; + } + } /* end of not-ClearCode case */ + } /* end of while loop */ + + The function GetNextCode() retrieves the next code from the LZW- + coded data. It must keep track of bit boundaries. It knows that + the first code that it gets will be a 9-bit code. We add a table + entry each time we get a code, so GetNextCode() must switch over + to 10-bit codes as soon as string #511 is stored into the table. + + The function StringFromCode() gets the string associated with a + particular code from the string table. + + The function AddStringToTable() adds a string to the string + table. The "+" sign joining the two parts of the argument to + AddStringToTable indicate string concatenation. + + StringFromCode() looks up the string associated with a given + code. + + WriteString() adds a string to the output stream. + + + When SamplesPerPixel Is Greater Than 1 + + We have so far described the compression scheme as if + SamplesPerPixel were always 1, as will be be the case with + palette color and grayscale images. But what do we do with RGB + image data? + + Tests on our sample images indicate that the LZW compression + ratio is nearly identical regardless of whether + PlanarConfiguration=1 or PlanarConfiguration=2, for RGB images. + So use whichever configuration you prefer, and simply compress + the bytes in the strip. + + It is worth cautioning that compression ratios on our test RGB + images were disappointing low: somewhere between 1.1 to 1 and 1.5 + to 1, depending on the image. Vendors are urged to do what they + can to remove as much noise from their images as possible. + Preliminary tests indicate that significantly better compression + ratios are possible with less noisy images. Even something as + simple as zeroing out one or two least-significant bitplanes may + be quite effective, with little or no perceptible image + degradation. + + + Implementation + + The exact structure of the string table and the method used to + determine if a string is already in the table are probably the + most significant design decisions in the implementation of a LZW + compressor and decompressor. Hashing has been suggested as a + useful technique for the compressor. We have chosen a tree based + approach, with good results. The decompressor is actually more + straightforward, as well as faster, since no search is + involved - strings can be accessed directly by code value. + + + Performance + + Many people do not realize that the performance of any + compression scheme depends greatly on the type of data to which + it is applied. A scheme that works well on one data set may do + poorly on the next. + + But since we do not want to burden the world with too many + compression schemes, an adaptive scheme such as LZW that performs + quite well on a wide range of images is very desirable. LZW may + not always give optimal compression ratios, but its adaptive + nature and relative simplicity seem to make it a good choice. + + Experiments thus far indicate that we can expect compression + ratios of between 1.5 and 3.0 to 1 from LZW, with no loss of + data, on continuous tone grayscale scanned images. If we zero + the least significant one or two bitplanes of 8-bit data, higher + ratios can be achieved. These bitplanes often consist chiefly of + noise, in which case little or no loss in image quality will be + perceived. Palette color images created in a paint program + generally compress much better than continuous tone scanned + images, since paint images tend to be more repetitive. It is not + unusual to achieve compression ratios of 10 to 1 or better when + using LZW on palette color paint images. + + By way of comparison, PackBits, used in TIFF for black and white + bilevel images, does not do well on color paint images, much less + continuous tone grayscale and color images. 1.2 to 1 seemed to + be about average for 4-bit images, and 8-bit images are worse. + + It has been suggested that the CCITT 1D scheme could be used for + continuous tone images, by compressing each bitplane separately. + No doubt some compression could be achieved, but it seems + unlikely that a scheme based on a fixed table that is optimized + for word black runs separated by dworder white runs would be a + very good choice on any of the bitplanes. It would do quite well + on the high-order bitplanes (but so would a simpler scheme like + PackBits), and would do quite poorly on the low-order bitplanes. + We believe that the compression ratios would generally not be + very impressive, and the process would in addition be quite slow. + Splitting the pixels into bitplanes and putting them back + together is somewhat expensive, and the coding is also fairly + slow when implemented in software. + + Another approach that has been suggested uses uses a 2D + differencing step following by coding the differences using a + fixed table of variable-length codes. This type of scheme works + quite well on many 8-bit grayscale images, and is probably + simpler to implement than LZW. But it has a number of + disadvantages when used on a wide variety of images. First, it + is not adaptive. This makes a big difference when compressing + data such as 8-bit images that have been "sharpened" using one of + the standard techniques. Such images tend to get larger instead + of smaller when compressed. Another disadvantage of these + schemes is that they do not do well with a wide range of bit + depths. The built-in code table has to be optimized for a + particular bit depth in order to be effective. + + Finally, we should mention "lossy" compression schemes. + Extensive research has been done in the area of lossy, or non- + information-preserving image compression. These techniques + generally yield much higher compression ratios than can be + achieved by fully-reversible, information-preserving image + compression techniques such as PackBits and LZW. Some + disadvantages: many of the lossy techniques are so + computationally expensive that hardware assists are required. + Others are so complicated that most microcomputer software + vendors could not afford either the expense of implementation or + the increase in application object code size. Yet others + sacrifice enough image quality to make them unsuitable for + publishing use. + + In spite of these difficulties, we believe that there will one + day be a standardized lossy compression scheme for full color + images that will be usable for publishing applications on + microcomputers. An International Standards Organization group, + ISO/IEC/JTC1/SC2/WG8, in cooperation with CCITT Study Group VIII, + is hard at work on a scheme that might be appropriate. We expect + that a future revision of TIFF will incorporate this scheme once + it is finalized, if it turns out to satisfy the needs of desktop + publishers and others in the microcomputer community. This will + augment, not replace, LZW as an approved TIFF compression scheme. + LZW will very likely remain the scheme of choice for Palette + color images, and perhaps 4-bit grayscale images, and may well + overtake CCITT 1D and PackBits for bilevel images. + + + Future LZW Extensions + + Some images compress better using LZW coding if they are first + subjected to a process wherein each pixel value is replaced by + the difference between the pixel and the preceding pixel. + Performing this differencing in two dimensions helps some images + even more. However, many images do not compress better with this + extra preprocessing, and for a significant number of images, the + compression ratio is actually worse. We are therefore not making + differencing an integral part of the TIFF LZW compression scheme. + + However, it is possible that a "prediction" stage like + differencing may exist which is effective over a broad range of + images. If such a scheme is found, it may be incorporated in the + next major TIFF revision. If so, a new value will be defined for + the new "Predictor" TIFF tag. Therefore, all TIFF readers that + read LZW files must pay attention to the Predictor tag. If it is + 1, which is the default case, LZW decompression may proceed + safely. If it is not 1, and the reader does not recognize the + specified prediction scheme, the reader should give up. + + + Acknowledgements + + The original LZW reference has already been given. The use of + ClearCode as a technique to handle overflow was borrowed from the + compression scheme used by the Graphics Interchange Format (GIF), + a small-color-paint-image-file format used by CompuServe that + also is an adaptation of the LZW technique. Joff Morgan and Eric + Robinson of Aldus were each instrumental in their own way in + getting LZW off the ground. + + The TIFF predictor algorithm + + The idea is to make use of the fact that many continuous tone + images rarely vary much in pixel value from one pixel to the + next. In such images, if we replace the pixel values by + differences between consecutive pixels, many of the differences + should be 0, plus or minus 1, and so on. This reduces the + apparent information content, and thus allows LZW to encode the + data more compactly. + + Assuming 8-bit grayscale pixels for the moment, a basic C + implementation might look something like this: + + char image[ ][ ]; + int row, col; + + /* take horizontal differences: + */ + for (row = 0; row < nrows; row++) + for (col = ncols - 1; col >= 1; col--) + image[row][col] -= image[row][col-1]; + + If we don't have 8-bit samples, we need to work a little harder, + so that we can make better use of the architecture of most CPUs. + Suppose we have 4-bit samples, packed two to a byte, in normal + TIFF uncompressed (i.e., Compression=1) fashion. In order to + find differences, we want to first expand each 4-bit sample into + an 8-bit byte, so that we have one sample per byte, low-order + justified. We then perform the above horizontal differencing. + Once the differencing has been completed, we then repack the 4- + bit differences two to a byte, in normal TIFF uncompressed + fashion. + + If the samples are greater than 8 bits deep, expanding the + samples into 16-bit words instead of 8-bit bytes seems like the + best way to perform the subtraction on most computers. + + Note that we have not lost any data up to this point, nor will we + lose any data later on. It might at first seem that our + differencing might turn 8-bit samples into 9-bit differences, 4- + bit samples into 5-bit differences, and so on. But it turns out + that we can completely ignore the "overflow" bits caused by + subtracting a larger number from a smaller number and still + reverse the process without error. Normal twos complement + arithmetic does just what we want. Try an example by hand if you + need more convincing. + + Up to this point we have implicitly assumed that we are + compressing bilevel or grayscale images. An additional + consideration arises in the case of color images. + + If PlanarConfiguration is 2, there is no problem. Differencing + proceeds the same way as it would for grayscale data. + + If PlanarConfiguration is 1, however, things get a little + trickier. If we didnt do anything special, we would be + subtracting red sample values from green sample values, green + sample values from blue sample values, and blue sample values + from red sample values, which would not give the LZW coding stage + much redundancy to work with. So we will do our horizontal + differences with an offset of SamplesPerPixel (3, in the RGB + case). In other words, we will subtract red from red, green from + green, and blue from blue. The LZW coding stage is identical to + the SamplesPerPixel=1 case. We require that BitsPerSample be the + same for all 3 samples. + + + Results and guidelines + + LZW without differencing works well for 1-bit images, 4-bit + grayscale images, and synthetic color images. But natural 24-bit + color images and some 8-bit grayscale images do much better with + differencing. For example, our 24-bit natural test images hardly + compressed at all using "plain" LZW: the average compression + ratio was 1.04 to 1. The average compression ratio with + horizontal differencing was 1.40 to 1. (A compression ratio of + 1.40 to 1 means that if the uncompressed image is 1.40MB in size, + the compressed version is 1MB in size.) + + Although the combination of LZW coding with horizontal + differencing does not result in any loss of data, it may be + worthwhile in some situations to give up some information by + removing as much noise as possible from the image data before + doing the differencing, especially with 8-bit samples. The + simplest way to get rid of noise is to mask off one or two low- + order bits of each 8-bit sample. On our 24-bit test images, LZW + with horizontal differencing yielded an average compression ratio + of 1.4 to 1. When the low-order bit was masked from each sample, + the compression ratio climbed to 1.8 to 1; the compression ratio + was 2.4 to 1 when masking two bits, and 3.4 to 1 when masking + three bits. Of course, the more you mask, the more you risk + losing useful information adword with the noise. We encourage you + to experiment to find the best compromise for your device. For + some applications it may be useful to let the user make the final + decision. + + Interestingly, most of our RGB images compressed slightly better + using PlanarConfiguration=1. One might think that compressing + the red, green, and blue difference planes separately + (PlanarConfiguration=2) might give better compression results + than mixing the differences together before compressing + (PlanarConfiguration=1), but this does not appear to be the case. + + Incidentally, we tried taking both horizontal and vertical + differences, but the extra complexity of two-dimensional + differencing did not appear to pay off for most of our test + images. About one third of the images compressed slightly better + with two-dimensional differencing, about one third compressed + slightly worse, and the rest were about the same. + +--- BMP RLE_8 compression + + The BMP can be compressed in two modes, absolute mode and RLE + mode. Both modes can occur anywhere in a single bitmap. + + The RLE mode is a simple RLE mechanism, the first byte contains the + count, the second byte the pixel to be replicatet. If the count byte + is 0, the second byte is a special, like EOL or delta. + + In absolute mode, the second byte contains the number of bytes to be + copied litteraly. Each absolute run must be word-aligned that means you + will may have to add an aditional padding byte which is not included + in the count. After an absolute run, RLE compression continues. + + Second byte Meaning + + 0 End of line + 1 End of bitmap + 2 Delta. The next two bytes are the horizontal + and vertical offsets from the current position + to the next pixel. + 3-255 Switch to absolute mode + +--- BMP RLE_4 compression + + RLE_4 compression knows the two modes of the RLE_8 compression, + absolute and RLE. In the RLE mode, the first byte contains the count + of pixels to draw, the second byte contains in its two nibbles the + indices off the pixel colors, the higher 4 bits are the left pixel, + the lower 4 bits are the right pixel. Note that two-color runs are + possible to encode with RLE_4 through this. + +--- Protracker sample compression / decompression + + Get the number of sample bytes to process. + Call this SamplesLeft. + + Set Delta counter to 0. + + DO + Get a byte from the buffer. + Store the byte in Temp. + Subtract the Delta counter from the byte. + Store it in the buffer. + Move the Temp byte into the Delta Counter + Decrement SamplesLeft. + WHILE(SamplesLeft <> 0) + + The technique for conversion back to the raw data is: + + Get the number of sample bytes to process. + Call this SamplesLeft. + + Set Delta counter to 0. + + DO + Get a byte from the buffer. + Add onto the byte the Delta Counter. + Store the byte in Delta Counter. + Store the byte in Temp. + Decrement SamplesLeft. + WHILE(SamplesLeft <> 0) +--------!-ADDRESSES------------------------- +Useful adresses + +International Midi Association +5316 West 57th Street +Los Angeles, CA 90056 +xx1-213-649-6434 +xx1-213-215-3380 fax +--------!-HISTORY--------------------------- +History is kept within this file for convenience whilst editing ... +Date format is european/german, just for my convenience. + +Date Who What +14.03.95 MM Introduced tables + Last table number=0012 +05.06.95 MM + PTM format +25.07.95 MM + PIF format + + Paradox format description +11.08.95 MM + MS Compress variants +18.11.95 MM + ARC enhancements, caveats + + HA files +22.11.95 MM + Parts of the .CRD files +01.02.96 MM + PNG structure +02.02.96 MM + More on JPEG + + TARGA entry created \ No newline at end of file diff --git a/Documentation/future/FILEFMTS_ARC.md b/Documentation/future/FILEFMTS_ARC.md new file mode 100644 index 000000000..4cbb187f5 --- /dev/null +++ b/Documentation/future/FILEFMTS_ARC.md @@ -0,0 +1,98 @@ +ARC +=== + +The ARC files are archive files created by the SEA ARC program. The compression +has been superceded by more recent compression programs. Similar archives can +be created by the PAK and PkPAK programs. There have been many variations +and enhancements to the ARC format though not as many as to the TIFF format. + +You may have to use some (paranoid) checks to ensure that you actually are +processing an ARC file, since other archivers also adopted the idea of putting +a 01Ah byte at offset 0, namely the Hyper archiver. To check if you have a +Hyper-archive, check the next two bytes for "HP" or "ST" (or look below for +"HYP"). Also the ZOO archiver also does put a 01Ah at the start of the file, +see the ZOO entry below. +``` +OFFSET Count TYPE Description +0000h 1 byte ID=1Ah +0001h 1 byte Compression method (see table 0001) +0002h 12 char File name +000Fh 1 dword Compressed file size +0013h 1 dword File date in MS-DOS format (see table 0009) +0017h 1 word 16-bit CRC +0019h 1 dword Original file size + ="SIZ" +``` + +| (Table 0001) | ARC compression types | +|-----------:|:----------------------| +| 0 | End of archive marker +| 1 | unpacked (obsolete) | ARC 1.0 ? +| 2 | unpacked | ARC 3.1 +| 3 | packed (RLE encoding) +| 4 | squeezed (after packing) +| 5 | crunched (obsolete) | ARC 4.0 +| 6 | crunched (after packing) (obsolete) | ARC 4.1 +| 7 | crunched (after packing, using faster hash algorithm) | ARC 4.6 +| 8 | crunched (after packing, using dynamic LZW variations) | ARC 5.0 +| 9 | Squashed c/o Phil Katz (no packing) (var. on crunching) +| 10 | crushed (PAK only) +| 11 | distilled (PAK only) +|12-19 | to 19 unknown (ARC 6.0 or later) | ARC 7.0 (?) +|20-29 | ?informational items? | ARC 6.0 +|30-39 | ?control items? | ARC 6.0 +| 40+ | reserved + +According to SEA's technical memo, the information and control items +were added to ARC 6.0. Information items use the same headers as archived +files, although the original file size (and name?) can be ignored. + +OFFSET Count TYPE Description +0000h 2 byte Length of header (includes "length" + and "type"?) +0002h 1 byte (sub)type +0003h ? byte data + +Informational item types as used by ARC 6.0 : + +Block type Subtype Description + 20 archive info + 0 archive description (ASCIIZ) + 1 name of creator program (ASCIIZ) + 2 name of modifier program (ASCIIZ) + + 21 file info + 0 file description (ASCIIZ) + 1 long name (if not MS-DOS "8.3" filename) + 2 extended date-time info (reserved) + 3 icon (reserved) + 4 file attributes (ASCIIZ) + + Attributes use an uppercase letter to signify the + following: + + R read access + W write access + H hidden file + S system file + N network shareable + + 22 operating system info (reserved) + +(Table 0009) +Format of the MS-DOS time stamp (32-bit) +The MS-DOS time stamp is limited to an even count of seconds, since the +count for seconds is only 5 bits wide. +``` + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + |<---- year-1980 --->|<- month ->|<--- day ---->| + + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + |<--- hour --->|<---- minute --->|<- second/2 ->| + +EXTENSION:ARC,PAK +OCCURENCES:PC +PROGRAMS:SEA ARC,PAK,PkPAK +SEE ALSO:HYP,ZOO +VALIDATION:FileSize="SIZ" +``` diff --git a/Documentation/future/FILEFMTS_ARJ.md b/Documentation/future/FILEFMTS_ARJ.md new file mode 100644 index 000000000..10a085e79 --- /dev/null +++ b/Documentation/future/FILEFMTS_ARJ.md @@ -0,0 +1,71 @@ +--------A-ARJ------------------------------- +The ARJ program by Robert K. Jung is a "newcomer" which compares well to PKZip +and LhArc in both compression and speed. An ARJ archive contains two types of +header blocks, one archive main header at the head of the archive and local +file headers before each archived file. + +OFFSET Count TYPE Description +0000h 1 word ID=0EA60h +0002h 1 word Basic header size (0 if end of archive) +0004h 1 byte Size of header including extra data +0005h 1 byte Archiver version number +0006h 1 byte Minimum version needed to extract +0007h 1 byte Host OS (see table 0002) +0008h 1 byte Internal flags, bitmapped : + 0 - no password / password + 1 - reserved + 2 - file continues on next disk + 3 - file start position field is available + 4 - path translation ( "\" to "/" ) +0009h 1 byte Compression method : + 0 - stored + 1 - compressed most + 2 - compressed + 3 - compressed faster + 4 - compressed fastest + Methods 1 to 3 use Lempel-Ziv 77 sliding window + with static Huffman encoding, method 4 uses + Lempel-Ziv 77 sliding window with pointer/ + length unary encoding. +000Ah 1 byte File type : + 0 - binary + 1 - 7-bit text + 2 - comment header + 3 - directory + 4 - volume label +000Bh 1 byte reserved +000Ch 1 dword Date/Time of original file in MS-DOS format +0010h 1 dword Compressed size of file +0014h 1 dword Original size of file +0018h 1 dword Original file's CRC-32 +001Ah 1 word Filespec position in filename +001Ch 1 word File attributes +001Eh 1 word Host data (currently not used) +? 1 dword Extended file starting position when used + (see above) + ? char ASCIIZ file name + ? char Comment +????h 1 dword Basic header CRC-32 +????h 1 word Size of first extended header (0 if none) + ="SIZ" +????h+"SIZ"+2 1 dword Extended header CRC-32 +????h+"SIZ"+6 ? byte Compressed file + +(Table 0002) +ARJ HOST-OS types + 0 - MS-DOS + 1 - PRIMOS + 2 - UNIX + 3 - AMIGA + 4 - MAC-OS (System xx) + 5 - OS/2 + 6 - APPLE GS + 7 - ATARI ST + 8 - NeXT + 9 - VAX VMS +EXTENSION:ARJ +OCCURENCES:PC +PROGRAMS:ARJ.EXE +REFERENCE: +SEE ALSO: +VALIDATION: diff --git a/Documentation/future/FILEFMTS_DWC.md b/Documentation/future/FILEFMTS_DWC.md new file mode 100644 index 000000000..572b3832f --- /dev/null +++ b/Documentation/future/FILEFMTS_DWC.md @@ -0,0 +1,36 @@ +DWC +=== + +The DWC archives seem to be a relict from ancient computing times - I've never +seen any program that dealt with them or could create them. They are yet +included in this compilation for reasons I don't know. But maybe one of you +stumbles over such a file, he might find this documentation helpful. +The DWC archives consist of single file entries with one archive trailer. The +archive entries seem to be at the start of the archive, but maybe they are +stored at the end of the archive, before the trailer. Each file header has the +following format : + +``` +OFFSET Count TYPE Description +0000h 13 char Name of the original file in ASCIIZ. +000Dh 1 dword Size of the original file +0011h 1 dword MS-DOS date and time of the original file +0015h 1 dword Size of the compressed file +0019h 1 dword Offset of compressed data in archive file +001Dh 3 byte reserved +0020h 1 byte Method : + 1 - crunched + 2 - stored + +The trailer at the end of each archive has the following format : +OFFSET Count TYPE Description +0000h 1 word Length of trailer (=27) +0002h 1 word Size of the directory entries (=34)?? +0004h 16 byte reserved +0014h 1 dword Count of the directory entries +0018h 3 char ID="DWC" + +EXTENSION:DWC?? +OCCURENCES:PC?? +PROGRAMS:DWC.EXE?? +``` diff --git a/Documentation/future/FILEFMTS_GZIP.md b/Documentation/future/FILEFMTS_GZIP.md new file mode 100644 index 000000000..49f7b6775 --- /dev/null +++ b/Documentation/future/FILEFMTS_GZIP.md @@ -0,0 +1,30 @@ +--------A-GZIP------------------------------ +The GNU ZIP program is an archive program mostly for the UNIX machines developed +by the GNU project. +OFFSET Count TYPE Description +0000h 2 char ID='!',139 +0002h 1 byte Method : + 0-7 - reserved + 8 - deflated +0003h 1 byte File flags : + 0 - ASCII-text + 1 - Multi-part file + 2 - Name present + 3 - Comment present + 4 - Encrypted + 5-8 - reserved +0004h 1 dword File date and time (see table 0009) +0008h 1 byte Extra flags +0009h 1 byte Target OS : + 0 - DOS + 1 - Amiga + 2 - VMS + 3 - Unix + 4 - ???? + 5 - Atari + 6 - OS/2 + 7 - MacOS + 10 - TOPS-20 + 11 - Win/32 +EXTENSION:ZIP +PROGRAMS:GNU gzip diff --git a/Documentation/future/FILEFMTS_HA.md b/Documentation/future/FILEFMTS_HA.md new file mode 100644 index 000000000..cb09009a1 --- /dev/null +++ b/Documentation/future/FILEFMTS_HA.md @@ -0,0 +1,53 @@ +--------A-HA-------------------------------- +HA files (not to be confused with HamarSoft's HAP files [3]) contain a +small archive header with a word count of the number of files in the +archive. The constituent files stored sequentially with a header followed +by the compressed data, as is with most archives. + +The main file header is formatted as follows: +OFFSET Count TYPE Description +0000h 2 char ID='HA' +0002h 1 word Number of files in archive + +Every compressed file has a header before it, like this : + +OFFSET Count TYPE Description +0000h 1 byte Version & compression type +0001h 1 dword Compressed file size +0005h 1 dword Original file size +0009h 1 dword CCITT CRC-32 (same as ZModem/PkZIP) +000Dh 1 dword File time-stamp (Unix format) + ? ? char ASCIIZ pathname + ? ? char ASCIIZ filename +????h 1 byte Length of machine specific information + ? byte Machine specific information + +Note that the path separator for pathnames is the 0FFh (255) character. + +The high nybble of the version & compression type field contains the +version information (0=HA 0.98), the low nybble is the compression type : + +(Table 0012) +HA compression types + 0 "CPY" File is stored (no compression) + 1 "ASC" Default compression method, using a sliding + window dictionary with an arithmetic coder. + 2 "HSC" Compression using a "finite context [sic] + model and arithmetic coder" + 14 "DIR" Directory entry + 15 "SPECIAL" Used with HA 0.99B (?) + + +Machine specific information known: + + 1 byte Machine type (Host-OS) + + 1 = MS DOS + 2 = Linux (Unix) + + ? bytes Information (currently only file-attribute info) + +EXTENSION:HA +OCCURENCES:PC, Linux +PROGRAMS:HA +REFERENCE: diff --git a/Documentation/future/FILEFMTS_HYP.md b/Documentation/future/FILEFMTS_HYP.md new file mode 100644 index 000000000..671f8c536 --- /dev/null +++ b/Documentation/future/FILEFMTS_HYP.md @@ -0,0 +1,23 @@ +--------A-HYP------------------------------- +The Hyper archiver is a very fast compression program by P. Sawatzki and K.P. +Nischke, which uses LZW compression techniques for compression. It is not very +widespread - in fact, I've yet to see a package distributed in this format. + +OFFSET Count TYPE Description +0000h 1 byte ID=1Ah +0001h 2 char Compression method + "HP" - compressed + "ST" - stored +0003h 1 byte Version file was compressed by in BCD +0004h 1 dword Compressed file size +0008h 1 dword Original file size +000Ch 1 dword MS-DOS date and time of file (see table 0009) +0010h 1 dword CRC-32 of file +0014h 1 byte MS-DOS file attribute +0015h 1 byte Length of filename + ="LEN" +0016h "LEN" char Filename + +EXTENSION:HYP +OCCURENCES:PC +PROGRAMS:HYPER.EXE diff --git a/Documentation/future/FILEFMTS_Introduction.md b/Documentation/future/FILEFMTS_Introduction.md new file mode 100644 index 000000000..2a4cd1ba9 --- /dev/null +++ b/Documentation/future/FILEFMTS_Introduction.md @@ -0,0 +1,137 @@ +File format list Release 3.00 Last change 02/04/96 +This compilation is Copyright (c) 1994,2002 Max Maischein +--------!-CONTACT_INFO---------------------- +If you notice any mistakes or omissions, please let me know! It is only +with YOUR help that the list can continue to grow. Please send +all changes to me rather than distributing a modified version of the list. + +This file has been authored in the style of the INTERxxy.* file list +by Ralf Brown, and uses almost the same format. + +Please read the file FILEFMTS.1ST before asking me any questions. You may find +that they have already been addressed. + + Max Maischein + +corion@corion.net +Corion on #coders@IRC +--------!-DISCLAIMER------------------------ +DISCLAIMER: THIS MATERIAL IS PROVIDED "AS IS". I verify the information +contained in this list to the best of my ability, but I cannot be held +responsible for any problems caused by use or misuse of the information, +especially for those file formats foreign to the PC, like AMIGA or SUN file +formats. If an information it is marked "guesswork" or undocumented, you +should check it carefully to make sure your program will not break with +an unexpected value (and please let me know whether or not it works +the same way). + +Information marked with "???" is known to be incomplete or guesswork. + +Some file formats were not released by their creators, others are regarded +as proprietary, which means that if your programs deal with them, you might +be looking for trouble. I don't care about this. +--------!-FLAGS----------------------------- +One or more letters may follow the file format ID; they have the following +meanings: + Cx - Charset used : + 7 - Unix 7-bit characters + A - Amiga charset (if there is one) + E - EBDIC character format + U - Unicode character set + W - Windows char set + Default is the 8-Bit IBM PC-II Charset. Note that Microsoft + introduced codepages which might be relevant with other + programs. + G - guesswork, incomplete, unreliable etc. + M - Motorola byte order + Default is Intel byte order + O - obsolete, valid only for version noted below + X - Synonym topic. See topic named under see also. +--------!-CATEGORIES------------------------ +The ninth column of the divider line preceding an entry usually contains a +classification code for the application that uses those files. + +The codes currently in use are: + ! - User information ( not really a file format ) + A - Archives (ARC,LZH,ZIP,...) + a - Animations (CEL, FLI, FLT,...) + B - Binary files for compilers etc. (OBJ,TPU) + H - Help file (HLP,NG) + I - Images, bit maps (GIF,BMP,TIFF,...) + D - Data support files (CPI,FON,...) + E - Executable files (EXE,PIF) + f - Generic file format. RIFF and IFF are generic file formats. + F - Font files (TTF) + G - General graphics file + M - Module music file (MIDI,MOD,S3M,...) + R - Resource data files (RES) + S - Sound files (WAV,VOC,ZYX) + T - Text files (DOC,TXT) + W - Spreadsheet and related (WKS) + X - Database files (DBF) +--------!-FIELDS---------------------------- +After a format description, you will sometimes find other keywords. The +meanings of these are : + EXTENSION: + This is the default extension of files of the given type. + On DOS systems, most files have a 3 letter extension. + On Amiga systems, the files are prefixed with something. + The DOS extensions are all uppercase, extensions for other systems + are in lower case chars. On other systems, which do not have the con- + cept of extensions, as the MAC, this is the file type. + OCCURENCES: + Where you are likely to encounter those files. This specifies + machines (like PC,AMIGA) or operating systems (like UNIX). + PROGRAMS: + Programs which either create, use or convert files of this format. + Some might be used for validation or conversion. + REFERENCE: + A reference to a file or an article in a magazine which is mandatory + or recommended for further understanding of the matter. + SEE ALSO: + A cross reference to a topic which might be interesting as well. + VALIDATION: + Methods to validate that the file you have is not corrupt. Normally + this is a method to check the theoretical file size against the + real filesize. Some file formats allow no reliable validation. +--------!-FORMAT---------------------------- + The block oriented files are organized in some other fashion, since the + order of blocks is at best marginally obligatory. + + Each block type starts with the block ID (eg. RIFFblock for a RIFF file) and + in square brackets the character value of the ID field (eg. [WAVE] for RIFF + WAVe sound files). The block itself is descripted in the format description, + that means you will have to look after RIFF or FORM. In the record + description, the header information is omitted ! + + If a record is descripted, the record ends when the next offset is given. + + Bitmapped values have a description for each bit. The value left of the + slash ("/") is for the bit not set (=0), the right sided value applies + if the bit is set. + + A note on the tables section. The tables were added as they were introduced + into Ralf Browns interrupt list - so not everything was pressed into a table. + The tables (should) have unique numbers, but they sure are out of order ! +--------!-MACHINES-------------------------- + Machines that use Intel byte ordering + PC + Machines that use Motorola byte ordering + AMIGA, ATARI ST, MAC, SUN +--------!-HISTORY--------------------------- +History is kept within this file for convenience whilst editing ... +Date format is european/german, just for my convenience. + +Date Who What +14.03.95 MM Introduced tables + Last table number=0012 +05.06.95 MM + PTM format +25.07.95 MM + PIF format + + Paradox format description +11.08.95 MM + MS Compress variants +18.11.95 MM + ARC enhancements, caveats + + HA files +22.11.95 MM + Parts of the .CRD files +01.02.96 MM + PNG structure +02.02.96 MM + More on JPEG + + TARGA entry created diff --git a/Documentation/future/FILEFMTS_LBR.md b/Documentation/future/FILEFMTS_LBR.md new file mode 100644 index 000000000..9f5d43136 --- /dev/null +++ b/Documentation/future/FILEFMTS_LBR.md @@ -0,0 +1,44 @@ +LBR +=== + +The LBR files consist of a direcotry and one or more "members". The directory +contains from 4 to 256 entries and each entry describes one member. +The first directory entry describes the directory itself. All space allocations +are in terms of sectors, where a sector is 128 bytes long. Four directory +entries fit in one sector thus the number of directory entries is always evenly +divisible by 4. Different types of LBR files exist, all versions are discussed +here, the directory entry looks like this : + +``` +OFFSET Count TYPE Description +0000h 1 byte File status : + 0 - active + 254 - deleted + 255 - free +0001h 11 char File name in FCB format (8/3, blank padded), + directory name is blanks for old LU, + ID='********DIR' + for LUPC +000Ch 1 word Offset to file data in sectors +000Eh 1 word Length of stored data in sectors + +For the LUPC program, the remaining 16 bytes are used like this : +OFFSET Count TYPE Description +0000h 8 char ASCII date of creation (MM/DD/YY) +0008h 8 char ASCII time of creation (HH:MM:SS) + +For the LU86 program, the remaining 16 bytes are used like this : +OFFSET Count TYPE Description +0000h 1 word CRC-16 or 0 +0002h 1 word Creation date in CP/M format +0004h 1 word Creation time in DOS format +0006h 1 word Date of last modification, CP/M format +0008h 1 word Time of last modification, DOS format +000Ah 1 byte Number of bytes in last sector +000Bh 5 byte reserved (0) + +EXTENSION:LBR +OCCURENCES:PC,CP/M +PROGRAMS:LU.COM, LUU.COM, LU86.COM +SEE ALSO: +``` diff --git a/Documentation/future/FILEFMTS_LZH.md b/Documentation/future/FILEFMTS_LZH.md new file mode 100644 index 000000000..8b0264b11 --- /dev/null +++ b/Documentation/future/FILEFMTS_LZH.md @@ -0,0 +1,42 @@ +LZH +=== + +The LHArc/LHA archiver is a multi platform archiver made by Haruyasu Yoshizaki, +which has a relatively good compression. It uses more or less the same +technology like the ZIP programs by Phil Katz. There was a hack named "ICE", +which had only the graphic characters displayed on decompression changed. + +``` +OFFSET Count TYPE Description +0000h 1 byte Size of archived file header +0001h 1 byte Checksum of remaining bytes +0002h 3 char ID='-lh' + ID='-lz' +0005h 1 char Compression methods used (see table 0005) +0006h 1 char ID='-' +0007h 1 dword Compressed size +000Bh 1 dword Uncompressed size +000Fh 1 dword Original file date/time (see table 0009) +0013h 1 word File attribute +0015h 1 byte Filename / path length in bytes + ="LEN" +0016h "LEN" char Filename / path +0018h 1 word CRC-16 of original file ++"LEN" + +(Table 0005) +LHArc compression types + "0" - No compression + "1" - LZW, 4K buffer, Huffman for upper 6 bits of position + "2" - unknown + "3" - unknown + "4" - LZW, Arithmetic Encoding + "5" - LZW, Arithmetic Encoding + "s" - LHa 2.x archive? + "\" - LHa 2.x archive? + "d" - LHa 2.x archive? + +EXTENSION:LZH,ICE +OCCURENCES:PC +PROGRAMS:LHArc.EXE, LHA.EXE +``` diff --git a/Documentation/future/FILEFMTS_ZOO.md b/Documentation/future/FILEFMTS_ZOO.md new file mode 100644 index 000000000..5f3799c08 --- /dev/null +++ b/Documentation/future/FILEFMTS_ZOO.md @@ -0,0 +1,40 @@ +--------A-ZOO------------------------------- +The ZOO archive program by Raoul Dhesi is a file compression program now +superceeded in both compression and speed by most other compression programs. +The archive header looks like this : +OFFSET Count TYPE Description +0000h 20 char Archive header text, ^Z terminated, null padded +0014h 1 dword ID=0FDC4A7DCh +0018h 1 dword Offset of first file in archive +001Ch 1 dword Offset of ???? +0020h 1 byte Version archive was made by +0021h 1 byte Minimum version needed to extract + +Each stored file has its own header, which looks like this : +OFFSET Count TYPE Description +0000h 1 dword ID=0FDC4A7DCh +0004h 1 byte Type of directory entry +0005h 1 byte Compression method : + 0 - stored + 1 - Crunched : LZW, 4K buffer, + var len (9-13 bits) +0006h 1 dword Offset of next directory entry +000Ah 1 dword Offset of next header +000Dh 1 word Original date / time of file (see table 0009) +0012h 1 word CRC-16 of file +0014h 1 dword Uncompressed size of file +0018h 1 dword Compressed size of file +001Ch 1 byte Version this file was compressed by +001Dh 1 byte Minimum version needed to extract +001Eh 1 byte Deleted flag + 0 - file in archive + 1 - file is considered deleted +001Fh 1 dword Offset of comment field, 0 if none +0023h 1 word Length of comment field +0025h ? char ASCIIZ path / filename + +EXTENSION:ZOO +OCCURENCES:PC +PROGRAMS:ZOO.EXE +REFERENCE: +VALIDATION: diff --git a/Documentation/future/FILE_ID.DIZ b/Documentation/future/FILE_ID.DIZ new file mode 100644 index 000000000..0096a2aa2 --- /dev/null +++ b/Documentation/future/FILE_ID.DIZ @@ -0,0 +1,11 @@ +File formats Release #03 12/02 + +A documentation of over 100 file +formats covering : + +Modules : (MOD,S3M,669,XM,etc.) +Images : (GIF,LBM,IFF,PCX,etc.) +Binaries: (COM,EXE,Windows,etc.) +Archives: (ARJ,LHA,ZIP,etc.) +Sound : (VOC,WAV,ZYX,.AU,etc.) +DataBase: (DBF) \ No newline at end of file diff --git a/Documentation/future/README.md b/Documentation/future/README.md new file mode 100644 index 000000000..7ddb6b155 --- /dev/null +++ b/Documentation/future/README.md @@ -0,0 +1,170 @@ +Future Work +=========== + +C# implementation of older archive file formats. + +Documentation from http://www.corion.net/fileformats/index.html + +File format list Release 3.00 Last change 02/04/96 +This compilation is Copyright (c) 1994,2002 Max Maischein + +## CONTACT_INFO + +If you notice any mistakes or omissions, please let me know! It is only +with YOUR help that the list can continue to grow. Please send +all changes to me rather than distributing a modified version of the list. + +This file has been authored in the style of the INTERxxy.* file list +by Ralf Brown, and uses almost the same format. + +Please read the file FILEFMTS.1ST before asking me any questions. You may find +that they have already been addressed. + + Max Maischein + +corion@corion.net +Corion on #coders@IRC + +## DISCLAIMER + +DISCLAIMER: THIS MATERIAL IS PROVIDED "AS IS". I verify the information +contained in this list to the best of my ability, but I cannot be held +responsible for any problems caused by use or misuse of the information, +especially for those file formats foreign to the PC, like AMIGA or SUN file +formats. If an information it is marked "guesswork" or undocumented, you +should check it carefully to make sure your program will not break with +an unexpected value (and please let me know whether or not it works +the same way). + +Information marked with "???" is known to be incomplete or guesswork. + +Some file formats were not released by their creators, others are regarded +as proprietary, which means that if your programs deal with them, you might +be looking for trouble. I don't care about this. + +## FLAGS + +One or more letters may follow the file format ID; they have the following +meanings: + +``` + Cx - Charset used : + 7 - Unix 7-bit characters + A - Amiga charset (if there is one) + E - EBDIC character format + U - Unicode character set + W - Windows char set + Default is the 8-Bit IBM PC-II Charset. Note that Microsoft + introduced codepages which might be relevant with other + programs. + G - guesswork, incomplete, unreliable etc. + M - Motorola byte order + Default is Intel byte order + O - obsolete, valid only for version noted below + X - Synonym topic. See topic named under see also. +``` + +## CATEGORIES + +The ninth column of the divider line preceding an entry usually contains a +classification code for the application that uses those files. + +The codes currently in use are: +``` +! - User information ( not really a file format ) +A - Archives (ARC,LZH,ZIP,...) +a - Animations (CEL, FLI, FLT,...) +B - Binary files for compilers etc. (OBJ,TPU) +H - Help file (HLP,NG) +I - Images, bit maps (GIF,BMP,TIFF,...) +D - Data support files (CPI,FON,...) +E - Executable files (EXE,PIF) +f - Generic file format. RIFF and IFF are generic file formats. +F - Font files (TTF) +G - General graphics file +M - Module music file (MIDI,MOD,S3M,...) +R - Resource data files (RES) +S - Sound files (WAV,VOC,ZYX) +T - Text files (DOC,TXT) +W - Spreadsheet and related (WKS) +X - Database files (DBF) +``` + +## FIELDS + +After a format description, you will sometimes find other keywords. The +meanings of these are : +### EXTENSION: + This is the default extension of files of the given type. + On DOS systems, most files have a 3 letter extension. + On Amiga systems, the files are prefixed with something. + The DOS extensions are all uppercase, extensions for other systems + are in lower case chars. On other systems, which do not have the con- + cept of extensions, as the MAC, this is the file type. +### OCCURENCES: +Where you are likely to encounter those files. This specifies +machines (like PC,AMIGA) or operating systems (like UNIX). +### PROGRAMS: +Programs which either create, use or convert files of this format. +Some might be used for validation or conversion. +### REFERENCE: +A reference to a file or an article in a magazine which is mandatory +or recommended for further understanding of the matter. +### SEE ALSO: +A cross reference to a topic which might be interesting as well. +### VALIDATION: +Methods to validate that the file you have is not corrupt. Normally +this is a method to check the theoretical file size against the +real filesize. Some file formats allow no reliable validation. + +## FORMAT + +The block oriented files are organized in some other fashion, since the +order of blocks is at best marginally obligatory. + +Each block type starts with the block ID (eg. RIFFblock for a RIFF file) and +in square brackets the character value of the ID field (eg. [WAVE] for RIFF +WAVe sound files). The block itself is descripted in the format description, +that means you will have to look after RIFF or FORM. In the record +description, the header information is omitted ! + +If a record is descripted, the record ends when the next offset is given. + +Bitmapped values have a description for each bit. The value left of the +slash ("/") is for the bit not set (=0), the right sided value applies +if the bit is set. + +A note on the tables section. The tables were added as they were introduced +into Ralf Browns interrupt list - so not everything was pressed into a table. +The tables (should) have unique numbers, but they sure are out of order ! + +## MACHINES + +Machines that use Intel byte ordering +* PC + +Machines that use Motorola byte ordering +* AMIGA +* ATARI ST +* MAC +* SUN + +## HISTORY + +History is kept within this file for convenience whilst editing ... +Date format is european/german, just for my convenience. +``` +Date Who What +14.03.95 MM Introduced tables + Last table number=0012 +05.06.95 MM + PTM format +25.07.95 MM + PIF format + + Paradox format description +11.08.95 MM + MS Compress variants +18.11.95 MM + ARC enhancements, caveats + + HA files +22.11.95 MM + Parts of the .CRD files +01.02.96 MM + PNG structure +02.02.96 MM + More on JPEG + + TARGA entry created +``` diff --git a/Documentation/help/SharpZipLib.chm b/Documentation/help/SharpZipLib.chm deleted file mode 100644 index f15929931408cc5c3a6d265db8a9f2cba74e3d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1581877 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�&XmUDb^Ob=2Q6{bCY>Cn?svL;y5w9 z5iCm9ak*s89<7%%WO%+7%~GE96aTDw5$d$2PA^T$sk`?j_^j)4`Oqzj3(^9w4=RsL zVnTy55$aeYJIiSLHfIGimU6a|HwdiQstR z^h10KRl3$Y*?6fmvvo;pJ1zN~eA)j0fpeq(Q#*j!xw<;b`hg&hN#RMC-MgV#h`#N5 zI)9lteaQNzv2`1q{attLT;DIfV9)eT*mzVvRg&VGJSzangLYThGF?(!;Kum+7sDCr z`UPvQ32%#Ma9hV#>iwBWoe=zv z$@1Ld|S_Ot(8)g!bfG;s@~)34~lpG1^HZ#eMHhh0_bW)8tMtG*# zenQqDIJzP_!x7AjA%fTvPMLIUOtDj))LEasJwywCeL1EQ1HRa4Y<9;_pEEN_gdSA! zFg(*Yt#3yA5J>Ur+#i{><@4h)dJ2jexyk9*$ti@ z+aWH3W8>y0c34^E;X_Q+cmg#h@4sEh?M=AvITg%LMT{oIOE4cNh+f;aXjtHJ7BB42?mShldVq zpDncPey2MF75#_8Jp)Rn>$%!%33-Vy}5uQ!M0t zJqmx>1u+f}o?jVr8naSNa^%tMFn|!@n6b~*4vYNdf9SoYeh8>is$^KQ)sJ)q!VOoH zB8db^As@No_HrNYZf`?f zIn@YM=Fn5=feDb<(hw{z$*}y8>N%l-9ge=gyO?hNd4A0*m5nWC7+BKkpA=TLIb{1* z)z_9vzBFcndOKXhHHq%j@l(&<&TDK8mGK-{$A5+>kYHjba-o)?`J{CQ8*XJIMeM$J z_ce?(2H4E-EtJmcGnJiZb;Jr*J4;?94<~_T6#VPCGiw+$yO^y`EOwh#r5Wa**44q% z@w}zV`L4ZZFTz>VwfXapo})+k&OH4vRenB9^J$B+8zx>2WlN!gCjqbozP5!uNixCn zmf!j5<$n6LbMiA>2FkfUSxO$w&*!@Z;$hO*og?mUbrK=Ev;290?7Na8Q?UepWY!w; zDiUZn?5J!y(Tfk~Ia637+-D*4pY8ltO_oivHd%&0r!I=w&aKb#QR7Y~z|mVra=<0w zLg~+H>YHl^42J!lrhPtC_#{l$$~QNxXTNf^Icq%u9R#ps-0deO1G^M?MlsW0}g z(qGcy+c}TQ-+Q2F{x>saO&*l5#&n3kxBX{H{6yX%EeYW(XB;mNR2khW>O8^!Q>_Ix z!wDQ~6^fJ1@EXbO(OqgRoZOPua*|w2T9OwaV*gIYe$LwA_yz8FgYI_AN^3`PT2+P! zH^E{5v89w?_Mdr~rV)u1H;c%O@39jHwikr^I5a|b5?A~@dnxR18_OU$QBf8+O2SWF zj|VL$zFm{eXi%OsKG^0`v)Ka=#IXg?T^NqkOyzjQMF~#R_jz)QRy`qe$M1P!G{@1o zkv{a*NHr}Ror2lEMgZ@&*39q#7X!oY!gg&(mGgIY78~O1sfG?D38q7$Ax7PX*EHm+x#4OPN`kj2^K zJ6%iM$mdJZLydSu-Vd#Q@x#vc)cB2Z_m%wZLHGUd5!p(Q{HEcQxE}-lb<0X*Lue35 zbNo7Bh_GNdJDJ{_E-*EM$@n0SF5V^id*pBx(k_8`(S<~*RT(JK3g%L58cm!Z7iQ|v zb;rA|-+;!lONq_4FEa7T?OMV&Pzs|P2G1q$NX=jm6X;`UXi(q##*B` zF4;Fl!gfIMw*fA@hF=X|sF;TAEs}%4x$d#?YDtK2I%jWfmtf6`c>r12+w$$| zm6v!A2p)F{Pl&*XLHlSqS0po?u@B*s=oFQqEuY4Q2GhpJ6!)}p#twN(1DAI8hh;SR z&TF3=$dX%Xh;u!ejU#W=Q0D=d3L8(e(6#Sv|8hx&I6| z#acMK1_Q4r7vHghD-`1^`{Ix)C0ui2y{UQ;4~tS$#e^-u9-4XI7KOZW{vu4DR|Vwh z&#Vh?=u)XSU|c&)4tL4MEq()pPKDV%k|uCDgv;JA!}`wDPO{$+5CQ-L05dcMRsaBB zWkA%@zxbI05i|Sq-5PXdVac{zRwXPZvJjeg&*NlrmU-2S%kLxp`yi+!07FDzMg;(m z0M390d;oS&R?i6A5hdX#h(T#uPcsD*6u>iKIpIPAUckqAUHeb&a_#=6s;2wKD2rWS zE_(!JMOAjc4pwXSb41ycK0YK5mUbVF>hjCH{vDg(Gq{2V|00ID3BLG-^Sf;sU zS|mnEpmAtiJ9FRfy?x(q%g}6BszZo|L~&X{`J+goMJDH=3g2Ma-5^8tX0jDGZ~hwGodb;^^Z1x+c4Af;dgT)TZpg-V7p9?StgFujjMpTG0`pI7eZ_HTaa z(tr8q(mHdUzx1acdY|H6<42Da{Ob?bkM~}0{%7nzE9}?Me(u@1`b+;aJM~T2l^^>4 zsq9d)D_gIdmG4!ZUyt?5p^Ex;>z}*(^kF|;IcF!G`to+ozden+9`!wn{kr?2K|vtt zQL8vHb+9rbm5Cf$%exekBE{jK7V6%se-A}=vGe;wKe03I)Anb*H2zGz%jf1h=G?5= z@2m}Au!V*#OgANzrQ)qVY+16&HS|i4F^Wvd^;iwuiUZ0P1e>Unx;g z4P_dyVV1Ww8W_(9P5n$TX|sOc{R{7swJa9;f6g4Kr@N`n9NNF=*Qx&FtC*vszpT~B z{$y=pi*6kd*?1T#K#7rQ4>keYLlxTo+pI6i2E32gE-z?a-TN+NF`GBM_4&qBuIwDX z^Bt?t*z3&l=AF4`Ww(DW8qf2Eb4hXFOC%&OgX$@9*Y0oB+lV(TO#LuyO?y0)T6VFj zrq9my?4OzJ*Tw%9Y2j5ADuZ;KX4i`&)H><6yH061(kl*%?9>)9wr^!$7KbH3N?Q&g zcVA7O!HoK3|Bf`n0(vX!ty9w$wXR)W5zSR*=BIB9{SsbDL2;HT+22a8(QJ^biQGz8 z%Eui<6SMDlRC5X7YuZWk9-98czw>=xe>wBOU+>@dDEzOr`*=wq1m~$HZCh$luFINP zlu~C(%rd)sbS=%-egpm~`^i6TI66`tpsM60J+=+JNj1z|W0U>>gzq}v`-(P4)LL(C zKvH)7dB2{zV!Eti_JkH<2qOp-gHy4=T4YEm8e9iNpcByS&m#BFo5A7CVm0J3<&cdc zyd`ysv{tx2Wa~2<0ANlp7CgVG@7(OO_+dE0&d51vhM_Vg?Ak>`nTTV{Zex^SrResv z{?2=Am-_3MeP?I8bb4j;ZkkoK-rSIDuFtezO|JqIc-s+f!+^MY`=m=ItEkV4_K z^m9=MX@K`_4IZ-IlG3nUvZRfk|QlscnLPr|(( zyqdV?#zd1g4xrp$Ua@2K)*Ssq=<(rydQMa3>=icMeSLjy>W8GE3oLAzjk3Dc5(P+n z52i6~k;DpXgw{ov*5-U>W_5LLK3aF0?tUi}7PkRUy0?iUKDInDVUo6CfF>}|DQ@qX z?>h{RU1Ea)Z*(Gfb*nV5jNK4kSZU8JRU@atT5yZMejg8OUVt|>iZ6&FP2Cnk%85}} zZ-6Yaqy*{^6r9V`>PKE3zGU)-Mwf;_8~T3-=D8|@i~bZ6owj1wh^7kadml!+x$g~TwbXF z!~?tJuWjk6yNqr#r7(3c9g?Ej)S9qwS(qUt>tx%(VH~`7SGav;`k)du)T^njq9QNp ztxsAyN^P*Vt&+&D-|wNUTB>&dCQv2sjUW}V380tZ*`+|QOwq9)#R^*V;&-*JGtSp} zzR?LQm4kGQ8R7Z5-OTdTE>R$DdEJK?~;?} z-AphW+ho2sWxu|QkKEUswGR*qX|6NARBeiKhHO&KKG6B0CQP-hF+z9MMIzoK=F0ED z+^^znQ3#l$`DczXGYnT0g=3sZ-AvZPxJE+l6#+mTYx_U#g3Nqpe%&kaEY^zkX=O@? ztfrR-ok^CXwD!8JuJ5E99)KPOxbw7I`|@T@n-Q<3!;iSo1)8GOvM`#aL~=zDahOU4 zIu@xx*N?@tHdc-}LXo4C;9TT_AV4&mvj2UAn98iuCBw!o$4q=7?Nrm6V28+&(wq~+ zb-8d4A~0431$S#w_dRXZ2ClPaZen*u^Ulej#GgE$+~2HsmZpP^=^9f8{iPUUnR0E# zm2HVR>gF@euS>c-n)gaEO(efnkZ&jq-&@rW>`4dKE-whnEA{Kn`fgTl#^wB2(wW7; zKLnF1!g5TeKy~0MYzS_5)-U_F*v|jo_cKz)Ke{&UTnD1|)d0Yn2QxnbH|=8KA3$Y9>ff`fN*}lKX9URF3+08qNlVZb*ZSR=In~-hxWcLO zFt^?%)~voQVj}DDOFD;&d@TxO{CijC>A~Or^O7(@wAMl}hEjx}35G`vGTbV?as9~F zk`Ycu=2qa4di=V(1GmPAwonq2!i9EFu#&$0u32d&0d&KK5bJTR#qu2b?6MdP!GZ&y zYgM}0@m#1kJFrc^JsyzRIsLg_pXMTle&rOqKOMgH3!ZTvpt$;VVawLqeX^}@ctLG2 ztO=}Pf$Zq}jSPhR5L-IN?+KBgSfg-sy6N4{U?<-DWA%nsG)81P?a19ZPhe>Fb|i)R z@LnLmqB~l?#rm)V+J{%#m&LZ6-PSa6Ory|t32*Vao^<62nmpgKP5@PnNSdiUyeA9U z_SM21lAWsyHaexyO3W&^@a`77%PwO)(@>!7YRSVfD928d2_@rFS5dtK@FCL-c>hhR zDlKe)yQ#XmEm9l#+;4r?wa=@pR_)tG(ZGa!bV5xb$`@yr>PYUI#v>MqP!WWY?~1jY z&)3egXF+j*`)}d`ys)Z#(~7d@NkVDEgSA?MXfT9|ktDv{=koVEX_W13a>{cFP%ltg zZOYIodNZW`TaY(iBR`CN;g!1jKDWla&r=P_E3D<5Wj&&C#rw)IAY_G}!-5c!4EoeV z2TUB?vRHav6=ATlsIJGt=j~Oqx4+fUQhGYGS%wlKMOhF{-H~Bdc}#*?A^H||>~dSL z^w7S4GMUiM#+N%(?tGo}8HTRd0%%?&syP4w#v+5^H$@GxFKzXxhYV% zi)%@mDb;qPtEpaT{M7E+lG;)Id1k9+{#%mLlcVimFrXPCBY5d*75f6MZkS8Wtft;0WBp(<$k1v(xq zz+WpL#uO-YNE9R>1qY(nvB!c1-a-8K-Eq38&Esu6eCenGP(i#S&eI@CyPK4}{G6VeRhJZzSFzMj`4@#D%QO5_xXj^b*kL2p=k z>Ycfth^N8w>h|5~>S=IHA24NhGoL^Y^zssh|O zpIsd&&D>>q*lMdREU!G*FF&vStJ!PZt~@3zZi1jwhli`+9b<>_W+{V{gl8ItJ$*Cp zwRs!dE?-7d#JaSskd%eLB5_G`^9kU3e~pM1DNkFyDa^b=GPcr_6;QN*(beQ-fsgF^ zn8NNy{8x?|x_EH6X274}12Q(IF@PvD$g_ub+KN#$^vAW<#1VNAyoJbDcs;_J)2rv! zwV>QYXWq}v+3$)^0)fN#CM|Hp0VNuM=#``NcMz^05&v&!#V6}cxbv%_B~ z4ZvR2M+|LUo1TFF;CED{S`!}X+bpr7ySQaSC49*9a&o41J)#ZeOZ+mr8r+YB9iqZa z-xE^NA$fE3FHfK5_cvx@0A?AGD1mo<>V1iVXYQ-8mP?OKPAd4exOv55ye=4c>5>C0 zZ7A|`2@qBwo~r)@c@Ukd@!Z&w6yhq!KDt(~JsorucqzS+W ztQT?+O^v-FnpFW= zi8kYL>q!zCwj>$j7l%OGlxq5%Bc(=l*(xw4)u41d0rrbg{Glb(4357BZ@rYm*Ha+QI7$ z?)R5$L2&HtyfUsrg-uj9x-{UN-@Y_0yoYlATO%=(p2s$wFMj=>)@{OzG4Nodx{a*B zAvWhw@dbBC$1K1&z{XW1h0cn8v&mf-#LvZrGhrT`>oLPl6LjOY|C1bM;rue`T>_}| z*R~UfhZlIs$D8;lEbQTSYm#|z2^VE4GuKTg^3KV-pwf|j^w~$-Y>o;gbQ#T+D%=94$XFNyVf;H8$}=e zZnRm-F;@!{qIyA2VnQguJy^%<*S4*S^dj%cwk<~waNm?uwGM|ZjUIk?ARh{FKX{4n ztUtpx9Ool(Iv!b)O$JKgXAv>Vy1XL#f#$oMmyR~!X4@vPzxet^(U7l}kTN7HV%kmn zq-3pa3PRD*0wadU~q!@~vH9!%QpJaiC z>n071MUicL90f`+@u^X363Y(Fy9**npPd;OR-2kfPWt2yHC!% zJ;X`I7c++B#GmptCru3nnq?9ll$s zXQuXZ^63Wz!M#SXOZw_qsa$HoWRy8aeO2na9H{JvF+3=ATm%)NyrMHuY&S4$V&rVXm;@ zDV408X0d5f9G5w~SLV~wQ0VHNGbEdqU}UAuyfrMW(#bHN>NQMTc!}E`dndVx^B2F% zlR{ol;(P{!A{n~!-}-9~QqB4+@$xQJNxV~Jxn~*CS>tYuTAjsWS&?5nbA~D$9pB8m zR)F<))~|5+eHyNKPFIvX(oB;!{@|>&Mjg%$2IbHz>CDqfWKpsVVxM|}SYlUJH2g6R zA?{k8?F%+TG`nt_b=0IK5N*!4N%i4P`C?d&SC95v(_;`o4Gnor=c`B#t3U(<6*Yrja*XpLopn% zhF8;L8h~c2+tH?wnc>wDC>DfQCwJ_uKTfaZB!&yK8rtS-+WMw6!&;dP>nEK7lyJiu zZ;Ayt&%A2vWGL&E9=dfZ5e!%)enw1g&sLB+YKkB6@??0#cy^5eI6^9Nm{T0$lp#fv z>pn<^VvvRou_%3=TL>yRiPwCDMvUaao{mh2H}H$_v#{~f*|g8`g1a&y+j>v*qluV@ znJvK#%uVY94MR)rSIsc3fZoJ%MLtXy&OE%Pl8FYYy46L4DKuj43b2WF>`|hQ^bFfE z3}US5oQ{sf%_-}qW2}6x*GZ>~yLIVxvEVIvNco@j@S_hseRj9qB~;XmC6u3SU?bM_ z_mw0t)V<`4;nFoOBxGdah!xfH7uG6Y{aW10@ykX+0Uv&DY;|ndg_NaS;Rgv?uT!va$pVzY4GJ53p@={_m0X64i2x5=x_jyEQI41Gu`KfYTwGlhHNhVSIkc zm?waUoChed&c~t@Ssxeh$#ZMQWrlPpc~e|*z}!X@kF5p1^lM+OGr4!jYl*P;5q$1e zoRhhGr{KYt5H;wzHLyDL@dBkP*7VQz7G`{iBbFVvdD(jX!MJEIX|Z|fYw5((BR@9Q zidnR#p-iKS!6zI-J<+AJ$bAcn@iTdgi)?1QMzOc)qdv2@wUQp$gSQzj-56AfgV^6J z8G5yBfTyB-0?&#+Z|6}YI~8?Ym@$Aet+lf1kE+74a!AZ38C{YBzWBcXc2^HYoI%e3 zXmvw71w)% zJcdObJImP;3!yyftWf7UW*MH8zKxj;bT>|LCvAq1?UG+^6)H}^vhGF-p{SEhXiZpg zc^J{+hEmGM0roJSdDCxt>MlJykI2sBNZnElDcrE?nRQ*kiPNl4|uRM_VBi{Z# z-BW*I*k&$e4pMxlu|+p%Rkl#ma>6)Qx8f#zsdwJ2rOcTiAV;|fD!UzVb|Hbh+FV!! zex#zSZ}XWPI*-^_FjIyq5a9+T)aynN@%VM-nn;t)d4{u2^W6EDz9TyD)q=##(kLnl zh*~w%5~7Yc!CPWFhliXXAT_Li^s7hZ(%ajK%)*-%auZZ+k01CgmHMb|IfSl9m`DQ` zA%Dg5=tuv|m&EA7%p3=dg18d`Pb9*x()zEeuS13g2=PRIt!HfX<)41RuzR8irT#v? zeyhx#qV{yfQ&p8NjnzVbt?ws&DP<3ai7|*(A=F1woWPCi&}FQ%BNY~;h+3mg{!eG> z&OG#)$ZN3m$pz!RW8VFm&__~uHOB~=PaVi#@tfP$(BnM0)mWxali`*&z8eb!V}_vR z;&!eOMU3s=`PHBG<*|CZMF2qgxC%s{(XpUv{8wM)4a`jrqpM*Qxl3X58yxza{?be? ziqV%{!=wHUl-V7m453quAuQlal;Aa3z0A{j^ToPlnZLLy1cRL~1IDdDAXGS|&PB$? z%6ymHvW;FMBft3-_WgX+qa2_y92>f!IjXvGNk5P`%5x1Nc%TTw^LxBgEMO-lfTo#vQwGMe+ER+q zN_sR4l=UtDkj``2m+udKY@IHs=y8`SoiAlCTCXQ|d(&!C$&q4M>+t5eVA&mH=RO~tzZF`AS<27?N4dVPQT zo{+&FV5j34L@Ghf{rR;9yerV$LMU3O4B2sFLm_TZgH&=j%VM*lC&pRLrq;1@+F<1u zx5|zz;sS}XKhEM%;>XWvENHGM4jdRB@UU9A5YDH^ZVVB_{ z9D_fr>HYlMw3-=HvjmiW$&Az#AIqqKP)7Yeu93j?AXyzpA1x)b)av;2o#l1S_4MzS@ zx(;tSiSg244%GvW-RTaAE*2+QiNI#Q+^z9@M*1LQTr!S>CD#WO6tp?|EyDk!Np z2?cAD^^d;Mutu0Dsu}p8675O{2UdRP1=G_UJ747b-cLKC$?*y{D%M>lfWYRXP4T<# zeu1w-8xKm@pT`4E09+q>T>?wyq^4?ra zNU{tijQV~|!IFE7crD;w(zGHU^DsR)ISmUB6lrA2VnD~`r2Kw*kQw99A}sm4t}GF{=>_ep7B<@@4kcusSB3`UaW0jf#>_G^<6}pui(E7 zDGg^Q7>~s-rw#=A089O%jj!6Z-5acrkT_4!LxK;_#~XvfXSHX6T`w|Z%^;iR6wL5E z>pQ)yGx4QNxyN(mkqt%!sd%;1fSmbjp(xtx@m1l#t@Ayb702WYUwd$L1>&~@wBg+w zm1*l0!Rt1h?v-wPl*eL69g#cvrRTf{S=KVHbHcD#qR;iX(A4%eY=u&Sx3M$##K`N_ z>o?|3$N@W8l%oG@$UntYwc1pV<{2G)fi69FhEhwt`qxgeV}{q*&TDT}u@LYbqR!CP zwCo0&_JUN;Al#sHOz;Anfzaf$Gmaa2UfeK_HIFD-nE}6sl_st@DoQl4?$P;gcF3n3 z>w@PLPz`~DDr%eu@yD;VCi5$83J{i4-{;N#_2j|C>2nwb{LbzaAZO;KS(@4EQi+ho@ITIcAhT_qziD*wQ zegi83w_wf3c7hMStntMzy`8Iz8^DgB@2NKdRB|p-zKrM{_`<#69uZG>Y9Yz53`IJE zb$RRWm~flcy(zN(CYl9EQtv^5D5H)sWE)s30YZt>nFBe({njl;*@C9%`nI<#vh0&UT^ix}pNsBqZRxryMB~rddQ*njKcm_gWosRBmC_ zFhnT;NP8S$=ht|@R@XahEodufu1+brssL4RC)IVo_F+)Y#mh(uyu;Ulrv=Ls16*0l zvZ(si#C+w6Rj<1a6Uzq}{oyb>Dcs!h(g8xf;7DL|S@MK;!=vt(_T~G?7&k3($GO9l zF1YO%H?rA89nP|X<{`>uG2y|tg|0Q{*DF4O4_Btl3d0Xg&y4Shn zL;x--WM!2Ym5=#fp zeO-N+Y^HU&>Vub`6XK}NcCL1ZhFOU{l=1mq2MYGKWzv#pUn75E{B~f*guy2jO1Z4P#6c3K8@9B!u|Ya>?BzS3A;c zD16YNn+Z)1;E-~1wGS}b*Qug8d8L;OiX?fNUL_tI!7sFDemn^6QspN#Z!U6T%Y0_Y zY)JU_+WrpUSULNft~p-UN(5W-=9Td7vn)MN-PKf4FaqvxC0iO=1%@) z`nXH+_Y~{$5bY3qcY}b$U6XP6jez~6z>h;4a{)1cQOP8Hz)x6Jux5xLe|9L14O)o5A6x3wF;ZM#KUKT?yl)dw4E#b1O33DGF}-$C&lnHgBu zdOv|oQ=_3MMHIoCaPBO*T6F&m&kTWtml1^e<0{h}(mUe!M|wtl$*s_$?9os#$(THR zYp!sBaHY&0J5hQ6NR<5TW{KSD>Kd}})>yTCYmRVE0hHIN$cyrP0>IOaLo^HGjAy#F z&f)CilR=J#pKVsYh8-J#ATvW48{zEEmI2N?FP7y2O9@P6!6wE*5(Y2l?x1=KsYO?UCn}u& zKG|L!^3w?Jx*{t+KJQNoaW0%1=?p0L5{gM|@k25wg9sQ}t|$Q1FhZ0-UQV@}?wQfo zrg?=5ANHYo&PoRHurg?FHy*0W{XZ&lCB1v?XsNWI%}uGs!>3dqsx*W z6>xSaiT}cAeRGmna9j>CK?e3xt|RliB7K_-7t2}>pF)2uVpX^=|K%geI8zb>M@gzPAq*^Jk62%`d_*2E5WSdcAM?c3v2bS^!P(kHQZ};DJ8Odh2+@6@ zLSVlTzyJSrz>I#g7Eho=gpq-g5{Zx{rN}5SvWKOFcsFm))_v>F4`2Sd^0QrUe(2HP zdFReLbDe+srT;w7?qAx`Plx^44`m;(ec$}&@INcpv*r&B{q^wv^LCDtR%h1eUzdJ^ z_{^?#)>*lqbp2}7KZic+E2}f^*bx2vW6$pSeUM)IXOG!_<%i!KJ$J|UuY@|W;<(6|fAIGP7&m`e~9520U^&tDw zWT*f7ri>lF{-uwapJ^ZbeCnV(zhM05uLA^15~_Cyfs1GZABl*+JmXf57_tXHr2_EW zud4x_$Jv?l-B)ktvmtiP0IB!%)hy~96Lg4;a_uV(4o8XNYB3d+)-6pfKs8t=N$qie z8AVozaF6+sFO^h*60hvkWzsRjnYw%l40!hoITMLBnY<^W<5tkIwhF4VC#ku*^`IPr zW}H3j?&fB)^r*id63bIUb;&`5Y~>(2xBwArYIGSC+haO#oji%2&Fa$fL(4X)l%;jI zWK(IL;+2jBQ$gX=i0V>gsh@-Y*2i6c>{7s>zV+&JM4kCtFLh6u`45lvH_=b)$~pS; zO`miI@~P(NSoR%}nC0@~SrQ3j{SzB!Ostp)e14ODm0$RIfmt=Hl5>88Gn$uM@9QhM z1Us|T&sPqsGksI^)Qy_ZFn}|P;-Fb=Esj=2g`ueu?Mbw(m+&2{HU3f+*GKZqV$RFW z&pYfq+^?+)^H_K{rPXrE?rX#_JzK=;<2|8pvRLeE8->H_xg;Ieshg?pnK#2IKYA{- z2XQ4H!L{s`jumwgGV$kHu4z8hGq%TKVA4sK*cGA?o{M)KybeYBmTt>nrBOLMw8P_6|AIfl$eFCNE>)Bxy{*!j^$?i zb=X{G->Jto!3#D8Jz})}iH5{{%;)|cm{S~}smNI5MhB_^&jnD`v=CDG14YHW1H z2TYr@T|faaRu#jv%#_5qwxl#Qa?Wzt_{x#@d3_AJPYCOVokgGDKVdbwhE&k1e;=GP zIGVUyVmQZ?ttyixq=c0sw(10qWi_-i2WTK>D})7qmvqh0h%yMuw5X1BBqUb*(o|+M zHZ9u}!g&noGZw21cv0iw>@J}NJ&Q*vbQDi2^elKd%kQzg0ruE!YdpTNj=2Gs+bW$l zysb-E#Fii(>Tz$drhUoy?7NuoSooH!AGvmQI6diGW0!D@3Tt?ld6hcM6afld$sxW| zJE|vk#W>-MFbOOi$+2+vc8vwHbWGa;M9BlCR~wb=Gw~$m=lV|kyr`}-f74^3wyLq+ zf|#xT*50|nESdYM>Fpu(AWw@VWmO}_5ea6pJ2mzx&jlKgABWH9f~v6+xZzI6+y zY24%*-`)h}dON(frGR)v%z2myE68eec@^)w&6>PPPN33>A_ME`wK7Giu!YMJ=w3WR zB~=>WeB5p_O}yo${XgGfLU|V=cqtLfU{L@g`i3ZX(s+vBT`Wz_`{EeDk3&5DgpDBl zyqXfqjrOy*cIMtGD)oyAdY)x}fwR-CB_(;O%j`Qy?4I(WAl3 z&Tn>ie=jksFU-`V&2{UBu8%t2MfZYRnfeCl#Ayn$=-sQ(BL+jsH#|ns648WwRIPh(Z6r4@V+IV`x-?5Yc=>p%c${rv( zoBo`LY|z+mf?fZQo#w?RL9xbT-(!HULkXsLK_qmS-FF+&Q4&xz=IeNAdDdxa_jqXd zN{&gy(q`zonbFFJZAb7Ja0pNm92Ba3Q4pkfsFKw*QwqV6ubpaXlJoPXzLb}5|G3!t ziBtIP{m3Bn8Oj=?W7g3hH3qw@Ae|fiyjU%ix1je)K_h%n_ma}x2D5=lltj{L_|pyG z`?r+tFce#S_CMdws&%H_!1qKwcSy7$o?~7T{*pDzHn5J2=F$C_b;;cMy3Xvp&+Z1> zR*42`$ZLgzLi*mcgMG0DCS8=x@b``6oi4fW*>SHPJ7NRjI5Rd{hOO{$bgI>#{aM-4 zBt*Ke|CW6ve?3ZrtuX+c)7!}Qb&pqHA;&1x*#=9nn(!@!#9q*P67&1HKi~N>So8C? zx3(5`8itpU7KEJFnT)m+*`)hR^zu8N-4=$A_V1at`P?d5!pPHPfi{8`mj z-5)V)Gz9_A>-^mpL#;da*SSyrd9@z6YVL`rfBZTxg4y9q=jzD4vt{GMj4t;b;{`9jPo^sp!2pIE;sqf|1lRW*j;6dm| zq%9|_m-@u%H}Jx86T0m&L1#Vn<|E-hJs+~HeS2PpuN-@6VwNMPbcwl%@kWy`J0;*& z7se9nmhUP2`(>30+cNP;;fAA3VobP*Y2dbGYbVo~5BGieQn%TkQvRRPN84JOh~H(r4@Uki`uZC!C;85fu#r?cDMUC?|z~F7Bjwni3`PrI97&R zZ^rx3oQLY4QBB|Uj(07zu^K|cO7&hc_`_3_YW7G>36>(?QaY%-|9N)To?ZPJTlhi5 zm_D3KR@8W)FZ_KK?_G@m+33rp8HZQjWzud|uPa}7?5}l<`jmD_E!h}Rl(jcj_%J*z zm?!sXnkDa@-mkM#L44>bHG>HxXTUb%XKM;Q>~k1LXpBc5F$9^@N#JK!pL}a)o0{Vs z4)L-6xnVmfHv9W>v>xG55VPpSB$5ZWi}O<&@z>#Hl*auR!izU+>_E6iR(yMDOhG;Uen*}SYc4->jF ztg&KH0TMn~8M6Gr)n5Vy!Xv_tE!AkFYX^OQ8*eYQDsEY|%(y|b=Bj^5c=*b7S@qvzO1uDL$H2D`0ES~h*&l=ZKl~3uUIBOuh<3n zCWs=`t)n(=;(3Od3fg$nU6mLvE<7$zwPg2UBwpH6MoXi@NFBKl^}+k{PJPekFLbYg zA_(2K3*nNV?a*9MS3B*C%i7qAbh-e~wZy{M z2CS^!S^B-_X+2JLgzMxt?O2{=uDbp@W8h(A%7*x3={}4XAVl#n79b{Phci}dDfR(_55Ri+C(CJOc^c_ z+XO&fHyLWjKBGqYh&t?Px@6hJ%&h}Q2Tx%ZC?N^k=0>*-{GZr?K>l3n@e*DSU6^_s z`Sm=|cl>3<@92H^_v3n4a^dr0o8NII6kI~MX;rd?`pBW&rfKd}$zd#oemEV=824me zE3$=#viG`u+X8+&r89Ytj^V_aXrjOR1D0yZdP_R|E}V7+^SO-haXZFeF!%+N4b$9q z_bX6^P|kI9_=oFB=knyp2R9LiNpaggjte(vafa=z_epG{iZYSP)2bNR9@ViORC@ty zG(Pi`(WJn~gHMb-)+7)NC}uOUNrdIzEB?(@C;P2idsquE;v}ct#lxaS4;8lq>3q?Q za(h+}o_$6lrs-Y%kausaA*wA6;q>D*W#Jo$iGpC~JwhctJTCOjqey+l zujtq+qF+*4k>G#joRrv6!KuHvrdi>4nq(6H>bq2SfjkHfab<2EYYCaq#gwmu#nY$H zK)2zQb3KC%)AmyCh)w27ac%b{4(@AWDiuIgi+F|IeP9 zYlcJF4~lkpZ;r5){wkYrC0Wd3FlLdhdU_N2`r+`pxuMJMvuJKV{mT?#nT44Eg6|Gy z=B*Xpmh}m7pDlAczpu`{$6PMKm)+R(IDzJQ_ndbC_3_I6EnGjd)2c2d%szcHvyox9 zTKxlU)ZTJV<*oRT6Sy5@MSvv|cN_-HOz3*5sEw`T%vC^nqdI5A zN;I)T@ZhGZ0tXflBBRSUD_)W6ikJiB`e)KVu&*0k9=sP&)Pr_=u^G%$1nY#(;}R2`oNo58ppC3z8{j@$m74)V{WX{Tavx*T z0-6yYhkuEW(Bu1nMwGdvd9LEv_3?(Y`Z?RvI!@#42oNc4LD9EEEZU`uaUiiD(xOC^ zp8zkl-iwZtIpYmli8JQ@pYS4kFa^g-%4wxi0?^wS@J#N=A-SlJOFhyXK(5bnlpn;# zRj@w0BN_-252*~a{2DyMHO^eK0mZyA`X7$BREdaK(RGGMtY%5t+u3Fh@Auyyq1-XT zGszuz!Ls4s_Qo!g5We z4an68>E!#grkD^im$c}{B{qB!NnZgStdxK8dCOUKf5(V|+Kd7S*P^UE{j>A4dum>z z4stjSsuqDDU}Kw2})=(oE@u(h_a-TNLBAqbBYC%clNW*ERIT3QirRaeMHPWTD$z4Bv&Vi&g zL`al#P={xGYmVeV{ zCvW~haa>fOb7CdfUfGN}1))*Ldz9tDfrH!?U3ochB#F`Q|HF1%7L+XVV(GyT1PZ>M z<5R-vD=n#4nwI3I>TMr9?(tcqKrisv;B}(EVWlmoHHpCkrtXzB7$-szfxMS@m``Ki z@f+6ZqaaO8v6;O@UKGjb1bdL}Bs z<#Z6;D@}lOo8jtHa=QTCv^Jnc*H|H3f_XX;@Wz_KSkI@J2n3mn3TWKAK(*X~tM-wR zzC!^d_>a&z34~O6(F@wc!JpC|>~IZR2f8#Mk=5LV_T&I|DhoE$$dF68%JtdfBEicm zb*-UdUe60Ub^8Q5TvcYu2IOlr+T-}RBlvH;1~N#Ei{c05~yj~`-b*l3xBgU80pWXbE~+G@ z9ygV$LQJ?8ObK>EIX^Jn&(3Y1B>rT+#1y17753;r4GI$%$uZjPm9`=U)?V^f%7+m>px4Eg%jSE;Vze;A4GOs%I$%A!=LtjD$z zqcjUcm9rs1-?9=!kUW>he8^`sg()q8(RvXdNgRPgfQ8kVBG1&^CZ*@s_}_Q5M$%xkmHmJ9gb>T#|=|^N~1_R;yr)q zw!6;aPSu?CddSJvc9Mh8zcJj<7=_RnV0jaCwRxRS9-F*5&dguNU>aq1t(}z<%T`x9 z-kM63evx@CBibYpK!!{Xcan#Fk~c;nDKapJB&f%}2_Z0`2W9mwlpy5O^X&Y$X~xtO zMizLH%riv=rRc>GXlai>1BVXMfbO&*-enj3XZ8RMU{#`kh_2MYY8;(f#l7l?3mMnH zet%l_1D)Ba61dF538k}QO~5$0h3o7w24AQs@pOkgA9uPr`~N9GHUg`?QDKq0UkY2o z0QaU|m=p*Tj04H_Ka$GNe#_Tq$csX0Hz2b%iFHbw`KaSa4`z@z5z_=*Z(B63|?%P}4H7 zHCU5x*Jej_whc?AT9!vZQ;d1gvaMn%L{lTMB!NCqP~ca)6_qdDE4CI~JmD;&3+O3< zrQSwS@#BFzSZG(8u<^V_c$R%&H7*YOkEtLrzqmmq8_qPSovP^zGY4^8dm#w~4$)P= z3XbBE7Pug(JV6L}e0855P@!>DY(YdSH7M6@2@mrmo2S;5<>xcIW3AMSe`e&ZH%KB7 z10AB#gyMmI5|=9K7+3)n3AXr7j-V&U$At#!1EQHK-}fh*3S{)4Ef`Ci$f&_o@=U`p z`(KX{uDS1xaor&6G`S>_OVhP%X9{c3j$j(&8;84GZSa<~VmxQTR^23|-6KIsMSBFJ zz?`LrP9`DwxgPknE9@-6oJt=|5MHXh;T16qLMNDrH7HU#!uGFx2gXW`Qt&Zg-daXVmIa*jZAY;;ks+ zcqt#J5c3qOG#HM(!P3`aKaY=B(}s5X1vLW=Uc`MP1sVu0SMD(bbtdaMp45g;DfRxVzG`3?4*fV$GnoqWAP=13!%L6(4qPg2Ig7?_Z_@7;y0 zfCqoq=GgqAkwYB}aTM#LwMwgLgED3AQa1jCDuesi^Z@ zC7v{J$iNXM*XlZiz`y#JzX@B?<6R>s^Ne(<&l1oPWA+KSC2uIvOl^=Dy~({yM2zpe zgkP3!?-*L}L=;3N#Z9GseUV_K$hcV$xH=|pAD5r)32e-hy@wPoEktd&(Is_6RB@n8 zu!dzGW)t-(nSX@MCmzY>s4K&**lg+j07wE&@R0>fC`{TP=Z4udv&UhA5`#)k31}jv z(&(Es(SD1@>6mDkJEc+$wm5+{Ly4f)62=rw3E#?v`7M{Uuz zS3C|$Idh-hpEq;peELVfq@{kyBZ1gb$5ID|eEZrL<%Tc|9fGyO$VHh8i<70V=*@h{ zLD49vq~l|2SmJJIjm@131%*&R*jByBExyQ60@34ATyctk8l@0L=s75f#B!i=@{Z-S zdmkD!>O&p2Bcg8Kg&tbGIhk1&k+{S7Lnw-KgxnsfUto%4(r-KlcQemc2bB>pA+M={ z)u16B1vwL?Hdkk$;w8TW)yk_v1<}gQd+Mj6uk7Zo(7}&DRujvM?Up>yH^X1)nS0B%% z9{q=OpZ%tgSm=KK!vSMUoay6(A|1T{p*Gp;vv2v5&%FQhrScIb#LNG+dPvldvXRL!6U5sDh6Vw1))>Nyd z;&UKZz#&kvTp>!{3=1Og<3Nh`o!wnBL$RP&qA#ot_aQ(czDx__M!JpN z2Gow^V=Y0ZfvNJ^el5CIU@zbXwfvqKz;&CP__QLg?za+o2bpP{i30Wt{hOZ-D6+(Y zm^3%@Ee%Rqpr|1G_ZN*?IB1Rhz889~kfTgbgBBuj9g~ujTJ(75RGq{r91}m)A0SB% zsx#hJq|u4=awIwh9F09F5PoM4q7ny-#*q9YyN$KqZ*zgj!qktj`{E^+i~VRHqJ)^F z(Tbo7DBtv-9D0Gx65(+~Dw(viF)59kHnB^YiH{K~RNf(zS^;~m!UHftxE)g78kXQE zq-l3EA%3Y)P)=yg&&@Xmkg9+!kFo{afy|d$EB!)2|hw@U(v_GI;Hi9?|hKZHvU=$FEq6kfl9(p^k`_oVEmE0N5#6VaTQ$4zgX{Mls;5Q;oucd~I{v(%RGZVysG<%JiXeyi z!_^^JIG|fFM_3J8W}L=1JGG{yaR{L3(qW{ zM^A4gT6`M*pnBJbq*RHCFHYUBwZXhjBniJnaf*khxEB+6H*FS@NW7sI@a zR76$*16!kmpW@JgIEtwK5MUrhyxT8TxyxB2vxd$TV8JyAwO%Vd+koroC3s9}t{?B; zIxTWTu_dvy-F~DC$RASPMvlfjTAjwS?rvlAbgXL1W+nNvcj(Y?L71k*83;=p8BNoY~Qo1f_e#Tw$&q=R5jxa83qRZ)F3gEH$qIMrjDPk+wl=FM+K+}-q|q^S%$n(A5>PM=A4wt6u^)P)qJEb$f#Y$=SVygvEd$!rqoGuYL& zgE}sef)Ke~68`5(&kbcmhVU1gPF;J;Y8#f^a5bo@G}SGxDbz02Y%oKXR8-p3m*BB^ zd@(#857|p4fAyL^RzvE+Ao!fzTZ*KBFZdF zwFPpBHtdj^Fr@Z!!-f&sxcWA;`?vOi6W*#Tpp-U+iXwTw4~NuIrFaVDlmLb-u8)@P zZ+|=Y(bEE?`DAigurn2n8g>}0AhBnl7Shh0!gFOW9)o^t^L2W9a~ioXQ+DdcD(sa& zvnC>Gx~XB1ZA3r_f~*{=-I?RpQCZ}I>N%Ymq%GF0AZ=-~ObQmhf{wU$1jZfScL}uf z-!lNC|ITJ8$xjNSP7RQ)j63zqP!3DiXg)FHisF(de#e4nT{S9Y@7ny!aZVeEn|2~xaM)ww43iM#Z* z2|*3typE(}^&P=@GSIPAfNKYSzC7Z~8c)W~=E2n&c&=FipPPI7)M`fb)LZ*Hk(PS( zHg{Ga4bTWv$mo!eO*mhREtA{6=xClyQynBi6+SF8XtIfRseu*haZUi)(xbHo_f5;= z+pKTskE^8N>Xencx-M&8gYg?=mnhs1qSfYvFQj#NaI60PW=1`P%)n)z4ZgRGFIz>V z7OK;yf^0-GH`XO&Od_~rj|yu2(tpIMo*GYB;JjgZ=%>Tz{7c_e^Uxw-W3IOCL`3#V zL~%TQv*C-s-tzHS~9(^Enh`qGFoqKSn>vnY{{X}GYL zkcCUuj>gA?-k@5f_#2B#W8Wo-E~ZZ^-P=lPVV@jRwAg6s-u87Ln3PbtcH&t0et-bi zL7YuKaE1yOex7Q2n`|~0UAIdgVzuy({&9J?&b?~a`;bLk7c$LLdbkv$iBx*-WGM}t zvM-B79NcpaoWGjN)Taf=@IHAeBcY!POWL??hm^2=`ZpuR#^iCciRMVrK2=I!fqCA) zPa|LG{m84D>F}z+g50l#)dr@Jd)VdP09bjNZRa5f8X09}96k<$7|+2TraPfc6s8X$$)8 zX}{1ubxK))JoG#>j{cQ~+!J5@XPx%4OWn21rq5#P(lz1p*tv?`bP=FD`trh-56#(Z zURW@K*~(HBa#~kvsCYntx`x%eQYugkh}Z0iK7dG{ksqA@@YmPuZ3GsK?pDhBxg`ft zh|gpX2;$OrNE0~p;s~~<{5S7Be({{a)6lKc_zEC*2iPDbZ(wVlvsYDimPC~^8QpbD zL2`PirUC< z<}FI8jqLU_1tWyXQ&kmYJyes{y+Vo(2X5q_o`yjg3BmA1X<1q-v|M`It#BI=Xd8eU zT_aibn6TfGR{Z>~fiEMaCkFaK0_Qij1*i+$aFnmreT?)T$3WNf+c*$!kz^H@N6WsV~ z(;0#%kX;+3D~PE^gycLoj|zVFtG={L(Qp^D_Z#=xO)S>NTkA?cs?pL$%a$zboN@hjaq9St5HP8G=$1YUuR z59x1h6Vr)qEv50b<-GB*-D~t|d)R1t*tf(__j^}Z^c%&nmmwlwe94AuMT)pJY=|K( z{yI$j{qFlp?%9*-utK0X>cI*Y6qCWrpE$miY-yYTb|8HRRDnqMtZs0GvX?9(z`6o0 zYfx9fuKCma?Vc?Qr6at%|0&aqL(&bht5q7}I}ZM2X%f~nYeaFO_V*Cksn!j#7|wBN zf$-PP%6+#VEmR8~c%5&JrIf-L{M|l1B$Jp}c-Y)uoTRk^j-kw5ji{$Ln{S^{ylcqa zEor;_-E+VlN;@7S$BEM?#3P;*I|Aq8-(0?=m-9#!#EQ(Bnz7znBJ~$4^6uFEjn8k~ zrL8Je%7rWl+s~A7_kUJzmQ*FuH!f=O{v-vWyjO*Z_8?oKy@c(l@BnT+|3qpW3g4TU z!L^brtN37Z;)>$GsG`y4R0NLF?6+Wo4!_6ADNxT%puOG5Cm)OS5 zXGiG4{nqa8EgoZGFKh!?@vULpjK1?1L1C7#8nG|4MB8QWrpn6OfaP70D!Vh4#oMpx zJ=s&bSg9{>OvbHsQ+F49J2rp%G%V&c?*DE{wUE~kf7HzyX>N^LUl&vAQgNCy(x#V9 zopmFpwDFi-NDbK6_6>r?8v>8Ys%;;`vD__deH zK(fV+a!g3V0YhGn-}rh@EZZS9u3<_mXL~pOF3Vf}6i`~@kosG94!t8N&U&6|5740_ z`|16S(GP>)V`Ajk+v<0qN@l8xjRD2E=Yzej)iK}XDE-JjRR0yp-J}cO1DDxVBc#*^ zP9}}FogyJfQEqyE&OL75hqlDcxKYbv>AG|I@M()>y=`5HkhXVpFF(!CG#0NR7Q9xs zyI+19$&82H8e3Sx)}r=#y*fCMd?SI!Fl>gX!ntQjy*2Ip-VPqukB&lf=JKvAVt0wi zG4&Zk9=&68IK&7k6E&0-e#Gtce16^`;f|+yp;Se51%V(xFTl3c zfFiD|`xU7q@1V}u59T#Be><+_4Y@8{$mLoYWQ3bb$`dsTdkZr?h3)kv*Xw zH2M_b?Q0GYD^hZ=-xoy^GF_do(Ta*s%GvvxY?{3luQQ!wDdwizb{*>*Gj6_+=2vuN z6bT4`>GNbG`z~I>r^2abk$0S#$KF3+Dcr*AfE;o*cI=rJNkuE7CG?5n_l1Rk!TI5@ z*}P6m3Gs#UIq|03d@G&iJasPJJm;#L^?=s=qa8S{j2fo6lyytk=yp`EM>eGT-$xqx z3sd4@7mYFqjH!CmQI&`M{8qB`r5F(33%|3!q)+Y zC1IwIYj}hXdHKUMrf!FRvKa>!S#>=VwG8aeyiA!uzqtx^G1^EOWso&<^6%X5@L<3# zyiKaL!5{2V`*t>BG5QuO;<+P)uda)8+c)CBIHcd8yE(AuO;r(D$kE&}%0^Zv*lKPl zAhE0}H#SiH-mCr${TTGnlJ{iMng*ksqhbT3hKeGqF+r=jQxnz7l!=}9@5E(qeN>mw zEGBT4>p!_9PHkBC0eX7#PFzT z>bTzD%ih~4L;h&VeVboaG%FmJ1%}Glx{0Dt?xMzc>)^jxpQV`E#ItxJKg?K>R9k7P z@}ce<4bdp!g+^ZAeGo_DcvI7Jn%8Z125@ytwr(xrdzS=>f;Yp`~@WUB>(W-sq_ermby@zvMO$=7DXWRW!h$gkbEcvzDwso(<)+KPu z8WSOT+35xcPh)(fd;=FbosNNGLu<#L+(uIA*jU3{$@!=4h4Y$y6JznJwGC`HS zov&ss7|Ka(?%e`ACe@^X4q#vRyITpN;<{zXM{h5`!-h4h;m4sUonWVC%(RAG!(ulc z{*GMMR}_=(4_ypT%wu@Fu^{8xWFzVleP~f#ahmkU^WA*$ay?s{qu$4IHI?};9%akY zhRJ*j`z~M2<7Kbd86-*(9(eK?D2YzRnmGY-CQay@qSQ3azLkkcJCH>kahb8b#@-w)K^cE%m} zoeCPs`AcIHT(_RPERZ##TX`&%*ihS*A{LL;qaeMYt&U4^l~D!zBHmmD^AxBq4W=K7 zvAa%ACnQN7_1|f)0`-}YweSs20eACgZ7nh%d0rBftT?vpDwrN?f9I>v)@zZo^$z?v z91fIE4jOCAa#Ai?*eqhhVLQK~S6uZ^1=vI$n7*X=)4_ZVAnhN^pNOwvmm=ztMJ*L} zSWKSr@9fF9im1K@yYK#wPpp?D`{?Z}Q(JM7Uwa=R1M$?AVlCRgW7j;jTwK;c<44YvIcr9z#AR$?D5a$<0kBGbj?MJ^(9yYKUzIE?G@9Y94mH4$i7!lhROCx^I z_oXK~Z0m-7(Uxmyq#?rR-SKYn-&-5?fP5Wv$E&<`xM0}|x^QfRST?7(%@1b38uqgScT4PL@JmQ>!<8|Ko5vhKN!m=c$YnZ7s2Hrz%0ck6o;M zITNhdpDvFmU&m$n)xnXgi`2ieh*L9~8z%v|dG^FFHgIn{OAzvMJ`q8l)153UR8W+& zmt@9Cd?oBjwOB2p4ho4S4ZB*1qkJi|v1m8k@S=|JkGYlXqPCTYMF!MYI`gdyha{KJk{fY3*Iyb!ox%dQ#W{(9hnor;=aH zn2vAQmZfsT-8J_Hv+3NEl^QhnKqYW?lUB!4L7Bw&31tg6UqBa$Sa-)}+6q+ROBIsv zcc?)#PM>f1Gb8=}HZvQj9D6fy6;Ejp;*Db3QTaT{H7rMs78fS0o3>2OUadME{0nwY zOK1Jl-mO`s5~mxu9AzFkZ99^~BEF~EX0b(2p^pr91q%beEl-E(9-S4=w{1QvZOw39 zQ;X!|LjL#&)@}Mxx9w`!!UPuySB2bXXpAP}(OSEgcTl=Zf~c8S9GgeY1jIaP~Yr0?UYMJ5OT)M3fRsyuBqs(Jf&E#d$m(D}_x|FcDC54+PijRknH z&W^ra5-tW(j7X@lFsSYkZR687C%g=SRr9R@h>;AO>8vPHYXl`tJj1g!jiPMh?zsod z)5a>7^iq(OkrOYBxQU=B!n99opHYJS&6EJ#>wV=mSNYL!T4^66*}-)i%_yjiIf{!0 zIMj0R-zgL8S8{c>N3E+HK|B#~;9s2sLcD^Cn8sp{wXEG50`;}=)M*+xVh1*-EI5pm z+7gK7IFU5a3V{Hg`i~*mG1qeLDVhPD@HLhwAW|Dny`+k!H68)J7tHI|Xl2?MSa4nf zlPDN#=QRux>UkI%gVsMtf*bOJ%xBBp6ccc8VVGE)j_HVc0qQlC~g%%P`Mw4=U2Du&^XlA>1{h!Hs){7+%&?f^yks3A-oV#eM z4w51Sg9Vor(+KBgkm;#NuRqKP!+013knkD7QGnw(Vbt>$#TnU%$<4Yi$aKqZ8|sM$ zSj-HD9r#HTNkrgjgziUH(U{b@yD#Q2?`$%{Y1}i6y$p zVfl|58k~Px_zJ z+61)`{1G>AHHhT^nUQ2#d#e6}J15@zqOc>@^w^5%Kf?T|9of##m7f&tr#;i{n}ugo zz(ZLtoLYT_q-`UWj1i^PA*Ozg*bas-W#SG=9?oRaXpEm3h!-X2h@?!l*w9QQLR zi2pl3&EOR~IZ6S$LGb|K#7WdzhW9*G$xQe~o$7!FND&C_)iWOT)H{w3RWa|i^A&KFx{RgFs0Z|Ap77u zt~`!`Sz9X|;T8~)2oi{5aqzZ;)5Zpr~&~CEis;GkK=hz=sU8PpoTUYM$hf_$j!ToaUvRzk(;b(O4ldKl9=dB!zo`y zhp`ejxLLm62>!@+NSPHlr##4uisV=ND=I~_48CY=cMkeCrdkeu?F9zG%^}d-R@fqW zf1|nb-4R|hQwr@&^7&LVna6U8jxm7?I2DYoj+V02E)W=`sI(3W>&nw<6R4Uls$D?o zIfPO~~H&Iti+*6Kt~g|=97yNf3c<@YKg{zzUMXrxlnKFx&e31IE)mAOpPEAAt9)! zNG8GFZxz&vnW4CYZbHw^uV2&Lro8ch5s{)}Yam8vO$VfZSwONs0`@kF_johYe%P(_ zD+Z!kRrD(7>|KFtMi^^aB7jg+bs&C^Uw6XRb@xG`ku0XU>^6gb0wP``&e|;GTH~e0 z7jREYU4UrfF>D7EJa(;dBmS`nj3SkQITtN$BLOGgon_Z|&14$ssv)(9J(+a!S;>RP ze-A5&9t5_ADE5*|fVA_5QN;R$|kFaLuD>|CG(0j?P=TPI9DxEx8eqR{HC(qR0K zSNsd4bHnE1m$zZrg(dcZNhk*dMrshrjdwNM!+&C41J;OHFz0$jB!6X`M4%IcEx}i5 zhK~_0nxD7ck4ipNc33TDcg`*<$k?=uvE629;G#Cs3@JjDBRm*{nJ2y6Mk3ZB0QN{E zfWZ1u!WE@HkpwX|yzyRmeQT59-gdxq-0YFq`TJI5Jzy5B;?_L-XIzbL-mHB5hTy3b zrK=gMCh!3L3m1w+uR#VfL$q#e`}6mC&yr(-#sLr~o=6$S2N|KRs1*!axlv45H+$;u zL@&_KDGhdFjCzcSzE%8ygkfAzwhZIFuV;nDmhRia2$67%C6X>8)DjBgMgTa@RMsS} z4Rq-0Z-2A*JDWKh2b?!Y*U_%sjgF63Y^3UdyXXDl;uoal&y6?psCyyTi9jujjc=ZC zPu0AkW(21tP9hHW)<3SAe!GK8h$p<0SU^F^qefc6UBPg3 z`Xxa75LAU15B6qoiJ7&Asjmj!{CP@KC|zIc~j?;oCOUTh=3YK8mu5x`AN%V zr0?TsF0B6(*_)B)1aV$LhYN=C4|lK){EZcJ6sVdL<_MODtB3Bbfhi)>OIn2P>L!rnnXx6&8lN9O5Hq1!%xChalV~ z&0|P;5c2xEEpSyXL_Am54F8rDF&Q!%0QCne(<}Ij&(4P2*)St=@h6@uz z^2fJ-+v||y_H-nbyxN>xP@;5*OCnbX@GT=mVXJJ43M_uQU(t8?+MmK{=wS$g``Rbu zf*=v$7|BEwl>~gn&5SizkD`8|2WQlACf0{e z;DE8@IHDr|mG=*TBnBc#lTNH5Tm^0vp!H?|q@_H`t^`%pDMXw?Kmp!B5)vY}yorJnfYz7kK{u)M*?CQUNOvx_+%5p zYlGZz8Nip{Hworuzvrhyiye1H=xzbz92c3W@VdTnd-P6Az@}ii69M}?N zp!n!RoD7`Mafb(e;2|x0Hv*Gx4t(*B%7!wa>XVB&kr+o7WKbLdLyvfrWW|Qdp4{8@ z4zk-29S@$0zsBQHbJRh$13f`V2*dyQYBZsJy?b!s4fv_IhT;K82|Okyhyx0--~%6A^)TEm%ws^d zd3D?Q%w>pe{J@K@MnH>m{PskbEuvfDawsrWt=HSvbd%Q-LH_nM*e46w9m%8ulS4d4 zRS4l4?0J$t{S;5`k>JoR($fILkR_8M9BMpEgm^ya4ZCMj4aOdOpq6KtxdexvfePhO zA3M~OQw)T7`FWaZDB0FflDJzmc>H`RubL4zVC5BK8xCYAvvl}=+R|~%iJ6^>LKblo zX6b1nN@Ixupm=ED?~ZLzetL+7)H&9`dA;KP(A#ZsTP4_VoeSNBvI9*F4UqP zFp3#$5l2Rr(%xyT>&!EGVD8Y6R-b%i0aObNjVO`D7oSKN0Q+awj=@S%T(UP3Wd5O#CP;K{<;WEwC8{0{ zQNjTnVA9c3AtYh7Bp2noo1D(gS8wO9b&@h_@agWdMN~is4>uzMO+vZU|tTh=a;?p=?v+0%;uPlond*AJ@R|5H=tGi z=e{PQmIv1wJgUE*rC+64^47d_k*S))F;`Bc;|8Lhe3DsH$GQuLgH!pDCY_Z}&Ck8^ zh7NXSo!tk8>kwTvAwt13prz*krY(RPp=I6p9}Ks3|c4an)VJtdb0V*Xe$E*#3jzk+R zhyXZ5xyth9(Rb6SlpMW|#Uz`0rd(#~^S?;zD{{O8ZF$oVG%?jb)PVPmTmUckw5M34-uD478c_cM{T z(VaxHV$l)fAiz09)KO0I)foUfq=IW^yc@kYyzMIckS4g1PSAj%2BLX3y$soo!3JS! z?c!>;>&&-*uXp*^{~V_);LkX+OC?G}aQB$NMhPcuyS$oPC5WRB`I`=%#~$@vKk=tg zH!$!VK^(#%yow?`qL#+2*nI2ubY^^d91LAB)v@}@if#2o;vpnhkv#^9iFy$(z7)A+ zt@Qu0p+j}&s4Q=xbEqOcPW(cY^R4sL8_8H+(HzVV%IuE#PnW(rqrXV;VFg314axFaVBGpfP+=<%(dlOAymn_ z$RJH9s{2WZ@i6>M@bDqbr~m))%8k$b=atX=6@odPxQ)>&H3uipL-)T-kfRbvvX|y z@Z5UkTADN(Gj&fxR_dc4{-FKu2}kPd^K|&UEsjV;DZzl|4UUFrJmMlrv;t-~pO^a1 z{#ku2y=Ok)PF;UPOHoXbuBO#qgubLR>vz>jf92(Zmd^wR)_@j4Tn#XgR3S}ikwDLJ zss%R$lwPU5)&E~^**=<@7+Y>VsI2PbWE%5rj7=pS1?zE53dJU)dFaNrn<-^mDqAAwY?wKj*Py^UY(HAsCuZ3y)DHI)~%>|(~A zrb{N>5e4~cvsk-W2ajNaxjntKzUqCn4||4zGIS#%LshS{BrJlNunC<_ZgUiYn9a&^ zxxKmh-`O>jXowPfAcv!g^GKSelz8|gbkCV!GoHXvmQR{~4N|-r1InC(~S+hdTWNlJqh;EpZZZO+2 z_5|g~)9PyN4&_~2$?=-(c6M@z$FK(0oEu;rS}TVX@4OA&tK>50xl6CP&D8DCF72VL zX5yvd!;ng}xHTtVpS*C!E@@{%Q-tNhyFGC&mZ$O+k+|3BYzmF zU-y+itjzv2N!i}BX!9zB^d`I_N#Vk}XT=VmbJ43%1S6%}>&F7R^506q`s4Z;ntDfF zXzG4x&)$6vmi4VkmTqRaBnsIiRY{a|7A=FQyv@77wte3sJNI4v!Roc*wT`((x&zwXeh(PW7_$kN+V*D*13(y zXy){EgLF?%otJ+iP&RMyVl2fyf`fAwgeRid7`vL}pVTexHqu%m=R7pjdHu^(0NwbJ zW2>ohuM~fUWt}@}O&LOsBn(`=Zsw*fDqEAk6jMivNwNsB;K8gD3P7$cV~u-CXuvMn z4c&h}J5zLcVlmX1k~q3m|pCKI-nE6a+JEYm59&6_qQcA(;(xzz7yQKjn6 zbMy9ei$`!#3u%&DV^O3;*M5pZgFD=eCJWYViwJ_v?%fTe~o)bELn;!7UFP7!3bqYq5zu4e>k(SMpreW^i zduKO%9GDz-{_Jq4+$v8HzHT@WA#E=B;4otWxoT*u1ztSmj#nlgJcZtFRyA^ORtk5ocM37VGl)-jlJt^N_k-ML<(b z7vGHp64qh8)-2E_uy(`IYXcPjQi`D4@gWm#@kV1Z!mnDC09@cryLlTP>1E^Jv!nGE z;aJO&y@LBfjFq3Ceu4AYjAO;w4vFA(8-L==oo`TEg5;30(vXqX#=0-rU|2qFn8;M$n622)Ar3XFC3N&i!7S15%pC%@H~|Eu~x6(7YZ zq@p=8ju$#{6S?Eb$tJ_Oc3a%Itum4`6HJ?KE;B!0%kB2p{0diYYHhz5b=ffAIaGUQ z-!9r%wdmoJl_qmKL0-AlVb?I~QP3O8V_4>kaBK##xDognw- z_gZR<=CJ$ayPRHXT1TeUU%Ah&R36V7=K@=~<(yfCgbVT)J)4ohym86h^Afftn?(Eb z6_-WxEfv1P{VPyGiz9_-U~Kqn{*dvI-H0&uUtO%h`MXnt$MMAn0eXIGJ%KN~N_9Qk z9yei~5_a|ke>Sa_W7b5AzTS_&u@V$`WgP`_VBZFZxOTs>-EPD}J=@Vhb{3kq1aTv4 zC5DJO3nFAB)(y`MkOF+<_L~>ekSKgu69T77(odZ-0E}$do3SQBjGb;7b-uyA)MFtj z_YlUsE4%ioO$jFmbEs+%_;?uWSK3(1sWumx?+$LQCb26{-VDY&WN~$!3hZ?Y?2! z#5$$o)T<#grw0?q58rbR2vNP}n4O5B^r_>4To?n(3rJkxnfMeuAgl7B;}wrP1S`&9l@; z<$6bzX6(Q?8lL^fg`*G{8FAPT_nGzLWPShtOTQeomw?ZG)t?OKA?fCB`4k2=+9`pl zDvktG{%12Hi(&6eQ`}9g3dE37fLa*4PHiV-6ceG?wdtF%9kz5v3i|A6$%5U|I)(HW zoFXyonrxG@Q+lMGF7hdAGFcP0y300SGXwH}@=WKj;0Yy?wQJg{wvUi(@B*>vI$6^$ z9^~AJE2|=9d#`tXOxFZW6VRnRVkZIFT~gQfb1+LBialWrSAk|vud!^T3cB0(ndFm| zmcv-t9dviy%TIL+ee|yDSin~KUCbEsh3mIVrF8`T%<`09^((1UqU~7Pk2qqhn7w~; z*(L#Rcw6!RJ`4nkvn6Kx{p^W0!>m6-xdH3PL1J}DcFpkUzh-CI`Yrum4gy!21Y*3D zaa-HP<>ppur9_9-k%}G1@(WYoXzO}j|Dp6LrY+Tz)~%+$77XR1vPv}N`=5CRF%lZ;Qmt2&ZVIn+}XqRar8ZY>r^RX>1tA4 zcsprn9Lf$S!3WkIElz&Zmn%zxj1@5*^fd%FDf?bn7XM`KG4|$p6ihCnmu^TmzOt^YeAxV)gcxq`X=0;-^C#C}K7KF4 zVa;4memD2s6YFfr7^2`otN-gXj|V=uQT^SEQ-03oCcd^0aplIYe%Na_HS4Ci6LCJp zou}`Ybw+tmY#VnnhF;F%)6Ng)*HkqFy(5F!i|(49OgKfENmuTQ6=?X?AS1XRTjYE7 z;8gM#Ui}np&kOpZiD^r!{R8+g1X|%9aR&O{j>^4xE63rZ0Bly0m*(U9h$}Gg`?$*D=4DQF+<2~!nZv`)mxs<=(+u4$iD9J3zd6CbN35~6YcqRNv;j|R zFdi}B#nv`U_y?>-ER98C*=(7Z#uW|DWcCg;&hcC5 z%#HldTst$7LwOH*b+pjA@k#1>C(k!``GicEDlvzh-^XeP#469^^jweG*RF+RIdR8g zT&ok-;=R0^za-Y2$%~0Ita~9lhx$F}UNChwC>Oo)Ov{{V>9`j5RmdlP%;?P2@e}Hl zKCk4&RR=|u>tVwcQ5xF~doXRt-Oq-MI z2^(>MYw4LeUa>)kwlurf69j;yTZ(3WQ9x7OiH*S5uA{od#o=z0^`Hj-lJ>7Cm zj!UFcO=>t#@hNO>se)&RDtBw=+$;Q@(W*jtNph{eXEK{8=2?nR z<3yZ2lg?Jz^d?(*`h&nzYweBM$r&xbl(XxPZfQc}v2TJt8ui*v;UY?{v#p-+cn&@B zJ+{Y7H*KLaTo10}%P*=tY zj%G!UYS-fy7LLu0QV+YCL&$!}BZ_8pud>Z08xCKXZsTnHVPLr!`ke4qwy;>dT{B?K zy5hK-&>B0HaVU?r(a>9G|F8_??Fni1_=@(j_$o`jZk)Jz`bo4qx)XSB*{=qmCw|fw z^V|K%B%UTI+#SidjR^g@(U3mck-i4_{U%YH(6BhHi1E0P~9*pA-!wCrni+Vk(`?=Kbt|CuK+&; ze;&?Cw}s-j@G|F&pLJU#g%QIazC7bFlN$or-fQli;~B~8yPgS&b-8tNuQ(&xdFyvp z3+-W@9LKk)K9U>fc@_HEEOs*lc4^S!+Te2T?BG!-fqV}a6CM=(uA3XH^`m;IfHF5b zO{I6--A9SP1`dQS99(eo1;{Q#$^I|O_}*w#6og#T>(;qc3+*g^zOk=P@ryaixs<%W z?$Ks-|-scX+w0!7@(xWyfPe`*wl#IyZv3 zd{y7azPdG)ja?k)i5*ogj(?3fLOWOR;J_mbJm_WeO>5`j@!Yl2s=0l%oMAE4?H=Ss zFYPJl8Fn_l)1y@!vamPsGz1^^4CTA~VWHw)8^^PcRb?b;Sl-V2z$ABz^v%zp@&opK zf#YmzXY325a^;sf0kZ27{8+jA4%tNV3_h=|3LgLMukzq#q5^JhT6c|>qo=>k_{M=- zJ+=Q_)?V8#sImsy-{=KW-n5DQ$)9JEC-VogdXmprtoLKF{NDj>N512|OyqpcNfRX< zha9T7UBK@`0?tzvIvb6~qW%9RQR3?}L}~q*L*CA9#v0KkPkr>&}%~awkboncg4_iV*;XkSd4}5a!IzMMi1nee3RL^}BztWnvAM5J0@Blv+b4 zm=VQ^5h=jNO2r}O@^%6jfdEYvhpCkvS$% zA_-VQ>kS0ydFtFt54RA5DV2e(s!6~0HUHs{M^TYo#*Tg@mBvY6G%EABs7s&%KR&Q0IRQrM&z=QJuPlqgk@v6^tJ z#S!7{5f3VP6bGkTYGhh$))HdoyuFHqpQ1E_B6NYp3h<4ZGYC&>cR$XG;Duyku{m0` zfMbX}H9r8Y091!Nfv^r73(*bw8gd5MMmmJ@2w~6yh)pF2qJptZf;^N#Y{XS@6!3b< z1z{T-t29**#>U94(-`zPw5dd9onc2Nq{HmqyR98D1o|EFUV*;4NT_fv3ZZ+cMYl># zNJf%5y|`Lp4-A6Swl$tXM<@WjDVXj@NV|}d%e_VzDrAr+5X;5g*fL+XHb$&?w8aHx zg*`%+T=m*A01m=V_6aporZskyKq%;q1E2#4nB-t<)VkMm1hE=wETUjEL}^JUsNNiP zIU}?V*ZQ)f*4_4vjgBCUz|~cw8h3juy`2SY{&hvRng2EZji^RG?ti=@Et#6%_5`;8>P)i(L!bMvpEEJ7t<2>-Q4!5PL zhq22DrhB?%OmL+_!ZF~eB%E-ERuObZBVIn$0ZO)V7 zaR7WktR%=qT=yh&fpbfYeMvl~3yCDxDG5S^8xd#f^u!t|3}7Na`X-)5^nZRef$>dz z$yq{m959K*Gn#l>s3^}11LFaPcL19SNzYf%k+@$i=f;c>eH4(k(M|ovWXu_v_etoog6fbf>wTan+?@&5bxM}VMHPl zhDeyLSEPv4TFOL+$4NDMN#*4LQEUNBQ;MP)1y+P2jyhn_f+;t8e#)aW38WYP-6_2A&MiAA~!eVqRM?_$B zdGCj}x4zq%c_eY5X(@3?=f%BbLNOw)In8sz7UTsWoH5>O>&&M*hhz+tp%U#lXkb8w zD1a~rn~L|C;?p8h;)0g9)dc9J?l9w+cYm&f&j(1@jqfAv=o^Mfucx*L*!1exB=f^*7r8o z^Wy%?(_Hc%mXTx!pC_6IYLy`p%IerU4({+BK!TkKmILDQL)Z3GNA%^tdG3{eG^Hbc z>He1Vuc`mP^39R^==`@+ugaa?{Ha$t^W=Xr2Sr8s=MMc#cTk`7=D)c-sdxVJr&~YE zeQ^8>|NQr_uI!-MQZ)0IVO=iFKj`u@tRyUhAm|AbepRP7C$Yjl>1;2POsykbS{`H5 z@afamW}v)M^D=S$x>Yx8wGWPa>?UCtFc6J8JrNzjG7*^!?xi7L-{ME*tZ1%dL~rCmEsyO|pT)0#zzHMd>sOc^FhIv6Ur5 zX!C6pf@|c_;&m7dQQ;12Kw^a>4x&;4xZScT6J<(=e9IKTGl7Cb-I*9#@Q86}8n_UV zb(e9Ba3I|^;8|U1OgPp60&GQuDB55fqAW>Vax{jGpcJ<9(K;%UQ^j@5W3}&Ifp8?+ zMWkY&M>2wr30c9DZo~JgZ65h?15t`*5t4`#Ul2{j3OkE{qGE);K2Yw;!%_JbB2%Ju zh*3ryI;|%Vr?C+ZVQ4U42Pk(oR!mG%7VFlOcp83D;?~oy3OUd@tf)@q0bjZvrr5?L z5?G696cP|w$I6b66e9|$tzk1?F=y9$^m>}}olQS8TfzW^my8?*M20&Yiw8!i!sr0Q zsF8`(ErT=PN>kqKe7Jj!?JkYhPNgs!GAjYMc6~St8LT z(keNa6Fpqus2mdv)IKTwqTO2tJjoXzEF`kk1e7Uf_2h^IT9~6LWe4CTL{7X2j(}^W z5Q8}g8w9w%LG`$)qPW6~$@LPBdG4dC?#};k+r#tkkXzxst&W4dx*8g^*&TQV>LNir z9zl~%pR`3pm4eU=K--Jwf;!&6@Oq%6O5&x785seHt3jEGf>q$@`%;76W%)m&y#{*6 zP>Z0(fT1F%#+rI5B_v=VvMi&7%Go!DISQH4yH>J>DWEAg(R9We)7FM!JUl_$RHYt$ z!{w9Mbhlop+*?oO?N6rtSSkDc&o6&w?k=UL+P?Ijc4pkV_vSyacdXu%w$fUuAJnda%u`ZSh$w&)S(=zevcX5~1Cj^{_TRA94v8V#rFupl5D^rztgFCkiC zqdG`)!nmlstF_Mmq&8nUMB3dS?z;)x%v2Scdaqkh?}IfCL6;KZhSDP7h|yt_W4rAS zD1vo2jppV6{@qp^J8-aaSOYx>Ad6t_356;#6f@#-7Kyx6N5^Keac3#Ni?iEdytKayMA88p^g)Q!}?ZbH7{fU~K;JCYQDK>t65jwhp>GuUz)Q z3;aVirt9r5@6UMo~ zJHc=m|EV;Ih|$iAK$cMOwwNzYI8s@r1D=AvzPI`RRQ}Fe^$dW8&%Nl*-JPdxiu3B} zQBMc6MvtFb`urUJ++OIVeGx{IaS3B6el50Wg9|R)5y6M3NPQo?h1agl&63kQO@ziV zZxY91IAU=F(dr74004<3wMF&2z?s}TZ^QA(WxgL=Gj0ZaYLQ|DjH#I5Gzn;M3({~M zV={=F$hFd4`O=%sZ(IozpYd0;8Bs<>nG$~3xAUB+#z2)+!Wvf&^M$fvxn0Slml>k^ z{O+&j+yg|AF*Z0@1q6YIg$LNK*#}j~sZNTHq*Pz?{*+!`i(G{!HU?5HF^ELxo<{JT zg{n|wnY9M%hu+JHgGtTklpPw&kqZ{j{UdKz=%OS+g>wfq(9*G??W^Tz?GOF^Dk`P^ z(fuPFviuxp+41YcUH$*wCe-=FkDBzW+W&Vu6cNBC#T1DSIQWWN z3`yZ7B;GkGNCgKsLYI4pqe!~rdqsG#kPv}b z!;j|B0#kYrNl`UZ$g+qnHZIA1sa3}8(h%zBltu(`Od=91uU?H&>YN2(OK}okjjgAC zvA_N(i|42T%PHgDUj`Hi#b=;`doAcy4J(X?0x3I#I`i6-zM03qoX3a}W8DZGiOHL(+u{06@9Dai!L;wIY14T0i0NP-7-OH8|84eKA z0LV$5A|$Zh0e9NbuJxo@+hQ630Uf}_`o#KR0)g10|9|KD zUyt1V)P4@mKMwsbk2w3x+(w?Ee-GDu?C{LF`Zxb7JJyR|Z-3^$nw`()cCEL|$orts z4-x-4^HCpOy{*Uo@>iC;TxOnIXPU3s8I9bZDdy+cL*CtEezW^I?0()`fAg!CSY{0b zGO(j-!Xg3ODG{NAG0iDeAd{mr_BQ=h|8G9q-cjccjgMUkq&N2QToHgVLezOTcTpO=|`$g)-JE9PzoK$RoT)%MJwzJ7Z;KL32B*@pX! zmuHUdq}Zo1Sy(hQ^I1bqz$sgq2}DFPq(5Y7;r+%-M}kXwDQlKHv-}yqk4XmCe<2^) zdA<4Phi2yH%LO*Oi#^|6LJtMEdq5Bp5=bPCap(@4#;q(qG-aUb=aX<&X$R@O_d$wr zj$c+|q9X=3BpOXISVDue6625SVl8oqJlT8w-UbtxkWn>~t!-6@42PVUjz;H`R?XM$ z%x>;be#A>VWR%%`gQii800?Ph6k;2eR z5PkW^enfr-hS-!R6mYd3TW<*AZUCDDh;2-8jrYWco=XQqrujB=@8D30VjBjkUCQ5< zh_(k60kfeRL#WD=#J8Xs$dQ(L4pyg)7q}HgKBuCzdsowJj*-l$Xt@2ilT^-P1P_(8{(6M+uBq zm5uC$@Yy4abqv$FSCNQn)oE)p^mu=Zl6;%M(^#=*hKIZ>Q+}zDcJs~>^j1Yo5ktNRWQWxutq{d# zL$6o{XH5k#BGR@koAK4Z^XOxi{$^MV>kwK@Rnvg9zn$_hz z5Bf4PlUkG?tbzR)kO z&rK16SRi{uEvf<}v-KryzDbfg6!8I@v9*pKam*~Vph(E6ajX{40ner}R;=kXLspgd z{}2MjF5GJoiKzd$-ZguUVau*M1Q8k0nQJ_u<(ROvyMFe+ooc(nvD?TntRaVyil*t1 zJ3m`|3&BgP!k-N?sklzP8V_Uo09W zCfCdqd$4!fUb}1%JXNe5BwHVuVy}}~v{2x?HP%eiy-)7EzxU46_@!O4SyD{yz2Qtk zvFoT|y`*!>whK1pt%LW~*W||3{++k$J))uMSsJ&je0}o!o&|Zdsz)N+CzbT+Ufh^6 zBSA!tki<7Lt`)+chpPXcK(DglxuN$ZCd1#YP}f|C=eagw74RRsm2Ym$j7`ZH?KRI zDtHBP@KVqHTx3{Au&#f$U+Gu`H8sv*Ey~W)%U`*a+};}#;a()H4GYgsFtxS! z#a-hiAV`Zrf4ec`d3|L4)>dnf`3H*7z(E4Kg{8yG$xDOxTyW zz1l`noVi*Nsr@W$`iUNl%a!7shIjTi3QgLj{t&&;-MdMf-9bh|?OD)O=+X)diz6Mj zLrZUat>JiX!zdJo*4juyS0h)AM6a@!+BjOcW~T-P7w5;Qc-^-*GY;z0gt0 z9GT@cU+=m5^JVCw2BnfB3GbtxyI8{By$P(fC1m1NGd;<*z&7Hm82jAseo}`UdvCd& zR<^(XX7_I&xtD3o`rPX0u+IK{+1nDML6^`Gnz!niy2-NUMYXur-6A^!vO3Xw#jNqO zjGIJn39Su$JCFD;A4bDHx8#9;Eyx8egD14Miz@TMm~BnNXf+9E`?BjSTQ8A|Y|@1C zwp!Kp!Hu^}pO7qPlnNm^Fl4icmZY^TsNRC98r2JPs95fp*=hRh?F!;=-Jw+V+wc9Q z=L(yC4QS^7d%o81f*ztJbXolpeMZ~R;ry4$65K(8b$bqsIAD+jMDJKcP13?+1nJgp z-_O@S(Q62vTe!ex8g=sp+S?HZHvV00oJ>7vjV-VWi$l$ln`GHDigY@a&Dpl0)^t<@ z_NDic-UT%MSZXTTiJ~^ONGiIm3hp-Qg0{a5Y59@0BVURgYqURr?ju@i*WbQ1ktl5Y zH?g}8@78@5HTt^iHdtE1|Cb$WnuMqlS`hxd^r1ALcNea4oVqvT*05&$8uvt;bSllU z$A?<*H}!|Jq~S$`W=<qi(Eyy+O38 zwNvxlVzXLLSY$a{kFBPVM;2@`lKBASuFwC_lK{hQWjL~Pa~ROrTWbFBQHd_Px< zB96#)Q1EWz?e<`P1GER(?Mik;+PX~#D3~<4=)Pvg$#1C5mrCiAfz~%j>ZqOPI)gadchPb;%oK}MchYZ#TZ#>B&sAaI;52P-{2~;#U!oA_Ivs{`xKVm)0GqXdAVoa4~e*B`@n6@CgD${#%^p^ z8T9zU(KvjqE@hlA&y{$qEjt?8pdn0Y+jI9PPAIP_({ss)^2 znR@>nXrOeL7xMFdIzMNj8-l30PQA_+;W!VK9+>{xZ^JxAczG+Z9#BlzER;zJc=PBz zvP>l27cu_|Oy?+vGS?BU=dz_U0z^${8EfHhksDO&m!ZoImNNIvy}6JFVCZ0En)_aP z5_!{axL8CdVeglll?^C;s;_yM>>8mByn`GxVhP`$JlX|XXBt_{^Cc#eyufOV?6mx^4VoJxe54l9TiAqE9DC1{xM4G8zbR2+JDQ z?AM!@MYj5A{MbVl!$|#YFZ`A%q5H}C#i^f)Z;?eXO;_2~UATFzUNUDSUcTcU%d8a) zbLAdq6ZZ0r<=T}vSD7uD_q?G>0W7-!hhR{n364?_#GWm(LTbKVXNx&wB6a6m?2deR z#C#A^(HU&8Y(08ivsSr#Z#B6S#nL;Aw~7cMHN-y^flBM}>xt9|f1q%5Blsm8YO=iR zIVQMkZY=4_s<>x`Ea?G~gRSrFYHsOP{yCgrdB}yUVXI5BIY1+x>~FF)L~qeBe#Bfx zJfEHphw^JhK_T3YRcgro-^UA40Pqq;OI&Bw0(D18`jt2Tnkzp9>b0@+BD6EDe-sn3 zCJRCuq~Hd%cEiL=z)E^rTK472JMv7~SmCtr>~EWvNh7*4YShY3|(>*h%>!a*@#xc+voJ5v%Z2ZE204 z&G8c2GIFj4f7eP%>)AP7U5tEL?P_2_!rX0QR{xEX*IESBt(E;vdK4>#aDpF3+nE@@jv!Wjs3Sre^qXIdp>Z%0|M zf*U6$_v-iX8=HK>N_Ri3c5A~D-}-*a`qg+uUT9AdyPR-IyO27t7^F5Wnx=Kj3Ztju zKQF0iGz$zoE_oFqY2sRDW+nsakL9#0ihV*2;E0ww^^GEy*Ruh&F6)#SM^0F-Q=kpB zk(7UHLfscO4$X*%JNO?bp1mxFk2eQPvHjo z6Ao)S9CfuC=X1fPYE~#|b6u&mqoLozgVWCg`PI3E3Tw=yv5$M_`HymR)_3{A)rC24 zv5{ENz3fypM0;5?cU($pP}zl_r>wY)Ec-t-OuP5T9`)0H|2fy$xvBf&`!Ds|C%?S( zJ2>|ZNv<H-HQ9gx(Bt#s=pO`d|$MP@x`KA z-tP{08SijIm0Fme}`L-dO>Cn^7b486a@}_ zt0c!Ap4q*xzeAirelN*qBrGGki7&8EVkBjV3lf{Dvb}8h)Xp7l(`2u|ACVpTlfA8@ ztKPLh44eD1C2${FqVuBQQl1pqo|{d#T-t$R&yYKmeHrnA zd}8|fnRHo~jxS@4F0R!7Fyd*~SF8}~5xIZht2u?eS?)}>PZj(#)~rjuVMIWQMsN{J z);xlN<7{AnHCb+N6@yQN+4SWj(ZGhToo32x%5d}E;BT9!4M#gLVed@N(^YP3 zD)llYVbQa-^`xSQZN_)mCG|fV8E7Z5^tTZPSo+HpmF~%3r#CbHxK4(|XS=&_Xx2Wh z;^Wv_ufz8;M*cJ1;^aVn`|T<1sEzQ)FB_*%<7(-)*drf!hPf7C+mUiPM4xc*E;qT$ z>7&`hjyt_nZjYW1#mT7$o#XDyY9a#M=4q~Z>@j-_U$CMObGGcYjEr93cp9;D*>ssJ zw(D)veg126XC(7pUXIPl>2L$?i`mJ4CpH{(Fsx?+J6a5AecB#hjak9(neGCiCz!b0 za10?g?dWSU{u!EUuoS?x(`7ejP?!qKcs>K2q2gOz9{tYvot?$sH5 zrEroTqp?X-+Y)bvys|e^DNCG~B113J04mzQw*}K#=;{c+y$5)~-ths`lTT! zRkN2!g50}gdQkLgrr@+H$!o&{Ae`k(T(%2H2)xE~m08=1<$N!#EF07Dcun}E_3EKD z5MHLPkW+4f^%qifheO&LhD$UNGav8^r$Wh*nG!^tHg)pz=bw-k#AWvFPylu0&5d%q zUYJppx71|8%}rrgq^~Bk$4+3gi)oks5> z4{S^t_e}A!+|sVR52jL4!q-<_>#y_o;QGCsZbCMNbS_lQuW$;v7*1?mA{2HtKYaJo ztF7$U+Lc%Tb@#)%5A_GYEoYFXtT=Ko6|tka$TV8?YFBC080JgAw}G0@0Q;IOYf|9H8HHOA6=0%6 z)i>KaP3MrN4BG>%Gy?gtbTqJL6~=O4AVWMSOWj0(pi#>d-gw$=^`lNN1_B?xH1W%f z*1B&P59%Us2Uu!E7}81^Bbi?D2#zgAbG5O)D|vt3`uGGD!5i8lG~$78#H;RCnZ(FM z8N8P%f@a81m6D>l`4~sIq9SHj3@CaL0BXt}7S5r)acpQET587QKr33bii)JfNXBI1 za|!b*1fqlw8BjQeI;*`;e$M!wHCf*}4t^ba6r4eT8!5$;-DepU5EGGE3R>hMxMlrN zNxN8Ma=-`pWgVYu%SZhXi3B>Il0g;Gpq@SwBNTs)ujhrE@ILy+x5T4`z>Zt01Ym;G z5s4UrWfl0*Kt@|C)IRxW1}JJynl0lD{f^_KsZ_xa2erBP< zYzQ94HhT>w&QQ*?l10Qb2jmlDNTosTYuu9|@YapnkZw#_mBoW07ib`9v3QE%5V^Yo z9=)U7Gb4}`O?xrRjK;n7awjpAag@=Tztg;{h=Oq_l+8Q{J0zz|c>DKZ=w?{w{{CS* zLxt{Z&iC`IlQA3AYxgg|T!_Ln!j+W7XXR7k1e+Z?=Q+{sAO(|Y?e%s4+c&Td@QK3*`W+ZQ9>AUOxl?(1 zNGO_StA$4ak)=6fPcohqJ;3Sbx_{%>Ay zfsXr!?rG*$)PtvB08fL+cwR4=B2`#GQpXWD)|`xXs{8KzHh(?HYmc33S0V9Sh8+UD zJgct&{heoT)jLy-kq3WaQO^4PrQ4p`#Elp|5FH9J5pk#M5hVj;+9Mjt&~M48Qb##mFdRWdH)z2O9)YrnhjYK5LO^+h`iYW$5+m%1!=i2 zgC4P+pDe6fsW+OUjN(xMv0(9d$1SH8AuvIBG!4tn+-}C`ZQxwLvw$N0+)N(^agZoM zC`fCjmUEUPdzd5YGA|MTaI2B|81`@|L-wYT7zA%CNlekf6m&wT1gbvJXupQS$ffQ# zac1UJ;UP?wfM<+}5*gqTZ#p|mCX-U|koAh(nAQ2q;bo!HSc!rurg8)V5`zFkgsm(o zS$+>TgMCgKL9^DSf5fMpikX&R!u2^}46>M~I2KMnb9;O$?i5GMeI%;1_1bfW_gIP) zJzf<)jUd7Thh<%rMfK%up`2SWr?&W)_!x*1I{KNSF903_RfIeqrooThHWF4088Zbq zS7iFfQce_5I0&eNF-fDteq29p+)rQf%KEWs9C0GpmKj=Q>oQGf;0|^v2h+|R(z5_n-CmoVDWD&+W zFcU{m-8|A1i4q?{Pm0HdiYvGkX0%VVHMVo@-06q+zWMX9ei za|y{5zVN@-WpP$3$kf(MoXZ)dIFvvvR&Pb&WSA7th;A$^ch9Hu$soRCwPa-UW72qH zHzpO_C?&C>WPph*;*dfV_&V4K1DS)nhB&_Mj-UQ$t18Q9wB2it09P@pAXGT+tBqM_$iAeOjy{oFq% zY0TR3g^_#ioe3=}eskmexty$RZu4{z8_R(xI*AA=E>c9@Znroe-^n3XzW*)EMMXUJ z{S9jaX5#w;VKfBc4j_)1BB4{Dy0Jilo)(X&ig1OkdhhJAg>aK@S+Dj%}DsIid3M)k`hZ zXn?eAf!eLPDf<4fkjM)(!}<< zWoXp)j%*eK)RM49kz@m7$UFH;>Zw+D2#>pE0eFx_oJfo#i)1()0Yi^?lzzpBLRY4*Qi_Wuh8yc6M&_;7 z5a)@|7_lY*QQlBQ9DVeg3s1Xx*1(!F>hC<@T9qOau8e^^q!Xm)4u}n$F|(@=@8s`i z=9tq({*prt<%^FZ)Jdf&6%>nC2J-LXau$?#iQup>xE~Zv60b3U@Z}7WT&P+O*g0;Bfo4AGYBJ!+R5y(h}z#&zz80G-#EVYHA;ePlb-9jzJRR}A<^Sbj zgab?eclq-KmtKEu2?}f@y7n^o(|_ePos0}bok&G$MMH@kbw`wS016CbdhvvD_;7NI zm-I`KJ?PI5{R&A~GVi!4n?m0W^UxCrg*&Zepbt1#56SxU=!UI%Z57oBo&69LO+vjG z0?E`aX^J8*3@IBf5k3e*kIBxgks@!)ONL=Zb`s}p2yYic)~1|oR4@^+JZPikS$cHZ zJTKD;%Xqmu`D}@CP_qtb zRTCl_JV07<4q@7ks*zfsU!@#x+o8<*`QQk+U*{#15{O2MWmQCbz|P>A(%7I{JO9Xi z13#{~Iud`Ev!@nr9O(uuHF;4b7H>7_V*;Zr_IGT<+!PH;L75r}5`!ahgmWJE+JuP= zY8{Pg71vmz__coq|9@_oN9FSbhOs#cW6|jeP%CN3MAZ4DEEX-mr=u^1oQNSe9Wm|xLnrIixa(S1E8`B;_(U0R;7Te zsGl*mE*SdE{HSdmvH$a+IwG;cp^$nk@g5S&ustJ|Gz0xB8~Ls=vb4>=eqod6(?e`; zu5+RyJ*NCZfb*^M)Q!+AuV@ZvfW2Aq$!xMYHjuG8MTK2M58tVIWN&6XUs!K@F!VqY#;9`L{j4)xr3|mu@4{Bu+XicoQ+g zB9YLX2SB8zMF$5I(5V@(W4NK6ra?|uVoSVt-#F9}kWtYp#l;b~_sE-#TY*dJdc7YS z2)9)F|3zw;IUFQ0bi1d)Q6DYA6vAMA^IYBg(YrvI?RejztIje&f{KYj1ZRZi5g()r z;^I@Zm{Fw6_;-g)ZwtRdmuO_rY-fnqYln)XXi@wqzYLX1PF7^4R2t=m{KbNR(Tqw| zP(*`_=)(k}7{e*BXK?`V;3Z6OGKH)-ViC0jBmJ#7=At!-8zk`xh~02rs=j+O6G#4W zc-)W)46Fexf}ARW4MYl0^IRmsbA@WQdgB-T`PnSZ=zIg2cgu=7VR^aGo}=7Rlt8xBvna6uh$ido=h_uo59sA|hNk@155$DF0suFG2}6mP@dRAxC20d+N}|t;`uBVeK&W^^ zL=>llue$ayg0L;ul(VYRh_HF-yECfU$4QLQZa=m-* z?j`BSx+sVQ(c=riCzw?416y{%*6X3!bqg{m;_sLs*p6QiAYU+Xym!8J<(^xo-ZmRQ zknyS6Id9M6PrY$oDr~npdQLsXpNv8(QX-h?5P}g1H534IMdhC0JtH*qkK(gme*g5w zr9J;IK9fIO{Z_8!U-{GD+>Fw%cK^!bEA?o<`W>+O5I>qj7n?F~)aqBkgPuy!cM&|x zCxP#8)3bEW{A09y-9O$#H`bZ->D~Cz#B=oZp)X6h+Ub~t6d+CosLLo43F`G~(Zmi2 z7x59cWb3asqnQ~ly>m3D1I(p0cL_m_lbNqj5(#rwMbMlw-GXIQBdtq-eoSatpXN$p zHqIrFAkFK1!WqXiBGn-IR(GA1JRVGKsiRx3s?(9>>4fLXk3*-Kuq+nJ$&6J3NR^^g zA!fqEwCl7NY_2Wp<)0pxU!j>Ttb$r{7|$Rj3~_P&NHumz7P%f4npi~)pSNVrwbIO~ z7g9qBQyUprrg%q6WR&=ZQK_u5osuhbY0tB0>wEQ%K6s8QeOrB@q59s@MbYo%#`JW% zGhyHKrRWI&NkF#0zjH6Wl-yIS>6Np`8R-)}ISeu*8G@#?38pl0Fg%%z(hIjz-q&ih z;3Z$8#?3psjZeP*5-zd-J3m4hFN&sbYp0IwdcX#x2D`q(_d5;vKy%b9Sie;su!08>cgdNCDH5#QeGUVu|wsTE? zAJ3JMnqls2p`XcG?xrdoCM`ekKjabJt{TRPo21|bKnDXk=B{~ zX+nq!G}l8r*2_219K$gt5-Ca_u`(RxOPAby>5yh-D)h1tV4)(iv39mSM(VD zik2xOBmtR-qR6Lhp;`W74%)3Azl7`uzgtKv0oH*iEPhdaMhK$zRbkJ zNFxbQ2&Vy5cgeQUi%#t=lmC?LWX`V9Sx{muY%C+o;Pb#)V6z9n3#4Qw`Ip>wRi=Qs zep?(Me5pP^i^`UH^Nd8sELf44-BW{N>vNdS9Qo4J^h4efR`&C2dHwQeeR{tCiC1q` zszy4~Aa_>iePNu5@yL*-f#?oX65usAc^<`a%*@Qq^w3jf@R}PdJI5M|xFOV7j~t>_ zYPb0wnj+rLegUOso0KFut|ZDFe&o=+E2LpO>cJe9&%NN1?WWD)=H})4?#yQv1?O9& zoX`A@?7SoU4yzXyveXiZ8oT3RK?@vlK_**_(gxN=MevU0dbzZy9e{(dWn?d{9=;>t z@cy;k>0z;C@D@1_AG-PBFaJ_EBUv91E)&;(YdyA_6s$=)T1*x7PP#jg<)(19IoF%P znbM@x&hu@wwmz=AX}YRMNAwAWiXQrtn(ZecvM%@Dr~9mJaXAHzxfT?WqOIv?P~DP* zy`gExWR7n?4*{K@#`@08l+8n+d4`7qsE=0-StDBQvYl3vE$C=@Wf}{<5sZxLy@{j~ zrfXG~JaQ;9J?HP={AH!UGGlg<)qEi6Y@*PdvV)&tg!WN=yS zMHZclu75{%2O?jJ33PzM??5!6?V=C?CsGDm8QuLAO}QAcn#@GjfYV5${%dlxFAI99iI4H7ce zygE|IT-ADO%fsmRv+Q^~#%TSPE+;hzBk`?0Eo{MR4ZJ_+rP!S?N2(Hk-)Wt24^!r#KY5E?`x;at#%I5m zrHBLnKh83(*SO*}T?iX5`=8o{{ja4H{Ic=$zrU%KD*?0mTMJYyY>6M$Lr@Q6_q`c;UMjv$s;R>5pn>`P*qLQAd8sW2&aF#wy)(qAhR@JG z?dR(u8uHzFn(be~e{I9GDQxt$TBdY8ZWFU>5vw9hlzNvGt$s06`DtW4 z+V-CXOusA3#+K5Uq~EsV+|lW)V$EHH=^2rr3tVk$)^ckGK~7=I%C;q#UGZ_dW^Dg` zfvZ@}Mw6s??cxa}0DbAun^2~0{yRfRAz_TdEWsu=2($ypmTIe7(W&k!U5bajjO~0! zR(?`<>PZ0IM~Cw>EwCRmQ)87J(9Ce3lQ+-F^IpkFU1Iirb`#+86@e_v?-`YpkOJD* zbpoPF7;mW>Ref5g*|krItaHi*Ub__yIB!gx z5Lb1L2*a6q{opkl5N)#BL`HPm!v5P8yxU}Q7CtFlT4BttDh)9wzRsmr`XY=xmj0fF zvrWdmH%lIF4hlQ6r=>3@_bhL8{oVUJGP5i4hSk2J6Zi=~CIncM1!om*j!rhjU zY{GcA>cbxgZGY4Jn%cvZ_1-G>2Ebvrpe^mR%{s=r2gQHTCRQ=*GKw zk>`7L^-dW0EqQgqg1tmtIR1r<$=z#Ym1kjeVW&MOcaypOjk&7K|MP%@sqNlvSCD)^ z--|;JdPe)*rYqoAuA!%ApB)ZQgrVDT5(b?BLE}9vLkzmnNyQ?+EEDcXSRoGk9^Hq& zx9Pt}ZHDjqx|hMBhGn$qc~y|4yc)ycqMsh(%<;)%FZs`G%~F{U5GUX1XudNAcBT4p zq@F{`L!?s>smM|DMD1Y|f!y;|97%m*^`NKcLR|Utj9ldUO0QLFZ=ozmMe^?bX)^F_ zc1}!@Qyr3*mkQK)W9ELRS5nwPUWqXE%PK=C*nL{Q(qJzwla@1%3Oiw?TKktac0ZRs z!4`ZyVLMT{+_3lwN|rY-qJN#7@BZGQ)fZqBh2&edg%|1g;{7)S zsj^U z2KmMF*G~zt8zK#)Ws&Im?~G^rQ)lasY*QGw2iSB;)z@9%?y;1Rzz)mstmrN*fh5}j zc2GXnFcKbA4mV5Re@i?V)KLun$hXlcCQ@2hMII$PKpWH)z9h>yKa+igyWe{>4>x~Y zzcnQ&eu{TiuUDlidYMA490G%L%r#LvF&M`g+GhyEN^ z(+f94Q1~1*T5MFBwQx@r+Xi6b_9@Lh|>!*mc|AcQR^K z{5yu^TcZ0TnoJSiz;>k%o1=s;!!Y%MH{|bRY2Y>j5R4=M*V?BQ208>zulBh&wf1~j zMJ9yy)Fr=-s=PnMn)di#2rtqQ9GZ+Z`mA*?3QzVWtdXk4LmMKS7raRO?sOp86R; zis2t_ev@4H3$N`IPi@p(#E@0zwOf%9ynLq4fCX5y7PMr7W>UKQx)HEwcCHP|!(2Go z44A8@$pxP7v_a!~dVUpVVLT?nz}LNG@T0nRM#9)?j-`6QSYu0^^q3iX*4f-gyeBoT z(TmOZ{64$$iVX=-n!=Yh!b~qf&6M`*WByg|-PDf$magJd*;Ku&UtvCrW$&1ahvB4c z@PIks_EX$cJsfY>J4c?af%|((2i&%~c$N`3RJa(wp9Zpy+$>rXJA8{N_XhNH17GY{ zxHnQ(_ZWQXBe_(#OUsjf1Eb-@#fZ8S^{q8dt=YqfvVDW%H+$9`MNm|@F~|g9TFica z*gAKcT}Yyq)jpA?{5ahxYr8By9FNj}F37?;1nZQ2d5(V-%lJ2fxr=#lJ}NHL%s7cd zv{7fwo9`7ytC<_$aE7n{eCNKLR)$AcLjXIgANH=ld>QOUtkH3ul)EgYmlU~fmhrB9!o-`%N4+rZ#1nA~1@FL&k4HuUfSx`y!-t6a?f zYPF8{rvG-n44fNXWb~KK=70`6d3?uLJ}1Gd0T6TaT{_XtXX`5PB1dV<{}JMd?ERiut&%%uflGRvA7n z-^d%%(vKH@kFMi4VS0{LP#zaG3GTubaHb!rjgN*Jzj--`wu@f--eYr%5MDz5;7S|M zKU>4og+>p;YYMJYNrVW|O6l$Uy>eyk`E)exL+mDK1I&nZ_2jwv?y#in?t0RKe8x%7 z1YFgyUm#8=$6K%u zPyENV`*>nVyD^i6cK%;g-bL1rTkuji56K-O(b(^!-=gFass3zk7ksP;XRTczm%4UY zdDTY>eP}E4B;P16F0X^aUhB+@FvZEhBAh=ve=adTVEAlP>jX3lG8gwYM+LrTkhnr6Is1qEGcW=DR}TY7t7k= zD9fhLso58iC2a?rI$z$K@ThN=OCAJ^wv!TI;QM;2{j+lb3KHcQll+D^Ax1xXb6> z`uf&kl`=y()vk7PtjNj5e`_gr<3H5;&D&nCiy*Jr$EpA31s)${KQ-5aoEzv1=kKsX1Yy zquviiIvDfuczM=cf^+B{w{p~^3ZWtd(gd7VO4QcIWwm|0+8@w&%*~nkF$U>flLf{I zBzPk;9AlnR0}n$$%^R++E!yZR8b4mTkmtZ>XPo){dt_rHr6Ebb9K=x+1hg;H#>qkf zR>mPwRlrff+k*;`WTzCN7=aLWssyQe>QGh;)IQo(kfec@kTsU2E5a6p$c-i*D_!OR z%@Sn0r(hO@oRKZ~eR$7_{CLra!O-5*5kU-&1skLW4+M7^o%Y@WCj*5g0%5c9XPK3I z6rR%1h;k~nB9$@)kctVEM1zWb2Rji=@Y(b}q2*fdlSebIAbXZS^Al}4Xz6NT4*Kj5 zt$L~AjTk);9V#TRxYO;3$PA%zcb2F(^ebvBKqr7A*itDXH9w6jB|-!(OaVHy36Co0 z*;%@@2!Hh^Y<*k>bcfO)I?#$pZ4Tu@#4~{iR6gI5C!5u^>8B2}@1R|&IHKK(=6eWu- zI6y>@6F7Zuh4L%yNpP0VC;bg22~vm{X~h?XwULIGLcjm@gixo9lE}C`pz=WSYBu5 zIrWo>P#rU*_Ti+r!_Fxh76suCL_3 zjy)D90~d=$QcSfd5)FvPo(iS*^d8bcsrTrs33py*V@wiKl# zR5{y5&3T=I;9MSI4Pcj9z1aGn_JjY^aTS-Y6>R=;{;JE5H10-;xzM#C+`o9?rMss)u=tPl-zywlBP^)jaTsZU)KPFphzh(dQw-6O9PXBx0GtV3J8THGzJoec1FsHjqKwV^ZH9Y zg*YhI&Z%`_#{8i21WApyh!}r{w`L`(1U`$r+hrWMuwwG-s&^4sp#(GoLrMnGBdWb4 z@lPsgQ2}FZ4;P`FfH)G7DhRLvnFCmQDS!VPx$n9V_)xJFLEz7=j$efUDHs!KFx)Yy zTg=kn_Z&^0c({?uhLFPjMg`iJt@q&|EOJ41EBWx@>&C-5R1`iA%|6-~M)bi_J;zW} z;)-dY7(ez$5JRp@^E=jx)ODgUG1%Aw9pd=H;R)=*7zd@!2JUAIg=gPkMS8l|eY@)ajh!7d92jk!g z6i|&3P0`{?Dc2ym?sD;E=pH3_p0z7y%Ap06 zQbS4(B8nKWog<=sMWc(QrWYY~9(gY!iFHVk{jJGKDSGmMe-*~LapWTKnjPVmjTi{> z>C>gb2t{BJ(Znr^p{G8V=tAP?Zj8BvAzQWzvZ7HbrwXQ4qn1BP_>31%!c5rbG;#&?E6g zQyM8gvZDF`(|aZl^wB1GA~(**fyDD-Ml@K9J|+<)1JMYG9D^~>yiga2?te2&7Wr*H z`Yj|*unr&ui%%ljb%B`Biox|1%v8UlPK%eY*oefX5<_*o-oLS6N4%5;LQl1fPmTC; zuzx75GG-i~BX}s)Jg08L6yjL=Z=5-GwYPna&WU!fxDLcIHB^~Z1{A`<9EjAIrS7ne z0#WtxXZiPjJKjV1a;X*9pzO#}(j<53#nyB(wnpJZLHmcXaAZNcCkb_cFr3QWlpDUlh9hmljn~AsCZ2QE}k& z(6z^LvQ%jhxR|IJv9sx5jQrTld}oopBMlMQ5yVj94G~lq*df3WfDRg1CLCX9HGw@` zABf%Jq!Z?f`~Q722bG=v-|#-RH5&B;^_PGcr33N{;Ug>1k(>lNpjffut463+N8sV# z`;O5|4);fAC!H9PQnvuuxwU-3>%8!wD;O_}iqL zz_(j6PmABKn%P+3w(dcJAWLJZPenmJR^$hofe~ez*e#q7JLGbRjQ-^YE|C}#h@*ne z62*cIm{Gm6c!?iyNC4w6Z#il4hbuffb(n0d#2XalpY=kGWeuehsbmF?x<%>Jx*G7` z#S!4N1hC}qnk#D{K+omaG@7k3kOts!k2h7U$0T)haZ*Kgtu06K-~aYa#l~~`b+`J1 z`z(L{Hh!X42rG@V6C?NmQsISI zr65KV1)5VOTDeIKUP)v?oJwGtmZxvs`o&=&WVES>K!tRgDFrbOH6kSxiV%69wl9OX z4d^3g!JO$8l!&4Tl32luX)Uo945jV|P9szkFN)w{86*HFmZ}iU z@7pe6PF|I`Wtfax{%r+E!qO5ds^D@da?}pJWr{I0*FeD{mSk`>%sH+n9yF>`t+B|U zMRr(Bv*1<%wwby&cRRn{*m{k*Y73Sf$bdkkyf*}HDm6pe?~6xC8Yoj>Fv6F-{x`H; z(7kch5PJyqMdg7MwE{?Oc!m!~QbfJ2?m~4D9UPUe??)4iOshp1Nd#olfHhCA zt>5e30P-5=KU!nwKena^GJrS?5X3}MMrcZbiRWr(zDdY%lx2SwjGreT@kyX&Od}Ff z5wqD@AzDeGz+!qzz6nLaae(|HZ5i*@LvjtdjXB9fN18Dm8!z2{HWDzN$%6}R9tri> zz`IhcpmC`6hy#U;%PW7sD~{Mz6$4hBU6k1MaN;fqAAr>ug-FtT0>0cqIKe<`G&VBG zgUv^$ofs?O{86Nv<{jL5H;?ctBx)x{HUbhfRB8$uO%$X5jcEW1!HSqN4zs|2eKIH| zJ8{`j9tcwCWT5C1Of0|!I*B*|c_4WinO~y78))aiWM>m5a_@{cNlLqM4}n1khbYVm z;|K5s(<1leCR<8g?(m26uCjB8KYo~qH(0BC40j?LTB#Xuu4rPd#RexfL)IbMVEs9` zY%D=Ja0(Qag2oL`dE=rm66J`i<p+aMJ35aP%?LF7rI=kcL&Y(xT0D=q_VHV~c6>{xA;3C-d`kXBt( zKoM}THkL{>0gNg!@`Ij0VK0sfO=sY)Dl7*{aSd+67TM2;L_){PNl|19?3e|?ti%&< z;u44{us0CH2QeKIiB$3aJ$lu?1H#;=w0cLZUEByh%H-aof;W}QWr!;sa(7@k2zD>! zT5B;@!0n^4>&oY6Z-%$B)}2b~#3>jH;y4&24DkWbXEln5)Th+W7)6>4NIjVU$$+6& z1>Hx%HeNVd-%03MxqCp?Vud)6FuVyqlz+F6BRbRvm#Z#DpdS{gEZ2c>?NZI?xq0br zf^_y0cDm}c)*!4X5RS;k<_RfVNJx$$hJh50r(lnGi9N`v1S7Y1d1`S2SrK;dUU@0uN;McwCN8eq zz0)5B2hgGn>x;q$Vz5jrGy+)*!fsZDqG|satGu9f%=`}UaF2=j=WC}eha&oqNQB9Q z5^#m0(knS=7zN_lqpfbt6r^K;sq}-irw`dl5=0 zxv@ycY}$Yb5xdJ7`Py6qW|@j;KvNq~Bck=0jjs1rDUG3GvbTDn`7=dq4n{L1K~Ne4 z5RtJUsvMA@A#f}Zs~FgI;GBc>4uJKigKySpi{AZwxMNrtYQ{}kwCUSQRRK^60H_dD zg*R3rUgY^rcY>Bp->A6;S#hvLM2eX~Y65zkEDj7H9tBetmwAZta_8itM8xmLE!M{j zcG9tlI7oSM8{uy^wVgM%n1V8-QJ!}vx_1}|5{E!6fYtigfxH{7Fn$ma0ssU6LPP^V z0C0b0pp>+)`Ap|X{`@YG9jwh&^=b{*t6jjdk}%Ov*La$H=k6Ob{r4#U03bvoMnnK$ z00oTex~7M~P<7-jn($8e0Ko<8$qst~B_I@GsZ25iC6o~2@ohjEpOs2({<{F_w!bvM zgT&mXX=Rnx+&JkV%GlgE<5B9eb{rZ|w|%E;u4>ntO9zg)6ouj&fGhw23<(&~6##aF zyY0%hv1KzhQY>5%Q@Q)@_qw}HW^I5k7*Y)QK}>=v-vgU;#@4a~l3CYIT04OY_=d~} z{wNc10zB|Pdf}O0dGl9(c=cZV=5PGhPtO15`cG$8$N2nO^3N7NPj4Th`P8AA^Ym_h zMP|`=M{j=Sf8{!x%PpgC$-?`r<}auE;mj6&I`nT{2IuT=E3ew8&TOL>pH~l+c3aH+ z_NUgLIfK6WLyw^5iSg)Mu!<4s-q^UXM4Zek8V8nChbwdTt@lwcX}|gSxj8z0KAs0) zi3`lo^~(OG4etNE_A`7bOQLRoVQ+HsJ$l|OFl8?6b{`ze?61FYx_L-Eg4_VH3a2D> zkbusi)_6p7H3_4h3KZyQj>4E*?aTC+I&xP(W|pBj!`_(K`lhn~3^|E*kNxId2O1vZ*n4d{r15AKAACrk@h_&Y?g ztTDy+R9f;%ihcE^;LO>9_B8RnnrNe$Vw%7bq4#=&8%ezx^G0SfUxKq_Gp}-IiR58$ z6z-Z!G5bq)HQZKS}n85BL=N}obwsm{~=B5(|{4J0C9HQUMueLZi z+kI-0dLa>aXNnVMimzLf=T^DyYu#mm@ib-7v+1DQ?}?=kUiasM8MGnwh?Lm$XdqU+ zPN&O5g=AEE$zP(E4aAE?u^tIep<$L}PmCse?y+Dzv6U}Qqt)4!sr;9g6r=f!2iUWU zt+~Ar*8FMD4pte?<&#f1?|T1S@|MK46JSk1l? z8~Z!JFcKGXOQd-@E?p*%E*yJ}Jhs}tur)ns+->RB>&xHhp@I9u{D`Ul82Dcr`!a(% zN7Y@UosYE{*YgxU^qTkS=D{s1uhDzYir>x>dFG1^uUQ=}xB8!g2~|R5n!x_zWViDI zoMt@tY_K{e-C4#-phu=7;*FusHgPBmM3b!PU3_SL`_5Tgyw~jKM9qJ$wV$g!wck?o zsH}=Jbxr6{CrZ>p_}?ibe}&rYU*$w0bVEb63xBx;WgdaYSfujnFDTf9(B}@jlvYlnuh-=)QrFb{~ zH~(0sSBUT1fVou5g=_SnipxdHk6RX0>}=ai7OnCqa(?_nnUVn}Rn%X9+DDDi2YDq%OSq(0?-2-Z+^P zaAqY;O3qJoL&C08jyCKFLPs-XJ-RGOPmcP}F&L_co&wR~jj9R4@4K2%YhiE2$rQV` zu@tU#GnaoH?WgEZ-r2y(z$3| z{5`y&hl0BD^{30mwfZ{bDy^>@Atm)Q$v z9l}(rDCknJR^OI$Y*m^TFheC@BBrs&5Tz*p>|b_0!fLt~fn+-N)*7}kb z9`4g)WM72JHmHW^m;=NKXF30)-@U-}V#06jiqQ8bwh;s+s6^=^0mEXp_D$~YMs?1j zTq~jIU6Xj}>Z-amC;8L5>fQ)L4L~5s&x{NGv9tDLP5)7}AJMl%otZgX@elm|{`Wqz);Mw79 z_nl;u-4G~VK8Upvw;4Yegkmdeel1^qHf$-z_uQWhR3pA1u}-fb<&WMsgD7>pnEV-L zOQe77^Q&&l7H2!x4*xGHKOwVwGS2bQHEtay@7hk}8hVR9WQ>x=`gBpt=JU%Z7wwlH z(Z~=2A4d3elxc-g9v6j0lmuAT8Wo-lvfypVaxcETGbj4XS00-ukj$nNiw`inH}BHw z=|nAr2Y_}-YMGX=Y{#FOPrkP*s`H-%!Dcuwtdylu=iK^K=v8AMMv*rl$zP#%cMr~q zdGZDu$@Umd;k}(Z`?59gQH#hYBsPw+UMT_y21LU#w-BY zvocFDXLe26q!TZri`NU)r-tS_oupN>O&f3H-D8I()U-sqQj*?;8&4!g@{;!@qQ4si z_qA1q3{_x#M#Z|-dkaSH5Z&UoBkbMF{}%FRd3g>!mYy(Y<#cDYzAGycBmQ5{If+Uc zb<>j-)ws(+WAZq1;cR4NzxH%5L7)YL^&boPrh|8pKVHJ&u>A;?KUMz1{cHfWuwxZzia6c;V2#lQQ_Z)bfc*|ag?8#u5R z%O(1f-IJCmF1u35C3e*xle0MqVPBZJ+tSSquVE&+QAd^-y*zHnn~!~!wgBz$oogX@ z>KDg~+~Pb9FWePYGN)|p>{H(N4_YWG&cz%(j|uzCT7Nw7E$-#V2)5Q|Gb)$#b=UR8 zmN#yTa&V1Q;2u449Np{{<*;y6p#$>^=kYr`;AVuY~o z(2bUAV$e2fnj57q#72{(zZC2Rs}W{)I)Qo`=s6U{5H)jAn!ES)?foYEn4iNMg?AY7 zv!&O*VY>sJ3;v3c(2e&8F7II`k3!U2;o2$dLJ5`KgGyffY1->Ym=KSf919*YaXh-^ zG(tz9-TJI|$%D<>71VoNMq-C5qI+gU{%*xndn#~r|66fWb!uEPf6iiK%|^dFFxYRT zAv3w(ow>jtx9U3bJ0|hDTb=@sd<|T}-wk!&tEw|PeaLbCy|k6`_~uuB7ORCw_xgPE zU3Nvz+Q13?rl(Dten?&J7jf|hE*j8Vc>h%R22*SskK>s8^-OopR$hJ?F|_fZMdoPx zxwo`E7?SD3CetUbVw`%%+@=P zgK3+lv>$~__U%s1w6fwR6nTIP8b$of$4ehhA-xlxol*BKM36$Sm2r~kCixs&<>~KY z!5(zfq4f2hCgi2}mk0K3jgaTbF9y-=E(^Rzzly*s@3piXwIGye49E3P_GSn|an{R* z3(G-hg2Kd!HDZ5f1#vdA%>2X4XsR=xIK#y=clZW|a&~uUZF1**x z%{i9M2OSwg$mv695JtOmOKRBzSMIq5w_z$7rqaFh;-}VqpAK&yI1GH5&FsG*_IrZx zE@x;!X(g>E9j_nFH&^^U7=zk`Mp%Z+L;gE*mq9+G+CwYKR&1S+1Y(0>DXa{H2^Y)X81pT%L36G*Qpg7;o1Q4UH))pnW%s476UCcc7B4o~LJeKyb)cE+v}%j|L`<#m|&E1s|XO zRB*u_nKeF3L$)Md#UjsD*uUuWVxe&SzG6GgGZz};^8wP0ZxN@m!B^?J3nKyLc!~K1@nKkoqjQ#ePyx;-CEak#TIs#xA;G*n|)`r>b6xYf!JNI z*Yj4hw_Q>C<+{J;k4mA1RcYXt=&xVR@^sFIolHl}4&?N$y1l0Z;KuQh;Gg0u45+3Q zX3xW~%7|iY@Ox;o&b94}RvWs_+U{``O4f2!izF@dreOV&#eckk+5C~SO{lG;_rRwU z&TS`})~}izS7QQy`yKD`#guPqett|wzA|T)(}H#^;F4OHV%)wB$k#i)B}=8|Wsb0E z3J!DF<9Wa2r!UR;1b$^FNi`+7?$NTl+gQESQ**3rxM{=cG4TCxR_BJYA8z!|No(_MV5Wa^ruucZu6F60UbXX{!e#6%iFXuLx~UuGS$t@ryabwG~5IXRUBUQntZT z-~DL+Z1dg7*Wk9yu~kAg3Ep~kHk-&Nz#B=`vurM7-aZHe=+p)OH}XqI6edH;MM5e1 zapc0TD&fxKQDOZ)T{=V16mCkKy!{Q^TeLX-!XvuXbNIcO+L7VHh(~ct7DON+sxLPZ z{#?K35}K(~eG>PQEf)2``Oe9-&~mS~TKq}sbZf7zDWb>-(x zoM0O}lL{}z;P*4Kzm*3fiwV2Mm-%GNiy>Jw%ca7FHIjti`p{(|h(?1skWjki$hL|w z`SC*y2VCoV(k=Fp`6it=VSt(uq_{AyHk3fPl+&k70voYb$?Rb{=CI!J|Cey*NRXt0 zF65|s>rxqP9P%~p#WN{y6HP~xdu$94gVnz|GwhCy+MN=6N{!9mRmAm0WC~LtVp26i$mm%rBdpyuWetHWpeu$ zj0lDx2rdLE4MVOqL>U#sKtkyt=+Fj++@`rZWPa|Y)+$441VkucF$qv*Ng&@d?*i5Uia&@&!lT|;acZ7%z;GMysBgB*2LTIb<`x&JPq(p#6X4g185?M06c?8 zyoQwG;Ak>(U-hAZH@pSD$4{V;#zYI0HK9`NW5rc?T4E$}VDCBb${zSSV0`q9qpbrA zW4H*2Ql5Y1jFde6oIFhmN<-fFilK6x;jR*dkvNzS)+;9 z=3Y7G$j;QsAvQ?RF%gJBh%iT*k(#mE?-*i=eB8XNrtbDva{gWMu^f`%v2^E*xOL=9b2Pz0g0I&?}tC&ymgOHLXi< zpovo;HwvYs>TQo=@NU0P|I_bWUP)NZF~N{X+XaQPM66mQ#U^@7NKAV@$4+lA9(efEC#$ zNhXNa`G)cx)lv)j!POg`aXc|m0>H$#B|yw{Y=i>!4-x@W1Uw`>yQS)aGIlOD-Wdk} zh=~&bmrg^8gi^kUQwGrnX`cb#_Vr|;C*GYyyOnP1qko&IDTXPA(V&ntt6*^q?PB06znSJE@AMFo)u3_Vug3(-p?1sTbYcEO0|P>ork3r)~sBn}G^ zR?mn%&+$2qei<*1eRfM9@J`=29QULB!j6Z|8W>JWAw@sCu=6N@?d;0BnL}Q8|1(f- zq;VCUDy^f7>9_Qe1c}FqsUjsIEL6OsA2sZch-dH}a35qWfqM|-tHGlZ3KVS+86-%C zhAix{*F30g^k!8ORna|oh|HoP!T~FjrD=Tx#DF0%fMC}(AB|`_;Inz?xm}-Iy(|3t zq*C9zng1l~C8OapAjwLW?6#D_!C zWROFkQYaXK96_X~AT;PIAz)P{k-y#GOCEHNW=eXcViOUe``LymSphrEqf`$-u`0Lb z&YgY;k(`)X97q`E>Xj?P!OXupgk*yvC{|U4zUQ2uJRLaCuRq1oFs_>15Hl5YCTCH6 zglfK6MwtntYAXoW6(CTx{ui!RXRrepkpV)+ENR-9Rxp%SB_6}6EUy8nJnQEFfAc1T zE%F?r#Ui4maz)#<+GMh~lA57-V?=C>><@FklzvjOf^t^fMymVs1pOUQK#0Ypu2lxE z>$CR$2M>%Qr2}~+NY$pQb+niSA{ioRF(>7oQtvOc&9BT1U*7OXcf%7^#kiOB2}w>0 z@fq`ybE{+=s+hKe3m(@ynEO_Ge9dS$20>Z8AoZ$FMEXR5ma$sHv5}A3@2Is+ah!cv zkFdlWXyrplU?W+B6X8qN;21ts`tv`3JuoL#YLXmunZ^+*W7dBOB?XKTs@qgx4`OBC zrJ`Rg^ZV#MgOoF{=rE99i1BNMqC{4F>njmYl`zT=ct3YKa$QP;qIYu1m@wIPIBf)O6< zk?j->a4c7eOTg6Zzu#_z?wS-*755V+WRxxmdSg?xP=_*$XpmEHsjH4y&h>LU%_RpV z0)Qq;X$0C092nMy52C=c1ZxKd?eF32gcwFh>O|iXNgCTA?MUaOJlHW8_JblHtGbf8 znW#8OA{EeTFhL*QQN@N>!KaOl&Vk$1wPiP!GTtmAAa!7C!zex;|5b~U9&}N_%|^Cu z5ijSlbXFR=Ynda0D;%Um-bIi!Kw;Vl8fTTtj>M6MU}KFRBfot@h}h z0mi^Rkl(exBq^HT70uN>V-6q=N5xMcAks_^_{t`mQDD>(o2_;I;GQ}7-yqBt2XM6` z`#uiQ&X)B&9pdr6cE4>SWuySpEMz=0A8|RjU`vgU(R)97Z}%B9I#))^LkpGESGYsEA0E zqwii9M7;3d|HUJA)wfNI6!1-@QXfH4tiIG_p|11BD6YhCDcCXsk#f`&`1Pcf5P098^`n#N7IK!UyUuNC2y+95WG3Me^6 zNLi+8jCWQmjKWN2{Yt!rjEwM@e*t_)e;5P|KvYm-;noNeG94zG$SdE#+hS4i`X)#- zjX{CWBVwdDR}f7T&#S;(!KeU?V&C^22BWtII}&U6v4bDmC%C%+yiLalW{Q-!-8 z-_0d2V(w-TEJjcf5wQA?PUJx`dWqDYnAsgW@mK#E=lYJf4HQi+3{-JLCRooLP!tgk z)RGY;qg%{n%odJGD>bNKtz`JWjP}ru z4Mqks2CaZd35X_rF_e6p&Z`8%VBS5qyq2`@G1E@!9Wq!+RXjL_kB9Ft_JTnC2W{ge z`-U|cHSD3lO?3wEI8YJ@3df$sJXCpdY+Lm9&9!3O`^V5HKf79eDe{QFo)lRs@&lr0 zM8JS6AxG38PFP^VS0@WAxY&0PAbU!10n>F9k!qrJ4L@aYWi7xu82J6?xs+MCWwxl1 zR&)!wTYM1_;=SodMX8ElD+ocu;gO?n`=#>f}S>1x5Ohe(8pq*RKr zG74d%6SHi9A$M?0fF{9|_e;PDfkh%v76B!OFRi4@JI3e7cmQWWn7@JG&k2Ge&bCAZ z4ETa#p9>MxSuNJPw@vK_OE{cy1jaJ!Zvxm1oN{LsUm;RXz^rRy08OO9Ft9cELPnW* zsq>#^I|K7bChvp;Nmj#gv~{K;E({qFfqAM$%zK%$3^%o3K0JH6(%ARc-13tNTTc!2 zRsj>o!Trb!c-e!y%O9{Dfq3VqCr49C>Nwod5mzcrQHozF{C32Y4B_Bh(hn@&QJq+4 ztMvy!1c1(n8Z6;Js7aCM`Kdal0_;zVY~4Ks4r(hwk_?5C=z#zZC+ZQ94 zZTP6cRF9zu5mq;7oe~l&;K)+9Br0{gGKB}{RP$zez+DjFAiYuE||!UIQf9uD?q z`9C~G{a*Q>ct70C<-T|m_@;6ejAxLT%enClR~$vCU@D?46cYmn8LSDtS_$dW9`T_4 zKt4*ssEZCUyi$}1c$y6GZ0*L%h^&Tr-P*u#Q)wN@M;yIxsZJBUjg0l&L+Y};{LGD|$~zo7a6fYHp@5C8xg6o%l&ZQKC{!SHM1n|Lk| zOS^y$5COITI=Ckc2qizDF&7QkgqFs4{huU+XIy`{V8H03{^t*rdFY6zYf0{W@e;=;-+F=^B^iKYLmedzt zZ#%#3`Zw(6)KF+Id-~MKr+w!220gng-#tS6X4pk_qdNP#d4PTV)^^^{w%w-=)?a6% zv7gub?XbU|?){5*wSDAzK_=g22+Tx1VR+?IhJ-GHC|-+C=u&F^r{&vhxs<d* z^kZjJ`0vc0W}~Hk3DT!A2O^FEBrgxyQy!pbpN2}ZY6L_W`NUpEz1m2bdeIsfQ>?JPbbU`< z>AJOiNWzI_4#QTOP$y-9)levPUyYNX1D1>RFLbojwld$$(>2<)TTae##6~DSa$-uZ zvj+kG$Yjjz-|CapNW*ivts~>jE&UrFRm4IN8%ctwWJpVpMGZ{06f9k{^xgV&Z7Q&> zs^^ic%rK}Wq@;QfnVIQ>7R5}{$ShITSzem1mxY$wVHPUd5H(vkXjh6#Nz~5OlU=Nf z+kFPIJ;xA5eb`Ds3L_yJiZb1x`C(5JP2?35U@>y9FLQIFAElw}NKe19NBb=bMk0zr zp-6q5=B*{AnVK?pleN53-7a-=o3;LS<{e|MW1bS1d0W^blUS$uR;bm@xJp93P+6y& z970MjU1{ZqfBMWCI&{zPTl%dUa~ipr8j>hxN!oa&nIa~-+!1<=+@`}F8b4i8ND5N1scfqu(kAGln3|Y^rr+=&?qXxyYxT5LIE&KgX;Sm){G^)pK< z7+s{WCd{!!u&W{%x!6;WCPYar)Eh~oI`lOCdVc`hW1g#F4&ivxjNBM*_UcJhU>* zcY~QCX)o(OAkyk4?WFXF?atx9wLyKzc0wiRt4>>n9??bRwmqxAe)HAm;Y?UJB=n;l zp67pmMXFlZ?Tfavl^O9ZZKPA0Z`mB}vbL&!<_)A86iW7J>+vs#Z=ECIV zbl5T$&6*_$TAiD_?-MU}&1a99Po4ad-ctWST$c-^0op=arV9b+Jn@WE5EEp$L+=5s zCbcXd8ZOzUxYH{lrd`oDiJT}cAWSs7Ca@-AS4 zu#+993Q&hYnr+PvwPISP4!Oe< zbpFkA4UKVZlXVsxKLp+gJl3)Mw)HC$T49_Ca+`Zs!CSU%=+j5Kub^Rv$}ll z&+-*rQpY3ct$44*P}X#!_`5F`mhE0BZF?NJ?@MIVM{tnR(!H(z%ehmYy zD1{hQby$%$c~q55vM0z%_br$0RSENBVc%@w@Z%5B{_Dg(RS0#$|)v((hk4oVb3F*wj zN@CVR*D&n4GC<^(ndMe)1KPuO+;hNHBTVuueRWS3A`w=ozWF2F4+4k$!Trc%=4H>W zQszL7UX*ud>7w6!s5urL>YdcNc!4}j(Q&FKGGSXa*;AV*B54VPs%PkW=@L^K-TJ3? ze?B#SfQeLp>n*h%)@B?ju8+D{;tg7oYErhKt5ek7Kdb??ox5F2RYEH}U$*g=yX3@g zDA2l#P9(42C#^;xyC&b2cYN1d>wW=eXNFJpN8~Pz&5?~TBvho}>XKw}LX_J`Cfrgg zO2eiwXYgwlKmz^Ntzkii?=7psJYt%QJWHkv?JGogOHEFMgKV^RhKz5S(L#=+xG4k= z9r+OaNS>$lg*1>*(Wm=AwLE2wov#_&yfd1y@lzgi0rdV6Ep$8iH8d}X!rBCqxM zr@gmU_8DPbfJ2za>d|Q7(`@UMG8K~vV}5H3cip84&-d;h(&J~|tzVSdM;>1f)xJG0 z0asdodEDO5z&75Sh_)L406noh5{hNg!yPPLVL(UjRkKxY{9IbxZZikXslN5lbZ;{x z0OPpPel^sAg$D`fg|~k#i&_dlqjmzk10-(|y^YH<#ji8nN>t+;wg?W%vCIS}w)H92 zIdr?%J8!GWc{7Qac3ACxF?^~ak_l=_o2kBv+ zm(;Olj`zreSWcmE!Sw9N39wIx}ZQ%!++Tlhuj zx%jqWMK#KcUgc=WQ~4XI$j5O}ZkXEz@$y}BGi*4?#6Px1iKOnnnwTI=9>3A9N=jNh%Mu}VnH`3 zO>jn0>!%J}rLKgNd{z&W;OP707T!s$WxQkso3e|m$PEk3c5MgIpSEt^Tim;P)fq4` z>=KxkTu)9a_W-uxrLe571mdDcx+OMs(HvTw|8*6Xg#Ijo=r-T?F!ICP@cCCOmruGXzT(;B!iWXt)bhIF|Cc|EB$8J`G3@FPk+h)-@{XM< z#s*<$NgJ}F^(58U{4R-e?5RY(HMH1v@h=SY1^rF`Q&`x(7KSIG;g4jFXWOinQV!9B z09vFOe@S|GFZ4`;zXi#SgU zJ9lqf!(D%L^ll`BK-xQt+kGxY`B8Jfax@}l_&aO3Lee-+ptU{OaF)%$G9EzF4iGW`lVoTCF}cVK6f%Smwf@XbRM=x}2|m z2(BzURLs6omqpFjwmQ<5>cU=G8{Ace1UumYHo@(*eZR$U*I(i?BN2zlU50817sbFN zN!&%k+A!fTyhO`5iSzgaVpnD#AO6#E3u-P-t3|Alps9;y+PusrD=ERo)*SY`N5=t> zBhHs8RN9-!Y)^pze~pEQ)**>iLWm8iWM09raH5uV$)VEgPSBMY-`|>rdNS4u$XP!Zxg&(*Q!(hlpdM!O#h z@60l&`w%DHEAxpY_|=L`@t|TXGh7FRCjb2EPxWUK{^!FjzvI1m*lw3%IK0)?hq>Lh z7lFBfyzIVF#?+7%zE{*g;Pd*%Pa_CB2F8g#3;0GHw}^8$e%`FGunCag7>&r&oBTK; zDEIG=&j>mWi=juAk9*= zMtkft#xzt-D4~VC!p=J{6%>G!CRtN!{vW063`<7(yEg>oACMy4P9OaDlJQ`?#?;c5 zO-NTVwgU{cyPwM3VqPYlrA+lyUJiM}MhyQx6~69+J9~kCGth^jIhT4oS>h{e@HQmt zB2{@vCoy52EpoPYqz!M^w-%pjK-QP==L~B|Y~Y5q5)MCfn>(b1z-`cDqgUhM1(5^{vEyRHx~TpqLtlXSl(D^*OO|2^t?Rz z6Fn_h?XxvlPdHMAQjCO!G+#w}575PU`X*4PCUZ96W$}g$_E8>c`X|l) zfMjteo|2NWpT8RcW6hT&r)P(y?d`*kh7r@?`NkL5(A#JlH>Iud5=}jq6$$$A#_M4K zelFqWC$>6-HT85P(vMfqxf+H>d~T;fn${48JhfKYAD-WPx0o;%@$3|YPF%gJ*cJ=+ zPv!d?l?U*yVUR%jbU$Cuo!sfO4Nr!&fX7{hgz>CQEciv%C@aV{Z{~o`c5+fdCC(trAzoT@OC5e6`Ve zlgCBj8D3b^i^a_4>(3SH%w=b?c_e`lr;6XJnS6|0M@EmsyVqyYPiN%82b4>Op14*u zjZ{#zPbR*%S^^FCFz}NJX)%U67Ul43AsbZlqq%e0*`(55sLK@9)bC-|?aad6YEI6S z4MM>jujI+NBj?6cgrzIem6XiE2az7YC(l4=wf8z+PvzW%rcKOd^S2KQs>^a@D7uslw*Et{MT(~b^e$%7M&UyJ#mU&HD zVHk|%10%g2>VTRh*Bb2);Ji?Va$MD)wHWV|&5#TeCSS`_ogR_rQt*BW!u~oiyu+1! zXv|i3gI6qO#Gh~U&UQ1%QfyZ#C!ROUi;UOLGmQRAq{HM@<40h4Z28={U&3zU{=c#S zBnd>R2BTUmIDAkh4AG?_q^O$MDsJ|Vs{@gt;>XQ2n;DI6yhl}K}P#1^;*Rc7iLdhL9y#8c8Ho z94}sii8qcNCL^}I8&Gr3oI{^v#8RO2kd2@gf6pcaND>7CITKvQ1|ti?QPM|mer4>e z?dEuh8ppp@aWHY27INkd>H4TbAa^T6)Vujqi|Zv>BMQLL%F#5BfIAf9R8n+7M_=~m z;(F-XcZ4mBBO0%Cq6921Rkf(1K@E7ENTi|Vo9EJL>Gbn^Z*yOLrBpar%u!fTfJCH! zO>Y#Oo#;o3aEk!*u!t560^vS%J}Kf_wkP^m+UVo{6{4;>wJNEzTX7Ro@9Eu_RY8<*lnNqo=( zOqxpS-iJi%A?hKA{qN zH+*&xPfh|E(P0FY9wZhv&rW;os%rl~zPA(M=ab;TlBs9bZ5inoaG?$({(d<@kPnuwmwHQSv z(Be_BAv~{zR%RbLGtl1T^}4bByuKdi%JX|?6Aw*mjLiQtg1>51Z@xL?9`rgHMP)|s z6;Kq4;fkwOLJ0$0QFct44#|de)$}tty)JoFEPeVHCmzCZbES70u)!!9aoG=Llah_zCau5&$85B#vP|Q6MQ;{Ya3bNre;B1MACAD3|qIs*REv14z;=i6|WO zPGt#ncWF#O!a31kIgCShzP!!Z$p4)4m2&fUzGn(2B8)|ZE2x;X1frEptH;yV!IMCg z@v5(R9l4WN*$@(EU(Io$nwB>=D^NP%A?n!>pc>aA z5)mp{NN~=%KiWB8MK*DW`19#^zIN;gfQ^xSNrdXHh(ue(aZ$ps(r7XqP--qBelsZk zxuA55OBfdcjv)ffI46FcCuc%3z%xVJSWNB_Z!KIt0aqEI z{!8O5b`EN#E{&Qva4PR54sfJM5rGt?tSA(xObW#MbK2(|6HDn~6j}r<;ccu)LJ+a0 z#)X;~vi|Ef{uBpmg?H3N9Kc&iPTfhF4k7Pime3?PjuRgCes}rO#;fE_emnomM^3NI4?Nk2^jeV|s0K!qX<4_@DzRIk`7N{OFC1YJ ziX(Y*KUohe4?+YYsa|Z)shMdU1D*q>|D zljdJKFBasC86%FxGbY)h!LE1z?;NIhm0BLT;8I{xR@Z$_6g-6ofJ#qjPld z#F9~i(~w#6mCwt#&>Gm9IAfk6%J7`d5{Rgx=7))mdOQ^EU@F2@NI=GG-#;}2kDEF> zWaZE=ZwRHt2?Qc~+GdcfAXRNI%bF?T?rb0>xf&TUVi6;xJCyWT1j4~Refo$huaaBD z3FYN5b$%MkXL;uy-9mQ);Hk7}XyIOUK&V=w&6NjZLIhFtp*Qt`aE4rA+HpyxmBF2B~eg>nAT7+VY3}AzVb6=7J50+ zQ1aa`)3^KO|I6lu)^IOAT<+92b-cE}x;_)j@lIRr@Ci~BSaHNu85&ZoCnE@;VjwIt z3&vm?OHkdbWlT ztRx)=M@66%U2sl^(o6#KW|^P+J-F;lS%pf>fYB!?pwuvRG)p8>BMmn*MfCBzF>m_e zQY>nsd%lrOa?x2RYEwpHPAb76CE<5+zGdMEfhZ-!oNQGQq(H)ADFP!1CJ;oko&IaV zy@ku9fmq1`HhAtyqFC_wic6rBQS%gQkf{0P)?>8zes@rg?r{F_oi^Ko`r&A`18CzD zkxdv!WLro%V<}~`24oC8;r&r<`F+1HL1w8&qr9_mt_?(mN&*yoL=;ZaaBN`2U{>;; z37@zI_kh)@o(IANgqe13v9Th_f=uh`Gz zicbdT=wCIslH#9pPBcaVc$1 za*(%F3UL;380tKTKqQ12N-cuQIAhW)F@@C~FU26nIfYS^0fdP08l@ft;-sKhJg-MW zANZA=2O+rupq$@Ewc9^x2<>T1Q>5y}%j z-UC)BfM~$K?idz+6(RmwQK-@*y5AAd851NkixTRRP!y`)(el14ThX8O`CjpLZdmnk ze4-LW98@9H+lhyeV2tiFqDj^iZkWgaZB8UiF-=9>4tiTbNC?(XDTP+oZ~^1NaFbG zSnQKXSD;CP@WsX?A7&9b$-MW#{z6fC`-1=)d_*>XMPiH+i>)IR3rJdhl^M7R_vd@_ zWSkW_g2+V;rRz70-i4!lK4O8m_0{B^l@= zD&T~~8lchDf6riGI}GzO`MZmunb@yGTjc-s?@WUkIO_Iru2h3K4a*4xbZH5g1fnbh z#ifO9(bp4*bdzKMy#t_9Wm#mDhGIn@kF{i;kGD4hx-}SaohgsMN8VR0F#{*mT=9Wv zB)vGpe#HsnbXtKFR-X)|jF5qJ>v`Az0&H?CYH?I$L;}gHI9LS)fsTLx=n0aL zP&xHU5s}n1+>2F`(ctpA)Hx``1O$SVNGrnOnp7#)+cH++0~)T&%g<^S1)MKv55S=! zWOfC5KZy@@=i{>%u11bg{Ezh{9IuiRya=Zc+j*1 zjg(NmM2f{PD6*GkW?z@qu*PYBIljcbY-nge@t+Wt(48B)}C){LluD1gNVkqYln%t@0!d<}am`GfAm@@A<~ zYnECxYGlX8SWmoKii08}-02O*or*UQW6DDMW{2W09fpb(BdQFQQ7aQA5L|<`XF?@r z%iabX%DDNBs?X5+ei)>~L~N+qM1&%o^HX9Jq8Z4G1f+uq2Hfz2v zNfs$!U@Zdbw-nSeQuRpAYQO)2>H+{nL{LKj00~g3mO+z+PP>iqwfH$JlXKt#Ux8wN zb8rS$2*lUH+{~-972+3*bG~(%o9tBse#GuO4mc62+a^v>D@E*S;=*l*aIO;*!i%!( zgoGO!>q_E=q(SQ?#eyz`BLDzq0BB|apcl-oZELw!SR#-VARQ8&nfKo6ZkG1sSi5$V zEFpgkLXia4d+p65A>FzXGD#XS0QV#?*qndiZv+#6!7qa!s`}7ZUPD)ttomlY zTyJ*MQ_#rH&2k73z4Opv^S|`@KhFPuBv6-9s2rDA1gofP1IXn?#WZx{wMFyFOSE(Aw|uWm1Wndgd}Mc9GFClPAOVK z9mPbGjT!Z*O~y`r3_N<4X-9@1YzNn;Erud4aS~+(DvwM>r8f$^$TJ>r-rjT)3 z&xl3@ft<|J$5d2}X!BT+uMDUQ`6)!^m+yP%Dk8?!EkqG_-@h9Eatx8>P=e>?8SdweKdbRCxTW#dz(Na=@lWyB><;uusoMQK{=suhnT3B;#DR0buHA!SL* znRtv@*`r}AiVQo|zSjLv#MNwuA`!S%F&Ht$KYHG zv;y5%8O}1ZOI?|h*t)P!S|I)~v89`l3oz2Rt%=8%+TzVo|3c#V!)iM&jj_YfZ zj*;3=8o4A$tSDB8&at1NGjq3Ie!8>K+is6m_KWQu_njLy_8NE-(W(hxIBuhXbw6uK*X!Amb@61K(0 zUG_x?d1=)_EpE4KNz&DGZ1ubvyT4rHw!XY&M^X^C^ylSr1iii#i;GQa{Kkj?8qOw> za8n>L;o-VIz*jIpY}aPMB!?chH~V>QDRnx1d+(4eSk)^E#AQd0!fd!fhL6Hf>^reWERUqndmMBUIC|6QvgHktcFZ#TPZ^3VK^aE7 zI*38(UNLgaF?5hLu||ZYWurv{=fy_G2FKIBTwZ2RS0^)@H{0n$8a`iYpaZ%Xur(uE zw%Yx!e$%-{KysR2*=#Azwa%aF&1mLOSd}D=clEam`DQwQuWflx(>eeW5*I%rT`iM* zmV0WzJ_J$fxKr(mbdh{i$Rm$QV!mMr61Hf7CG2a_SNG4=)?8OaRzmt6LXK%E&rzm> zBr^B9BM;)lFSfMN%lk^hUdE!D4Lh>wQtE~v(f!`$Urjd6Whe`~i!|?%XBhYYcD2Uk z^C|WC{xd(dJDmP%sSL_UbBK&jE3JS^RXI5CFi$kt9w!BcebVpOzAy0T-ActoZZaE8 zWn_jF15=4&H3|qJGnqw^eHC6pwg&$7GW2yzC2K3V9)$$!X{&hhzy~s3xxk$bUSAt> zXwKBJ;z;98S;W1)%wd(=DGFAMN&LMQJHMm}6DnN6zsmVLIS9(Gv3>PV(%uWB^ZuU^^?TQvq0cp<=% z+Knhiq;BK~7X8q!JmRN$61PuRzPtTyy}goj++d4ISAn+oA+$wzTBQ^f>n0;|KETn7 zi}LhMZ+>~ZGR-RjTcf#)UIqwb8!}KuIzVWVrRj8oDi(WbrK8ldg#H^f<{H0R?bhtM zq!YznrsF1J)kYQ?Z*>e-C8p&G2_j~q*!(CcK8$d7rFFl!40Tf0dtfpj8LlIHnCeGu z&5CHBDf)O?uj#cAl+g(y3-c-zx;43=80L+ppY~~pAc@DxxrmZ zJByjA9$lcFFRUxJ-p-r>>qGV4(_{oW%f_6vQ0IwCx`Qht49k0RXufI_poI7>s{;4ASAQ*6LyJ)Dsc4Y&mJFR& z&y53}Uv4QsC*h7kGsS+D>NH(uGfj|@KqTLmFFzS44E@nk35NQ}!H=R>bHs+Y${0bH zcIm1k)+$p)(yH0Rj)j*S&<2v7d37SD2;eo()3#Z+*vSBAE!+WjqaI2O%NP}m>v}F4 zGM@Gt$b$p6VIOoj@dlFOrh$>F_UU&|2i8+Ov6RmPW@CrhfUU@|QYP@*eu2>Da8EM5 z*fdG1O?{rV`OBe4g7-$Ydp1KzBtr47MAQM)!nxCr>Bp$%b1GddNqaKw5VPeGc4#Nf z=#K3d_yptqGtr%!t7d@4OU>}pek&RTJ~I@1)sdBqR4&x1eZ=WH7m0~zR|^k4XZd|7 zaJ-x((_4^%RP${sZ5qe>yne%QjeG8yukXhb7%TiQ^(Z}3t~b6Csx63VYpx!$S>Tzo zb--m?P;Gq*<2iZ-pE*0?taWC4jdcmlWfWHybQrpdE5t4 z#-JU$d|5AA+7L(A_82c~q?w%ABUaDMv(~z=_>`+>bXm2Crci( z8J`TFJNMCb4crx7cHosE5*%*&rZ?v2+s_6Z`qDvrF)A~U!%g(yo*AcXRI2@XtQ2+pl| zh8wBVBlgcDTMSnx%e=%GwI1zT3DXVN>bx1XH2Y>`q2(5-fp+q0*Qtg>Z6x&>;-Pm| z%QOA9r@uAZd_!D5O~^C8t+>1FEyj+hkpiDE+E0^Z3;zDE21Ccf3$rsdVgXSSn;I*G zEDt#0UOt>#6Z5+7Wos1~@Xqm!R_%RnZFB4^?+LUvgDMnQD~+>Qfy#TMv4oQ@VUSW^ zOA4Fq7u=r!tzObsDHl@j-jnMp+VJ7tySF~OM`L-=3&Fl^?#j!R;}xWhC2A?PzZskc znE15n95cRqX$noz<~G5$OzuQ_Mb&w*7My`yFUbTlBhsYir#g>aJGL9o2H-n zkb08p*jh*w;5nWK-Qem^+Y@;#q;j=?hn*8s45;iuSZCLJ*jJ$KaSiont6|uuJ7(o? zYO6DunRKTM>}T7#0av6bar)V_cwFt7Q`~4C(Nkx*PM4q-F_EwkoBmfXymn}I1(^QQ!1zeYQ zXN#I=i6QuFZrTCdQN{&SXwuf6$N0Hjs|^w_+2r^fwQSPe zbsXJW%d=0#wIUwjpZQ*EEt^+w<%^fcikLb_G?_?UaPcQ;`yTn@vj5>9Tt6tcSbKgQ zVec)pIhmQFfhFw;e#4%v;1a1c@2r}PLspv9SC-y0E-i3m@#B8d6rWM10qE{I#$Y3pw8#49+O1|if=#?{aA(3gE?=x1nA ze%{-S-oJhArzZEd8@I^zagTi6>5PceV1rrC;!u6vHa*n|_3sbiEwt6+$tSU<3$1<` zG|Y3mN=-&LQH3+d=<1Ji?^?e|lBt?lEx`87Bc*R{&ufEb4@&V0pD~nzHk>c!9h*rK zVG*{Xr5I{}V_%YTXe(41q&c0+k76deQF({ z+oPe2Ub!%4K+Q{)J;PagWt^l@U%`4?aC(&`ntQBj%Lqygu6OBb@++2;!jZbnvN9fU z)wdC10GOp~n+i(k;xFgHtgeer!fxhL>>V&)!2Je2X*O5Zp-qoZkTt24}p)fF^eTL5VKOODY20 z0L37L7C<eUOrWYN+fBGJ2lOVIal$*V?zPQB{?;HUBTMsW*NGPIqA|;F<8vz&s%`wf#0`h&UEQq2 z!o*uDO2b%Qe0Hi*7Yd`04l-UJ$P)GY^k8S-Q|xMrf4mRUwiu3tiSY;gSAYxIbyz?# zc|YONkp$t@+e03AB~jtYWdbJax^Ws@AhuU8dTbZLYNs&%rHBZM_Rlz04J5&I@RM=!uUdkHXg{n$x}&1;*SZ3(q6Djqp3m}?pV#SXB{|Nq`{^&X3l z(dUjUuLv#=m>7~4@d)p>F)&14%jZl0*?MIDuh~iNY!8Qa$W!B*?|3P*pOcKt7H5XV zVyf!4HKPI&xVoStrWvD#n){-Rj2WQM?MiO9R(NFJkW!6d<}?m4K}9_WYoUhxYbs{UoURhqo1Wo@Kf3nt#Q9hq$PMJ8u9hxqHskRRr)@}Jtc#Y&PjeuH#qfRk``Bghp0oWAAqC=U? z#7jr)r~~{EBK`7951_QXOEX^ClZm`KZC8)_|6{-YU!iXxb=e=Zi%x(MXPA}9zYEe< zYCF&h)cA(%I0gwBebN>aQVBXT0JsaTc5`;&^RG;fS8ECQmU-hK<}~`xbVYuOtvrGJRfMox+MkZ_X9q$;GZ|)?PBFb^<=TAvt;ot_QfZ+l(@3A0A`}Q|3?%77aZpX~1|(~)d+ywm zp{SMNr3`F|@Db4oB9eeqrEr0wcp+F@=vK;+apuwJ=52Y7;|jW&lXs@#y(rS_C>#)` z?)*XeBaQX#8jwkb*c|o`3L>pKKvu)FdF0u(WnR(DBnfB$3E29!*Q5)D)Fd$_mRa_m>c71v3OO$)`GQYq^+lkGFe$$k5@Qpg5ECrn!)a=43#Q)i z;zVN)5VXV$5)LYeb29I;#Fj#&Xi^+gZvTT0YDVY9D36>(?U9Djx?xak6zFuC>5fks zC)OsjTR!x|ySu5%Zly3`=Gb272t+|XWSEe=HQFUCMqrv7Lm6MNEArS6j!;aI)&YWO z($E91A`?wIoCFTdnEcoK-TMxQ7|81AmH_B3^z`3xztiqG>3ZOKZ)z*7%1C0VaRve| z@l}lJJ;Z>QX0}KWGC!^O$BJH9UIZN$o8m20!xmUIdS5{WA&jms^n7~qUs+(raTzp@ za3h#6#c>j_8h0R}(PBk{9yXCe4V3(6%RXUV1Dvb7Ewe_dO#;cnv@=2rb{wx z$=$frBNcg`9%s1pUbR6xs4ASh!B-kL)& zFdHXlR~{lT5ZZ8r<$sK~v*7#xFKLu4cXl6gJ)CDxj_k+Jee`zMDTa!d(TY8bIauNfOKKH!AjKrnZE2FLUJZCg4dFFDDw6k-@V z87b;vN@YDWT^Xj8fGj?Cx}yWHnIV>}9p#y{o}vxQfe--!u7n&>gF8vh2+pnfKW7Tv zjGgucjPL+Xj5Km0Nx=_ZEW;+SeI_cRE1O1~jG}HB9RhDdz+}A9feb?GL;z$!o4*q< zV|Z-IS~3A;;t6Xn4{G6U#+}qJAeK_;mqc(n$~-Qlh&aMBFt!kZem&Kq-U&Anz1s5b zvo4>!9rHe7s-P(Y@gSQx^t~Ke=t&#_LytO@B`Yqotd%A448ulPr zo_nSY4P4_5WLjT8)0J=_(@GQpSY<_$QM@7^8Rl6_uudg8?>6h(aY+Ht}Jv~aBhHH#BTv#fV@6j`w+kQ36l%_40u_-q@u$z%^v zIOJfR|AZ@l3R4NY`}*w5RV&zl#k>3`#?8=eIxPb0rEB4YU_Q*$&k5hYobsP*K!Lwfk?%!XL%%3AYlOah1jn< zv)7@T8z?x;an77|W|fh6vJUu?Avzrw)H_nJ^*JwtL2+iEDfd_mAa^?PSj$?*Iuj zh#nPy*9!bG3TwdlHl;}^&>{0|SUbk(i2_y%b9Q%)o^o)l%MpA1`l3(x3TZm}sxesJ zTmN%*J;T%a{}RtfCY;IfSVRPo4_YTW>-$r~ii8C^HpR9ffh+bc&lZuI!b=v*`ZF-W zqiLdo#o1{&29O4nE=2wOQQfGYgbhoFOe-2hBy)MfdWtPJt2puU&_Puq0~*s^757?0 zZ2X8`6u9Cr=S(Y!bwEg)Mly0bBqUQjaph_MmJ=AL;bQ6t1hAFZT`c)Rs4N?pdiN{6o%^`$Cj=_AK zk@pSu25x6mNI8~Yky@{0>DDCrsk2=@dMv=WKO zd;@=eBbB#^#FL&xN_X)8JY?S7WUhQ0qE$2xpyoAvp%{)WoPe}-SWKNAmV$*Goarx* zX?Eibd%;|1Q4)j;YrEZBLSV75T|~A30b$0uGQXX|c*o!vKK7<@7Z2 zpMh>0Lr?O^QT13HVJ!+g!G(ww)DP{;^pCl^AG*vy#+VQyj(RgH zdQKD!afN_%OzP2-_POc^q0r=^rH5)?EUYENSGpo9y#jz@#nI77Qk=0clu0L~jc715 z`!)Ib{#nb1$VuwWJmVmL=W^rI*%ZMOVFz)91jMb!kn?D5Xk})~6+{Ia%)_Z8zW*{# z1-b3;B|sjpPb35+Ge8%Gbe&kqDS}&zg1#Ot`JpV{$U}M>)lfw+z$p$?j%swZhbTG% zf-95pvd*u3p)>Q(y}2td^_@_5bky*i2v^0&o`oJnNR5kt4ospCGAJ`rjvZM4H$pP^ zddK@CSVJ8IQOH#iKnyxv_;^7dACW0iI&DFPha3D{KPWNo4`3SISoFb2Cn-wH&WEqF z@=WFzba^?nE?!E)39ME6t+dKhCLpdaz!Xv@C>jwVX^S+}&X;ZpD6jDpD10iS9EyZR zBNFbxViLYaU7WrpFDlya-*95+Jn$BXZzVOu`^z?N(iS1@Un;-FsWC6-)qbIWnA!T&5r_eeC!EnRMiNf49*U(UKd5X4>`9+$c|Q8B z0Tk5H&NRh)*BxMa?x|8JI2h2JQjE3@e^J|x*r&-!zV4zwDw&r1`prrPzVs+Dq26dj zUEq|sRm?7H!E;H4h=?`a|Ix}rPg?{1o+WyXD=hF%U@W9?Az-w0WmbiS@!Rb-&!y&ed*&lP z!0t^*ghUIBc83frQpx}gC}=<$004#rY={Z~ z*1>G|f{`Ic7>kO5-HgAD^?kRu*>y6p0!Kao01*K}_lVYa>(owi)9yiB0R&9|kM(`5 zct-yW9pL_O(0B9nUVYK82s|y96AW~iX$XXZ7o$v2(PXE6 z|L6K>ZyesH;jg1lmYdfUxj7vCQUj#XJQh$p(1m^ z6v*q2s_a}T4%9d~uZKXFBr{b~s<9Z=K^dO)7{Paqr*ES;(bF@}x}J#p8GZ2*N=C8` z2Pngh{}Cau51Anl6e%B>obOBS7mK+|QoquZ@ya~@uIx;{-9FO#Sgz4LP&-yVD2HQ9 zIH73ku$VJDSjrwH@4m;g&p64-r_AsARqm$xF|!(Y>q8V35y56HhPx|Ch)$ExL3C}> zDJt*-Mn*F;o;~P!aey7U%IJRf_C0L=e7djS^-C@Rxp0I%eQ8ny!Bwle`I;t% z7_`B?pvgHkg6DBgm&_75zw+QOe4nZuAHvo3UwS`t2k@ZFEs}Gv0wCIWXknp1i%26z z3`xa>J4!Fjnxs!(t(%?r-fY2Dui+tT$(~3S;t|PGuv@{3LN$%5#u&Si7EvhtDfH$L z`gK{oXhAX|6B9!&u@*(nB{clZB!Ukf&Vf=|xn-aen1ZINv_K+431Q|jCL%Hh9lX_8>Jkh| zuD!36-GUeob4AXZ6q5FneCx7Gq|`p{n#V@ocB@%An;AfW&B#Dg&ss&q zEK}+ulDo+v!5Y)$NTsT1!1fht$ju3qrh2446Q<ifPCxL?<6(;?1F8$P)JXhr*P{w7zcbH zg7GnS{`lT6BR|%y`szI0Bgx6eR*us@vd|&&mL-YD>M%(llvHH85$Wa%uGz0ho)mP5 z;t1WY&Yxsje#}Qky-PV+oR&)P2*(ce>_yT*l}Kj}P;P@Ys@)Yl zk7Cq*DUZt-Hw}-Ud+%BT9N~0eP8qV-d@eyGhcxZTF2ftUC`6l{6n1$z$07NVB73v} zIwHH@aZhO!v-YfFGF_dbPP48Vds0xgQ<;<%tzS*7ItDq=v;f^6HgSuQAhhu{Ul!-M zz06YxruAsiceVMQoV=T?%0)uyTo)rw1SxkEu7MXyBBvYach|(mpa3hA7`9URGv6j7 z$evyOS|G@VSCbxPTkQ%)w5oY_%w8jgEqCp*60NCJ<>z(f*!tMesU?g&UvC5zX;d(! z9a7_RYe@ssR~yuAsW??B5K$!rO5b7pV^d` z{bQL-loVoHa*;#TE@e?z$c0V|)x|TRVJ!BOTY(r;x%rhD3iT4%UD|KDq>;mE_C3*_ zkJwF<*4&xI?wK;!OQrc3o;Fe+d1joM+3rBS+2w6qHG(W8_gd}+EWV>_d6`QE?n`A2 z)-pY0FyWZm=;=bXljOG2l9%PfTa=za$w&LCBM(5B>IjTvjiHTv7-BXrWw+>acy?}jzXBZ?wmyNMx*h@qSxZQj<<2E zpE761tgFR%Imj0NmS^=v$XbxQtJW8b+H#UoQAahkqZUa2tpnAMGl#1qW_%=}EbZ)+ z=Ms%b*~S@oQv9(ojew-ByG0&TH)=uuD$SYK>{=)$^o;YNXSZy^;$W1g68*Ra^$5eJ z5cX={TRHqx#g~D<({7h9BH0$oAmYtZTnd^bw&`d&^jrTj`C>VF#kcSD@f`zhi7zu>Rskvw8Iyb)Hn0IXyVZ5phaT>f?U1z6 z0o-e_7n*i>%k>7>yyLwaSPpa%*i<-7^WgvY*E-aI6r>xL&h~PUEtNKnDQZn%sn(>o zG0#ag`8ze-z~lQ&cBlh}21~<^Fdx%YUtJjWl`tnd*6VL|jCb1_HN}`qX2V0i@ zHkJ+RDJ6SZr2T6Rsq~@mH)w=Wo;MbO6L7@!gYFxT<98Q1MP&ubPiLy+1nWdHI%h?yuJ|nju4`L?RiX(UK*}e4;e98?-W> zO-XCR$!xjI_?b@EJK^tWX7d@CVCafm72bxv1$)1GY7-t%;1S2PLuH^`dW&5B=-O=b zcP%y|bFqDt9XP_eA;OHW1)8qGu5o*2b;rYOwFLe-mB!o4bs*loOheeg?BPhhbGf_N z>xSSyP6L1kWWMet=eLrE*I3&D`Nm4cMe9Zf(%o2sD{qlpHTSCcq%~2=^qRSkfBjHa z+IM4NmkZ}Mv2T119e^)(OIw$!;DLssKiw}4zZ;P5o|KTh_=`pIu7PfPp&Qs<5KID# z;}*ez0g^4Tk8CD>rCSZJWmvc|#px_GNyVYSuXkr^Zq}HImS`Ci&2+kdHpVY!7$*Ml zSp?bsRymXR-cu}AQWtC1lC-O;YS0=uC-bi7J}9)r9+l?D)k~EE4&~7 zX%bB}*M2Q~TqEw*X z_=ryNZGr_cr&zn4b}rRwWfHrzFtOWKn92*;)C1TF1Pv=!$#$x)V20To;f=g1!%rE2 z5&s{r50UHCX6AeS9_dm_o^6HmchU8}4Mgd$JM% zrYWcR5LmLSp9#rf8?4oP5^2URwEZ7vf4EEVuTL^_z4FFeD7(EnKkl9d4B!%}A)k$x zEO9`lw9ie)8cw3wX_>lrv~QXM7Im!g<5|(RVuhy=B6h)<>W2=ntk|Ay@Mg=gkN%uq z3chOqt;=@&gw0nCO@k_OmKa-SJIZXJghc~;;ndtk08uldqU87)+G!^;zF zrR9O&b$1qeyK6O~s^7wrcCa<8dF@))sA}Qo{WuqqqzlF#`Kr{yHMBSA(=*8AaBX3I z)q!f7^fQ{=D=H0&U>HY>(K86UaQP3Q^;!*XIYVNAAse`rJIwFw^}AZW6k-C4`?BCY z_X>Eu(LTkR$wkbB5lig9+ixl8XHC_}T~u(X4V=$*cpb)7<;-ISneh2q{C*fNj4Euy z!c7c2f&Ujw(@c`A4((q{d#Od$b-$$l5LLm5X5bw;k<_bPey z8`EUzF>2KE17~kIfS;&a(#(wSa4(LEmOqA7z1CSjUC9dmhJ`DtEc6FZ9yN1^V82`o zm?VVX2mY+VA+)Wr+brokVIywf;P<1z!@-#(RJ}~AOpnu^*udSsZi?D4@Bp!gU{lPv zavC(s-_EKs<-z8%!;At()ev^?L)3fNhC~P>Unz`ncc-EX8%E4&iszcMLYyND;W0+D z&~mqxJ8pi>_A?LG(KG6cYY_P?HJ%^1qrr#e{^jZy$^I#zhD(j4;aBFWco7Qgs5t+eVWe;XE@1+`C z-@(cYTtkZFcBLuAleLY=Y1`6-6s;zBub69i0D-XUg5-mlbPFojO``pSBlz={h0_L@ zGv~p>2~2!RPv!NO{e3JyuAz;9uKoPG9|;ll1axhz8%919=LfEsf!H-0%esYnN^T*n zFehs7xb6R9iTY_-=xUq^8SeScq=c}L{Ci5m;@;G|dM)r2mPITTm98#=&MDv+gwsJ5 zCu%DBD4K(8`DU+z2}7y6F&7VhD`A(Y2rMPK-+#>7rv*>~j>9`@I-mP~-r1CbF40cF zOLA@kue2e(f*Chiny6R%-`FxOWDm0#)KRloH7Uj2@qh7u#s1SiJzOGXe&;}4A>t5u zeHS)MxIu=YCQ(Dn%TcIe%P07Im@9WuJHZ({@ACOr9ZpFYRG%+&hp zin33teSZLXwSHBoB6*18)R^9cDizpZ!)a>8<@CNv(uefu-1%SLfIlw>m4}=961w zf3FA^E3f`}Pk3nr7`?(ft&S&YT2v4Qc&`E-vzocfsP>ve7~U^ErNWK_Z>z}X{wt?rqP_WPwTa-)ef;)Q?A?|CuF`_uIfSEsdhfaBH_8tyhPgm%j3hP`%2AT*0L?DcbdqbTlC`=ox1y0mH zKdO#(KW@)Iwf5N0GFlO!l?E;%_WUTC4Wt3_Wki9ALTGN4!dtUcDz+(Sgs(PQOHO^9 zB=j1E!3qU7p@F#(<`%sgdDcGNOK;K}+Q$%DwX$*uC8B)3h5FBkhysA>sUVJ?f+t+o z{LC#2=&#H@${~o@MCAVA@<)I#5t=}7X{oVcZ{;oU^wAx8jt=0W=8CGo1WBaF0;0cv z8nsqJsgXuz?Re|UtNXs`9@ik+HAtXJf-?uj!oXc>LK;CCTLr=&SoG+6Pp+NOgoeUE zNrF;Fa-z+^h!T!h&*dFqzgx= zkDuqzD{|hgoRTx~BZ{Ob2ouHN=nxc$xpB`h6KCJY6DsD%yz)v56s4tyYXqh0^n^fw zBT*%gFu`DKHL}kaGiK3|hyGYQj*+NgLW|co;tVZd%rnyEQX4>&R)m_z^iPv(FOeOp z6pvO2rim(!p(%O7=*Etu_k)5xM&7AUwQfhoTN&AJu+UTyr@Au#fE0<;8tQIIw?W>V zL#7nvx0ua<8ND4PNE!~Rcm=NaP;?`Z&+hy&nt1Qn6}WIv5_w7?DM1NO9r|iAh$;p; z1AmY7OWqnP;)FGnXlrRsp@s<=J)~fcc#bgW14!!?AJ24^&4edV5prcbgiwVN#?rUk z1J8N1gNSNQyn{W(78?$ccnIjADiHyVS+0$vRr)f>0`##^PNdNWVW93g;$$Y0pE|Y@ z$=vrJ8jktrpum?xo5c+5c~m(IVODl0xHCY9#EeRe5L>x39?|yHm+mLrsxzkEq_EYk zu|^V+5HvUt7}Qed;vS^p-%sU$(7Lbe2&PC#!0xgek-4>^v4ldg!2(C3jAph5m5`oZk?aodE|9||5F3kEAHeaEfI>;ofzQO=%Q!s0 z;XVb{8P*il=ox%NlH&%oaBxbP3ViE-d{7TA4(mOF zc!tD`RWP3+Y`s82P0{EKGBBd)$GXY;1_#Xg()IyYi&kQgJ0j%AB*BUq z#q7|WAS$D#hqQYH{!gRzE-e*sXKT5CL(ZtdRAihb62-z^(Fq`3#9#xlR4HdeutSRk z!iM5JP-I5&P$om6SGvcy?Y(IQpF~yx3bgOGVbFXU%tGWG3YuvXpz@NGd}x|c1CLp2 zV`#G0#^Pss6QolC5p`fZ!S!e(9zj*U0n+m0PBc|V;jYqUGnj{|CqxYdG)7Ih_CsW8 z6&qWewn`RwTUxi|peNc5b1H{);6pWdLNU=o0@;xkAqOxDq&YL%Ufy~p93b>WsW>@K zv6MRi8TUNuoDl*@Rh<%Ir<-M2X5tCLVdclz)98v_Ui;byY&tknI;m2ZBPBVE9titLKUimDOdlBrY) zYTC6-W5G~k!|kO?5T-luxBq&girc^!2+S2do>iU*KJuc2R06~la6oTMufL_`U%otH zH;9|9Cc^tpLbz&e%ohPI06=N|u&LE}a;!uIZU7EiSfcY-Zp^yX)z)Lt{M%iz+0wjqJ zg63A^RBLCuWv6fX@8UWlHIxLYlTc9@>%`|=0=A7(1^MxVMnd#5_HQ+LCEZhNx2Jt$ z9zV=6-3(KOmzMAqCp*I_TB9r{D2dpLERI1;wlEHVMqZ1!sR!bLA*b!zyu;%$sbJ7_ zG>RyZ9xcFyKY1)IDRa;KSx=;IkUN;u1H!^ZdaAULbf0ggXq^wjwkEp|;r|Wyv|S*_ zN32?sq{NVb&!N6E6h3cdke${P7tfbUwm62}VJh-ioPdDvt(b%F!R`|unnIkz(#5~Q z+@?d%587zWW$i&QAqxQ?Ac_cASg`>Jovb2KbfZ^TZNy%Uub(0t8J3)JP8&YpH21%@ z`>o8|H|Bix2D(F+1Q!(-hEF$|q6~^*)U9;71fl~&IEMdf`Ihpfmk7K0^K0d+9jleC zSW5h+A~s!H5l4HSCF8*4QSP)1?5gY{)VzA}(A}k_StTgQKoyWA6YMr3$%!xrD~rV2 zLjP7voH=jm=+yf4Y2Bguscc2C8gOykB}SZxPB>696ybY>L@IRySo2+PUpxVKlJ_cl z1ZqS|76qauhI=KkTIU2%Unzs7Xzul7tUM@MSZi|7QxKudjw#A_QDvVJMoEzPn47w$ zTymH}_sv^%vCxAdsep_FgXK^~EyH2Wxf>gb<>`L8=0>L;vyd(6nqrJrbZ4pLJmLagd;l=#VQ~r#*O+6#!`su!R%@w9X00>);ysL| zrYfmYy^(V$f($?L8k}leu<&4usTT?=PXm#YBEq3-fl;%QP!i%v-&7cWC+FD9$^n>G z)qx`coypZyCC))HQEt;1$rO6wWp18J0B1)YhP@CSyORk35THUzDk7?2PHYoL_=%P) zdX*I*u*0ZFGNirFZSay2L&{hRfzAwIbziR(GD?jjyf4gN}aOZK(N<(xry@3cu2>#-P#;^J6Zw~v)? zh|N%q4DqClN|icjMg03JEo&i>RnAT@m13DxC6-4KJfsM2$GrSfhP$sT3rJXx_5t1f zTVJSYqG6S!JTH9Z=cI&-IkX*u@gdw`?qxbXrKLa_axQ=o+QMWEH!&sgjR#~>*OSHAfN7qwG ziHMQna1pbhj2@$astKY=EZ4*t-|$n*>u=@dB;P_*4(LR27SqUq2uKbB3=y@mq-63v z$KrVZ$h;`Nh^%cG!XMI>O`rlghm4UJN*ag~UPV`H@MV9mO0`y?J1Iiu2Gs5A8-j_@&w8}vprRQyB>hy_mZTPL~N*rrNUjs zFt|HSioyw`vo-&;?^*$?#kkC9h`5)4CyGQf!i6sa6_5%ZYFH;__LbKYSX6M1PZ_+Z zMimsJg#?f;jyJ0P%gZ!S7j!DZ+$u7N?JL^|u5?exnT|Zzwioh_N31{k`6D zSqrh=POzE=D2<+IfQN#X3BgH=4#U*;?sn1LF%}#NK0cAGN-gi6aTLM|#XT4}`!LO2YA6=|vscq0~=QFUQb(=gYOUyB4tAHDVFQ z321~W0O&_7B6W+6X;FM*Zbul`FehrugF>Z-RAEDK(}Gu z@PPy28YETmfgCS76r?DSGL~r4Hqy&G0vLwB`zCqJ2ZrvvYZnQL2}_T0m`U~TuBQ6%RLXYzTFLk$f-InNB0ve~Ts zJz{E2ieBKWqXWq+bV0c~pq+zU-G%6rv2L}{l@dC3@vMUc!Mg0gW5@q zmr(&nK(J^)|BfFe+#0uw**2F@apSq|l6)&H!-~g=$q8tJfyPRxjwci&a8Zn1p|Y@l zafc?)O~*>pDl87Dt*70zhqcC9yundUA!wwLzCn;kl9f1?92I0Yhi9GL|KG*j%g7Dy zs<3vhjV_`@hgKc|qbiewEIBuvR(v%N9n5LvWUuvP=q2|jug~IV$-O_H>)i2V?+&5c zcMkaUI@~f1fmZR?Kp8*b8+riYmRO;-C`T+kjNyMdBTM+LnZY)8xxrc}CRELpEfo<1 zs$w8A69>`)@KKm!S-Bp%Pc|x;{XO%XsBe`2>Jh}Z{`dTop3TaY9~-C_N=0I~7HbSB z7Ox}Pi}g03V*K7)mvhvU$;f*Ni6WqY(Ev^%{#H*xbbILz5jYs?-WZT*A*o&38qY4| zVslXNEkaY4vl zWqt+@n~_!)i0v*-Gc(H z-v2J;;no|c$Mr(Df1KcNV0*-~kc)%0G=y~*lp|^ML^GxUjirD#G*5eG4E>mlePzi^ ze11T45D)?Y1OPKc13&;!UR6P<(OuP<&m+?3)dkImwxl+#+mO1<0K1YzC30_~)^)t@ zUrF!3LHPjyqM5TH000Fj5r_nrtP2)ni0|R&FD}giMFIieur9a-76=JHjU$3Nv0w?m zBDp?uo4fv*MR;lTjkANqP>mNyPZP$D7YA}=o0l&|Iy69CdT}X7Bzm^^Q#OGjlE8u< z!T)9V9AkLMGU?lh=_J?*JID9MLfAamaH;zxH>c~MiKD~7|e=y~1IeBmI zHoZOdt-p7!9_bm`-2A8BuIa9i+BwfL z>Cpc14vB7FKY&+Dxb)E6kTzoPShx}hyg37(F9=E zjCa;4j>0K+XNj+m4+_o8hR&gXETb*9AyL*2IL#(RsKk^g&9O(^c~Z{6!h^F=6~DAB zcOq&efne7JM!*wPH%@G__?F@OJr!z3I(Bm*d3w*8>CcbP^35~bJldvie}>(#Vh`(I zw-kw^F;i-Ybf-`AU?iS-RAp1jT*ck^rWyP{_AInI$}*Ry5uo(V24pUlr$T9DX^2W@ zX$N`4Q_|Co<~%;Y&5^uh^`=2O4a*P`V7%(iul9Pcxmniv{T);{eWgs6rm-Dfvi5UA z##ARgg1*u_OM|5z?964V^ecMy@fp$0rSng*UZ+VnZoVbJ#jRP|Ju)@F5KzfD920}; zN8DyK>>5(77xFXnemOHw#+?YAp>*Rb_I7D1VURmQVoDnzieuNZ6+P@~Up$ud8%)TZ z^X3F398PMh;f(!zt62OmTpP`_fYV6(u7pvi5hj|Q`20r)-svL7OtV}mPPi|5Bqc`K z1N$eQ)`X{}Yn`wYy25(Q#4@#yAey>C6LWy4#gu}s-<_>Mlnupb?u^u={CxlHIzyCL z^w}sgd+4F~&&ucOY-v4%KMOuyd8cxdQ8!KIFtKEvH76OlR`WFZuI_h;b&Daf{n)$E zs*3eqV=Z(zXYI4638}q_J%GG^(%$(T=@9*UUd-1&2YwK_<3<9MhWP-dZPbfx)=%AxY-z@}9WqxAk9VW2a|n+tz(6j?SFx8B^;-_}y)%GY15{nx!}u2tk~V z%6_ukL^>JUWJ+mKLe)V4Za68LWt&H4^$zeJZM80fBg-?)>$}C*>pHQgD-AWMs%kt_ zuvxV#*a*MSs(tq)jwN4ios69clWBo|tj?m<3TXHw)F|kAAjZM-8JBw*Y^PVGH}zLf z-Hb0Cj%e6FT|YNYd1L|AVcl#6;)dgjBK(BS3XNusj0fQX@?}sorg86g$7E9-a?T=8sFTHiIWyZ zA=&$x;yjz*PWmv~tN(gipYUYNvHmoh-f=F1)fU;ZDMUKo4m<37$MWkMUmh2F^|k%r z%5)k_A@Ji?TkVsKEMUeYSt7b%+@=*_ZM4)x!s!h0xU4%{R9IQt>|lL!fbG8qZA zPM^!FQ7R}AcsE+6E?i_n1KNN+aj%UezjIJ5BKzxnfX`9vs5R2r@+4|PyfonL9Xag2 zD6UDF)s9_T9h1RBmI{8ydCDGv#^#XM`A@&SZ1mfqc__Ai>TFtieJyDFscSL9D6(ol zany36OSf~iQ0Upj+tOV5WPo<;l^|iYG5%Q6a@>kk!e^zisi$eCZil=2<8ieDYe%it z5{sO67M2n8Z{U zfeFd13vQG>L_B7B$TgmwF#(5-W%9dOZzx~gQzL4uIm!BdlZriL$hzIF#U7+sq=|w8Vc~9!)8Bj^Oa;)X+03QpH5ggC=#P1Hr~2lPIdiVu z=6`*8vl<#@Y;Z5fbi>hi?mX)_g{FEK(81ve3%?(0#pZFiZm&Wge2;J5rz*h>=7E4P{@I(dshNC zvunEgZ(McvOE?qN=JQKKt3$WIIJ{mAj`-|2skaoi=!y<&3k0m()5cgS05yhpeMIi$ zxzT~Xm&DE9E@4{y`a1-5@SjB{SysA>uz)g(7XO;Fz!GOSDs z1`l&43mAqY!o$4bd$afB5dCp+eIo5-Q}A_l4*}W->5=iW77&rG>z4B%* z)Qy`T&kpbVD;bjTR~KtRh&bn4>Wa+tPuHSvz_{^#$YaZ}?7?!}=)@JTro=Va^ zq^Pu-dUmRKA$WRh(Nr;S%A9=k>hPL$tMJcoZn7J?hi8*C!8}K>sA?5e(Okr`#Fos7 zwsxGjML+A{Cr$Z;D^tEGb>LOedcu?f;bWx#SBkZ%hTb8|W}Ex_2Kdh&jojm$R&Gy!ps70=GrmCo% zudR1$2;i1;MExXoq_tFxZ>5@(snsXuHVg7AGxTP7e`6e{m^zc&$KPfy5_Vs*pR|q& zSn(up@3 z5z6cSw%_Tez~OC3hqr6Yw9{L%cA2=fA$So3u#BtyQ#O><=p0+O#+7RzW7=4xpQ@O{ z*w4WO%!U}T_B&={nI+ktD&-SK7A1!7?zD8@Cv+JZt8t8S#8Pi0R+|}N+3J+-W5KxZ z^u!E!&rXbxmTfG=Y9${$?s%oRvD)rZ$uZHUF}YP;Z|y)ML0gFdch{%Li;_tbQKF7- zWMHlIS3UIPbG!EWu98iCp|$d1I>TWXCnp%Ik>G4^>#EJAV{KLN<1BS`yuZxc@ChV) zoST$}F4#Oi(L652fHzvl7~I>pu)w7j%ncg5QB{m~(<$h7+3?+Keb-7WKKNRezW&-y zD*HWrR5sX`wRxm2TSXp{5X+u(()|IpQezRe&$;xumPHEO`;B~vI0B{=z0@;y53Py0_G=pKP;9_Z@Wdssuq>5u!MLgaCY`aI;;}Q{J=uTU= z1iMsrbzuA+{;MYKH`x5C6AH|OU1@ndOGHHz-LZ~`+Ajph{e6X&t_}C{&H3!~i&|r5 zgW7LL=SzAJ2JgkBcd20Q&F|pJocb*Q{4vlAK%9v>V&hD^Xsn9d{$F}ZBU8VQv6%RP zuM2g7Gb4t0_1s|GL_WVq6$^Ps`?8F&w%(hk~zDO+=xUWJ_^k9M{Q{w53?OIm;B^|(5 zIJqXeu$gm3or)GFq^e(tp*NJtD#y zBDT?;{Xj&b<=5n|#p7jd-`=9>Yfpk`Iqai6C@B}P$Y+EvHqN~r97tmzF&NgMG)!WAg$<+q zh8!m09@U-ui;HSkyd5Joyb1<|wIMY)g+YaNkE$2g25cUxO`K~6E2*9hu|uaR`X5o2 z^vscV4&QFyK9nOcM&0-p`ra>shK|+ud4lV9e1EDZPt*$s1~QvQ%$0KIJoCS$J}cp1LHkZ+BuP%-oe&HHpY+A*<}OiiJJz1`UkGg`u06#4S`d0-h^#w7{qRd+61Kn?o=+uOzq#)di(SI z+P!41ULQUCJqp1?(FLzmbA1h}?`h-6ytxW3bve5nZej`b?@ZE%|MmmP;GxA_qvX@R!7Ayg;jX5A zUdKdYS(j(td81}2acFjr_{7n8UbL79%heTcFu?7nTyIQ9$1GeqAcM30%l^r&Y4Kgq zj+oF#l6@~u0$$xw6-_K-2^ykTi`76jdCg~D%#kO?e~x*X3o76nLl$XA4%r<8w^Lfl zT@xRTVArmL7WAxIy_(P^3HH2B$@a-2@q0@) zw{yC})fjGH#*2EYjDMHFE_-&V&4JoQY7MKrewTF#T6$kqk8B?=_(QBgJ|<+XDl5bN zbyaOa(d+OvtBynGn^#;LwfTCp0N^s@!EWTJex5T4Nw+3h@#!8l?>S>*d4<{RnXJyt zm51gZpT9-X6k9I4+3p5!k7Z6*Km@ZTBi9pD%Qu+8)!4hFlvS2;e7?=pEkvkMot>L@ zmUL7<&J$gT7Qsy3n+;hMf7@(sApp2pB>?|M#t&g4&#pF)p$S4O#D+{6n- z#%w*zFOmZB3<(e=2QR8MSosdr-l%+K$d#^qz*dehR(2Uwuz|7kr32lJo4R}hP#I@S z#upMwGw;god+NggMc)7qiM5(^WPI>uhVoJF!B|%5w4-w7Wc8ts^5xt)&g_qOU?2cg zK&!ug<-R}ewk8+r1A4)N-N|EUxQ3`4nqg&IxzIam>ejhU=T(Z7wqy5lS?~>3*XGjy zmhk_Be0!>STGgl5q(HOx^dUOx)0j%~obVC0o29T;TZpc2;#va z16Lvx(9cR%!#HM3@SYZtAr&UWF+#>M9*Q7{@D0CP@2~{|NbR}eY2pX}vPAqXAP1O( z^0Ct1luJn<^(yBQjM9a}19R_?irS3;Ic0!wWJP36x#iCPgDItF8H9#i2}&dqA`vPS zfkf*{BVL*G3#;Hz&emO+aJhN?;jZ3jZHB)f!$+A?GMHj`NlFx8V!0?04<%`8u$EAA zUiX#hX72>g@o<`f36j%`A#PmfNI|hcMAjDLfB0FNvdEM{+PjI5jhKJw| zBgk#+k?TnXD)JKc49KRK0!F1g8{EQNw;+ocbd54d$=!&PUjNm*x`VQ2h4K>tyg0Fv-oby-UzV9SX+* zbub2Mbk;8qsXs4EMyyQ=TBL(uPu%Hf4Wp{Ezh_W-ymS6ozy7 z=O$377j-ZGU#B0GtYe7-SHhg)dIj2qIyP94ofXt$F*bq`s%(4*{o04EdL>M8C{a5Q zsL(w?rzgl*&5wt1G(_zsJuzYDkUv&AqYNVQ>rMFyB`kDJs|;5fT096WOV27pK$SK zl&^lmj!ZO^L1Z8(Nbwm)5*|l;5vvw@m6vt8@`fF(Qz^o8<0h6=jXLEZlDf%_2neB& z6*p1>oaH@=tdf>Fm3j_mh6o66=C#!bJMWb2gk2M0Ji1L2mEt9zDie1m5-6;kQ(H+z z04OoTE%$dYkeWGb=zZrK{>A6nhR_F!B)I_~!lEf1H08MhC6qb2VMq#d?%pU@)k(V! zDH?N>v{+C~EDi8F$U^|62Qy|9pVjT{l#>h0kUHi+lw6w{_QL=J z_V$N=175Cy6hQLz6oL#)Tyr|afyU?4pbHY-X{S@fC=3UEfIIIXg{O;}Zlm7jVNGco6nh1Vh0uU}_{`&Y(F_0>RGX5Qsq(l9UZydsEiKigfUv z_`ayxh|4{R3ZR;rdzP|R9IqS4V6vMxrwGw-Z!-<642*Ho`ssoi;p^}c%)nhwS)xNx zo4u<%=+bb+-VgvDlxZbp1R}a%fg|cfW5B2q6QtL>{dW_)I1==M4dObgCK$0ur$(DY zBE`;30yc+4)O!EL58GyA#8nxWU?YN$@R3B~m0o*B!SDmdj>iR?igi?iti~uafuvUzHj3w?(9X*g_p`H}ybQveQy66#P$npSEu9AhLZqNrJg-N$ z3r1F`Q|?H=4xA*T9o;gOUXFC<@^! zEpk8B6N2TOnld%K=fv0dEZztdGG37kq@IF0XWHd1>wvge$dFA|K-XR z6Un1~`b8i3;d&An;@6*=>u=aauwcLg*Y3Fnje?NSV;r%Poggq|_3=Frckijp{-hk> zY8o)kf6AJf#CFW!M1%uHs@f1$Xdfu4U64{o7=xo==N*6YZ6Rf%$VeEPQ+*&!8WmmJ zlv$ZX%o$}|{22**$fyh>Kiqi6BUTjEW->0TV+txbG;V|yH!vefv2ozZi9{LJO}8?M zMs`|KBfVu-yh|cqVn6?kw(+HoqB63K{sp~QzAw^F$98=Xhg`MkS2wo3B&MZ zFWxE?Pn+hzBQb6wO4%%K7m0%aQCO9fvTwKGJ(2DfB2%Juh*1U{I;|%V zr?C+ZVQ4UTVMrqJ%kM0*ps$w1TfL)sLQh93RN%C*<~rp?xMkuTEA-$LHj=PlEuv8f zx<)V>J4Y%Jh1AtvnO6qpu4hH6fslApt3@H$i*N!WMMo=O+!KfRP6;huJYI{2YWidv zy51Ie-WxV|)Uem0#1DUJa})A{rK5u>0e#OjR^%gu@*}s)LD>m#Y2u-90isHZ<7%?; zqmC^4^0v5G4)(_LqU`aeijQtTQ%FWHRR>d9zJsUu+fv_}LIa$1R7DPg<)pTJRorYS z>_3)=2@_ciMd(orI!F`=HeyEh&iN&HVHJ7sEB@1~kEK(538)EzAFR~S(-RS>B5Vl` zY{jxK?$M{@_=0D;#oH|zMsr3GLX3Fi$K8HNXR^ptk)(C<9)0DsapKEYrXIGoxxx|Z zA}Ru5nt&gSI2L$NQQyk==ADjIiKrI)pzD0% z4wKd`Yf}f47{v+1gEcaIB2Hs9Gy~2Jv^4S=PpfTvYS2_rWRUkUOd|%(F*l&8mLp7z z0YH{mr<}8ITpVO z%gwZ9^pyAS0BIihY0fwFV*B4_^{@8z^Sp!Tk13=t?qbD|QMn}bjiYF}4rLb5AZGCw zApic|)ACk+Kf0Z2Yp70C=44)YX8X!58A`*vK z8v=$#A}pzJ9Po{TbttQb)I%7;4-{jR0QjN+HXw72#NI}W^chzIh=M+-jtL5?D|!vw z>9zO;Vcwk=EB*jZz7Barv;6;?GlhUGmLMbvgL~++#G1j9oK-Q3Pv17rDbqLedGODJVapDaRN9+02pkHAW$1eL*kHfY0?-r zf_?M+IP;KmbJn#8CVMO@*Q-69ZV7%_=N zi%kzmL8yTWITmrnM)A7kdarb%CPr|c>G%#OcIc!?m;hp{Oa{xYp*4YrqGuy^GjV8# zwG9HG?hrJpO4cb-bK+7KMKF+Dc@O7XaW|C8l?S@_Q0g{YLnj)GwP30!R~T+?Ia1mYAhRP_0Omh z{Y|{zoVvtI<>(Bt!@X3w>q31)0Ijqqyk+ zA^(TZft|GR$%cb(rUU3EkY{k+`(gJkT~!*D2=V%vh2hIsra)KM;YdlECCCn1Q;+Qt zQaGHaz0*_smG_wcR|kyfl}u-WjDmuqP$J~5&d^z@S%4?pus!pyEjul_amLJ>;J3m# zzC@CsZk*=u?J5X2pivB1YNmyG2V=I!(v9xwAADDiIPgb`WAKtgO97E17DJ+)k}Hg* z77sD{%FEtPZ2@Qb)y@q|hY`Ki0NXr=WBOWnP$U3gq5?&r8wk4MZu)Enyg;zTY?Wun zYfKu0l`UZSNESNfv1WavR@N&)E`^VM#y{MPhm10th!n4R8*y zU!4b#2#Jg>=!NlPbChVTc70B1LB>)n9^uyVeUwUkjvj!WMr*ppKw@A))q$Ff8KQVV zVyH^!7^6Dy1on?XVb>@z9)9>1`3jU-3G+mp65!4RmuV1D9u9sb5QP-8T7-jvK^VmZ zf*CSJg18|f&Hj+Q5wgAsmbnPX=@Qbd3HRL_C&EOGs9;<~!`?a+e+sfY@;67dcjSm%k&dby+v<)2lFixY-NYnJ^3BSP%t^(fc}nqt0_A$cb_W16 zGFLPJ01RNaF+u<8AT%VBG`||`5(|8qNTW|if*Y_3nsqXJ00dY`-R&;0WNhudVUeI@ z?eB#MY1U;jOB%z{dD5z-2 zQfV$6Nd=-HCQ>9kARy7vdGLhZJJ4tTw#}Nqjw|=9D%W*=eQ0;#z~59hh0ybQvqZIH}p|O&J(OT4Y)ShScU=bHZGu+)e@3H zAln17VC@*PM80g$6z?iZ3V0cIn?`OMc9l3{@@;}C3)(75^!dXIk-;z$A4di|Dmc(q z5gp_7%PDv4iu~C%aW@DTsIXDy<^h=OqqL^I;`xs+1S(8k&il*ERY_KkM3tlSv zu;N39#HGz&f2=i8Q&br;HJm6)Y=TXw2?Ufd(8#6`P1!2S6eTTCmx=WT0-uiV5XrJ0nX(< z8FS{NDq0d0%4=#JH;bL!xc6Fl-?C}gZEl{~D1^8PsuVMD*lrEy0`h=mkCsS@+v;W; zu4ePJX4pOGtS9ZO(_#PE<%7aP=TbDto@h8J{2}I}%R6B*TM{#fisGo{0&@wT(cB1Z zl#19k%F<+V;xqH&e$sZ)uAQ*?L+#--2@U8Vl+6WOMfI$P`e`TxM`a?T7$z@STN91F zz*VC`IcBjVnlJOzG#?gs(@e3T$W5ec3YeTrGmZKpW{8cD0gA$^29pw!3NF+sQ*$Mh zE2s928g0I>p|B0LUMCZopQ~@7iYtnEnTICkB@|qg1AJSSSaChpAZvE|m;&sX z<;avZq2{wbP(94gEZjiCrcBV0qx_E^!e{NBygLz2DD`dLJU*q%svYz)5Wc`R74_9q zadreMW}K6i7IvbP!JjHdTFX5)QRlIGu1lF7F>FM>>CX64p-tnl>vAd@xmX*tOdQZi z#b(rZjlWseby5r(eo=xoE|6n1Eyx$k(7ck;E`$ zq%PSKJ6X={tn~hl2kTgzO(iTmi)a%vH*>QEa=ZW$-4UKt+i-J8)d!rSY2#ZiC(3p1 zHF-EfZ2QQFIABlU^j)=J=v+EwHzSahpb;wHW>?{L{Ri6R+fe0X>NfxR}yaj5~MQ z0^P#sjSadhtQpa~pj2(kxMD>q(>JgMl`YKBlT9u10f^fyqa})r71=b+adNLmYohbF z{_NNNYFv->+&lKe4kv$q@k<}G+;&~4XPm3>qP#j^a37R};M?+_3@hJKY2H-)i&as~ zdS_f(HgDZ^Wld*jSxno}bT37+R^I=$ygJ+4fZV&A#SrMsR$i7zZ)bCBnmez0x4_P< zu`LkYy4T%$0prGLge?CxGLaHy@sJq&bJn*4D{Wa>{@y!_1S!ecmBO~3LD0fK9wCGF z0DO3}1C0?2h~{?7_~#HjdsDzq8>#rwOz^4|ARl9tQr(@wkF6EfyntYCz?L?pHQpzU z8x8Kd#?-p@T^;BlJktsm3K=lmf$F}DxBZo>(^TGtN0rYV{LA>8J3uIsvf_vf+orv% z__M|PcekO(&|qw293r7y{%s9w#1M&K#~SnI3kn~;3oxE{KV(`?gu|+hh&2B5sk|;g zns~2|uXh@$#&(aq;k}mqC4R}vwe^e=wO(>QtX3&x_dT9psMzwL$4%mntCFLJvI@^* zxE4jgko+~8db^!qBj+IRknfnmj~#QXa*+R9yExBfhkll%e)<%LkqywQKnGWk9)&E7 z0_aKvCNAVCTNh7f8Wu*g?+lsG+Ds-eu6G+|SbaUY7uwkM*Qb_@q$b@_tDbvrXzYG? zR^xi&DtQl>ykktOODF>Y)#qq>)Pqe>w0BtUIfaXFi{Fu3<@|KU3E*BXyG6ywu3K<} ztaXQ=@5^33eAYL{kofg#qe44h5O_Zww}VR_I}*hwYDF7t&p{r?rk}7t9xu8T+Lynr zu=*KGbCr(whjf4YIur{&O~kNjDy8<7@A#~9^4<4Nb$>OfDHvgR);TP9tV4~|o>s`V zfA_OB{YOQ$wbO;vJGE+!vz(XR)EB!RSnB7lPbKfE`pi6EX-RmTK8dmn(`nVy#Np}R=U?+r+rJ5dpcCw zExTw^F02{t`TgEVj#HtI&fBCAmH@^+K)Xw?U+TK~Tou~EsY(ck|w!PP_?rY@Y4yS4A>{(iscq;#2 zELmB~aCG|L@1NNjIF9ornXaJz?O!#`vu|OyHsiQVrh-z3O7;1asQ<`yk(JWDrnT$- z#xwu&diSy!?^;_F`~ z@pv!^@*0kkc&%4b$o2;?8F;{qJkSbMmprF%K(k<3qh(rNh1zv#fbr zXGe=1weEno@PKA)ZOa+9OmpA8eBlp^EBi0q7fD~~X)w5C+^`AtSt4Aw<-onNfnL#P zoC_aNSu`VBalO8)ve}|{4xS;}73qpf4vD3$T&U7GLVSH7DJ z-vF%osklj2co|1=8kxM3{e$-a1_sOfXhY^I{FUW;K@%KvZg?Yhq8 zoEzaTW0kwqV?9xc>YK`#qiCqr%Tn5%W?>RDdX+GV&gS8xv6q1LCdO&3yczZHvt)?- z#mRD#+tIO7=Zz+gCZmD)!@|w9i=&y4p?~g1Oj-C2a*I3A&+=AyFh~55C(>`_bk|GW zRx?sXmx^FPi=TJa$9=w6io@2G*gDsr?K?P+^=qRRoPOM6NrvCNU~`9W4h~x0>;@{* zuZ*frIec+<)Z}8*xkJHHoXANsWSs@JaKMh&Xt@a_u>qu9qi4!&%YOb>jvT;4YDq}O zVLLDtb8?5^Ctd$%V>uieW}~Gl_lcUq+|L+@!=S3DF6}q!e?BoEVd!Rg6JG<*qZcd^ z;oo%n2eK+(#36m8Puo7^;~@18)1dR6i&%!zSm;N!im3QDb$-f^4o4Ky1+eY_Rs5ou{;Ai@fACgfBGu;5*kk`;I>Pd zH&}~M#Ic%S5e(*>k>RjSHPasjQB#w#`LXuovv@!8QgE;2T=V_LS;8Etr}Xg)d)(oP zZad)b^19A&+wBOr#>Twg_NP)3|f%t*qmA+r{fqBuL`OT@gK0+Fo$B>ji-tG_X2e!Wy zvUh~E>XE;`6jn2}!a4Gy((B6WQl5#NRx1t1qTylttKFpk+1HejSufZg0393ehfX7@)ZO7^(5n?Irw4 zPW*Pln*8@36DuhV*t>BSrA1Njc6pJwP{QZAl)YG8M zL33@k(U&W(S6XQ=FQoCcp_EF>C&_PjMPcJ<*86g_u%sU&Eu6zgsO{q1ZygxkJ`Fs` zyT7Aw5S5*!u{YsUHsH+6wnk}LZj0IrH}~0b{rV$1ku;6_mTasm`z&cf$3|(d%lXci zw&&N#BwWu#|LXe#uQa)kVsWeHkXz}@(sEEWu)%v{-WT6G5`lQ#>}tlJn_-8)oqO+W z9=jJozBTD4ozo)WR2y6Pi~csJHOn3@Z#{&0<}1t>ha7z_P#4}r{Og-?_VGfjjy)}Z z!FAQLiCo-|`z&DYgj1@MhCqkl;RhTw4>CG(1UW=XB%QjICs4R!Tgq(Lxq)nqjN%XU ztW9teUyG%4$uD~(&O~>xG59b(ej9$JErpJN@3`kSsd|@n;Cj+ldwfWyqCO+zL7&uLI6Pw4_&!z%* z^_-J~rz{JKDzYkSBuGACNifFWJ4NWHNDK6-M%pT3!h4Pp`Q_+GI-Lm9D8@1b!5(G6 z_`tx1_xcBpIOYrQ$X~0t@O*0Ya=IsHDy-*Qbus4t)^As!@&+0cp7HfBOOI4$#z(B{BASRT&^XmKW6ue9$66I!|@KQi2 z23@m$=SMxf3I7LA+|HU@HI;+Q?#p^_ttm?Db!FPL|(C%$K z_&tii{d|pY0owa<$Jm$`E*0NbGhTWL3}(dgX^|}i`iiVrVdbfVo=p!^FsaQe^nn}- zV4}au%0?_KjhBSZ-QQh!IlzZzk;?Mz%?#3q?StHM3dyfA*9hcx(4qV?OgzsZMzxv5 zq;QQ#X0(x2gqJRqYZS+dyC9f5&?fhYIx-)x|} zwS`0zWmWUw4E6;+I!qWkE3Z;<$yaIvMR#Qtl24|vO6AG-V5INKR8<@NgtQROrlIFn z$&!s1a&RZ}`lxAB9>$4K^CX~8Tq07>4=w|0{+Wa&%$diQ;SJ3Htss&iRP?p*1Ag-! zl7%PJGUD%IjiJIW=S#7TAPK@-2~UMa5tXP};|){^G*rU|kyu)C-{Jr>Fy-r;k7WAM zkwGKW$y^Q+6xAT^i05R!hVJOPHVw|;-*R5(=Etw+l)3kwE$2Xko;8a2$Qw`8 z?SRBEaoEU`yKHz&%|1tFj%WqINDNw#s+rtT%g#M7f6SfYkL_pI&gSMF)aIJgl;lq{ zBEy5M!zN;St|;Q8NRSfTmEGNfaH0#96ekLg7^J`5zbQ?nq|}CZaDicrpHm&ZYR`in zXt{xVxv=ePc@(>;`rt#FriD`Oi2bysWH??D7j0eWJCgP@;Y7S`p9~D})Rv{jR8mg* z{R76M`Duv+qL5b6xsD3d5Bwfm?xXp)%RP#r<^|F}-N#E^{KE1ALU8~hibh%P7erN* z(3fbXR5GtFs>YfGqO~C zQp(a~Ju258@II%eY>E^;;U*EOp)Vvde_>W402mk;7#kmdm6_+JQx+3kI+RwX?mH{f z>4piTbA0q}H2!oxm0_w3@jty{N;W)uZYI9$pGTOj2XP&b_vZ>?fl|OY0)XO+peBl3 z0cj={rp1|JmhRsCl9ir2pMs@uUcq{vfj_LWoB{So&~v?SWtabRm8Bti)~( zZ~fep9x|z8?1S5sTBwA!&) z*y`+SY==G7vFW;%_Pe#73Tvb4vHdHmj|wL0+S&W8vv;d)6m;+I0JH#m9$uota5~eN zCvlSZtyOJ(_2HY(Z|-%qbCdn(OK^<8AMkoPEb`;(G{v3PV>L}T$|&+dqDWE3qPdw> zJyA=J10z+`MwWzabO$FLoUpoR(@5M`BY{$n#tas{;YT{n%`5M*Izg&;2Ja+OIfBIP zTq~5HOLRFekzNBiZXgl^2m=EH190P8raO?doOFNd=aOaUMN}Nvj z&P{RPlKX?@1lCyqPsvN|`}tg!yfRC3n&|oi#w!ipZvC6Sf#@YRXP*wQmsQ+u+6(r; z%~FM7z$S|YP?UEUC8Izw&x=CiT!@fCM6?0=X`A%4jCb+g2c^Tnk||h)yzNjn>C*o_ zU0wYk@1r4{^Xj=+mQjKvr%Q>NsszPE(P^L_X;-?cVc&;_)j^oR=&k-3cww3mj5X2v zv^@rUw`~AogU%MtzIlh)fTBGmKazMQxo~RT#Ihz-XQ`f(IUhb@vF%E~i=)b(M7%{h zFjF`M2bA3se_QxYy!0RgNTqR+oGh!5P_k4-u0<5iB_SyzCQy&WyM($oXh}%MVLLD+ zb5R!}DZ{WvRIILI;usHxGsW~t>mR;prfKPNHb`E(zn2r{zVw~Ar+_}dz`(%z|3`G@ zmG7>cpzyUK4oIh*PmNV92IJ?p{g@E{gKS9Q=tfxlQb@^$6-z9qfV=DS=owZS?)1%t z1tK%8kve-*r-VJK&Lm~e+4_fHKYs-YPKlO*NHck|P<5goiK0dw#tFj~=8M5=bZM+m znm4Hv8F&z|_wnfTe^^(P-apsm^p%f#2saR*NB^=N29_42UK>kM^0`7 zsJ@IzuTt&I!k6IW(wlilKFH20_>Yg3om-d$IE`#^`rZoyCeV1 zbMZZab|*)H@H9*yNs|H-Q9TOKbz>=3RvY1o!d=1~F*dX$q~ow17_`4dQ!!@_MW{x} z(tfz}xAcan!c!(Q?R;nWfD8-_3=a&`-ia%z<-RAfhpWoy>3tIG#TD?Z21{sOL-$es z6O9`r7D8YEFc1&|0000(LqtOW0B>cakoFflnr#L8r0+hv`|h|6-SNf~EW5j69u-A4 zMfP^Q_RNVXlE);4cnjw!#RUqL>xA_H07iz+Y5)Kl;JQQ1etnFPfCtEb9k-D+@j7_8 zXUYf9op+Y3FYRI@S-rgN8?j`q_kEEW>)Oum+TOA?j(l4rX=;3pt8rD_t19DK%4T18K_DXApjKud=^T0Rv^kU2uXPfA9zB11mQz*ADI6< z&#z#-q2XocV4k$F_z(40q9a`XhA$6=qHh41v;qCU+?++DM+$|t=&;4d*GTL|_|hBK zv6Mw62#naTJhrhXoi;K~t41B(omiLmN7jbpX>)W#+tT#&tq{m2FZ}IB!1eLIi%6GH zI3(=K;$%ri=2Y1F9LGRw5&^aC+}d-ijk3vl9?}){S8Fm2uPS*XgZ3d_&`Y4S*q}N@ z&!(A|(jYJ1Js!4Pj;c30m#4fly6dl0UeD!UI7!iy2!V?13@{u_KJzm4unb@0 zbus^%B^Xx8)V2=wAgrZ-!8lj{`~v}?J(b%g_3KIPQH9BW5mA2S$yw8`>LiAd86o_M zy{>*~LpCd@ryu!g9{F_H`>r3}n!4Oh@OIIJhs}2LF6QVNZdS?Jyb`pyTOBKUO{yvn z=v_&^zk$!1CBwbCRW{_psP1fN<3bbvE*16hF25Id!E4oc7t^PAi64wc@ z#@b#GNQya+iZG3iUa4mv4fMQCuH$vS&B}l1&kr}w{O64!x~QH+%}5xGjTUqUGq$$~ z{4Y=G?BHO*lC97Ec!u}6INzSDP(vPyd$)}ohew^WI~{gl{eLd1mY>tp zs@ig=4~KXZTq~@*m+n|OwtUwQ3BK6kgyGk0i5~h#4=$25_y^X@ZtcqMZd?D46}t7o z-Mw9-J+t}=3U?#4P9smyw^Fo4%hX{v4D!2?kpl~Gs*1OZ@!Cu4uX*<5sk-`C(YKjX zSUaZ;7Phh!TV%Y`VPDMGB^ufX+xD(HD9s!2uP^)YX^+58;Zrj166{0SDtpSmqxG=a zm;MfrH)Rgn1;?3LNd)w6eOCyP#f?k~LBKJ5ma+^@zzVF=y2pMj`>mLROS zZTsfl7k%<11!E2V86|7YouBfR2SbE8u)^@jF2N%P&qqfjDi@(NJ-PrSh}Q&mSd-Kp z1C z9Y?LGF^R6Ic;LdkTg%fJ{;%V`fHA-RS~3iVMEG_+Yc0FwJXJOp{oCr*cBF23-4SNU zo=8BBlXH|u{Y;#`5dz=YI;{kPr1NsCtsm`Gk-#tU`IE|bPKCqQx{3busqb9_AaNv# zX<^$*@8jq&Y(;4JvXwPgARF$257G=iRSlRMlbr7u8gjE&*LD*Xp=7XQU9hnyS|8BkekOpLHaAt7|#oyjH!fSEmj1E`tB= zRr)|uLe&!sJXJ0D4`C`#GszfDc})W>zw6SB@1R|;_E)*`6IY$4Cugb9ludZEt54to zJ)^QA080i5S_*`8g<)|?7SOMIs7eUBXqecdErhPSkz%WDii8*7opG)Y-P~VKcfQT+ z)cZClex5W=xdrZ@m_w|W! zh0*<|D~)|Gx@5}C`nO95XMV`t_=NnX$6Xyaew01+%9BFZan30`>M{@7CTsVP2{LII z4UVYBKey#Yev0sfl~fT)K;sb6_J|c(RxE(lCH-6`i1}10^y4PH+>7A8wG@`?&4I5= z*r!Di(7eyQoFA&|VFBF=-xm0~_~4*bxgsLX;N(54%% zj!a@`M&?;5=g*zb;?-TFtQ^4+u4T(0FkjT1U!M2xEq1WJn~KG@%-D(wjvP%uAG1(> zV@C&WCS3VIqg-?ISg&Q|UuT{ce$|*Z5Wievd($BO%DwMVn@xn6m4sWm=1;u?d0i=R ztEo*_@jur0emhJ{m`sZEKC=y=Sb10i^{w_P+n17VZ{HIG?rmSK~+VW+Z%BGM0B+`6X={yDm;khjcm9mm0WWYdh3&8|VC z`fk@H-W%Kmm2IgwtKn5MEo=YacL#z3up>_JD503imWrO;4222^PZ(~``*rYbz zFNsSJxUeNHoYaD;Qa17w02O&Tk8*&c7v4E8+Y5tTLD;*&4CiR3E|uvdx-@dCr%JWf z&IHz_*g7#&Hu@y~3vY8id-Mstq%Bv9nEfsrle4_h>c_Q?hQs3`=%CtmrNN=3b{lHf z_Ib1w$|E1>l*%Zg!|-)+-_a%<2gksx<}fSZXJgQyiz^#P zAv4=K9^h-ie+tdx>=7;0?>IEY$h=Bjw>lyuI;5^^RGkd!ia%MEmCnT-k+mH)*XZ9+ z(qnUv=8#IU*dbv~6@X%KVfJDXNGbr}j)F~O4P8u#+=eKnA&>>bQ-mvdWIj%7Qck6g9 znp^m`&8;XoN`r)hq5}g114MRnUv(>Hm2%N~Je6LarYeQVyl)DMNH z>sa{&T;CeFmw<1YfggbK*FQdMNJRFY&${}4L&}d-&Ky)D#+($Pd5(s?`KNEQ`u9`$ zMn3#?YU>Pp^w@yL-IHlG+q>|v&NFb4GsV4mJ;$o{hpqFmenmq^>~k(d^7yDEkpjP8 z|GTZUQ<(pKIF&znhq14>hra)X!~yzoVm~J(_Up8Z6XMxFKuqf(k;B33EZ2p^`#(E? zRptc0U^}jqI`-c>&;j=Uc4s(!M|!ze#s) zcfI3&izj!rjzn1roSJ?X%;^L%|H$I-?qny%;vn%IM*K-*)zg!DJA1R9cifm@u~iwf$x#@8}kGyK3;1P^1WS?ylz&eq&>^!&9K9F}%~lDsWL z`SSM3tf08h1!%@{YZ zgY%4%?3O?&DILbv(!lLfnHUKUOZsq15t&k54wMC;RrGCh4R=DRe9vyTyk56~7x^1} z9|!0(A@I5SE;mNYy|&8Ngh0f0+w-V*oC-SUdnq|ZP~OBZo3o-Mfv3lhkK+MqXD~wJ zwHt!s$=1*zQ4;KX2sdIj4i2J$F;kEDd1QExdUM0p2@G6MOxhpopY2?un0CUUCHySC ztC|g4_PIr-x#)5(rcIT+M5QJ7Kr?cPTf$MiMP7Ye|14g7x({@`u#Yp|+B_-Jqa3xT ztsZFVm)|g1PmZ8@ZWi&ZB}k;+t;{_iK_6fY~+bE!9C-jsPiZ}nYS6ISbdXdQyB-9 zNa9w-YFAiIEnqe1SCOf3X)f`OhGNqg z7#J8B7@Hf8#=%?+IqA~JSKQ;(aWN?39cschxL-;GuU2U#66;TP8c45r_S7_6Nt)T6 znoQ|Z4NAM<`{*|pqCTX4uG#-P)D6I_=J`J}6t?vvsWW&u^rc%~Ui)xZngIx^G|<~6 z-=w+F_K8|8UGPje<~hX1HxzW|t*b7Ry=U#%0}sw?Cy4z!-`5W>5#QJ5Yfvdr{p!@S zkxyyV4e`6ES;k?nu@<*MRM9(ICqHsSMq2x!b0%!Cn1m^x3czxEg9pVF)?m?Z$}dRhXF4{O3o01wTDMbX3(m|Axw;3UNU7}{w%sIs0v}_~)CMDMX8v;KM>m{xm z@cQ7>_f}_T)rcRPD-Vfho8?svkhy5V?RdxALlUj=O1CZG4W?6wE?I8?K*Tp$umci6 zNW&_@lZ+J;McUM>tR$5^n3RR)S2Sf(ir&5O)(F19puWe!&(x8SjN;$9$~?&5aD_*e zrE)|G(_zjtqL*=WLe~y%bjdkltg`BJj+UoUecAp3`9{bBz^kGZ0hmZ44*}$Y1dZcX z7d}3@(JV_0SuG8!2W@HbC{hL_T}Tr=0W7v*39w^Q(Md6QE?h%rLT38ZkdcC|4QGVA zw2u_*o%d_?ht9CDom?Hd^jOcFrNZVxD)SVv(o0wZBBCM^KrdN=f~-IgjX9pr1?T-S zYp_%3xX!+eyDk|EPF1`9Bvr|RN~j819M;%T0J&IUGXfE=41|z~p#4y(3jAtd@7zG% z!Ol=98OChm@nLJK&Xn@NOc*5S8xq5bo?NH($nwQL^|+sAV^8*>%lkVvt^N;uncMZ|>l7LGa6veP#Rh`7=y|_0u~@ekGov23B!|sErEQfNn7|*^m$#qgzZ{ z(Xy0~#nQlJ(24TpB-ECPRIb|kOr(8%oU!y9uHjrde%%K($dQ>aGAWcL0YFAIA^{j0 z82#8*e?^NeC$`j7 z5nJp%BkvEj9CBWP_*#U(W%*5*>rX9-z)j><5PlGyZ;j6H5IJ;*CMkN!$v3noX=p8u zXK@h?t)b#uKQ}{uHa*wZ6R)K`NzwNoPTWC`gYBB7t*g04X{VJpYX)U=_wPFiP43rj z+%MK*Za5~EYKCc!ZldOUJ%#NZMpzVzwg^2MXD-F&mSx^n8giCvikZO4RG{A9H!!Vz zT;Id^Z2s3@3kB|Z3ZbM7cS*>l=cAa~$et6+*Ri*`Q#S>8`wFe!M{E>&{Xtl`o zIbahO}|1yn@>L{L2jfm%-*J|N@shliUY#N=(hXWOV<{`|Lkf6k$|aPrQT z2fZ(83aXSq5vte$%A&PER2jJjxR`)wRP>M~WJUs3;2ycMwBo8nSpb$))jU9#I9rQ= z>>ev)M3nUHwmh9&pU@g_V5zP<^U$q;ebWPFM24FkpC#j+&-FgG=Bg{zC;eX)Cr#2< zoXaC!CCTduxg>$Y*KY&yJ@_`cMrv zl>$>eMHY)xRTBaLBT?BWQe%&+BFTIbuG!#g;}=sj;PuA7xN7L{{3;L+7Gzl%(;*QB zP{_QBtTL&faDtwNtk^}LPr%8!Ubc4zd&b?uUuI_D8;FSoNrvs~D7`qx$$}D^pY)+c z#`TRG7{E}*+rI|a@|7rv5(^BDA4QyXJc}~e<3NAwSeDeI~Gw zJj5}6I1i!T%TFVcZs4z~z%mPGpQK&7hSqBkp4yH@7cOu6GNR!Zxl zDN%1w5D9_;5)^Aepp_(T0RYAq6qQ*S*G1u|h~ldWStjtJI_R8v^`Xef6sPH(RVc1rqdF~({9mm(sphaFVG+NwD-HqKiwZ$7K5|H z2GSw_WXdXu2+ET{sdz=<=MfpMwTZo16IUf*QG&3RmgA}1-Y2HFXa**JPUX|spRUe& z8mK7~n08&UEce5#0xH>$MJyX6Fi(PipR)C>y?$LR?`^Kcj3Ii6OzmNKDgxFoYG7+7 zs89sP7?mUx5m`>P_4kyVb_~Xil0`dhq>c2@DeVU*(C{!~zD)~1{-6C^m@R<2xq!3{ z&fbhVI-Tsw$Rr)PMl=G*z$npG6ckH%#6*C|F_9;YYkq_qePWpafIxr0|CoU>vWoCI z?vpjO%{o_2@HP7>-oIu0cc)YPHC2B+?9%GGgIaG-R{7G8c!Zo9UpKGQG9n4T!Zjyt{}uPh zyH5)GVFdt7`Ogg#pHtoW08{u~@7-|Qv9hXciE|2~@i8c7w3sViUpa^&uy z&$n|rwS(#!GRiA^h^8MIg#Qwplv%y}6uIRsAPXQv_=-%5Zd7A#WJStxH<*CFfcGM z{x{9pL(ZBq=T(&Ly;HC#p!S`F*)x-F_c)WLb9d#pfdgtz8 zeqg-8pS?`A>JQMnugSFQcyl~A250fcz_kz%0ssa8Geku+003@P^`ZBLrcLLATO~i{ z`};I@5v3x>woFvhwB$fhIa<8CGTBVtyv)hmx*Xjm4D01V6k(To6G!2xZx z`^OvuXw+#X6DRnuldUaD(nctJoRf?KZQ$42ZQuod5bCAfUbaHl)EzGxQ)*Is<%G+M z9F{F7IY3lvYjtHvX{l<<$QP5c+RBkLb1R{hn+(d4k&^ztfM@^!%m|&)6u|ET`@VPg z-*#+R^Es+pmWCjKl2#J6qK$t{AfFjBG(n1;E zz(-#+fB+d^q<9|B0lTIK(SR5;x26Fu3+=+F^+Ba}xk*3Re&a!6Mj%AQ+i z@u=?7dX}KuhZCu7gvvTzT2##jdkNc<*4y{+02SfqUmn?FY7a%ky=APoSbh3J5WqjQ8;~7R z+C{=(=Q@q!JxZ@qO|XO4?={ugmolne_nL}g=Zm$(zrKtV+1!DbYmPN{l~m}_q}9CM zY<+g$HoVs`5+)mwiWjZ!Ng9&GK59&qWh5-9s0MRzUv#VH*^%mcwMdvEfU#aU$%U>e!B2UE^XTs-cs@l!0>Gq z<5XVl(M27O>_5(Pnsb9{2`jX+NIBg)zTNhFR|Twf_k)e#GWB`+GZ2nJD2=Rd2W<>E zYC9?pxiuEo73Y4sHSFj@ygo1CFV@*bQJtX4ivY(8&T$Kd!uJF_4D!0KS>ugpGw&O+ zs44Xzw$pj)`pDGzX!f3(rMmh%{7$_a)PFPfkF^Rd3hK+-)rVk?P3d!+-K*yU99%`^ z^hxIEL`zQkoscqOto?qq?BS)9f%y-ui1A_NiLPMu>Hzq^{JdMYW3cj0p8l zc9fp)qM}^s=e}i|b0{De#QOB3NG+b|f=3JK5tLm9M|*i`@uH)pGW+QGk2fszqT40$ zoM0X=%Zl*K$9Kf|LVrso5#4!+U6J+Cz2iHKBo*=n>@HAJP*l}NKfTUP&WBac1T!Up z1Cm8lKv1Lxj0B)Ws2)9yQe*@zZ5H-c>#|kJAu~7dPyXjG7&cy{RXY@t#aHl6$S5~Z zCXo;=A1e~7I6C?Ew6zjM`PyQ;O;{bZwK&4vu?Q?2Uww~RdRKc(LOu6V8 z-9`mXK!x3u>0vswR;Rs}PyusgqIvnVt(|tfuA`_eXnT>PxM3rmHFsy!|+AHcgglq?3NxQ&v`2Q?-w| zBv{-pDOLyZawKY+SU}7GlosHIvE%PkEoi zQGRz}uG<#w(bt<0SBGp?!j}u^pxFitkSpVg}U)qT-^T@fd)-1lOxg4#4L+kRy86*Cr^oH&EJ)mYJItqgCS zR9H=8N2ExhN4%WXbdn!Gf8!(i#HsBfEvw8x9mF5Z0Fx-Hg`+}kpF9va5ooP}c&jA# zm3Ra^3W~%WLz-Qy^h1_M(YQ4luiuOV_O4pj4;Om8*{%zfqtRCKO=61B_DxoF^VHE3 z);!4`-CSJlIh|?ws4rQORfN?3Et8v_H_PJyV*4bf=h4k-a+o|dhiF`ZI?IkY%a01j z@+jQ^PZvhhuPpG3EHV{fn1fII*W!2MkpqG1E?j-<;yLv0jU|p{#{wU@JhCxg^k|M{ zGzsxw#tr1%j+E!UQtY#SZAymILWKiDFqQ?ti6tU_tQ9N~iL$~(DM2ACp{Ux>K=r$vkJ|DHpX%s-rYDSMzJvQ>e@&R=N1sL7WZ*ued%Ssa8i*bI zSaGWSaGLfb-%WJp<9FCpvgNhC&n-!r?Vggso`GJRMJjo+?D7q@D=LK7jTKM6m8Di+ z)`8!Z)z66BCB<35Hu#w~5p9V-*^=5Fe<%M-I}4G0gobZ3VXJLvHaw=-<=DQ?`I?@} z4b`L)k1JVO=;dWP`j=<{nwWqj2}u$_MS5d_s5Ha`Hc+_g^bBPY0$s}@AZ6viqWhO@ zr#A{EV_NpCTvN(U44yudXFk>{I9u^}DCf|zAlwNp0TB|33V3r2nEIPlO8Y z?+R7C#DX4r=WOb#adHb<M$n>aRyD;DGY2r@EKbGl;a$v$f~@A!_68-H)5~k^u(p-EJOyw#T2V&R*bo83Sz7 zg-)e!)tpR|ubonDpf#Awm^BPI*d7?`p+A;lA_?v!jVT6D1%;wONTHMpP>PEv>Iv4X z4{=db<`@idf#w*EGa6i1H|@eayLsx;;T|g(U>nD-JJ%I%)pyKVHD;{D4gSYnMvaE+ z+%?P|4x`sLcA;s}t9ehPMLTR3dC+$%HsJ)#Q!(uUW%*|`S|BJ#WpQ{O5!JF~V35jkD^zJjscEJPH780-t~q5VT25^=G-dpf zh5;S0jUzvgzZ~k%5Y0spfCEK&1(a3{(nLwrul_4r*;9F-28IR({s$S`R-Gfmdd${h z4BF`3mpf*lL8s1Ubf?R*8`%;qF{J)aeniCGEpZD~30*y_Gv?V|r|IW>Ab53?6scYW zl4&OKRkxMzOI{+&L+v|oo+UQ%cVS)g&MdpNugBqn>#meCJD-^?zEqV6=9e&Bz2;mD z;wg}E?6KObT9iK`ik(`$)4ov2v@SMq@|z0^7-mDX!7G zg&n+b79@qYAu#_IZ#{r*{#?i`_#ovAG7}E z7(?6(`EUsB2#kA8UT<~$;kA5qx`?K?_sYc*>@dfISiY3u)_|KEQM2h?rZ6nz)$!G4 zrR7<}O}tLqTt$<~;lHb@Jo}*uN84lliozt0YA0uxbEH6CQdG0^mqWIXK|dU7#*!2B zQK+zi)G}DH0n3pfsAOe%ABHY+E;9!B=c4#*yD_Ij4UFLz^WR==pW&=s0=?BKi2iT+ zfpgWaAMLB&oNCXS*b1&Wr%MBqOr-)*IMF5xU{WGA>Fhp-~sx!9jJ+klHwq3b2^NWPrWQ_ujw@0_-rNxqLTRVMyZR6*4t{cAh?@#Wl>QajT zz3o=Yg*#pPO+O9w*LvUf)K~sD)#l!c${RS1_IN&JLt+(qMq&LW?*8OzNvj_}avRW_R zEAJkxf9$g08ob+wPW}0loR=1PFAf|7TP_6NQzvV<)(y7P*)6rFc`SBg3u2peETHg)$*bf`f;-Lh+~MX>i6ULsgOevoGde6<(fXN)nGi5AkBV9{bx0gt4o@v{vxi3O^O#F<%|b;-4v z$MJ`2ZrDIPhfPkjqi7+;)$Qs&`?5n$DBnZ>Ua0*IZ{Bq5TiBQHQAy^ouNKXSW?^pPT=g%t5b_2|?y1~lu4q4;b_O$E?_HBAW) z-pS6vF!RR#-#0S`1EHoJIQonMqVI=J6oxiLvZH^0>yiw0E{QyeOO)h;0B%QBVMg*v zMA!CFpafB9QY)$m(U~SHX`r zFFiRNVX-L_t#OlU0&P~W_8mtSsUcbMaSj7)xi~q6KwTths&av-v!IFZjI;3*ssKp? z?Z=zvO=rAMs3+ofKOXd5H+#0a?|z|WW;gY}iEr~3uMZv_Bu^H%nK9+PsjZ0ZQIkSS z?Q&vK+dH+o$k7ymbV87chdTGAs>xNCHXdKBj%Vw)|9$4Z0;FvOUR&YDXzAYMmOg;s z35sy03e3%&krw96rcF3DPQ@&k9->-pH_~IQ%s7GB=(|*PHxzYkdp&j3-NKBi<(4g| zgv62iagNZGd91ce*6a_7k2in%Y?9Z%xMl9jQA^xMRFQ!p(d7SIrVPp46t{8VtTUC3 z>J7l0uW#wh$lI#|WLa7iTQ%bMPF(WMEpBT%i`3`6OPOjG z;(n=feA+6#Q5y_n|5~lg87(Z>CzA>h3nw2CV3=TFe_)$pv(S; zrs`27CPi7uPTao}C+0<53&ZpI8-lov;xcJ`>J(+ex|f_FF@lKv zkkm6?FEWqG>Ta@wRqr!ccNh08lidqmvgKy+9Qq`buZHp0+;SycDO_zDYHcvQ0>VrICZGtU%L4?2%fMO~9z2qnttB8t z#97({00L-WhR>wBRW(;aB7EUaxK7!m3EZaLMO!l{*3~H$EL|9&2vV?spp>En2~d_q z32G9Q5>-VSSwy6492f<-JBN81SQ<`|5Y9>-DVBjARABIzfdnDzPNNajWW5ezPjJRj zIWPx?ew@D9rC38TEQ+Ql&;;->k`h>{U?g%tg=dx&)hg~hl&9NvysYuts!7J36Sh** zHXfPxQ+NKmE=&eT{J*tl$}x9xei{r;KUiP#K?DS0wz$8hr z1uC--VV;(%#Yt6l*8@w{c_vjmn4cB?N8En%T3=D!FDr-k+xvk#7h+%H@lTKUPWs;H zLYObU5QR3HcwFbl9GS@6W25^66zZA_w{ZDzso?v(`u}=zpZ|@i&csVxY537WL%I}Bj@B{&5HaVRW+laxyWnp%faa-??NpO@V@;mhA=b2%$I$Rt@%>3Ady zgW@y4pl)e+yZW-(sq5!rSh2H)80Vinxnd(cW5cO_80u<~Eq*waz~ahb4?iJPi2_nA zl}HI{c2s_~m>aBQ_!59ace^{WqHzT;F130_!gGNzsvb? zsQ8G7ev4a#nzgx~%tP>I2A%#6$r8WY(=_>@tI$aFKlKo)%(D?aPz7XZW8qa)77)jx z6ahmFDYRjnoU{1BEsKMcmjegTSe$A!m;_vk?cVO$WhVwte;Pr{uH^j1hw%RR@j(oX z3=HZIcp7%!`PoIouTRWC<^K#0g7|r^ip%@?gNQX=gPo=V*pQ~rOo;9OW)6o4z{_E^ z;&`+sxaS;)-T%e}UJ_o4PO!3m(+RZxCkve3a^E}^a8A)ZDE)#QmWhCQicgQOAWcr% z3Oq6YnMe!>?^HmC#lFl03Rfj&k;O)Ej0R05pI6bq#DW>_igRb&OK>H>_7R&Eh}NWs zhDkt#1UUiGm`PFmZ4yB%nu?!T1*c1ui)fTB1A_sViM;06K?DR%2}wj?94aaSU}7XN zXO{&*DUa1M6i%LX^B^5US&m`Cz(+hV_M>RvoZUDfqk7&0ULT4E!Py7LAKv^JJM&9G zEHR?V1|yRP=QfA*+L~99q!tw4YezPZk0`~AaubY1i1ZbU#fB%~Dj+=HXjCF3C z!!B#&byLIXHla1igb`uhEuY^%m=Y9)Hug>`e82HtC%kQB!~cRt;D=MAc6*?L^R@j= zrW}hN-$%R+K;$Tr8a}=yT!8qxpQspIz5@9ZYM@ZQ&`Lu7Mt0s-SF%}-R{dDHY^HhM zl7noTHotkooa6~eyiCzBD5j1D8Wsvl^EgG8jWv}yxJ@sMEmJJ0FJ%nvXyFfhA6WSiTO zs_?OB`=PCu?WW&Y9R6sI%(2Z5<9(J`Hz8uz5v-R>vN3N;#Hzyhn%Azgolor9<;ge4 zOVXlwN6|ukkwhw{6rl1razG{vlLBBhk`@{eoQYvssz>_uZk|lPWTx6_90F)ymE1yR z^SrwIOPIF_gxkyv>=_INPn;dM%0!Wy0jhoM>Cl6&!CZQ;Me76*0W z0yTO0(8gm+JhKIz{F(v9u@tpH2vH;tK%ZLRdp3OAx3?EQ>Iy8X0nk*vm69 zfM{{>fu_RvCgJ#vb=NSV^2w1 zy?s3EPF<#cf41CgHTk8qNTxI7@iV`xJ8?NJZADVTJ?XcIO8-yk1pXycgc@3&;KyE9 z7N6|0L@8_hSvR2=+1h2Wy6TgenX}dAcDlHM6KLO2Mod|%nCMUfAUT010ce8)Iig?$ zNwefIsd}((h*|`p)UuG$1~{UoEI^}a3&BC0ssI2Geku+003T9R-w8J5NVED zZmst}*zI)MBYn%HHfa($D!NF^?&f6k^2B9k=H}%%ztUbbKq)U!u3TW)1^`NA;EWCc z#R1>a#NOt(ZR?VBPuV=>B+GW5Z<1t5IES6Ku1Udr?y(m@$C1dp+#^n_H}CIZM|dLd zryIwRa76cXI*~wm@$_PWx}mZ!1pV|ei(3oPiVo=*HZGWCe}}0V000pHqnUsMKPcb- zeRp?vyKT2;+jhFPYq#&EtgcDYw%xS7Z0*Tq$fc20KvF;^6hJUq77z#^A{IU%3jxvs z1cOfqBmsbrA3%Z_A_(#X#*_FU%8yYhmgHuc(iq*vHkGmYWlPQD9Y$>i$+;T?Hv`t$Wrk;U=Y^jQ~cIShQ0!?cGK^Fm5lZQmWls-v0 zSel~eW2yzFIY7Usp2}!KsTQj`s^!f4xYaFC;5+T|8&UOFI5I5 z1MF~>+~H|!?zISZLAkE9;*~UQr!KOM%b$PzlgZus8MxXIN#5w)-7XxtH9sKaPlg}h zsiHF;P z!JE+}N2V3*GO}kwu0BE2Gt==`cwrG^+yO!^Uj8}*BJYEo7@}?e666i&h13m}LM|jG zA&(Y$MAz0M(@hUt4$+zp05>B0tO-5ozd=XQ-7(iP|N1ZCjXKI+^#JtnXSs)JC$)c) zK(Gy#MX!}#4IQ#^yM2^<6~VR2nzzVR`wHEt6$HSsHI#Eb61~W>S6+^@jrPso8D~at z;7uYdSDiewMc9gT8tB2s&cb#TpVR%4Ov{?GA7fELd@fD%(h62Ob&S@cl;!3ze;N_X zWm#`v?#*Hq--Q!Oa`soM6}n+HI7_aqxix`(m<7&}1gMpFulJX?{nmG_f} z>B7{vFJE6>R##F*l@-0U8Y#$5GWJ7lQszviE5EvGrU_WpSIxED1a^4ppNS^#&*f1) z(@}Z1G|$MUrerOVi8f6Mmtcb)Q2#Y$ch%tKflk*veHSWLa$vF}#lCX`7+>*k#5Ce< zGLj^IA_**xk95&2NzP~xoF<<-lu&{Ts0CYT&bX${|MAE+I%@GkIXTM1a$7BTtOuAf ztE52G>mQzaIiffq)ztAe9U&-K<$y$@$!3xSuW`jNEDV4i>0^@xd?_|>Iw{D(-qmTP zSpc(16ls_C@ zrgeuF<2&zCk&w@7RowG3{fCsRG+lty$=l@q>Mqax)$PJmtq8{1gs;|C)K$0ilfR}- zTd7Fn+3_LK51J z3&n9ps4h97)zRV!qs1`_3!!>mk-sDI!MxCd+N$H!zPOuLz??1t3<$(AwYu*0HXH@2 z1=KLR7;FPw%V18M6zv+@f0r~=w$+lj4RLIWrb$!9yp2MZ)b8K&*i^K&3v{!stfl6E zr#zppnek50Rv8C#Ds4#yh_hbSgs&UMWILnU5q2%P#t}0jnt{v2-wEPo5I~m$UWvNP zjW6SLc`a|J$fpVei3{4Z^A@+;*H5sUCheM^-}rU8JV#vK=SJ&l?Gb^&Jlu45hl@{4 z@9n=!p`hJF3dGL7$b4?Af#T^>%I0sp=(%&R)F@x$US|;q?OxGJykJA7zQk$Cl}z#s z-o=BMiAqcrHr*!aH)ba3IA&ci`0Jmq#zq4kCp84j;!7zhdNEO6&8cz%l<)sRT~Pc5+T8;3@u=;D7jH4NHxfT)n{*Z45%7^#xm2m%R_h z!zr~DPaURFH$}j4Z|(7#%t|BYMbb;Yz}V?DiSsjPBaQ0xIjv?g=ER43eT{vHG)4hz zGtO^~@Y8-V+nUNbj{z0n(Z+xoLJvbwq!>mEtV8b<}5+AJ{AFMgAH zsH0{)+Nq*gvV;kR$3o}CDYt_<@43=)l4hGc4t-xWCUdH7j03btDh|;dQir^UBr0hR7^Y=9sTS}A zA(%U%HoFt_^JZcOqE=zZ0zzaq;XR%zw<~E^ukr~6t*R~^DH2T_73}dEJ z=*zWfJF?xFnyD*`ODYpKMngMHMcPK6zjCmMlRel#EO2b5oxu7hy}$PR8OZ9ED_grcIdQI7JmG;q<;}y|(Y%)*0s-_~}A zBRdRhdIwWP#~|lE{b6~wk_H=QBKaK3l7e6Lz+KRjN{}iL@`X`KwuVLA^pyf)VUqXE ze#vSpCXSM%%b2^izNu+;tm3srHdt|ksGf$#tQt-=EN6u_;%;ZmEC~_fjX=0Kkz*_^ z;a7K)%me3P%S@QzxEw%0KtO+9#g@et^O!Z9-7b~Lj3+J@bW@pJ%XQc8iQdaWwg{^6 z6W5~k*_4?Ne9bRrZ1}%7ixo|=UBKQz1&~kLF+4G3*Tp-&d1vz_;p|z)*gNmP{wn&4 z*s^)-sU1HyCqE)GybO`f=M6@<6=v^CvH#IrcmQT>{T&k^LtNyqRvigN^l%0FP>fzXZ3761@YMnh=NA&QG0U~VouV?HJ74VV8#NM%)$MzwaulV0B5mxQ-EwB_ppOPb zp%kV(o?x|Q6C(n8R4F3m-h}n$HNQ9H@9diPfXlO1YLHNN2BXdLz3cvGA}+YztBe+>M?(y5Y{yBzx~KKMKGnMy+Jdiimu?Gd zQ|fBFt?HWgtoCi?UCa3UHoS1^zQ8J};BWAyz#SHP?)XbLwQL}H_7E6LGFMe60LDG2 z1mU>T`!6rY`^S5bRe55{$))ySM(z4rNtmn!DD|*&ioCEu^0og6+z`a9{UyKKp1+Es z%71r+jmps8CQluSC~smi+w!F@@9CTB#nl7V1bq2cnib&Ogf?_Ljdeo$JTTT;*!nWOaV~_i^lS@7N<;o71t6zW% z%6c=b?XwlocjH-jMsIKsDy|JB#&MC%=PQeK%lHp^zs9v$HCV50y(FG_=I6^Tm6<*ojUYe44rtwXl>%DvQWobv@fK>bhj4uDi&bKJ(RnTb97X*OGv#ToXW zat#>=1&^QP7viOFK|XzWb&~PyN%SP4;x*xrOBzvLj2-DEq6p}qqS{)Kl@QfWiY+Zk zd4VScFQ<8H^$h}*+-|K~RXzEa7NF}K>oUQB!p4D)#oXLWJpW-$dq=tZ-A^da!mhe6 z2YW2N>RuDpTMRkxg_?Kf%{{5eCK>Fmwt#?dHIKV*+2F?5#7;_JD=+)Y(ZDaa#7=Wy zfIlEa>R~87Nq(kW20Gq^gj%t!Jf?uuOF+g6*D#3PzOq1!Oj5dFHhSvt5wom51(Mt~ zJKx}nk47c|ZKh9i0vpgSLc9V30s=n6M4gt;ae_=yhtf~+9-jdgp1bNwEP8w+{Q03; z{yuMc)kHe)lb=05!E7Ze0 z{>n8Inn$C2S}q5KIv!51&m8UkL<(CRs`{OX+17bzS;R(PDImQj$y5M38VV*2&`!`OB6 zhgdq7aw>@=7FLv3&(>%XJA+ZxcJ-lWoeg^!;U{OW3jxaXMoB48H0t}8wsZq~h^?Jcc37z~(=3U!w>G=D zzI4W_rXzX^)ipwi-N^ZA>+bUF^~gZBa203hSY91VSVzoBD;S~k!GFI;n1vshr?u0K zMB=HS+0`2~(4lOA)7sp&R~w*>gGBvvJ*xs;~b{+W?911JMvPMzC(;%oVKn^fb z&~xc6lB(!PKz)I#mMOVf;`XmB5Tle7u9_1qFiN6|6ijp1?0k#bT>8ot_sx+9DNrP) z5c9%60aYLYH{MLb0CR(Spr%wU1SQa41C&yfE`l6e&Amj{#L%>8yd?+L5Ofd_7Z8-L zZZjg?SaDDN?yr1)dtR6QlDzcLUlv`(_qx!dZ9(F$Fb2PNI>68`FX6uC}4Y3~OyEzu##F=N%e9C~&fPjF2pTDiwALba# zOsL@cpNV6==l9-Gn`{$4-}}kT1W?Va(iv!AXrZVSKhvX2B2N$Q-JiDnwLZtxdnU)9 zJMZ-6M66Z2lT;y(M+rJ>-<|Fj@;`z1u zpig}RwWa!c>T-;1;mRWEK3agYOWJf3+rEOf!d+eE!F)l_xMEN5|dX|G@ys$L_Gp7EY!}y3Ialw z6^R)EmHpCw(B7^(hR>VrCQCf{ub1M5!Ny_-JMOeWaNBL{^Pcf*P{GmU zHBlc`lCASibaa9e=2!!sP|T+AYEoz}pgZUSH;~2`TYNMSiyK$tk+tJ<>t3$aYbS~6 zQWNkR8KT{_-FtsQMz<-U=%GQTghj{l2Ov2R1SG=Ip^D-h3C|$KWQk{_p8r1`Ic=9F z`z;K1cb9gXpbsx~2TMwE2S;m>_Ky|puoNNpBH9gIybg=dafO%z@8R6(ne2Z{2$~E} ziPBTMnD>RxBeK&9{q2#C?W~Pk;b_0*mJMekVzn&&TRcMctLa5ldOK@&1DYm%(CeMn zJuCrJ%>u~@IglRc=6GqSq+{p@;Bc0_sG1TI&kn%V`;qtx(3ksxmbT~0&A#~!wK0!Z z;FfJbqJu*q000mW0{{R3G&4mr003T9D4^X1L=|!Yn+5%IcKd8%q>u2#-llS3h$avu zImhPBUde4)Z8wpbycGP-rQ}= zNtTwGjoTs1>}F~Sa+QdptC9o}ASEc2m6Vhb2qGW^2BlZoEx-gV0iKBPAPPnKcmfy2 zFTg{Hi|^2PdK-$w6IJt0S?g2ayD!hkcHY-nsFFYftk~|G|1y>8=f+S3fX-J zcA>RZ6>KMN#e_YMHQlagK|ii_vC?d+*=j&348U95r~LMCX&=uz;b{7p4E5)GsbTO5 zr?&n!XpP@Sb?6xC1^=vG6$X2d+ELSlaYmen(LhKLA_)$*XC%nxND+Z2B-k2L7027K zc&1=an>-Ddt-3x`ASqd=I1yjyt(&w}cuxWds0%JEs*dri=Bl-}SKt@D_`yF6bhKe` zmju?pH43MR-7FoHRaz0lIj)t1v3_q^gA*KRsl!8rMUBptM0Xxe;_@dOeUt^- zNC?uzRvqSxXfmJ}k-`utQE;UVFwn$;WJ=uy zQ}vBR5}_&ed$^Y;BdM58?#DL9C_Qr9DC5upEa1?jDu<+o2?FOnN<$92Dne)$XaN$; z-fx}0t&*#nyABOdG8pDfmGeh6P~`49It2+G8Z>n;)zVQ^HUb23_F8e;Tq3y3^vAA1 z+6Uqe?vgpDR$~?9sbgYx9EPeGt+NJG7h0dm3huS-7Y(kDo-v+8)She1c>E`7HN)&D6?j_yZgMiG#+sY8l!CEnQd7DvYT_1?rdbHU3 z7UoN||28k{n@hn8$>(z9`_Wt)o~ku-c5~FmT#vgA>sOT)@zJ!w9WQ;rBO@!Q-2Fg& zfzooc;xtOEn>4^lf;=&i+B-xDS8{N)q@V_L($H(QNpy^)Zl_s)A|||TD@w1g8D<)? z`TSXA{W~kSbq5-5*tUl=I+G0lk%qG|?ZGagJ>}9yM*1$?$JDJ{UHweM`Ky0amlId7 zn{0I!cUptBYn8glmIZOJ|EDQfvR&@L2bR~OVE5U{w-55gJ|~D`B7%-)0XwZ@!Zam^ z1FqnCCe}~blR=m4G3k?{wDZ1A5*TGkI}k)l69plW1TnzeP|=uo2xI;ZjEWt+udmQ_ zaYaFNIa!T_N@eH)K;4@0{kuPv|5mME-t8wMGj-03$s5G`0>=O*6(Z^gw4elyB5Xu! zn!ckYJ(48Yb)d4iwk+(FP`<_Dp>DgS%H`Fh$Lw3C0-j9+OL(qpW!W-Q{AvA`)#!GxKP6*>wtq^g4>J6`@!nFHW>yFMk1ps80O!qzl zm*c*E{T0uie&G1OQ9JA1edoR&uo|Z1{$?ps`o`{Db=~R)tjluERM%HqX~;$DsU^x1 zaA0L8nIQh~L#88m}q6iUEq%Gue zjT~jwwGsdcg)Nl;zL~~2Cfh#E4+ju`T(el)eSatE$}M@=N_G_CU2XSm`P9lM3Bd%% zHMpUbHDTTR)jMxFU!Y}41K8$^V*H3`&ce{Xa2`L1Fo3@wh^>%yxfPKa9yn8+`F_I+ zB-2LGS+UOPy@R$CyR9u(9;L0DjkmE~=NULHvn3yOI8$|*Gv1d#%^6+Hy`euI2a^PB zhTmEGeN}w4W{*M0*V|UT2>if%Xb1UX^f}uCW8S}kf5$=XHbIo$JVl@S{xvt+w$w12D#RI-A zNcs&ep+Ie%@ZFq*h8A#G!D>d^x}o4Uz&Fuy!$(QUAcOp?-dsVHXSVCPF?daIc%%9% zGi-%7Dst=msb)*9t&IhyJ3)J&Eq8s|$sS<%wKX5}(Rk>u30c`cA$a$;h$=b;WPj=>hc~G4wS@wtcU0tAF{;uVoZ2xJ<00ZX!?Laqo`W1P5`lbEQH-%Vl z>&BV_OLWIfE3IiTlpvHQ1bLODMT+=8%}Xc+QHQ3Itf|I+O4yGrKh~3da&D|2;B@D( zT7joKFc-de2mf?U*XFsDtrm1#n7Yb7G%vNozi@tS(`nCu{+i@(U;h1z#s3H1rPgxk zSL7QGh7q18(gX2+A|Hs5)-PkdfsG9+^T_sInWL?!{c?p)mat{wB8H?pEgn zC21OYlybPxu@`Y zxYPOJ)b%?dSE8?1sO>1Tj_?@y9xP5M$L=Swy^sP~;`My%tcnPU#`o0jX;@8V=3Ytf z$%KgTQp<&EMlzy+WkW@70CljL$( za5R-W{&yEK_LyJqnC1&V@v2)u)$HlxyifC;LUV(X-CaHTGc{F@JvpSCoOYVz`E*jS z^XxJy*Uuc=ukQ*syY9t;1j%|5$vdTX;q|5B>*|%+Ww{4S;&S|Pr&b9l~vfyf@ua--dK6Be!)>4(PTT zEo7IPI(M?KJ2TYVwco-Gt2#P4-{?;=MXyejt-17v88YDfS*pyPfBLdj zOH7hq)~cZb1gs3W4YR=ae;)-dsy}Z=1CHC((QVV-X~PD%s1A+nbkYEL6i>=nL_JK1 zXSn~6B1pDH5iEz@rHW=1B8lo$RwUlf0hF?D@1IE_ux@*G_&N$l@;f_p3jgZ^n@uJ< z1RXj>QDh~sCyFPr9RdT-*ZlMA%K%*9V%M6Y?RHP3hV7f;;B%t5PMdRu-tn67dWueJ z=Z2{AX*)sHRxHA3Kw8mhzr@hAlG|Y7ckUGvJMAkoHZmsdzd=m|Ch?rfIY==K@a+xo z!kA)t*wzoOT1x24Rw>1VFSfZ{$e>lTPy7mr4HjWrbw$Dn`C5k`qb)tY4G7}68a=N1 ziz9+kf#QX31HMoZ)Hm8@P-LfSon5JyXQl;h)~l)~nl?|RPQw$r{(jZ4v^xtVv#6(` z$zh^*sAJs^_yRl!NvOtC*Zr3{6J1k;oWz*sm z&Hq}=fnE%DE8YP*a9HiP1N*Mt+Dz{ZI`=cZ=>^V5gLKj!b6f{vaNN}WzAcs(WOhf&ofHkYiU%3_^ze)6@ZUm?9K>Rd z{$n&6po08GCEw}Rh`3EH+}F;2_~j!3j@K8=az2 z90czmX=zgMad$030KWFUL`6IIauUn&!(O^FONl&po^6h=O6{*VARP}KPmlRkef9C( zhmEQDQsY|oOdBx#q8E9>Q8M%#A~A@Cag@MTF@Q*bZ4@Y0F?v%qkwH66!g6=!Bc~VN zj)tUc#jM;{WzSe~GB6|Y0U?DlAj&RVE^AF+k}n%f9?fk|Rn|BUhcVoWaq<5Xa&neh zNJLWt`$2J$FchXfiB`gJLZ5DzVzG^yZNT!Q;$C01+Wr0fsK+WF3stURksk4Kuk5n+ zc&$yy*S{{GXsco?SW&{wJBiXKKra>*K2N-aX)!{xB1J0NYqJVH401IFt0DTB@^jy+ zUpZ2q49{UzI$%Hg-P;gve)bs|dx*wqxq7W5{(t#E;VfQMV5Kz02+$2CEtp!Nvqt0u zZ6u49M<7@=qje>!A>4`jDVp$d8I`*X0nfDUMjFRqGwHtQBzK?G7^81A1Eb@P3tB$w zM&miwBJmJjd4?K{!?BdOr#`@Oo3P`)i4| zrj@LlveCU>AUAF$l45;eEzO^Q*7{ycvs)3R%k6gdG^n#*zKFt+HzH@ZdDGBALdAjr z9e)jA`#fRYKO_Pfmu5~iFO8JQIn)!s%paTQ1b$V99}^Z%%LTuue>-FN6?_s^X+_=g zzjdKv6{;6%<$zRM5 zf3h!}KruI!3(piR9%H-!dgE^FG2d>Np3BH>^szy`e?Qy17-YQ!5QS-4Ek$k_1r_`4 z{;_h#DW~!r--i&SS8dey8|{4rh!#B^43V97Dbk*KioQod;dOf>?UPfgWdEjA~Vlulw#pk(TrMIQR zh8YV9mNM~2JoAs^j^z+8m2b{Z+UO?3PHvS)TV0Z~!D3#LFDv$}ep}$=vu>sXguu-- zv9y%CpHEG$H@dM+GqSogI@--wS)-2p6tp{2G`%%~ce51iyzv~N0p6Z|&)6^{?rTee zwk@~VuE{i*e_y%5??JyMU+TZVPA~aor+;&lK35qC-VpL5PZ% z&Wmq~zuN5`biO<+RyC94f)$jtX482=!YNX33gw}!eSS9$gWtSWMbVh_&DK2X+lNZO z*I0&!cwy2!A)rRZU&$mmUZlm2Gw_RU*#8QN+aWvmBwP9n>yRbVYV#XzzX+}_e>?ae z{L;gr`SOp>lru|O`t9<64>;1O8xJ`iT_!e9;<4AO%3Pc0tx3_Hki{SWgO&pP6Q}0}c>&On<7IRq>c;=kZ^DKDwwY4}12e!BiI(jLOGe`CrcYm#HaUHXO$H z+sF5fS8Tr7 zm4BEn(;IjVxnX}{Hz)SOy?gRph=|R)?fhEhVECDKQ2?M|kA_a_Wf~7$iEDJdgd?)Q zR=K0adm?6Th9l~wero$SR@=($8`h%Z1|--Nz(!OT!SX;P3W&o20)sSK0@!H-jZ0H% z=kw=?gPny^`~@vJOMrvjhl-xvc&`bN)j@mryt0RRIL3pf=?~^Rw-u{d1uXZjV6%RUrfWgY)sfsKP$$qg3IpP-XOPA5=jstJy8(Y=xQjCiHdLu36dtH zND4?lP#;2`tkLtS<0>kba(X(8?jR=MbF4bS2iy5~w4oS<@wMVoZ&5pTw*p+2r(;x- zjV{DLO!kz(07RuBN{KX*;vML7L!=0#a9cLnBZ?~a zjBv{vL!ggRKHnE3!6t$AHfkKtd052a1{6wZPgyU<_S52T6nQ5EroM>TzCbSL=B&KB zpB|xD1lM@M0yx-qn>0jM;$UHAKR2*IYg|QbI;_+35oP}|`OO8?@-b0?93DiiGn^zP zpg=q*u|V#T=VeTPnut;H$+XZI(W2?R*oh(Gf5tn9@4=cY6}A(F&Sp$1Wv*=YR5X)5 zb6_NU)54{;U3cubl!27v&3i-sJHh6vntIFezU_KNlljxo{|7@!bZ&fC_xY0}62sal zo0aR)HWlnsHY(XvZ?X1_H9q#XHa&aqrhD0ngn=;r}P=IEhMfAOJ*@ zNO59Vg`0k!4U?Ej0&c1L6QI6na`jfTu`{9r?(`cobrf-Ns7N7_q@o}s%s_`Tqn0tJ zL35>~2}g|LlbJb+m>FXPz+U6ccAdx}iY_W^D3tEYE@7YZ?$lv5FC%vC#)tzp9 z<#f(G)fa>%TTv6BEDTuK;8-XUtR@0j5MaZU07F{mGqldVa`_A2gBoWwoR#Ivh5ckF zu^bAkQ!JIrq#{IuNR7f`f)*N%l7vJGj+kb^1Q{U_Wo1)`%A2&ORkroMB~1=4m(pI; z&R*H=_46#R=z9FN`EdcE4#^0@T9YIi}D*gmzDR>EcX z`Eg(PJ46W?dd%hbl%>53n^<1xc|-@uOqD$@;&>Gy<4#0ptj@5-XC30K)7$ zMtBSQGLn=Oz;<~@4dR!S+B1c-9*MVdQcIoQ;=7qAr;PcWUISmWS{vZr ztiCIDw!$AOVEI!+OGBN2;Ke{f6Z*qE$f78OK%`-55_Bm#z;)2ClUbO-78mDMog=wZ zrAIp<)DmJlWvP6{=k1qDJv0XYk81fZ{`kHk7^0fbm^t~=!N){e%q-y>2wcn|d4SSv!ppR~q%n{ip?kAN8D9@s_W zh(QPhC4oSG#T~Q|Wk@8Un0Qvml304or*&gJjYmeLoT#dwr?KkZqkfthYmLzVJd9xm zDEw?&3&i4X#q(0x}R)3vy+c`w&;6TC8H{M|De;bjHs-4a5$|!$- zg8S$>tUN%-pHvr?{6IJ(p|muiIH9J52im(xStq&xC{dCGhXM4~E%U);3u0~OTG5mR zF|@qRDX68BCixolAfJ<609W4qJT;cSWRn~^ToU zY(z_DVv>Y8UYG^sffOc2Y?fLU2L?)ordX(CN8^>!w>sr3SFxNqEU!#^${JsgUEjG; zYZqvFV_ae)u5`99_h>4-^Ph!I}{kcwhBJS^$G9M(e}W< zy2OSn_);%=!qnveX^0x4Se9xE11LlVdSw_dz4ooXZfs$!tz1hpk92|hSPx_hC8t!d z>ZJ9YomUc{6o_r`6?s2Kyt#{XdLNy>6#izLX1_NQ`5E1{qak^})Kq_`(K*4R-YYIq z-PgnobO}GoUz~O0aYdcCYki$(^1SxFHZ22&Csv#jYiTmL#EQOwc;&8Jw4Ba0gi&gG*JW) zs)BHs=u;DuJSfo%XqKn!@^ZWYwR<2V+V^5SqmhE70Td0f$xRR-K_!x60PxV7fGXuB z7KoF;)UdIH{jYQSpTu>qaAT>zZK`l~9GbcbmlmX49leZRA>z zhNh;em+2{KX-U%hYuQO4L02#{z0D=0XnuC+CW%oA=aWOo0NPPOA`^+ED4*KX1S@$^ zNe#3@nN6i7D!^MTu@XzS#9YM;)@Sogwb%F!JEEb@n-xIYE@oA{$!YV}8#k|GZsvb# zah9x(!q7Z0M{#cw9x!6BqpxC~s2uDQ+}j~%w%EDxCT>Z%Az8&Fw^_ab(sN9DyIQ?c z0J&l3RnK#-n2k|&(oM!1@Ni=G)R5k#mGWZ-Y`@)rsUf+T@cN_R@uO4VN(o#2qgWT>@J_~`>%Dk~85?-rAbVKG$8YcWsoZYYTo<%9|V424WI69oGuKLz|G zF$*-)CQj6G(7jBdI_Gi}%Yo_Uu&CT|G`EeLMA^qBqt^qlL zYNdyI^$fJG>dU^b+O`e+^85ckJ$(1?Eq@yspP0NmQ#K?m0trP#G-(7unx@8zRU{&U zf?|5pKqXJCBfh6dQ4kOU0000qG(|K30A5v?py@s^sw}6>r}w|v?Zh1=e^t14w;MS~ zC}&l7Hzu3*H_c*_%ueIcyrTF60mbzQ+W-KK(3lYc05?EM7;yca%y3WysGcQk6CLn@ ztROkcNj(ygj8}Wz92Kk8>e}9W)pD(MXM?$`z1@q6ZQ8~aubg33ZELgBT#;+s(s8b< zwwd`f16kFq@C#?0jD%zXG#~^(0ssJJ2B2mLz`qUKd%bJ3eM{E1ZmR3CgRfdvtiw`l zX-n2blLv!ID@NBq0th;s1QQzgKp{vZ0st3FfI)KH>vm zK8rPq0lK0d$t8M)s9I6(I>TLDcTf4_L{v%Z%L2#bW_?1!5ei;>98)bC?X%2W4MxRV zFVQxK{i@L}^um{b%NKJDuYheQ+vDgf09C=gc240q-3xbp!mT^~HOg0R#YI;WRXbtt z$KkuTTyb5(I{3!@53dnzkT^BqxpNoW)4`eg;OXMN1bJmC2U-GuwESWlU&O@Fu!w<+4)tTBn;TeLOR z>d|r3KjT>?&1YrlLXrMfwYQ2L5G&DCyc1TfpOw$y%*$0hxd}zrKksXoexBUGyTPY* zN|9LY-rFZ>rZe5AF4{P5VvmHzPYH)UC0Hbwkj-x$nW~mN8xfY@-WsI(F%)m0h(ok1z?iJg&p9? zFo;iC&)7n8ZO!@O4r?>D^`!zFV*WUHulqtKg5{xUFE2_gfVh>fWYZcCcN2md*96 zp6g)$*b0D^ud=n9Gv%;dbn}h8;+OloV4K>Q8=r^K`L|zKeqEtyZaeI~99z7r77Gi% z^4wf^Zzwx=w{dYRw$tsu-7K$Ly*bQ?H#6OkqX~V_c2y>W->>ar9aR%LO1>(q2!Q*|TzGd{t#@+U)P{X`9P-`O*NN9@9^?DcDZJF3hn?!s1?d{VAUc_vY0 zt^3O@?JoHaW^?akF||`Q^XKEOBpQ3(ujI~Lz=KR0TRe6=rrw__A;x+wkH6BNmwwMR9e>s4H=@ep!NbaAJ1ON!dx7M|{2&P9Hx-KQE4$rbaTpwe3*0X>F=FG( z%kj=w6|S_S>BS}~#Bo=?m>Mg$VqQ59gu4sYLnd{0Dshz7c5G_;p;R=~{*nF^OBLgh zm-2R{uq=4G-3@HK;4&puk%H|-uj&Ua{!Ki`9pX-3Tn(e@Ktu-~DE=BxPEn`_FSyKGeXQB1dM2D)X*qw-jP#l<^E*7nubA6sTW-5VWp?{z zwsiB<;Br{az9~s<)f^aeWt6+F{SXZlxm~TDeo|! z7ZKwHe~4L$x^bv;D?C<6KrSlJ0)9cNtP&Ju!Z6Vv?nzl3wH~Wk=M_v)8>drQ1&y>ackU3KyI+hc0)iv8T%um9!cm)rOx&WX4-q~Q7c1@I3s zf_Og4Ic@NmmUMe#k2TJ@U1y!Mr2lel!cYhRjhCxmZ^SM4>D-02FP;J$u&1uCZ4i^= zLdb)X_-hHa%e&hGf76hL@4@*+*`7PXXZ_b}>V1^3Pw^HswY!t<(bmb>!%X5=i(AeC z+5kUD->&W6wc7{O>=Vm5FE#agoX9@rJHR^6Sef$-(z`A9&tMI$o*AzWihNr(@6Vi3 zaLbVWoAq*dj98vKr^igZZF$SPdD~^156*FGd*fCAm1E<2YY)o9d~a_eWGT|b4>gk< znFI#f5r+kajPJhl66H_)>-iSJZ^1%JE!?5Rc6!4oCu1#P(@O$)r@jxK|$BTLa00DQVj2h*I7QEEO17G6+hl2>P)V z#=}4{5*A@er=ck$INFV;5_o@^?O}@?dy}zuamRN*V%UYZWqln&lPnf2YnE_+JiIfE z$H!9d7HWTc-PN@zxseZlDa)rlFs}p7 zd3m!}4n@w51u>3WWo<4Vny$;!wcNM4)VtW*t-k~ohbLN+9+(+;_3HSvfJ_aX3HNDE)C35EB!P+uI{slDJ}(BFtj4_umtOoG z)>{c_3*%eKlV8eXcq;SA@K~~P&R#n+SpDt?Gj$c`Eo|a2N7KG}GX>@(34pNevdtp_ zP$VsSK#Ikh`j&>sS!%FN#${$orfp9A=zJDo+3$G-&r_~%fJGi_`z{@fRqmhqvy-I2 zTFT#^yw@s~(^=`4S>aSXV)4=w{t#UF!BUncNakuiBsUi6!0IL0EX|rAwT!K}3|8Z8 zdE+$~Ypfabdn!w6TzcO>SKPZqY{{b#D&&n3b7P{1%A(ZyQ5GF|Kk=1}$Ru&BTVmuRZp01`%6kbOu4aD%4 zbz=mR1BLH#v_+XS8aMpz5+MHUn>maAOTiN;brxE^X96gCL=nELiFpn{%Uh# z;+N7OVFT|k? zni`i^QcBdBDy;WuRUG+cGhaOd2>v^GCR3K4V`Xpq`Lm$ z(}c7253iQeVAE+(cu?gH;(^8@78CFzRjB~5$%F;VfeEiCSYdl#&uwS^URzm)@0+a| zxAB}z`=u-&Z_s7sTrj_mRmz^-&xNd@VLtKK?Z`P6Bi{(eEO~K*M6O*#?TY_r`c2E8 z&Wc^Nt7!2A#%{opXw}$Jkj#T!V)U7PwFo+O37AVu0vJ6+mP6Cc8q6cLsM~b7MStEd z_4aZOGNk9$1zb*@A#`38wYAR{B$mF5YMD!X4^;%ToTgY)chx=(8~ljdU`w-%`2DYD z)CqF`Q{Izo)ALU`o%CE`Lu)yK8vf{|O@stsPDqv+>$~Lar9Oi0*(5FYx!8wx^Ee=B z-*>B0#?AcRqbiObOPLrO>H9-O%i&(6WEi^2_+d;}2VYjNvMeeQijgok{^UWuz3Y-*}+$a#C zl6AgExlmyMnTB;vfGdCiPJ!{|QX$;;b z8vo@xrP)ncAGJ2Qwlg2p(uLah@`t|m8z-&^Eih>90Fx-N1}Cbl=SA0-D9gb3sQI$SVL9Glu{<@&`Yg0^3#Ob7pOCbPsE4#p zA$n~|k>Yf>*sm8QentHSmvC^=0;Kwq^-y%I`6P{R6e{4kIUwM{X?PZU^x6XlgT;U_ zmzUIJO=?qlds#~Xb51v|=eM6&|G)1T>P7r%RQGtPh zfz-p;@BOVO6$Mn3CB?s>whKwKy|kzi0?iF_95y|A-$+yw5h!-}=mW`^SgH4ftni z^pia@dHKUd4e#gJM=mB9xF>N|1gw!B`CJ2*Mn|Tm+&D+tov25ftl+?;inARHm3)T} zp+$J&{mof@6zp2-at+n5ZMaHxZ^rNaBD1wZy-zF5XKLUU@q+!D*1u;!VCc6@E8G(U zasrFSa8yb!wqio$OAexi5{Zb>saV#G5lRkDCh8#yYJn)%XgsKMnErsmQ*q*+)sO`P zHxFQwAyDo+cRIe=Z+|z;2#A=+tIBW2yYKn-(01g0#fO=3`p(duaY}?eIIsQLt#6F1 z?O8;RxOH>!_SB8*;J0I11}_esBai(QaqIA*-*Y8hF)m>K^!_%vAIr17Z0fR`bF6!i zZ~Vtm{&%?K5#9bj%Xr@Ch?~XJ{nI#S+@9RsEEB74ct?)SsY^Pmo} zqQJnwz&*k1I*Hn)=A4*J#@udZzq~`3imi3?l+xM~{qt@B0oEUKIAUQ2UwVsNZ`j-4 z8n48ifYgyF&0wEf({*AN|6QxD2k1Y___49I$0@2RP(`nXTj<>NhC3Bp#%QZv!q(-9 z9Qm1J#lG1;*`1?F&ZDPx&Pw6!o-R4RPwhtQyY`v#IpEWsnJ(nYxgG&^d%dCfBP9t% z)6FF60U#h1BmzuBt3-gH*gRau!T6`rsJP=Xqf1& zcWO)^>cidx0|Nu8?XWNkJwh$)0cyhh)JHNZ7Q@NBon$7)={uFa!gZmX5TevUrubf} zV_pFh44U|ysEERlEHw=P1t%edeXuB15JDs-V!0|?zeq~8=4LDexfs_r8>M>4g+*#- zZ@=Cf_Ntt3yZU8BbU49nDxU{|){2sD+iX)`tv;=>zQHS3yWvf^z{qaEie0fV=8Sn{?A&%0X1N~O&2|9cgi~Op7Zg$LM{7O zR_2D}Yu=jAs%yd}O?r~Gp~nqjo9LV2P$qheh=J;(3@{fZkd6qJaOR32YW!273vxpJ zMT$qCB~n?}ID)WsZCQo%_8V0fzKtiGrSzK^V5V0Z@Ud<3TUE16M%zkdDR&q3Tb*GhNilqFo1&Vm_vATkft8N!Ij;Ik~N3JLY)8bmc!PH{!S3{=8m3Ep7kn3Un_ z3yK0DN%|#Wa+zHJk_&`jjJ0L)b%Bbq|WNjV#2p zWx9u+NsQzo7`LCCV+?_7uNa?Q?0#Z=>FtBV=T9FXRkX7|k>&R*HBQMc1Bz;hB6>i* z!gPZPrhqkNqH>xRY^#zqqFKjAU^y_jDDrc+A#5|;kj}Sc$>lKqP2UMok7?IP zF%M*`3Y=vrJp$sSNfCh4FtGrM%T{9+Qq{lnqmbpHNr8cZfpq++EYN3@r&_WmZmA|e zYb?nono50{vPJM|CZO-Y7dtRa0V1&=!bU&?u1%O~FbLSf0<1~KiLx$zYD_x%qiY+b z<^c8*1YvkPq{{yVaQ^AZ+P%Efl<~ATYd1ju2~s)WKwMA{!{Ima4pCr5GgN(rFoKd| zo`oTyCg2jRVyKl3XtG4WWcMuZB%^4YO5ppJx5#E8aq2n7cuVNQ@j zR?wbtsD6U4_l7|Dx=Ar>ZP2BG%=rFvj3=KB(scI;T|tnxe&CQX^nRdUJhdXT4TyWh zqlH%QdduVcqTJa}G@@>WNjwn+z!G%H0*Edx5Wq7jVri^dVb@e?V6u*kz<6L3v^0Xt zYtc$9C6mW+4*ws$IJ6BA5)Zl+CRJGfzon+AUn;e9{p{{)r|+_&2;N2{zJcPc$vtL}TIu0|Nv7>XmQ8^A){&)za*%U_baAueoYt#)d!HP%vf6khdb=@&y5{ zdg~XW|ErM?^)jJ&Fa2Ga0^{&e(UAn7EMcdP`BoqB&CU0y3j#gunBx!7xG~lmfT~0~!i)%`d8&T9+hiy{8N|55z-F5;D zy2S48h{D!d`!Yw8)L{AYkR!mrmS7pmrI*sJD&@U9wJF*Sl<%u52SM=^c+i(gH*a@BzUp zfP26KybyB|o^U7(NE}E43J(fVoB-|1J>JsF3zQj>>@q{asICz~sh z7&**O6N@f87CKoJOdT)^rPn7ny`DQ3=xUQ+z*#@ZC1>4Z@V)Yj-Iv>L3%qjyAC?64Q*1cC zzcC5}z~03jt#z2MAmp)l!QOP_;SwFy`hwTEw~w*s<&0W@*8$B*d#>I)+)+4{(2MkY z>cglXrwR@v|KFV4MilZa8?ArQF;{!s1)e zIDQknv(*zMFy4p7hUeRXzwMscW`h+kxDhdFV!PraYQP+W6E&}$x~ZG~R~mr)Y>LFS z_xf3leZ}rmZ@X5yW4kJ&EBC0Maec7C0Kv4g-`nkRmvpYo3vMI3%N{$^|BI~F2RAl% z<@QwSkI;&_6P@mFXvU>znj2+NLHyH08FXk9a|E+O4XVpgiq}zj-iUQqb<9Tt^I(5j zSXevlZ%5t3mRdr_OPRGN4jYVxE6L+Z)HP(!cVFBZKrB24_b>Lp9v#5UoNeF}Mpx@| zz3aU~n!$epF}2%!0x-67c8`F^XQ0sOzq|PLS~6yXk7Bi-(2~Dwjp`5&F-sl0Qs49k zCZ?T_BJyOVH#2nO?>PCU!1#V~htdD+?E`@!12?T0uU`>J!T`jw9$+R5R4Xv{kzxcgbI`x9te=_-)}sHK|zN zxxrdeA^P&JVg}pi6zCI(YrH-@k@O36HM9Mdl)J+o%ob&i4HS!-8;xZb`}QT zy`sz16XQTA&=GSZG&7$^;yXz>m`24e0;O_+l&p@~pfBFL@8*A3AHmydSgpO75&9l4r(L>iOHCTfng{CbE8y+`zq<|>j8m8{@0n!|2emx+19#yqglYm zhf0mUC(UUG)!q2#%CXP;Jl)x@L2iuF!P}B+Z2`BB=KuKkhp)NwnE+lwWU)*xN*7#* zt^iYR_9IlhW3n1O6HUx9kLIEdBni*Y`e^n03&@~%(Z2s{ax~J zr@X(snLDs8;Mcfm{-|~R)dQ%|<1Cll?(uyUJ;csf2Ch27f^@jKK76o_FcUsX6e!!X z!SJsb=N(meR?5j;;4E+P;PUjef8#De&wyu>7nJ%im4z_b-D-Bk?cM9l@4ICg5V=Z? zUqmBjQzC(B3eH{mn965$!A8#R2Z^f|kdtMX%iaPRRdvcmx}+vV4S}z1{^CDAIC`=j zkvLXks%Bm$I`+{%pjbvF8BRp?Q;}yGurbetSSb)oLUS}s(ZKQHS+X255}7C#Mu=HVl0-(>!gj) zd7ZaVhhYH@f+ciuQyy7cuMhBkFt=mS(-h2NnDCXlWCoa`=ti z0hU!mnA-dgN!x@1P`1Vr>2JR7*w3Ii)RjC5;)%re)a$GCUp|rv~5l z2B4}PVsjufqR2CfBt#-P`3-*CPUjlSsZnQ7BoXZct#@ZJMV5Fq&j~etV0%t>vBR?V zC}7xwo)SYC^V45W0D4pWC7q6s2CvnjyWy`ilCUq?qibQKE zzDGi;zJ(Jui+?i~S_-?*{g$}~<1!0ht1YM33m|VQX0>W5LPoK{zUT8mm3X@ZvfKSB z4c|6#+svhI*G$;ebc?+DBosSMnyV(>IQBcb^XcPRew#ExH4?AsDob&pKK7_nvu>oa zN^`zQ8R_ym_Sdyfn?mMYg&(V*Z@^yecEyjd+^FA8fMeIjPWDoS_k4>cKp1N=)X9LT zzqAuBMoEEU77nTENjV}UiSdBJG%TtJgi}>23Uupda}B&+8}xcm-|1+K8^bh-!otCs zyjyrwOA#D3&CG2>H3s!|`;YWb6B{)yy;cfBJ;@>dY8R$t#8)1Lp%1OvWr;oj}VD zEwL8iTWauFU?Q!1hU3ni&fBhbPpn3M!+Zr{c7ED0H9XkdaMd(A+=0Oo^vS2%tA!!A z2ra-Gex3#W%P>0(;B3u19pN&cHE^9}nR)F3_Rf>A2>$J_d|O(7S1?mdW_;#9JCWR> zOI(oIPtDu|BSZ4-dWFSuh0c%s33>nC@-Sj@9c>9axDrcgoqt7P$4Ng?9RF| zx0f}FjTbT0>g|R&u@Pcr1v~f9jqf>@%K!B(m1&*fF~CmP^O{iFnt%S+cS0hTHgGsZ zfy!GYcD5oOe~L!bCig-xwAOlbwQbN{S603+b@oKh^p?I~qN<1!Y5n`&>Q75P=pNWO z)W4HeNJLxRH17`zb#@v~;L1|NdPHNJq%o|+v0gk57RpP7>%5DwZ~M<%o0I$-UYi9! zd66a}2jrNBoLo`1Vy5OpN}{5mC;*96C5Dj^c^noIVr5(mYWlR&O6#gH2+@jrOAR`v ze_%`ZCY0EK_}-0XVKAAjc$)OgwAhF%lsgoX=A|s=`FiUw&(R_limnVeZglV zvlbIZ`fjKLj%42kcEii9E!dY&gA?o2EmxLXaJ%Q_-HG@2p2d!~vP)TtdD3Ww_iJz9 zu-_15U*PYd+m)42B@z%E4FJ^UnDqcn2VqYXbOa@6ZUIV;*U8hR9i!jna*|$iA5_8? zX#Z1x6eh-0cm^uU_D?3%upzp}m5(yK?B~|#AkW(}`YzOF?7?wwTTKP47Nt!(ckKS& zFwY#9bJx(ETkYAH52!~!`BhIegZ9LeN&mLvG4asE9SKs3xk3oF6h|4uo_! zkVqcU$Vz>me348wb)$bU|Do8HhD4WKd2}G0y1*PcPvcX`_V`MMmyT9eNKJ`^HuDw4 z_xbUSo6X)LyHr*-fcP3)od5ZGSpHqTk73TXL+HP*QI)?Atg3SC5kMTcOp=PxxgqRtaSukY_)TyhgJQBJ+*Wv7vwZ^UehO=#&XX=He;cb8h^hC1} zB7_LVU&RUJ>nK59D$o4oFfWmiaHzkWlAO!t+Mmtp>&+XKqEM|Y$HfLx_ukOfa8o|= zzwYayo};{GdLb;PU}SS$e_Wo$__{>ebi)A_zznHGua}m6jNDR7(y9O(`iO=daSweU%yIq) zC|@*OwY7{cHHmK@{qZDHUtLMQ%=h-C4GGrd`AsQZnqr@i9kY+5|M3>C7BR)5+DUHf z_-jh+aA}q(+rd+bw2Hjh@iyd3_T~(F3P^jahODW?Ek5Tv`-gr=qugkzBmoT~MD^r$ zz#q60t5A9aYP9V9cl&?M_2f4(1GuViFqUuRrwBFxAiEYvmMurAyCA5$H{6_Qgjw6L zjoMJd`pajl(%64cGflz~RS3@=P$oda5ye5Bj#1EnB1Bn02h!ErBiWVwhwoPQ) zN!7OYP-pL{4Hod<8|(%kBbl_h$c?9LyZdH@nI; zpTqANE?X7>;mkMbd!|=~i@OI9xKd&KEZ5u%2KzQZ+*vZfdvj*6c$B~dZ&7Y#zAb$L z4{0oHoXvt7kNqgo6^{P7|E6J6F7L$AukF~KJQD_!EVModygM6kT;7X@Z@GL1fN=j9 zRde?e(MoQ40G$Op8)3N~WLGnf|M$#9cYfcK6BNhZq0KXH4VtK!Ol5g2eBtQc@Ewu> zPPsB^nj002Hl=qC)a^DQ=RkH24%z@g1%Q>!`p>jE2pcl{{*+H2-i-WGMO$ZLFcsqlX(4T|Coyf}}CTMVP=z zIuxs90f4AX3?ri^Bi}&LQyQL`(Fo`E9?1fm?b2qs44s8S+bW>0f_)--49rn2Y0 zi?Kiy&P00pB2+!ZzNz{cfvBVKHQQppyCHm6yNoJy_<5A^C&{Q1B!#x4AqHqq0wA&H zt{Ej3VZ>62qb1l49KykIYTWp50I>1UV)~sYlAJ2ny3Z>2vorp)QrCY8B%}nmSv1!G z2_oh}UX`$97*dDad1e?u)6`1ySo}JXKXaLf!AQCZxRMpX zMXX3Jl0^cMXcBPHFGi8CNG=kxix)MU;tM6-)){AZD|1^D7wV#bW=M+j;azZp6^!>G%)*PE+&>AZ6w`jvgPUH;C3?QizbOE@m0RKejy zBLBkyPatMrT8~2UZS|z(`?rENshP6Yht0nEA+%Kh>(4B$FR4fW?QCTs@Pj96Egm7W%`B|n ziU)9RkdVI{g0AVm0L;}I8mJ}WOw`#3qM?!w=ww1V8blF9hX5$mbH?eZ6foCa-dGck zM)G0hCcVSSC#R-l;Ua(0D@E&)dUMK}Ky093oMI+(}F#6M-ge7;;n3DE~mf0CDLw)_wT6pda`PFp~CM-Wy$J zfSY$?Nf8Bnf=R)^&v2YBFlV5`&M%n%YcjN%+1;>aR7Yf)R8T|#6Fosk0;;&r0mw{b zqN<;TGzmy9V5RCuoZdd?fhaH5O!skvK`Y?y|D3T`I@8*Do@qiS1hWKGhrp5tI#3iJ z>9`bWsH#MynVBdy{Zc*w(*Qfa*@DHvf&RX^yM-%C=}9i01*opo(Spmbg{`%q+W1bu zMBwqCR9Rct=5kD;l}iQEJRJzh19VhP($X;lNm2(|Due_?0Q|t^nK8|&TSPzGY76kaJjW>OCdl?yW9HrZ!YHKp`)L(hU$S3cE1XK7aBXUm*aD~EYuj<=wo zL~;Z`4FJ9(Qd`QPH|TJTMaQ~dP10_r0GDY6bc6RtsIH&DDCX z)iu?#;U2?XxbI@A+nUV{E4v!I)OVL!Po3aK2z$6_NmcB!K^(8#gzs)gf^Kjpd?EMg z|1^t8X97DP%Hcabktej_0#=uRAmW#7oXetBe&k`tAiLSkm6!9%E;p{gVZSB?kemM; zeif(+LE-qjtc)TnuN^eL3|UsHJcy&GGZm;c2az(895|0EaPgVIL@HWf7CB0qF8p+Y zvZ+6LB=nsutDCIN?sR#qne3UWSCar$6Q--xgPsV$z#X-_k}fX&aJM;FRy0caGcKoI2z z64fjmOHqP!P)yDa#WYbc2_?GbK4}S~KzlVRH+CuocNunS; z3)7@i9UxN7bSPHpaXA*C>M*X0SfZ5mGo%9D(CV7a5c7IdbFp|s%w@pQ`d(hG5UgFd z8f235%e%b#48>z0YiW6YN6JP_k!sS}XIV%Vq(@rKVuoh&fd6a~Toj7wp%WH72||za z6T;8A_7C)5Ydp?o<~OwlEBL`^BHSAkcq4x)#~a(B&~XbJU*jq4?{8R>_XQ|G3Yu_( zN|l)5*N0T5+eUhEs+@;4L+G){Wc294)p3RvK2J_k<9)FG%4sHj+)vZAkwAPwumBow zb0?28TTnb(!_J$JkB&P>6!Qrng&e4oFV}|Ay%ijY5T7&`_p0BUGS0b+v_WY#265+2 zJ)hfEJBjI6Yl)p3=mM8g-g3oTO=LFwDVZT~X} zj%GXTQB1jf>V+mGAP^Mw9Ebv*>Bj;9Z9tO0(li~CPEy7R1OYrtJR*yTF%GT>1u|y2 ztFcNeD5@*u%cxf+akE*i3jXiRw$We~lUhQEmP2s%dhiIx?Hk#g%Bd3P>*46j{PLO5z4*HC&lht+ z1Oa)_KNTiD_EE>b9pt)|&ud(^AnTta@oYFujpULv(JkE~ffzt>g%m}_c79+)C=c4Q z4oIX8t$P9${b7Ehgb+<%|9`7n-0Gtq=8Q{y>dB9q4fyqNMHy8~oVqx-7i-pDrLOik z?WDC5(v%)MM$9D#EmiLw{Z0}+XV-E{x13BA43%{#Kn=;U=ypW@otU!QN#v*^XR4bwlg;}RW-&(QN#de; zO7VdL<$A+*001I0cSQgI4q&#%?Ek(N*KU$TDN9cA@a=X^Ub2!lC2yXV*LE=;xr2ut z0`SQD?xDw2y1d@a*yVEfdYgfBL-grw2g-~`;H>B)9;%_7#lN2|6rvqHm<_KXZA>Jy z&bG;tKq>$LW(2Hg3;^!|-hJ=x?rv`PukG!2Znw9sTQl9>nq;-JZMRl$y~|5rwvk9N z%8H5+B}xz&K>>lEARr_DY5`<9fIx^s`~(rih5SGOMPfpK4MDVAxO$bd`jA2y=z_BhbrQXjm*a)ctpdpFasW^8^y(>^0<+N3TCFcD?V>@Y zB2Pe!U)2#m_gSiLfGzAF7Sa-L=+7k0s(EzInO3joh}W|Ke@Y-18FZ>|f;r8uV-7v4 zuw2&W`z_FG-s^tByVZ{@$VeNcHQc*U3w4(EGB6_Ye4XD5??9ij>}MgPY|r!JH2rX*wM<0c&1$ti)3|CEl`w$ zxG+d@D`c4%B8sAEE?l52?K>Yy#4$DGvzqkx54LG|su=|PYHE&ZOswJTbFp%~erEVe z9H!wH>#%3rGPeEm%J9cIv%%t8&leiHkBahwR}ZBzKoi||O{$JojvA@yy0ZHAt$zRb zV=$TMD8>WJx4(V3;<(Zj=jwrdYy}krHaI>oxmfdh_9rh^%*vDyLiZ|3sUp1^< zz#MP7=Pq}O=efRZ*2MJZz0TKPQvvyN!@FF05q9=q$HrG)PJ92QvrvkFa33t=Bj(O{L0ToWKHRLr zQNM@~m#zDqfGI)V-&2?uAJJ#2KEI{FEpvxYG&#G&d+rvmc~V44NrDs_EfbSdsJBv& zOIo3ykpKf>3eP6W^S>hgEJtVOpp?F<_}jlgRO~a05J`%#!tnrGg$k*j+>s?{E%gv& zJYEvz>BW9XYAO4=KOl;IahlKba^N-lJ1iQFMpt47(eVk=@$c_!KCJP=daeZazq7Y? zYg#Lqb+oplM$>@nn00Ud{^WyR_vZa2X#0Wk7O@8ei^W0T2E6Zy_X{O8zTWlimH7a_ z^2UUjgNwHwt)T{Yp*o?9uU&&~-E>$gR~Ibizn&O?3NVw~Hsz;^C+{|@c)(lO~ zisy{<^`wKh=qP`{@~nP|n+F$hcpcY9a!Hk!er@=rn2;F%iZ_xVdk1#b|9VW-jcVLq zUVx$SvoNEz6WhbfK-h}R+}l^!rWV-1pc`V&A;N(0Ca}#oXIE+}Me{jVYL(mZ2iV7S zcYwpLe#KbG7hCM0yP8)uGuj;#_qdZE&N>I6Bf2&nI-`~()kx7rmO1NrSTEy%#oNvY zjVlC^g{M=V9X*I|CV6E0c- z{zSAS>fImXTXnJ#ah(T*oUg%$)<(n5TCI;^hXL)ib_1|0C+m;V3+~4C!MGQ^zH%wV zfv$R(P^B6*YqN&4Vh?9Az-?%S2rn>V!0K_6@qg2PiW!G16W-YVd$0WlJbm4!+TXp2 zvY-1ae8ReT*M%ML!+rH7X~R^Gjkz`X5mosI2;RV1f&-VJ1wAbd3>0Yr=1RrbTvbiA zRaw!Fu!bm{N-!Z6BS~wEY5k4HGKRmi6V;(9o)0|e-+ zgRk2z8=F_s(BZxF@?`pOaVB=owTiQxa5uOcOg=N^A=5rlqB?DHC$A(>W_#aq8N@#D zQ&r|*Nfvnw0}khLfpHPGmd6Kj$=oQ46Qo5xeGn{(qwV2@BZP$!es1_HJxjhMRd!v@ z)nL(arAG*6x)Se4LtnNxO_cZPrQP)RGipt;wM`~Z84AA*khP@y7I3V^B>yJPym8oNJ&dQeb&^U2b;4o>d<$0ZHc&tD1_a4d+aejz>9@LuW~?;4+$B zMRJdU6$r%%$C<@gf~XvSl>1P%X9|e05==tNGHwb>h;h&F#AINMRP`D)k<)ZYr)vEP z!1?K9N#XSEbI{ivVV!ss4jF(XYvSc(Jl2>=g>e<2E*C)<)lwNhNq#!nX7qhD9Sg#m#SZu)J#NaA{t1khDpzif&w6+~353%Z3+ANIETe5!%jm z^QCMlxB-#z@0>9j*x&|!hVqwL*cPGM$K++L}Q*fxx4 z!jfW~^E(mDUCUMdMXC`MZmq|FoT~pPJq-RWo^a#szN;bWK9>F9%mj4H?!LlTJoH2A1Ir)VNo2wvg{aOll{+!GMOm?W zmQcxx1Ee)l&Si!5MZ1WH&XPDfxQ#JFT*wt^;xCSN94C)<;bU}p3|Dm=7QSD3CN%E! zXC@7c%!D>CCt~8(z)q?+|#W09kn?$$8{HM zIbL>i%?^NyrSye``^v#`tEGRz@7MLAz#Mf1GHLA8Ba2D5Ktqe5Q&H$}sy<6P)m%Dx zd*O>|M?{LOktdtFB^fw{cf^(Fh7?t)n3d`dlj;>hsTzO6`Vl(GVs+PkHOXJB3oj6c zP;6qv7%|U}YP;hRzoCt0@a-fj&tKa#udOd!rTRW*bLoEn(+BNOhKpo7>4V#re z>f!w!Dq`4Q-LuBBm)5w&r6l*tqu*-49BBn(9)WMEK0pqxVNz5JVbS%7<}gwfLW~zB zOdvOkps$;S<~3~K2tZT$@IF-5WXn-jd~1F%CWIM!4$jG|%gBdvlYagyEm572(V?fq z5ke7(YX1x6@w14O3OoYkJOM+%SZzuH>eG*aAaMQI~Lgq*8R|Nk&d#CNVotQ(b{nXSHo)8x=TH zF;%`QCvuT0j6Gm{VA3$-ym$v^_{6Vyh*v2Ty*1(6+gj5C5x4Dp_O1OBJ1cvK=`Y3C zcDUW(-M^oDCD3Yvv&%d`ePnF{P=z<^3xfS_jc6WgerW&8d&=eIt7-Xr>0ei_Lb(8uP}d29+3m%8EZLCPGN{$H<5Ke%<}4$Q!x z`Pc+*sJ1&y=aiO55@106FprixNjPeo)kOgd}U9G_EoCv4y*4} z?REt2(Nd0o_MvZ27!IBuQ{eTw<&yMK!-ApoArnK7hqRvW8?<`FsK?C+kPBk7Gw;9G z1wBTyH@V%k;9pL&x>f2jx9!OeY+SSTt-`?`+PRTs9$H@L#J{Pk(+~h+q$rTo5?B{Kok9bn zTHGsh_>V!5*;v(%n_scF*7`c!Dr~~{w{JZUTfe+L(VYD5{Y~eQ+xi~A2;qOkW&RuE z&pm(KM~CUFPisp@lEf6n`*s>lh~f?)FeE$Lgq`1s=0`8@R!lbL}(8+7=2#b=8^YoqB&7O+(la(8rS0@t)>hus}*Hgr*9@RpS?>Hs? z*M`+QCa7Yq)JcGns*5L_$-WRoJZ|$t_tA=5TPI;q19r>F&(elTRSQ>-#!UmLjJ=$R zL87F`3rXCl(`a!|x@E2@+k%#;_*FSAsv9kMvHnT7j&K-l(D-#*jvVj<_jvddi+^#C zW`90E$8eKdQ(oAfZ)UN@jcys^0YL({SzBgfY+xBup7 z@l&&eRyJ7oFLKHXil2Kczg5P(F?tjWSkc4h*9|Evc?vBoH`!PZH;VS4U3KFPh>l2$ zwz~p(KAmO00sVKJB#hPS$!VAq$;-cp``nQ2J<>`H2wrho93J~~$K+mc!xLP=VbaS} zb7ABaI)ie@?Lou@O0sgHKCdy!QRA}X0OSZ8NDbc(W}M9l^D_hfn@8r5zGwAec#1I= zv_C;qLrlW`m0c9N zSa(@Or0OCB0yLkgkDkdW5Ds8dVZ?-0c0OHh%2qgZi-_JNvP~ZkRsnmTWa0;!>}%rI zkHEbh9ArI6l!OD%r z-!3_385feWQloS^U>6d$-%4b>U98p3qKHDeVNH1?d%lv=_|RRXaouhU#N{nm} zN@7Bf^pS(a$+}WI zJNd1}Ng}F87N-9Pj4uPay+Jv57bb^gXpBx2APduv)*wjw1aXz;r^kS>LYgryh z9GnVHz^UT#`(Wb_uug1j@7SZ*O^k%#p3jTdnJUBCy-xyj@EU|Qoxe($y@;mxVE=wR z>nyc<05o+!Er+t3XEwY0@xk1gJnJSvQnah(JOoZBoV+SRMCWhvKY=iA4ap{2X}@Q_ zj^1YG_ty2eZGOFj@S)ewk+-#t%zpV)XVs-j*}dZbk;;Nu$REuz@!x%UeZ9-6JP{?~ z{WlN!KO=%^>35s9upLTXOB-^(dB8J)JBH1vN45i^Z1(Da)2bF@w{O@CzYeI?tv%aj z*+JUGbx4{`pLESpC+1-HUTAoyWzAn%z4TJ)cr%Nl3a%o^=l6-BH`d>~n8`AS=??vg z#y?ma+U7rnA#q6K)Ok29h0Y5OfWuXya?j1FgCp1`H%az(tK-be{HMGr8M5kfvKU%N zL50*?aamy&tjg$GM0H@+MD;$1;7*zr?x`f@DG!Ti-|y5Fc|l$k1z|NWgtGtJtJu7U zE^Jr_39}C?;v}NDC9dN!c1)e7CwA3@T8<}4@fu7qhyE$KyzrLy@D(>~y*}TXwY*T07snI!BFAfXVLhRy_W6VxFUHYHGzeLfgRa-IEz!JH! zAGu>Q=C6IriJd%g!lc%LQz-U#IALmQ?RkVwmx(do3?-+w)Wqo9=8N0-K%jrXC|R`- zv@~dhT#F>om|2S5Md6c#bKuUkv!FUfNQ$fxwEb~;;$G5Mj?Zyew10{o$Uy-1^ zQEsKyGlezWi?i`Zr}45&?c+glp0u7&e-gI0sBh*Sf%koKWa9pPGOzMSVDwK(npml^ zSCiwJDVH}_SGsF>OlnLGgqF~*G_5uy;H2BsB9z*kUWOKi4!yxeX1L9P&Zs#x zzNueD4DEU?yi)RJ!bxK9VKHfmc~~!Ca%anj-)Ch#3eWV(c~{QM0a&KjawEloM&xxT z#Fxj(_MMU6d0yzLMUs1WPUp26Erp%+}nu_lPdqz9{6BAi&zmM9n% z)M8KNK?*5WbTI8ADB??VHq9380Zn<|Jhqyc?PmAPROpU2Lv5*Lv*^F)+InMwZ&O^N zaVILv>9VsPmItT8S(s7cdJCp&2wDiD*@hGqRrwa;b#^PsD8%o%mac}}Cll3T z$09HOJDWD84n?PywW4{n#fFlA> zt@#WW%^qzpCl3<$1wug$PIL4uJQW19(Y;`B^t36aktCysu)9xsKEW>H$emenJ-LV9 ze(JgD2^5~1Pl|=L1Qd}c)Idr4-z&g{Fhw9vgn}5)Pza&rlP5lujphGPGr5gIZtF;hX0|O zJrc@FD;9#C5Y1Wy#gOL2Squ+_Wi>2lk#JKZe@|+Z4e(dGX0k(t@^BI;YoAUE1^LT2 z%kRj$-y8go-sQZHw~IZ<0B|lLV>+{pQP$9M(-o!+Rfq}$0|~7`Mur4s2C~EVhY?{% z3t$l&%rDoc!|j7Le3xkNxdmqgAUR1d+(y9d^cIP0RtO(XB>X=d0{o7IS*hF_fbHfJ zDP~CLSppdHb@iMorg>51-COxowY9mu=Zb)Jo+Ua=?g)k_r^YEcKS_n1NaR04VvHCu zM~r0d*v;6T{9gRC|B+?5E18~rQF0^si2vsIPLcmeKj>+`WE%dD?c;+Jr5m*!`IydZr- zhOyNK05xEdK{*r_O-!s1OcO6bB#q+zHTodDA@0P8K4JjC5D)?Y001*JMKk~aZ)IGN z_6J6qND4c-ca#5n#&$pAI9ufC5^~bm4G`X)cJFW8W-c>x*)pGa(LAE~0|CYLhV=jd zMrN*P007wFH;n}Q^;HsMNh8lRw&WyDjkWY9C2fs5YR1Dz0f@l2sJDGPfUQz@?ToiU zP`kA+E}_C&t(=^Zl(t$qmjPxJ0AXq61?}ow(Hh}Yxml1!fI8`SS}cZ1%folA_^dpupod{ z0M9<4LLr4U1$=>MBOwvw3h+FGK?HpOd}ID2TeizP%Lv2=mt%6vW4SvXryJ)ZuI^TN zenQSSz+S1Q6R`5S30KB!vR>M#s=9odYrexSiu=SL=gfj47X-}CPGFOt7CG*DmRF0- zr#sDE@|P1A@**EC4cp}6cdc(1UT^xQ1Tfjt`iJfgPC^lfryH#TMrKZ%?$g^Lp+5k0RkU78{OLXnt`A$6lPQVV*eJ?v_4^@_( z5o!&w3;c*pl_J>tX`5n9p3bvJyJ+Otr5Saxc1=D+wY>c$+3HmjF*U#5`CKe5U*2|s z!5(Q_bS%%hGM()3`R3F&!*Z{kxhn1~X}BbPv~xnWSB`mb&5W?m1STFSZd+a64cv58 zJw?sqYg-n9(OmQ_5!e#O;qaB6DL1h3wDP<_tv9)6O(8*t7@WZ1g2O+kzCLmW>{W<% z@}K*lhF;QNqxXt|%{Exf78UChpRaty7r}np$yS&{NZV%1M|LxI*Dzyn2e@T5$ zXrW%oOXjz{B8<37({+*eI9#0?wBk9|yIo^frWl_Ro47mrUPrg5V*-yT)Y0>0RzF$r z2yVQ;+@VeF*@gM%kC=R`gwesW+Jg&p9QnQA-qO3_Tqf7p^6Vn)<+*=-SA0%^{keW= zaQKJ&w;63W{M%yO;MRv@VX|DrcHWTe2hSYOqonuG+o@?6EyBty4#8i{TfviE8JI>E-nRQN%&y#yW3eYs*gwd!8fF#r-1|X@4HKK8bB&fpTj0M%E zsZ4k7-Z0g;l-@8};)(;l8UhM{>82FUAf5WG?&BLw z*LK>{4P$!1d;&L^6rrY{B@H7uW519U1~It1_zq~Kcf9Qj3}0*`Lc`qv5wlBy~#)NEhBm@-$BWou^;k#318^m$2AOI zB<<@L+uyER%6y-q3n&T8BS`1DUHjI5a+*(#0Ey8R(saAi__6cE_K-6mTkNCD(IV@||v38bn znu=FPqH2SEE)TC2$gd+Nf&C6Hm|wd8p8*pWDWZpyW)J5@b z?CHYqd6dxi8gKgH!(lO2$g=5Jg*6<9f_ei*l0Z^nx!!=P5QjiOuWA|&$f6dgEm;?Q zl`AGwZ4{kt*$DK#8sopII>vQ*zTV!2QGYUK8}XShR^Yu|=7X#f>m&Ch1Nmk!e5m~b zhe+sQ`dWwOQks|8H_)AV1Pvv46$Kz`VlX%+oFjwi2l9a>E*hqa0hpJ3mFr+q#8`&zPSA8@+Q>~N#UNm zqj!tI03rKLIM!}ADff)=68^IC3^FDSV~X@x1%e8bNgzdKMR6}6j`J~4D*%6@4W!|1 zqilckAd|)eK1KJv1ialtyPza4&ZZdTrb{2Y^hyq0@kYU4Rw;>n-fN!TvPs8S(w_D* z{gh!&oy@&Qp#M-?*`ii;Q1r5%6BIB2)Atr5?> z=S}?c=Cu9i=cl!0Q;?K*{&>Y^Y$0kRgv%Ft@=OEcvHzvhI6)jr1_3+D{FS4(&`BE$MmDN%xb3%hkuKv_>`RA z%*$Dt%{MPej~25QWLn92SyH)Rf^NP7u}IV?6ESoe?cQ86u5w*IA9Ug;==C0&V%q= zX(&ziBfY{^xc@oXt$UEM3yRk9V>`KP%=HfT)+B~0+s1_k1kogLGw}T}G&^T!%zp_$ zmigxI=_Y;CY5__%$LZsK821VemE*tfd(2K+L$h|-n`yv3`Za&zt#-87JGET~Vg_2` z?oDe0KiT-te2SQh&%JlvmIs~R0^=66Q8C-_l%M=Yb5|-2irXOg!-*g~CsYRz;#?ZG zfvSUa`HECEOixMpMP)ICXF+_K-|%Fo>t!<9%XS5WtG$XW`xnuS(j`wISZ_8bI9aXp zvV-whb*qQ2FHe0=YOxB63JTE+W|Fxc zsqFTe51I@!?R;x>l%LevCsVKdGjm`D!@2vBGkB(?uz|bb1sf$RO*SAZ_9o?e++@Fs ze`6^nUcNJVcOaRZJZQ~i{~$9tKtRuALV$1Hl38SZVVn=g4n$_J^+^c*jnxpjZ_RG* za7J}F#*03x?EKE1mS48uw@*{d2P7Z* z-jQQ|o)6AgoomBiDvx#@fuHK>G=rdu#}(zrjT9*Yu&`MU00yagW5fPh#AE5CCVTjv za&cQ6$`Vb`?LU*VuMHB;YT*fo{CTy~8f=+)$mL{tR`#q+&+2mqF&?Ds3xBhg+?r2a z#1P@U!Vu3yJmI)RGWjGSKP@=Ur3#`C!m<^M##7@AZMtrsARY8=MHs+@(7p0)T@~wV zq^goKIHbN}7pmBNrPQ*axQ1qXdNu90$x2}26_j^+cGpQM?OTn5kG*bx-<&>+qWnmq z`0H%-g}nM$aptf(-lwZ%*cOo1L4Fc68?&gPvS2bGRHHi0aZDpWoz0l ztjervtVO@{REASn7Zkb#^EJKgxtHqNiVMgfaA+X6u$5?n3JwA2js?|5P7^eXHQ1#N zNYjsGk2EIZnlP_d#~*?_vA+Mmv%L7*-ZSTKIPRLRWqxULX;d_0aJYZg`jBa?@nrV7 z;?2))f4R5=>QDTyyOrAyp6^!jN4WTBE;{Ik#G0^6PwiBViT;wjUK?(!t=%uie7uf} z7$aZKu+!^9v-{qT=0E|7Jd1qi{t|{9L6|4nOusNLF|wf_#yWTGGfJPW7kJI}@h!P8 z!rj?YDyoqYKqRCP5O5_qvOuwj4{MK)YX_RzPnUb72 zrL(&eC;BBqM8*Y^hO@0w71iV}ZiQX)B7R8!Idcu&5}e@+_a-w4Dee zk<~af09&Y<35;qAOAG*UWGEpig*DZ}`s@t(IEkeQe@8tH~e|vQF65`T3d4# zCD*pM+G*X6Fh2hk1|L*B8@{)@aH!2rt?kg(!EZgeJKQ#VdHpJcZYOI3NL&kkW7tJh zbGqw@uMmFkP3pV2Te*3Up3a*n2xAb$BEoYt-8dh;g_tRb#YuJYBZ;#iD zsLGJ#W8BBGb@o4+pCb5L+flTR`ZhJz&_|WSvyu4Kcd~cRlh8C5rgzKow59GbMzz{L z#-Mua4@}_!+w>QHwXNPx*Lx6AYM%`@)LMh}Uhv$KP;@H_s;pF@KVwU%EGmjAJPQoA zv1pYb$}>|RP*-|f!uc_!?a2uq%LlQuXG7Nyk6Y#rZ=O)Y7X>f`zJlT1?@*(LK_nC= z^i*Th9MaR}pti6u!o7lmf`Z=hxfyOaTcJ1_s#)#xcI0tZ+HYu9wqvfSEY(NoNo3 zOwFA2pNn&g?nTd7^~62x@2{$i(JeGC@H(y};`Jt4cU2>;`@Z6m%=U3{oUMCQ&JwqC zmIpHK`^DGJ+$ZWOY#-kl>Zjaw`ujl>k(QC%@^_`raa6jIsc)`+(C+cywpAqM+Cbuq z|Eke~xU2`^-W)kU`OhE|ph_^736}|B(|t9P?IQ!{{HYQ+L^%WyFfy>(+MzR|OjjB1 zZHOzTRz+_!^$8Q6MLAm?Q5v!59Ub!O1pcCHc-_{;CfWy)fBPK5Ma}LX-@G{ogoR)6 z4nK&?)|srP07ca^(NGnxaD=4ivgyL2pqR|FRgk+!SzV-Q>tq#|5shM9f`Z$E)-M3S zFDSW~W($;m(YdMQ5sisN5?u2Wx(ri1pP)f}5>YAT(dwi+Pt>?b^Y!tC5K%5ff--`F z*YloTT_c}yRoXd-wo5k}s(8U#NTvE_!CUO6;sQl8xTS*{=O+#1H$D$!waP&(wAiWf z0rmrTs5M&O-(~ihI#bI3ZsgNm;%005F$G|SiXZ`msOc4;aZQj~;ndT`BQ=DRRF+d% z78GWA$OJk@N19QiR8ies=yVxU@!zF`hwLp;nKx})8pd3NC@2wd(Lf{tNDj>gz*Nhr zu_}Q26Xqc5jN5%|g5rXL^n#F3JXu}&Ln*vnA9?fA{|1HWS&fxzz_NZnY3dqC<>jp< z{-ythAweoxdOd^}l?LDd=y0-&7kMg_6REi*${Jg?$Qqzdg#WzM3u0Jq#8C7nLb~P* z->^$j5bP%J@-H9BR#u^**^}8W{WIfqV(8qWKbc78mXQ;sV@St%^m~w68nx$2SHcEg z1;;f9IR=z0p(vGJ57t?p5+?#Nr??Yq&kSoRPO7Q(IdK=vE^2sxQ1DCu zN?XCEEbIW1LSWcBjD`>gWBU!znam0zH$!Zuyo_i2y;&E*6g-0RMwQVZ4D-p<{AwR| z8O>pM#-W=8oH#{D5EQxrq;D-Gc5{6{w`1TiIi2o*@8eAT-BZ}Yw8#km*#SQ71`w!u zup|YO+PZ??0AXNJ5b&sG3c|W7QX^RsVNp;_HZT}LFUW=Cl+~U^CL#u z{fQfZU$_v5*jQI9c8C9bAe7ikZAQtiG%h7`BUu4AnFKelOt`7TA6Qjr={Qfe=)CQ@hwgVBN@-< zI3Gcz$`hQbSl1r?p|WznnH6?RX;Jt*n+6x+pJNyMpdco{1XH|8Tw4QBUf6iSV3H~< zh%l%I0D+3K{qPKHGyzCe-~R>@rjN^*eO@N87{84>DKNKg+Qk6JzJw7-aK5-g#Ke3y zwq(JDZ{lPT1fE415f{uqVL=;@1b!QKNuP!A^x8mb9BJl7qTGu$6J&r*FW9k6UrZIph^4=K^4fQw*zCWUN&HNJz9@sRmH2 z?3V{;pltc2BeBA9*=?v@>}8b)45@%76N8ajavf9=l0+}5+xy?F zIl-A(ht}w=j6lf7;D5q{ru@?FfTCVA3kAZa8A1ZV2#OO|nC)a5LjnU5L`gzc!XXq} zSN#ylSK~%i7&d`9LmC26qc#Epa7}Ry(M|1k(qSYX`j@-sY})Q;|37#>$^1MktvGCQ zi&${1KvjAR`lRovXY8^j!xkY(A2vfkrX;gu>sWW72G{+rhvWPIUXSNjdsLnXsFDki zJcW}(KvG2n05Q5mSxt~L<2Y{GzXW0XPE}_#XrxFJ0g4(?7kG(SoLb|71c%<8O_ZF~ zl|xR!Ab&0MyKNit(*LEdHU6Rr(!XTI3RNb9obp>KJ$VR>u1`z z4xL4VtD~*0(5znbgy({9M!8r_jQN)6A4TqU9dF5z-&|AUOvdr28%?FvR2uw`&S+#C z-Sq2XQ61^~lP?cx36iYls-;?o60m9^F2SyWO?aakMNJ8Xs4S+iEGSX_Bo*slnNXd_ zbW6=+n{lpy;VsvpAHBY^Dt50Kl}<=;gsk%Fu>-+_nx&oU z2c=Z+8$RG>6!4p5B87?W^}e8h#3X{Y3%bY~W7e9&T|fq99s<3^%@YMpxzk$@{fvlx zjmDnH$WAtlX)H@YOF%UlDXn#J8M*Q|sTcZo?%hlK>-zDCGz~x&s0Ugyd89z!AVFsg zKn0MTU{{iGi^^gO&w^#-_EP6M)HZ_Usf`@UIxVZGJf{MKtclER>7gY=Z~EE*u0!s^ z7ZecJdBjr_Z%;sAXiNiLJ2_2c(qKUZtGl`*{L;MEQ+%btu6zC04A2$g%m2h_7K6ls zL?S>6;9#iQ=aGH!t@xtr%y|N>Uwq>*aSG#uiymg!6Jd1eI0j9lx zK6AjZ3;@l@z!ew(03ZFFYGlMNDost3d?r~-E%4fgHk^8rwvB{z)FJkuC8JBd_H9F< zw6=C<3oL=!sC#8Lt-odEgeX5T zqJR;9Uj&E|FhC@T0b(Qo1p>bW0Yc=D3pOwC0f`_0sq#5ys=TeQfi^u7@>5UrpkKn} zXF1yr^MOExS(e4yU~@ZFwG22Eh3%@t6!DCFXgn*^-VRecrYo;kJ)R}GT5Pyih)&!? z46B-RiKQg?tRT5aWd~(d0(PsV;`w|x;RMIINv4d2rZ75~qGBk5f{K&|P%2GQ2OM#p zXh2upYgeyxI&WzPK;nal2G-*wB0f(pNKsLbr~AG~hp|833FpE5qx7Y)@!ApTsQx;l zn$*|tZ?8WfbU{KLCjvAz3CveVHnnjgb;S1w9@=G60wR&@3u*vJ;((2gDXJi8y)naB zO$qlNdrHBzB29Q31(C06A0M$_rSYjHr2gMNBw&$}Gv-K|Bj=U!V%NF~zC-rd>?u^w z?xA;WII7*bp>TBmhY~}|6C!uvrutRrr zH8|lGV}F*G*CStFE3l`&{#eVz9%}U|11YXY_Uo|gs*L~L7?S#T21!csshu@>$w($E zOXY$pC>|QeX5q3kf{!vk?G!_z^E=v(R`c@4^4l284g)2D6tzclQam7zN$W=!>A-71 z(pV2L+>&OL>459wXc-YIakujOi+|b_ik75h1$gvK6itScbk`mEKt+p6}kaGz7E$xapaD9gwo6Y$ibWg}zsN?|GxRVQb~>Pqix^?;u-=J+BGObf=px zY-0f4G3Our`@P@%_Ve|n1^t!O6}?_n4~l==5pw$p^FqS3zTG40@fAc)+vZ5bef4^@ zy_}~@ckZy5yhDqUN0}k|0VI5LykTmG{h~He^yCpOj_0LV4P#4;oxk+8{36WmG zuHb=gtI5J7sz*v|1AAH33gTiuu2aH91 znl=^tttQ?U0UV-hNos3n|133paE;=g{opVlW)w!LRV5gr7@dYoZSx_d_0nU zITPx?wd>xcF7I{E?s@xUAGTkg&lIh_fB(Tfw(3a5>0k(^!n)K`)Re^lUQ7!A$=1FY zrmfTLVT2wR?91nW8`u4hO?GOyq+;_E#>t{1d=8G>EPC7lCQ+i<17f9tZq zpNSW_65!(N`YLeR6`sD;@TytwMObx6XWSwvs&-+TJJJa2?LwVRx06y?$=Xbs$}^5x%UYAzl&A0g=7;qs7{g`C=oXpOTu9=YDxlunwE+sr-?8iDBzBv zWHr5(g8UhfWH!bvx*V|hDy_K@wdJn@R zB=x92mc$<$Un|O;itLpz$-U-$oKM^E1@~ z?4lKp^>{nNZKUgb@VZW#vEXoeTk_o%`*ilvmxz00c!+hs=^v7%R`6DxHFMRqwkBn2 zYCHC<*C7(7jcPXg@tO}Z9-O{6yB5}@IC;e$I z=LF%SueT7ThGuBB=rn0O@84r(cZ28X*iSu4p)_(gy+5r2zP!erZ;I48$I`)hYN}Hk zuV)^AQH!W%L9xHN(*m^%B1`lBd|#1DS%Vn4X|O1|A^MV1pJl5=&i8`+77p9=oS5oO zWi<|nefFFVxqws80*1Xq?1BllU6asX5&B@D@1Uk8IKeN@%vH2vOPmH=arj0rxxUBa z=QJ$b!MuK_lf;LOY%i31Y*F3pMAc_YWH3Y?TViQ4ZnIQ>_V0AZu>Pyr$7o>}dS>6E zfy}*6f}cZDg*fa{u{{x`F9+-{U%iY4Mkmebm@m>1j1~*x@Y!lj(PdzIA!N6Z<+m{L z^w0%Mz{BmaAvx}R7vfFBPItIpS0sr$cGQ-u_Y;?3NtV%sl>x}xPgc%kCvb7Nyt6G1 zw_`UpM-Ytrdr}sV6mu-fQ@NV$6@qK+{O8v1##t+U2=a`-At}r8uZh@EtAp_ckLgPtQ#grNf{sRlci`c?WBc+$yMklxb#vt$bVjF2@DY7U z{oIk=qdsm?CL?Kmr&n79A}t!#m-?#uX_dRa;+My@;?-CnT{@0pzK_m5asSD{iurLTF zd4?#4_gtXHs?*ykm{fWkz}abjOQCto3K#Oql+NZ#*7%#QRyndIu?$-`A*{x#%q3shgE{ZDQ5D zcaC8RJ?sH{%=I4WWy`+R& zt4k0vNd8>KZb15<1VX=_TY91R$FKdkbtLzA_6Cyl9Ty+G2H-?(VLb-{oG`yZ%#O=27axwDxyh zA0}^~_5=uJ<3uazI!<%i50Ufd664P69!4lJDUg;3rbwC`q9SK{S&I3V1~bw`9#fVA zU||tV^9&qTTVA^MB(9IhF}(4MAxpu67=y#X55e26>YOkJ@nnCUZIko* z_mQ=y!kn#d8@8J*WxK z1db@@n3b_#Juy;K&)DIKNWhg$5jC6NpxY!WRb3oJ)>En}bhCYs7Xp^6ZBk1}VTucN-C**y2 z4uXgp9!qz4>q&SW3wIrhcQ`N&!x5`>P~-u;0Sq^BI|f`)^rB1n`}izHTc>*`Y7DH@ z`+L^Ye|@U}xE0G?y!g1bbSUc@ptlk{;eBJ27C)z^PHlI`cL1e8TEC291T~Hw+z*f4 z9MQ`c?u;_sAdz7!;_kQFkQ-`C@;Bv;G1NBI>qu|J$98kgT;ebch8!6VfHT!dg{F%w zV-3>}7O@X|y~5+XSH*p;eA0$pbw&yEB|6Dx1+>sK+{cqiQ*wQ!f8}V) z??|jbdTH|8ullqL_qQk)6GN-CEn+HDnkuhrTOkQexJPTp8WU$6^ky ztkb%#7^`T3f)nYX`=500KAe%Ta4qIfc;?qJOXNX&eeO@(yqTI}ErS;#&OX zk3c$0z~^JL&zsTsK`^1)~vbLSdw*zqZ>?DG2X%PO$%vHvDZ zwrOh%;JV1#a&SDeoY)_XAO6mkx?^c~D!-34LsNgFEi3l9)p`CT-XtuNF(Dj~gbDei zNE!yk<&z+a8Xl64<%EDG?Jgk07);JaQtBQK z#e9iWRc4ykjyk&k<(XBc`;Bo}q`#D>%8lm)CqP+uOVtzLs-3g=G?^2G=eoXUrS*D9 z@m+_aPR8AatxUDT_Z4@aNJ)^_qWc^pLI>LoCFXeBqYFb9U7zoYan%>`?tPb;vH}sTZ+FEL{)Y+Hk zYWV>}t=-wwxHQSWSSY$tQVMJc+(Lv9Aw2b1;js^Ov~~*4CvvZQ1F|2ivy=v6#PLGxgLcmZ}1p^Ph%TQT^pW?poa~%C|^;J2ZPe&Y1_SP+7kJLCa;+v(tA5UpiVbOhG(%|z|a&_r+@#M=G zi?!l*YB+&`J^&)8NN}Y80cUokAbZcG1%jd2*tkiaz$KIK_*aA4Sy7g|ll)7^2JF8{Ki)p%?#Kbmb?nGl@gWr-CELEoAG`-- zK*jrMAKgn&aO+;`FWcRVOSZ#}{c4eg0}v!pQ5Z=UBE^%^956}1^W#9e9@@4n%$>;` zml>D?=JqtSw`0m3jd^@o3*RL($Vy*R#^p>OZ8Pz<@9>K`vqM{ztlb6FM44u7-P3gE zK*6X+x5>Iq(IB-2Ur9Yc0>oe`44O!`kfY!@g)^Q=J~ai?OfZQ5#BGl9hf3oif`|}4 zMCZBe;)S0pZr#KXr)RE5Nod%>m`iy^gPT!~%BJ3& z=pM^IkU}SkviE4(nIGti|rt*`9F| zg@r9T zsxs;a4fPPcG%dBcsdaExz+TOjv)b!3$^U_-T9vc<>odvzLuxe}Yo=+)tZM&A=DphL zxQCYf!13<2+N_w7MgU6k`nN!I;?+Y1`Ltz#KI1Fljlm`OFyu*-!n(@u zNi-uyJ7b3f?YgTsjQGV_9fyrBWcC+%11GA&kC zwCX?S>D+NwoI0I>(&&AUM@FanisC!;LWXYb? z7L#((Bs4~a(Yr7ybd0E@IEbW35s0ESgIN2mpsh3ZF}X0}slk;|7D_R$2juKG6N;vR zpA@m=GgI`IF?LMcGuqHN${V%{KgGfng^PNnH=TSiIw!-Z%2X!-3!6TBB$beyc-0j; zUP#C9r)ZRpxk6l?WSx5mr#|5+y7$&iGkXsQ5X2z06F@!N_b?HUydgH8L=jS4-iW$> zWkg4XzEzQAV1@o?)p$x8MZk$s11w9$^zBbc&7M9w3OabqO<`C*i)vI|Aw?#(%J(#Nd`L5XI^M|DB?2rpB$Q+zoCz_mp@5? zh@pLw;SX#iIsuFni%+vsL@|$1A@fK`g-&yzxAq_} zw|zM+F2ZRuhFGs+v%Ay|zvQRxya-Q7{w2GYfi;Y6Rz5(&eV*)#BEa`UOUc`P*RB8ZD*H~$xD*p8hsB9x+xJ^_ri z#zl+J6p}$+Tq-bUe8f@&&3kkoyOS6xfH(0R(_{0g&fALo-Wg=GU3Il{BwuH&aM`NI zMQ5(#xeHf49{+n8(R4d(V0IA71H*`!mJ--JV1@J|O^TYISt=Y!kbn~wVU}PfN)Bf9 z;+C(D20{eT6-kbBo#j+`{Lk1mMPucLR#nDjOuC@7;G&9#vBiE2fHOn7^wbY3RRosL zv9A<>eG9arJQPW$1fzg)CQUXRN)uH39AI3GB+xWwsRR}f!GO<_Aq4cPsjBKJDh|kO zJwM=Iy@F#*C9wCrSiizNRY0|f5F$hm5z1F~yt6MS3_nwYg>tg@KfjE|q@OvAMQAc? zeWSZRIn?K_Y>sEs&O1B4(OAy9&g7SjsTXs3)>dwaaYz=~<&qd#2jT!s1uT*QkE8|V zVQQbt57Qt$xq#Qw;y|5>5UJ>NeE(04lA=Yo8 z@l!Y@PUNWpm?XyvjbWBdU=0!K{pbROt*A9YY%;Xo4RE&dAJ;Ff;4ZVSZ7?s7@egOcRfkh*J2S0RSL6SA%{zSePvvQ}%V)gh_U-KP zG1kM*E8yjBCxt8h|01c9_)DO}%N)41mC5BUxFc79I#);GHuuvhLI$bkSNGgG;r_`r z>nHsAKvsnCb=MtKBi$#BS=;0QOb`$P00sa4E}s`(e2QfRULqngDfc!m@RBLlcn-c55Hb2+~@$ocRh+ zYKrBp4jD)TYEa88FDFUX%F29=(aHomvF(%ok5+IG9P=Cbv$UE9hKYLH0$p|zR;VOha zfP4WEWI#oLFCu&cC=lboM`VA(7a^pMM~mOjS3gn%eREnIm7)6yKf?}*2@bms7y87t z;Hsc+u8(t`Y9=Zm-_G~w9wuBP+QNKU;+w+?)v8gN9G(UX1)vh5OaP8(Vu@i|97I78 z)MhO$76*il3S%zP^Boa4N4qLG`!3{H+=^DO;mdmIrsv;X6p46bywO^0vu5YS`32v% z+F&_?4(ZXhP4x|&9{{?9RU@Y|YnUVC#Ld>QE%L-k8Jgdw6|2;f3w4q0g_K)>BtzT16E{3 zq8otx5E}7hD$v#}>TV#ehH8vjIJG6hH#A=wNvZjh3(E}bH5c$ z`%!zx@rt_*H$L6oqmkhm?o?1m@x9ASH;2!ze`cxz2_#FX2B3-!hzUrE7(YO{1gxh; zih`h<&2_&yAhndZE-xI|r=3(PzL8g{3+yXY@3y=t=1E+7p%vKGksUFM6t;KdwAm8d z6Uq{lnC5u)7H=?A4JgM^I&4^zE~W3DxS8GWS7~ACFdL&fg-S~(;avYTYbX1wRzUr{ zRD$lUtbZ=1ov-W_q=cVvcWKv~sy)TLC;yE3O$FkHW3n@$?ia?MCO7BUxa>OHH$vau zD_B@cZYl1++AFbBzB|OkxUX!zoP;)Kt7@`>@Ya==cs}j!{byi-UX}hcQhz*ZV^$fl znz>uvKmCb~SGd}y>S`ZC|9(4J6IEBHQ-0khRocx@*&l;S&S@#HfhJEL{s^Zhq1Og+ za#UiH^@Fuia9?LuUF-u(9?S(fn5o-y)l!(Ud(0PDtXT2Wr!HU^-&MZD|>~ zUpMzK&hcozEIZ{d9?p@ZY zCOOQPH&#rV{I6deIYmf)&(#y9b@ur%zMH$%G(2$>$ISjw{)ts^-`Kln+d@uWZnHq3*IiQMYHM*(g@cuZ)aPhK|&68rB)tLhV~)b z{>=Y4A(g~6#Tl-D8H2e??nO0#JQ}X^j)tH{ia9&sNu))?JsrKhu_xZarN!RE3jOWP07%Fmy9N}5EL z%=oWlsGjIcd>l9L>SV=isO@vf%~1k~JddZ%U~vQ&9mn4)8ulxv>ALCTTY_beUu2c6 z0FQzGv`#*;G_j;uzKG)!l)>JPuOi>|SnXppuaE1hpS?F;3LrA3>jfMC&!10!Tv};N ziNVxiSJnXy0u3B(T^TQ6tM@JXM{GTT;mC-bpMT(@$lor6@aFl8bmk2~{9i}OaU=*? zsqhg3kgN!_m5K7!=?5rc9vaJHD=(2PorCD`rvv7aQQf|cyWTG_Z!l??Z{#?XCwdli zNemkm976f(1_tYw19#-R_zmmOncL|f|blBK2mPGgM8lelhMR&Kk0RE`rPd@(pe@3|P z1szLo#DLxhUt>{EbO+v2Lq!gfAMZz;8_K57tU6ZbfX5L^4A^qK)n9;>ske0Aq&ak^ zEC#Es$7|cJGu~!rM&e>2K^A#!*N$Ji-~ll8dQ*G?zSjNozt2qRqi|sfV}#7C@Ay7; zp28+v2aa04h6uES{oH(`PT@hXW<-@6G<+xcw&!EUSw8;gS)al;-F5*3mew`KYfT5| zyrmb;x zrkeyVZ^Y2Wk)FkCIoyGj&A~7?wMuQb!Rj`J$<}5q(#4(X>-ux;v}2znw0`So&)j*} zelRHpdUoPE;`iLhII-~&8T&rWxwmE${E0UV{0D<|e35{F=Zt^L>c>>%T;IC*uXkhJ zlHhO1V$1sUea+Q*k}M%b^H^v+RwxFct&&6*V8m27khD4vV&cZ=ymn~Ba4}+!7`Xgo zBUY2tX^xrCS&d_8bOo&y|8wmrVD41;e20IsRxVGiGpK(VF(u;q*Ce=O<%v!1AlYOMXeONq^-ezonmA40B$hdDdlM zIPCm(ihbzpBDd@PkDuset=yfjgdumxnMpPf>TL6i9Ar{C8Z$~nhp{6|o?oA5Jsdy& zx0uHoAd3|6JO!djiWmUqftckMqbi2*iMW`QB%F77NFeSZSXJj55hh-J2RYMqP!h@U zs-@RGgCd;uXt!F;=|64QKhWZ*bHj_f)?P9R`nYtUq?qJO4*9oq^o|teIgAY$- zFv=2ZzFsV^To_V?Sp%GkgEW>z#KxIs_+C0>K&OK|+L*%#YW|NCF3OUkEb2Y)Gk!r6 zNrEyz0~0I>NncVWmGa>TVHgT1r;}alC`3WT${nZ|6@$C|(5cE8Xlhw&YDy}stawP% zHu}_$5=h)Tk5k2;%a_W?x1k_c%=_{Pi~QjiHFVGae%Rrjr>3P3=K0TjOMIzxqx91E z*JX8J&lmL0FWD&r{YVdlEc4Y}$L@E_%*f1=aH3d1d5W|miq-@eS_r1V63JP3B1(}8 zB+L?!$rvv>Tep)}mG0z6zGYY!2~hqLj+bm01+#`Fts@|)A|UBOvQn9` zR9MVl(lF+3eT{g8@?9o=l}`-j1$AA0+`6=>c>cJ(HhVx*JYqEAGVBjNzKi#hyr*h+ z)_H*#!_@j(!$;!JN}Ix~w{N+{h+koMXMDD(`)=*Mwl?aLepW)>(@fwb^uv}9Kj%Lx zeCD{ZbJTBxRlVShZ#M{%`h3b~GJX0>0K{8LUW?2|upz#Gw)~LUEg$d2QJE-!#2HE{ zi4;*10f-h7E%I22N@(FZPcZe(k|nezo;bEBrjB`lXcW92hh=?EZs!O(ZGIGLa?>ae z_+_dI&ja`6SUMJ>=}`tp2$59UCqxEJfK}7TG_2tUTDjWKZqN{n7$Zji5hT3l{~D&N z6ydVs=6tU*XhoUm&(062F=KxkdKLc{%LqFvTc1A^;uOj@bG3YWQD-;kfNU3ajq z_TGAMRl4Ejfy`7!`Z=hR)?@oQKjRJK%2sHDK`{;9hR)K9Lyy&URiE z8?$-^ycZgxDMU3zY!LR(FE>pI2yfT(#n3-ZzaPw?vm3mlHN2KMRtUE4T2ehC`?v<> zIB&TbvG~SbRpzvI*|L?D9Ye3^G*spxte)hwU234o{3(u26L|q%R#_pn5<RkV?H2NO2?`=yBeR^VenFl>_~TjODV~+qdHq9x*ub z*@C=E`+|X0xmMlzls{QMYxAnPtyx60tVK{G%9R%S1X@3SCcU@!Ep*egy1DjkCN(MB z`757lQHXj>FsfeC{E)Pn!*Cht8d(fDKB`}e$%7S8zLfC=I~fnKL-9~Ql%Y&0<6?ej zhwY(16dxA%+fdhVe^BJyeXY1BxPdimN*BUV^c^p-l@Q9yxR$5%KOWaxf%PGX*&6ZTE*(x3@N<6Xp{tuAk1PEj zlw@-WjwgD^gqq18)y^XkYk=5`2=Rv-7z{qq-TyZZ#|D9mx~fj_1nF)RDnME#G* z++B)#2l5APui){hoNcDdOzt!MeY<8oOJ8akMxJ7<*;}t{vDxT^tuktZ^xH4tsTX5n z!V>Rp_rBs{kdsvp68$^{X$Q~q-q`#r7WM&*xEKvB})KaIYgmEQwB&j zCC+(-nGKeRp_$?$ID&cNa4YLJ3xuv0vz)c=96bzUAG0KZ3k8l%IOII*g%Fw(q)-6p zIA3CWrx~Y*>rou87X)d=crZJkICOxxx-~jO`Md|lm%K_2Ro!LJhNipv^JYiUfb_@! z+>96_Mq2(*F2CZ;JjuWU_NjJszm3fuQ4Ks^W(H}x+}Wrcn83Q%PKaK1>{QZ?b;cZC zk6>-`*8c4W&tndLhc}N|7rA|y zeLQ<9)_O<&S9@>tQo=0RQqh97f*+~rea=^lF(hBK77n6nh&^8`&BjjG>O~GmO;kf7 zZn;3XaM*~fSdpiQfwOpcUV6+4MZi=kVg#W5A*4YS!$?RJB#g{5LG0A9Bn)j7M?loV zT4wh?QXgodVZ&4##EC-SM6xErkW|Vduy9Ff+oa@Nnk`R$@#V#@Q23#R_k|XWn&%fI4?pw={mQ_#ZfaS zM5VHvRcOBCKui?OvuFZv7)=lBARZ^$2uP_InN$q%;>g|`XH_~^mwj3XO2N-87wrW5 zb3XrXXLRfQ6)-w}RcFZamw=Rc-hs=tLZVFy?91B2nTNLI_lu@GoMKdeJ~|bf+e*Zy z9JlKZHMzMGUmaR!lYiUtHY_FI7S)vXF4aTpF5%*?I-rKKOapfSmWKSUfxJ({bAE?E zLSo@@1(bX;KS}zM70@_wCbWS_Q6^z57RgKqrBK7PG{z0wlNi+5)@|`5CQ{8;pEp9Z~+>p@dnziqRTE-EWq2_46LYbk1WwT@0H-oo%7$5Y> z3g7+cb#~@=qbG*`>}jUVtjA{c39dZRe>CB9WK0%BfW7QDd$R5Zqll%7Vg2X`nb2mN zvRft7n|?aa`+30hurVQN3ybHj=Kfw*Y_&aX!ZNd4;moTFi*N9#wVLl<6CW{XJ%3j% zgoa0-60}@|WV&6A+5KvwIXq~;d{{=`H#!!W1T^Rm?|2XGi^?KMkbsv z5}%15MrV}V63tO|1vj56Nh^t10ML_AECNu)wsJrsDU)zhDK3@l)UYHBZ5Bu3|7wr3 z36?gDs7Dg4;i^QCvob$xSEp_6Yqwi#=T|anJl0^H;I~oy1K4|A3pOxNc0><+U>Gro zkELR;8}b+wRtSI92jgF^rAcMmMsN4E;mNL}+U;e?oqv?EM=bXjQ4XyF#l896AN1>& zeP*mCv4rpm72q_Y7=dJoWeP-iDpEkyuwjHID|)d0ok}Jw7ir0~W5s@v3d zi(&>8u=!5RoR9Fee&*OD6d+U0#2L+$SW6KS31L8}hEM_^RdyDN^CSi(sga0D8jX^d ziYojD&h*0U%ywWVD{giAW)1O@%|~NDDnfJm=OZx>{yE|?m62p)Jp%1Oa3_ffDv?_0 z2_l{sgBYFg6@AsqraD%1d$-!}5PKaZyy`IhzpPdN&`9ZBnNJIg+hBFs| zMQ?(pB8PDdoEb?};EJTX0pfy=6R#Fbs=uP@T9$8*1m2EcXq~F(jwS~L^?8|SUzCF5 z!T~8H0T2Ri7yztFqD-Js^W|8;aQsd80F8x~Ul({({gq{uAQ4d_h9H5UPy(b#O>9^i zsuly{OhAeRrCLhkn=1tr^`&{!8wjR_NmGG9R+9&S6X3nXV#$$tEU|k`dRz_mb3#%B z(Y*$v+H!`8>(m)pi?b5 zlnWIjElsU$m(9ggwLz{4nDf68Bd%*qC{ZQCCA1{bStG+!`wZUcSIE1}?v?UpoK-7M zT*rZ61xhRciG0M4cZe}Zs$3f7UmTfktDVGbo=2$Sul@GT5$S~NQZj{- z#mivBk68P`s{idj`$3lH;xT{f^I1wdI5MiHvX zx;(*?lT|&*h5iP?TqP{qW!i+g)9TNTO8haqw5&2R{3H{Qk|i(&flw0Q3AR6fl3Y%- zFfdXg!7poTNEbMjQQA^9n0B;%BE4n4>PPBSM!~ThBu)R_a`P49t5#JaCl0VF=TEKw zB|-I7w9ZosK)(o;)q_M4sDMO|lUG+u2qF~t)Ht`%FHV&NjCbwGXa=5k0_C{b@D`C* zIqW0V*6jP)GR?$=`py4=63&MnF~q2&d*Ts~81ZoNqZZPQ};jE?cMIkAC&F8?T#E0(q|HPHzu3OTa}rayObMw zt@xz@qWT5x;sAzb0BA-4tiS*x80vE+5hRJkZfTOq-`Z?yNgOq_;n0yYk_efkUfL{W zgN5SM-d?t$;?&JOZqnLy-;AKJwXl5U14PtH<*VE?YCtP(Ir&1l6^cChpos$(WXMUm zZAwxk6KazHkO2Ui89+3H0{8uY-*fT|T11O)iwBQ_$Sh@^oPK*$$GB?1J9AOSuP@Ij12L|^<14oCVA*j>vC*#H4 zk%*kcODYyhAfR<_`%qW4VH8W;(RQ!i~Fh~R-1){uU#uQSckJbqnQ3WD+{s?cAfe)+d) z_k8R*>YhKbXTi>TJkO&vDs5=H1i{CnR;B}tH!-bUm6i~EzA_?c*-I7bh2E~z*stlZ zm+wj4M%}j#pE9C_+ATw81tV{Tq?sNy;y^-&fd!f*O(Nh(fz^OUOnMYUi!z98(Ys)4 zR3mvQjbajbc|fd?wH8B-LXKz(1}Sew!Rj!gEY_l(&bwyKce^JIJhIJeoxEFWekCxv zx06$;tqc-G-_G8jd(_qb{(CFM{7p3Pc);M|`jN7utYg^qZUwVXi395zC8@CV7)su- zX20UjzPHe{*n90u{D;0cXWpx$myYa>v;R&fIR0kQN#lWht-SPWNsc4T?z*?Yt=iNO z!apCUc8!dkwPc4mnG^)O?ed`3&5Rx5>?QYwbtP{b4Cxz(aWB0vyZg7QCl-!WQE@cAu&x zRA%#?3}!Bvp`=8(AomtY$e=NcV!yACJHB?tUXFHFM!&CyjzGM z-qDWSLrn=IW7Emk*unS!^CGKBsuZGX0Ei?-0YPY}MzU?fN+{G6Cr)}=xQsdQZFe5C zQ1!bgB&}ijYEu=&vI_palIBxu zI{HMJ4(~^u{|9>(uFdRYHhnkt9zDAN2hGo>Be5l%v)>jYG?Dmvo=NVWQu9msEUpvN zfrx%h32y2)yw=<28xC~yOcqQc}++h$kh?T8Xc{H&xFFLD-JI!gVH@#`Aou+C4 z`NqnJas?tli&>dPPa$9lD=@&nGK!`vDI+6y8kcyt+=2K+?5n8EKE0731n=4KLVC~` zcq3aHCvor8jzrR1&XLkpFZ)_4K!h_;0w4@6Axc1xlqk&0l4MCx=9Rs&7iu)`ySnj% z_&lLv@-bEoGfI#f$uTd;ZAuTjzY`4Lc96NIHGKE_d!%WJfssbi#1->5M(@=huGo?aTlC^D}Wc(zxNl4}t2_ zuZ{*7q&VJhU{H$VO3+)`R=&Y8R7wa&gOlyx<;E$u9{%H@i3KqR%dXR0-CyW6LVlxiD3BMrtCbntc>vn4=(>WgGp7^NZ-(Q z!uV2qJfixlqd|4NH}&?$ji{LxPSmEM!nHZ(e;=yg_vdU(COPK1hJ%P+>8GRW$NU); zQ}8u5+^N^LlFUJCc{UwAnVpiP+|TT<`eq*K2;(GyzaXecm*}4OmhN21KU%}2&hhEt zvj^I_1Y~Q`IU2HMlV?NcA)l)#9)4Rgyz& zuq(Id6wLjRtJ1R9W>}5OE3o8BUdDqe%rS`j{kiK5>XV`Y6&%6TOt7!{d{E`oZfIV?Bcfpz8`@vU_rRuitBlCE znxv3M-?(Da2Dt$y`M782JI3|91CU>PyOlKjkkr=+{G<3&v{sD8A6nZJg8F!yMdyWx zG1=3oyoBLia!Ovbxb_rUW;m1~fj`x0a zF>?Lx<|F4v1H$YCH(9k~x$B9Q=%%e0-R;Wr=2pX6wfwSJYD;CpuU)*F!jh=m72W7-{GVOS>+9#d;N51-<{|+xpTe6ip!CseZf&ZIBHz_k+rARc z;bKAyv_Hr;;d$M>us$05=b6JQyAxHl?VIDG9IlxqOw3Oy;j2U<4bHzqNzGK+;pTXX zCxS9I3)bfbntCwqO;TTRw;KPWj=!g+EaRCo-!d4BZkFc znLnHFy_O^M$H&5N#xO4@X6ifh`xyqrU0613FlMq!c znygEyh4zq#GWvzbF%UOc+U*KdvH)LGNF#sdQb0|Ns%`c`u{$3Gw0 zc+Rm92YmRgG;)rcKVrk@*zZH{W36&|_>?rx_?2GchP32&7&$C!YUHY!f+K2uIcjXC z`|a?JFD{0N_+2mL>BvRdcq2`o8{Oz@FmNzD7_3A4U?8b$vFs-*-3h@6K*)&#Qmrr3 zETk?J1yE1lpONGMXBghWAFiKg(i(IoJwt!ap!4Ss+C_x9b1FMw<{iPUra0BcvDM7x zxyXX0>>$g!x;~<~5;X96&->?y9QWqLd!CFt;q-N29Js$HhQ+=brXWO*him9jXM9GB*=%}|YWI5F zj)C#3s34H@0#^Z*!QGL9jPzADF!r`o?#DNM&|0#Xzz_QX`?p)p&NU7-$?bNbs(GC#2^CPwC?SeX}*bSleSI3D8RtLz_+>&b zqo1PQFc+HLp<<5t?ToKX-F`Im%yzU0ym=ugGsw(aVx8kDJOu>g;tLEBS2<9;-oU&2 zY4<=d)_OB$<>k4X#`PAr|9Z=_ETm#c4@``t^iSvlx^DBDDqwn|#2G3lOpzzbQ7%=q zXE|s#A)mSuL)d&Hsz(D9y3Xz0<(Owl(7tbDeIUOeo6-pf^d4VnWjjO)oKj+s=~fGE zx@8J_)Q?+UqWIwLqmx>VBkI80&==U~MS2mNjF~CgA-mppwur!yJ-y_#XYW2?c0JYS zp|y7*w{kvHB)EL0**0H*tVNs|F5M?GVNYR)VRAp%tmE1IliRhAEmc$9>rL%eN#63_&iRaLg`!>0HIKjt zZ!8ENML@E-RDmsDPC}pX;z$ho@R-~Z)o&%tInJN9Hjp^Lz`($&{|6;5IP2~aKXuy@ zC6|&&+!if0EB2u_dFhrKDiWDTkM|WtuhJ4MQGe->B)OS`nVS)%ACg?Yl>f0wwL=|# zQEa93fKk5r@)S_{dsvjm8YusgNX0Y)R33*8NMu2i?Q1oVWYmV@ObW{%KfTi2=$gz8 z9AlFV!`Nlh4lwV4tBQP8@!$N-l^${08tKsf#!j47y364{d;7Awu0(5e?r2V>Frt`^MyNC-{iJfTj|%y= zi}i&6r(K74UAoI$+~}^w>@_BQyzrqo6dz`ysbNJMxy;&O6Pn0^AC$Tl3>zp?FQyEA zIA<3L-_7NK;|~|z#_qvDe+X7H5;YPS2f4ktI^x# znl9~g$*p_|N1y@HO)FaD07#0S3ZRk1JOGo1R!mIG-dp+@b(|Ejs1l&k0_*QO*tZ_C)N{52rbH*&vw73nZ=j`u4yKKO4X0p6=6 z9Mamktaq8~xp^+CiT28QLzl-A7CC{(8SM0V`#f2^+$^~z8_GW)H*$GZ`kFJHiyz4W z<}HZ>uDL~9(n{<3MT=T{^bRN7uvMP1xK&O;!?F85`4P}n6&RCuV1#+!ttG1bAdg%H zX}sczhCve@5s~~Mrvuj?R1%3%N@Ou%&kzN&AOXihRSuvdF%l0MCI8p5EiQ1?M8aE~ zilhr@VByZViT!$}_RQR4wLX()(leN}%HMSSbUD}(LCW_|{?b=@XDrvl8WPU?sa%gx zJ)R`sCoGm}Jt!-RTCy0FDp@yeSs3G!9GhJta{n@5IY;7Tnn{!z$`E)GGE)NpQF8PWtty z$ZyY(B%ZX$>~_EnO0Jw4vms;kk?@DR&!Mfb5F}Z#rlN+*0=!H`U?4DOYHnPTgqjkM zsH@6(`vBS)Ssxobhd4UMTY){H)>xdCjzapLwOP{tTHN;vt;AxzHgvRyKCK|)w?W-B zRTY&Xu@^A7P>?1Al0^&F1O=SLP&z0wE8DU##wIy2x%fhPs;X#~6ahFRHF3c8MQ7ru ztu;YZ4NdbTC966H@)Uq~$8p5*Lq8SAFWUHDj>r$W%m5EiCjZ*}pucF=;4(1!-Xui| zPbkI>nBzoRzzAzN9zRgc>a3b}G~p_VghEfUw)(g-%C^j2%F4ub zg=@p4@0;HRasErI@#ua^&KbYHG%8p0Jh9&W?ABk8_5W{OhwBQ9F7tFiw%ptD-~Y;~ z=-OjAO{hq+Jb?JjK6hL()W0U@*9lN(dXn*LvY{T5C4vRAtspB6VEa5piiDhSL|ILB zL=HO%OElRrwLBOOhG*8^+>hm5nrG;qc6bTFZl2w6%p=4Y)K_=tI`gWa2SwvhH7Xr>!13!4V;0a2fQAAXT=0NY*92d>ol>2g2>(hlanXKO2XN zC5!1;TK~K7!&t>MhC=LNy0)?P#_xO!Hwh{Io$TD`TDxI3E`_n02wVR3_l$n1 znhcf)8D$Za-Jpf=y^xsh*CETbIPD5}Z&^ylnwn4mP4Oc(y;o-cxhD|fq8f&5XRQkK z<%XJH?H4H^bH)02kisFLJ!!d3nN(L?*8iAdo7NL$Ic$T+f&r$g9u?Ov0u!x8OVC2| zNOynu+;k<67ilf(@y9hGkBQ^t0fs`Kjpqh3je8t;3&x%^Rz}v}AR>?`zppi^_YGGS zF{y$im}fGo*{C9e zAp%k&Mh{R%RI;8HDH?)tlJV*WZqF!s)&x2^N{=>0Wd11B+N6fuLwl$(Djev$6WuQ0fu?*2Q_uVR&1UW z9=`+HOJ4(eczTuI^%APME*)aeSC?Iz{EKE`)QbIhMe$X-f4oOlRGj~_BQ)PA<6_KG z9?C0~u@sEFaNG$r2p)Tw2JFps$#NJsqBrONG}qTp{}pp7c&8txwXi+5e|FQ&ukiU{b+MP57?^x61GNa85>#qHk|%lsB1u#U zP&E}M2g0E#D8z&tlB}%pwhoN6NtSv$!;r*y(}&v}w`IxoHtN!vEb*9UJ=kb=li`ILR$0~5_Qd*1br z$|~FJ9zLxch-`ZFv=h#9cAFl3B~>;e`qQr;HEKnLXbT-ZcVPe%^ zv71HWjygjVF}k?;*V%LNIkx^@cRu;WFowm0yg-MHB6vN zL7%9zOjN9=^lkRywzwt?ZEf~2(>ls_sZ*=aNR(hjFpjdM>g++;kWb7T+iXf_-E|Z_ zw}zun{?loU1GZkGm=Q0sw~VzqpmfbXYSoRtaZ9O7HRfB$=!9%StV|wJqaWLOGZX{j zX-FW7LDgxP21Q`;oW%&Q!bw~&g-Kq84r|wsxH#UQ9WzoPco6TsJ+uz8lJ5z2>Ec>JngwMe`~6BqNmi`v-mwlh}z_S)<(p}*#<%+ z1cBIKh#i3#5C(*6I3U8tw~Xu*c)uVn@}$MnGt_KKP-!naIX1R^`r5;(aJVYOpe_Le5YOOjm^|6>UZ1V&n38JWY2?pa$D4A49)l15_@ zP?D5E(6~K~De@0_W57Vals}7T;|nyZTA!&l(apMv)!epG9^IA6^FhG*J$yM+tib(l4ZW6t)nw3wRP%XxwO^4FRD(`?|h%T7HEjt2DoYVmo+EIqrE#ytz-a(M5? zr-mEWup1K}Kf(r5>fD<$4w%!f3)D?kRvfik71t>%A~oqxmAR8XBLN@!FOhD0d^xvN z#j%^E3tsF|*3rCMtKWW>0&1b@G2+fiA*TT;auLAaH$&rVbYjmM0s%r{X!3VVCGEJ zHiH|kZqaBV`*bgis&LReIK|MqwccGOHJ~KChT!5oko2%QK*z?DzYK0$qMCO^I}7#B#hR_4yVu5FG9`ZJ$@ zKKl7b%WkzRvNd3Db~{4t=s&DD1PD<6T)t5FWa01DGs*sEwA1DYk#^m2IaZ33J=Fpa zM7KR}+J44P)yTyy*c2AAiESHk2?NoP=>mPbYi^mP`C6WJGJF>?j71O|B%C#Nx(evxqWdGWfJ2U|pz)?fee!Wx=i4Nm1&)g zV%hLsyk#>Zo<4@)V~u@ofBh5A+;!Z49}kMI-;uYcEdg@MK{nVH*V9YPbQuJagL4!x zXCC_5p?IaVLOT=sb$6-DDD?XKg-SD65Ch?e83xQtQXu?qVptHEE@T2Tn#u$cK#B;5 zQ+)Ui3p3(K7b}lPdv$DILO1Tj*3GNvBZiL_$2zmg=E%ETLc8M^y~ov2LU)`%-`dUk4}>Bl5&vd3Ozr%Ik!AX@a`oqNGJfV!ICAR*V(Z(K;wCPZN?NP+yQIk; zBL6m*T+y4nI?+r)&F5d7Pwhi*-03fL=B6AKa{N}Y8#_Nk*w-F@OCzyPh!RE^X(0?F zQE}XF{9lOvJh;V8Y{kv%%|o*Wi%Ig~9}c}AD0+!{d?MQGKv`vzt$|b+F1p>S=Qs%_+F{*Gx-SK&QDPR|7zk~7?z~P zEIYOrEMv0Eiem)c#d9~D${*xoGB0ePk*m@|JP zpQYT0Vcj}3*Osme`2u&nCg`pNwKOH(sGeCs(Pm5ar=S2Rw$N47JqfHUpFTJ-$+A?+ zLdkP>!suIi&GRcQgCa0_#ej)J$UT50&L?h9U<@;FXH2emXU$mlj=p1&ik`j@#usm- zk&6@4N+e`Im7*QLhso^&p?N2iQn>_kY|0~vV8nB*z)B`c-p*n7jDxzqT`^*pRHK2T zD%;1f8xtUou`x3ArO=r=s=9iZ-Fi!|JMxo%);p9lPku6#yBLqyM3!qOV!L{$h~bC> zL9c9UTTK?-D57EYIR)PuVy-D)^1ISxOS-Q}Vm@2<8`ZNcQAq2vlfcC18U7`U%?yfFWyNH6!J z34au9;crA--hm}9QN9*5J*FoC0hf3~ia;{WCtuAhUcm}Tk8trYW%*zBP#&DDO7`nD z6WQN4yKQ`Um2wB9ox-sU{C*~(J;ZXXs^jC-4bCyKNA)4J$*%C0XCGoGT`Sxkub$np{AK)bTD zo$!3>zm`y?xl{UW-BU|F7k|(xmbf^NRLnfOTfCSTb*bj$T3+^hLin*JUCZ$m!fSgJ zl(-jS5)_gHob;T#M7}T@)v#D9Tm4WAF`CZIh~IP6Rr$z|TG~IvaF@?KMg-4X^#$pO zTYKlFx)G*Es%~EFwAZw>#$cynunMP0nc>nnK*uU%C?Y{|C=wynK%N$%@j@(6Pr{-o zOaR_>ENFDNNni6Y#dzx!BrRAvSrbezz2Fdbm)>X#^dmJhT|O$70riTt8a0zH$4M9{!rV zCctR3@7%DfE{4xcf1hLicR+kdWe#Mez+OR8&gguuULx>3rqIwX-}82M*fMR=ob0(8 zGux4r-)**d`Cb3&bC-8$J@9KY;aWkQyR)*|7473P|2J_S5v*~^MUXWt9H>Ru)RQv? zTc?z2nr^JI@E|iHbqI_ton(#MpQJ9Xx&T_cDn_6f=B!-Z5lLLE<`A&w-6!0!V`7MR zWbNCeMwmx(AN@C&!WvYjRr)1(3SMK~2-`bBxO8fktFBkKm!k zYUZGvxoLhbsWakenc}_ork#>A+16}w$7yj5-XS45FckPrHOYw|{o<>K$QY*Gz!6^$ zv#aAzRo694QaxKcVt7%#K&&7oBnOfbA`c9HY86h6)%zOW0!4sQ)o>3?M1gG8{|m=K zE;xqM8`INS;HFx#Um`rgEsmdMX0|8sU%`6FK77#y<*QjFG+* z#$70O>;!NS7>nw2jp3Zq4|>-T1iv&0t)EA<1r@z2VMk4U{a+6}Z)sPi+CfP2YaMN( zdi}>g@nnJg&rMdO!EZT=Q{nbk;6`v75rv@_`m6XzZam@41gc+NKS&mW*hgGEdGT0- zjkp=mHo2SO2MZp5T7FVq;~yqanEO9$6+uIH%REZPaaiBWx?;w?q$MCOUQsQz@4B`; z?-1k?k(?qe0`azz1-_ydAXnEmZ{H=PMZr|+4J8lg$!*LH&ULg~O5{lYMDh#92fx&o z*5{0=aaKA^GnQxNUZXuFuC%twAB?D``6h8)-D&}}a8B}B*I)Hk^3oRbDKxn#(az(q zaOxc^_X2vCF+fl$+tt@@RGTBIuT)K)p%w(inYk&KSX#>nbeAMlVz+Wa%tIb^pOAR9OkV;4{4~mpug|?1y~l z^dW4P_ITsz*r#spWTzYMR8MNM!<*FF>FHl=H z^$NA1;1Bc8Sk}Bb18YD~*Rq}8t6j_rZ#$EKsm04NL+Qcwta2A?L_W18s-mZO1v)wu z$Mtt1jPN47=5I#GB?>WI6AIs@AH?C38n+HJ&7b+6H*ohuFQ%oHK_iSh$%zo@BqTuO`qRYlk(LuQO$rf0uT(HGYOcK` zO|HI9^0YK~_tfnD1fHs-9^C@D2?qPwLM8#dC_>6ZRCpkud!r8NVB|#aZBr)|Elu{y z?1e@&`4iGL|89j~wf+_F-r;obTlf%IvVYufU7rtwGE<@@%Q#Jyf!j4n3Dg4=rYb;} zy`t!B2cO4~FAl^@g=f2&8baXL2O^{oq1pFC7u0lpFAPle0zIfvoJ|v{Nmh;HF;NB9 zqAD!dxSX#5qZ(Q5!#5$M)L9|?$17-DkgFZPvHv2!?-PW|mva$_Cl!MjGxYnUua9PA zre$dUVXpRD1kq6aNr^;sX#`#kHsJnOs4ITj(YY0?xp`hTx)b3y3zmK|cj67Ozl2s& z@MEB!!*TB+PuGdxo+;k=!40uv%kNzc_yy1fN7LXdTtO?zqrG=@yzG^^-cq@+yRS5d zY9DGD?iUg~?>Y^BGfWxMlHswh!BUP{I9g?xYv^lY$Pnk{JC^oy0>m;1VZG43>$B~B zY=4%|Ku$TQ+~SFIcDg{sGQl{xhTpdI{_xq`GS~5_;Kgeo3%(V}tZtA92_xtU=9 zlYn&W4Et=7vl^SuLd1$E_?XkfkKsFzzKPz!X%ajax+NvWEa5 zQ~@|j3KNP#L=kb8urOs5VAdO^i0UX&OymYBQ0P!3m0;~-RNXhFH}|Ay11nNM?`9DU z@08;4zWwnRsmGqZi7K#2RVkz-@aa`4rmmVLpPup*?{faBgsl=6$bonk$V<>TJdQ&0 z#~56NNTTKu*SLh{RFWOa?`*E>+bZ>vrB}lb*agF)UXAjczHwRn*V8Bd%Xfc+&hf^{ zik?xT3LI!v`s;trc80BD4yr!TJv{JiI80_k5-3pM@;3N~_M|ViQ=s?$);`@#-vm~S zOJAW&>=mg~$~0_XhsOXiW(By_^kmqIVN(q=;po3W^oAbP&!h|Q2geS%H)Qg_zW896 zpDRy!9Z#0;g^};JqMDbt)glC$t2@K@9@gRckm2V!o6)cr7PxtRfO`$GyIMKane)El zW%NwQ5YJ+17>F-q0tqNa&LcQn%1iJhG>FA;v_Lon0P+*e)s-mFqZibKmc_gJEgI|s z(#bP5e)`G0X(d2@=4BLFmxQ_hq8iSBf+&#>HLA0jP>4LlwL2s9EQF1~f-HGL;J+z_ zV|imfR~jS*7?EO5BC&W60t%pjA1DU{g@(E2%$;JX227v>`mg5os!z`q43R;9!i53=b4=^b{EzB6rM z)y@tE%qH~vBHMcTs}Qt#Bj{7vXHdh%STr+I?mP?<9nwc7koBouQ`B%U36c#HocR>IYV&W*YJwj! zA!csOt%SV|uQGKdm@a6B96^cIUBi(U(_RphOwOXiUn-Ce;Xn!m7d3yWK?gRicE@Et z6z^(lg_!EK>ShbK_*F>Ve}nuZxFp7tGGuj5UW!^QIf8W67nxv}!^vhTTn~i?ZB{-o zt9bX4W7yjI9EX5;6P4|i2#?|4V>(*S#jhr(^()iBp&VSxB2gg(3Mb?cP@yDwoK$kX z!{W0PC{WQ(_eH0YO4DCUR#gI~EvC8iV*V{Y0{F^_9U@#a_f2k9VXsxb^1xP_Pb?F)(!i=pfwWLS1r*Bzh|`W*iro!n zJfa<2Hw_SJ9`&2QBHh`rMjPh}Q-%?>a=YXe37?ZiDx%`MZhFhYUj9OLq>x4Q#BW(Y zn{Ttonm17~Ewzdh*2DmkM;et%bp>8kN`xxnNVRmTvn@tX`{>&r zc{RdZL_*N5!QYjZwnI6B5UY@H-V^LEG{C~p!D*I=(HJPb?F3Ugt}{?B7e;J^HxTzO ztn}5?<}b((P=Ufc5SQie5Z9p~XA&7| zphQm*!H{wqU?1bvL5_W+&VQQl_NAZz@^@~T1;YMz4NU#p$W5HSQ6Q$h?v?IQj@@f! zKWE~)S16?er(+hDOJkl^iSdDjYwYFR6J1BOgNo{R%Ym^;vWM#2=`h=acJH%|bw9<) zez8M-y>D2>vj;mOV)IBfEZ=yYQTTQ%N=s9T?s&&1tZ5A~e zCCV>Kx>(W4KZA1?|*NEXd@ANg6Lf{v=CTHx_bch2X(7D2T?zSfE0w3%kts zITbHXQq;rojCEx&77PZ%!B8-43}pisPzL|O1;fG67_gu_Yz6JIqX;GLOkP13RqtWs zf+njPL~(dE`Z-BZILY6rN%omj4MHhgwe#oWbW`%OxmR7uxj|USxt;NN#0C!w0i?Qw zReba7nGZ^ZXa2DK1v~B2yz9d;@N@jB@Yu^v&;3eW? z7*iMrj1WHz@Dq&X9uJ-z_{=D~(Cq22irWW6FX5P-!%s(d-^G z$&RDaiCVpR23)n$-tA{=%aQ_wo=V69D7MIuAbru(lzX?8Wa*?&JApr;N>R5iJxoZE zKAry+@cvT209R`-mB7}WiML=Y--3RT5!;EbLnDrGwLI2VXe$ zqrFRAX1UE*4nK|qM+g}P{j?m%*dG8k4b2u~Z`yup^C+{2ANQ$opD+GjTN*!&iP%e9 zuxQZmN7|c0J=j2Yho)7241RtKP3wUsQot;oB0fG@>C6~iKOrLdHgRy0?a(7g%AEJ` zJknXz1ZSCZ52f~6nwe6Hj^G?=R{g^)DXmA5|Hu2S)acI%@*Q4a$>)3M_D+n)71^_b zTS5w%feYq1RClvWOi>YptIj>s6qt3N(;<9w)cTTO50aWfM2U$i)OF1;qC`Y>L`u_g z{h`;jl@YrBJy2kF5D)?Y001*IKr{dVUuH;<+80=HwPWpMcb<1|jdeZDy0siBw}c@c zjbZnm*KOTA+gr-E&yzpeAj&@wFYYj`1OPKKa5V-1!w0W9jn%VsK9@;UE_V{2zO!Kk zC(ZJC;7##OY=8usq=iiaF980mqz(4r8_;QY^#C%mSb3EJMvwF|9 zAu6c6GC2c>NXjI`@&L9;OX6^o0DuSp5zPQt8xVWnZ{PpDb9dx2yW5+&Zo7tAZ(G~H zT`sxYmYK2bg-e24)RIADi6s>Q%1I(62^1CpP5__+jL-{s5N9BWJb=7J0D=#o2TA*g zML(&Tn`Y^T%cF){3AP-X7QMD=dbp8#s%j}J(Yby|wtTB!o4MRGaI+`qPF8*qk?uOs z^UK)A_8a(vL8j9TPR3--YmGhgOq#CGwbL$Y)Tlm9=|S}JoOFTxzubF1ABSvJrtj(! z70qHMUGlrV>CH%2e_Mmp06S@qS9wJDwwq0@Wpk`~E%JL2Oc7cm2{gRT+uiz;?QlTt ztRrEejb7-|HlL!-**;J=dnDb~u`U{T&E0mh%8wc`DBFb_n6p!WWHjC0O@HBji#qgR z$ZP1h8|x-Ob(~4acFSC<3UdKZC4I}wNMH#Ysk;GjByhHVhPi)tHq3c@1*peLMKOio z)n-YMk;Jh7mtm%X6!GfIT%-1iFz6R$6va+qhM(parm@wNx3oIXnKN+FHf_X;y4^ zn3dL7vxQYuJAV(jX-!lQtiYNqMBTP#9WVcDz1hi6M!54e>$wDn`Ni5J_~DQ@orJ4M z-fpsU{aE#1;dTeNBJ`H5n(1#eo?;gTmxS$R>GPtLM!ZWnxcDNjlTP7#`%e&R!u_}N zM-NR@@7r@f(~;Db+B3I|(De(7H_3TruoG@Ny`3NBP%VrteuUnA7GWaW*2rsfBS=E! z{MLmX!qNoo-9Mve5u1sP4>lh)isN_BXuePGdi)>TME;g+An)GKX9a7=w6?-yzFSa2>$;&zs<^juS<0bC1mD}C z(_5my=+yt3nRaF&#V}vrvij5On4`x?YF+ zjr^6YwXoZ;`uu$cq|>--Uq{v%B$T$DJ@ZL{{r;=2oUCOlUw7llkXAZWer4S_qdC7gVDej#5FrErX6#^BF_uUMZ>h89(#&x$lPHFz-YUkf8{T%)HQXWAQ;kq zm8gGgbXz}Llf4FdX|`^fM7x^*o}M9h{nglN7&W#Vv8|s;|KNu{`k=4o*Xobz%`*TS zTi=Pm6!mlGqt0()(f~J%;1O3BraUsOie#@RSwXAKim$I;yu&9XzTxA< zD<%EuB!+j7JC0A=_sHw+!FS={OGONb#;#4(IbHx^NHc-5Lp)PN)mGp7nf+AlaGdne z8$FGn+o=(UI#F4UtBMBRw~F9=Drdo6&D%n^#!fG`8>f-ww612}1!4ZJNyYzJz@37EmNm7$|b9k6z?|mbyRzyqe&Mb!yG{2D#zf z;wv1P0ay8%Bdk8WtZw$T609`JN}{toBm+sbQVbx?OEf@0JjV*+;V?)K|IxJ{sI0H8 z%QXg$VU!2|GxM5pvxKDz!Nafbi(T*Gwo{Qw7mevAyidk{gl9&K#Vtj>{n*h1TMCk?7tP}%gl5n(k&zy(8mIg}6e zoDe6KPP9(LUkY(Zi5G8e`EVPsa4h?r84Bml*^~QgR%z7eFnGuV>f-K%d+d2qyN5LZ zY&1>&SattpzR{Ol%rg*RHr5t#YqcM&q1ISyz@2>W>z~)BdAH9dU&9HvU;!JU9U1WV zja=DQ{3fs(y}^L76T}?WreKnvbqn6bP3UO4r1l}J{W+fx~r$^n4S3k&CgcW+K*Ih}}FfC1oGu+2N?nhncp44w}thTf~ zcRe^!r8h7QR^LhWGwqpiu}L$S=o#;v-!ABfi@%8Fhy?@*F9w-3^w16*jsF!KBVb zaqL;e5~4fD3roMFrsWybe6g``Ffzn9``lY#Cxj=SeAynrA1f zrb|^Wy6V*(Smx?Qxs4cQ-2@eJ7*h>nKHSW2irFp5~OG3kLEq9b0iV9arO z<3!@c#)gdrNxb3$hM4dmj8i^@6_mRoW4A12%F+QZ^#GEMZrQ?e_qAuK9l4Ccn+5ao z^0F{SYgmn5Kuhk1X_tYQ(zr3Kh>wCW<@C+_9Nd>Ra^+GlxO78ZBZQ(4A6^M>fv98y zF*o0iA~I{Bgc}8eTQZ`KFN+~ba#y(()oM0-?Nx^~HB!`Zq%e^&@g`YrU`)!Ro@aU` z!W5^*surEEeiB~c2~>{!TQO;=bAIRvJS#7k%8~};2+$B2V?1G^V}*HQh5|^5Tj5fA zEkjWwVK9|Vp?ILZv7<+?<{?2*FTi<6CO3T9m1rbpo*~MfAqGIa;J~9B%=ibP@z2## z{_;g<68iPax@2mJdWj_!=WmbKwq{|Wo^+NTy$^eJk~f#K5N(3pf@}&q#4|g@dF66j zjFPe~f-fCwAU%CfC(8lF<#=W!?dswc6b+6ndB8c)aiL8<{Hk_!jD@whM%(1GJUL=uS&Nmx$d zAR#cuIi_I?!-!uR^wQ;Wt=1WZauJ{yKxo&2G>pTd;kXz~66Qi~Aj1Un2jROUq%!i- z5D=*t#YdT&7FsaO>=Jl0Uo>xJTrcML&DR}0iSzle8}n56tA4BrYR)WwXQoZBaEH53 z>a~`N!g1pCGfi=sHq^PRZaD6DgQ#q?r?hsOB|T%_}l$GzJ*_phdy zS$_Eil%*9kq8=ZedJ@zi4VqFK%>@g^!rUR078n6b+@ZXV{M!8A{(98rT8Q&rZ*$A)O}nYBfAb%&ebvWb@c3ZhWPm+M zaDraml&_GMJoXz<#G&hWxa*|5Hm4%y5a9hDM1>h|ef%iOa<9|w1k5zlj<^ADUWiMZ zXV$9VQ5`?tFQ(dDix{)8sh#9|r$A5N8ND!a7pKpY%J%b@ZWw&UFeV0CDXn66IbE7= zX}rm*%S`J(r`_?xzqv(vj95@daKZ-r=hW;GXcu|(Qyo@W8MV*_F5KC0_?wLze?i%jwZJBQ*Kfh`eXy0Ve=K%wVGBcA=pD1xSD}ZY66;Nj zyqSq}MEx@pZccFZj`ffyFp+iUntD5jkm1!&P1K7tTA+*PRCkKd>EoA*=%KtP{&+bH zDwwYJk)(;LStO3M-1SKMFhEwxOnQ&gN=BNv_Q0UtO3#+i-#&M)_}hdV;-8-K70e$0 z4uP|`^G%`RAfL->wrgiYJZ4HgM!#%m5+4NQBoP=xxN>NhXK{#zTgl{D!YL{c%G_C2 z{C1tSHX8fnTN|5kZCBcO$u>ErV^6C{w0D!1oc;{qj0FY>CkFJW zPklarajsv6&_vooNo&LZ{!N_rpEM=XcLX(Gv6NY#cevTga9@Lr?>I|GzCD!gr!~5% zvrD}yG45?-TkrdB>E}RmND?{wC2tNfu+^6HF^7tn1WtT|EDlwoqW8KLZO= zQ-+z#j*`jAsP}67yhl!UpP=H95m`rh9$d0d`p8uL-mG>^2O|8DM9w^xlu%t7SFU9a z*Q!aCJe6UOjHvv7i+8K9M%^G2Nhk2Lh!Qoqb#;cPI1BEK^s?(27 z_pilx@`t)h-b{3nC)p62j<5(?crhGG>Q_k);RNx3Bn<^N2y67R57Jrns<> ziGmmn8_R~^YAn7-B4nHNxx1{+_;LY?oX+OtIldfHmgz6(IdXTy!G_$swivces(B(3UMcK@iS}RQhg7wISg-1X3vB%;W zmzvm+R2Z3bs)ewO18+d8z_faJOpE3^(%zT4G1zAFf%)6twc6OT$I=AVY=Rs6wiFy? z(XxvwXJ+r&G(F-U%RBt|>av1eVZNX{5jA)`KR<^uk8h%t=AWbf%|e$yDPP3RPl#K) zFKYt+J~t=3!rz*^fgka8J{dycmx1YB^Th-StOF19V>q5zRvIDUc%BBxh9R8UnT@2P z6DyAxF4ASmsh!I?0^$fWfWLfzw(-U_WU?HJ$qB(f=&C6rb@!lHhp{4327ffF7OX!9 zRC|5be7)Pr`PJBZb5y5-B*j(}SbR-MaUVFq?LqWA>81~ngtL)#8XA@#q0CKf7!=S$d75{9~r5r$Ax{c-4x!D_B%4we_{+Il#AO}BpVT>UfmkZ%(X zJ~^GeI)Y8I&VR<_X)_}ld6cB#R)L4o5E+!%z+K`YX(W*^y(GD-RB~-u0Vjz9CkYqE zYJ|FKjG>$&-4t!kzi!l$f2k;kxk$dYW!{CMHedpT00BUN{p=>FQ*iZMTEG(Jd)|IX z&tLwJxBfY+=6>x0HM%JlH}u=_av1+Pt#O~pTI z<@I`%2%*#8c-=KXk^N6y$O!38Wu{5&#PgvnLC8bm8HgNX((ok_W#J&PpqB(<(J~gr zNn1d`M0XB{SCqlvewOBRzU&I(sO~afPsW$huSJa&6 zL=%>g-ukR_$JyB|Z8Km#)>qK}y?i|1g*ZMdSh=u%d70@3CLjcKQb^pK?*(1a0m#*e z(u*_~Yy1FvVW6)JY5j&0auf{6h_o>@GRZLDl3{>&9MFAXGCH7pQT4QC1f2c7AS0+8 z93@o+4O3lA^ipf-+PT42U)4yHtjUuF2Dr9d2zUYn00H%ZnOt(e^GSwdm==3rpO}<) zAD!LEbiN=TB;B}^St#z?doV?+zHa^}RKj@9(~NUpY~0VEP>_H>_mcL$@N3(BT33(- zLT@8G{kPcE!-l@;K8+xmu$bj$v(rdgxRV$u!u+F=6!0&OIhpBjkH4A~u5|t}S~}B0 zA>^ZSeAY3fiX?0kQSEp2wZ+V)^>ms;RH#m3RQrIaeP-HhvVCpr&w;y~5qvTM3YSix zqJ5I>89=Z581Sw!`J(qn!N3mV0rmeoS=s=F)YcSuZ76g0H}9A-pc+|CM^=hIv8;5x zW396#=yWdEaJC&Vn7y8UKnJOr;B$qsq@Nqv%oTr@+Hg2Lp6q^K{Gr+Ge{m{QR%o@E zMv#1-)NVZsxQTIDBC$Fl-BC449`Y!GejVe z&A^0vlneo`KnFyk#$v_QTNc1cqCgfzH1j*D?Tv_0lm36(tBdAv@MQl zr@488F1YMQt%*n??JQbvNq*K@oeP-ue6DqRc@rxiH%3Tq2}ZIO5M1!h9mnqaJ(7WD zo3nMhuG(QZ|Hrv7H#)gJ+jf`V_KxHbx#3ft#5$JhO7fuQ0Aw|*=soAgo07Smb0PST zohm*O&JJHe4R~bW06-8B0ssI2Lo`J+003T9sGzzl>}caE`BeRncKdBN$q`&7+ZA$b zq*cqR=4^TMWwM#PvzR1vm2xyM6t5saT)(hg0Kmu$+0X!h0~8dg@P7@{Lt`XXPMeqb z3STtb=#)sBB-99oYc{ha#=5xOJA@r|Vwao2NT}*|H%S3lP?uFMWq>=V+R82$477u~ z>oPuMl2nyXL$Z+|i9DHPv>_z9LYlNm0GR*)84`n{AOP<-cYFSJw%xnrwtekx<(86- zif>7>+g;ggxoy!_mBq|(3bJJ&Kt(|igmV|g#e@;y6CNfoDkup9Il|026yXp7Q62{Y zuYiF7ck`Jx2CZw9;Ejmf{CTPE4EoLb%I$y?$FQ0`V_WT-SMnzHY(%(H{j5BRX3fr zR`NE8VZ(RWZ8q}#I~XIhh3$7}J7`V^$DTFwLER$Q3h27oO}M?ekb7txlRv-sKaafq za|7PBo)ksy^?C=`@B0FRi>h_7U1Ad6v!)A8D`Nly?>5ko4 z{%a}qHL7O6EC6caXHkc36W~G5;Mfk#-|yJjKLKp4Z=bYo7#4e9I*xeTXDy4h$qQ`D zkyfbVd5eu6zODUyxmrBfbWGw9@X;e}dmZ1Ik$0lsuB?Vw%@%CGH+L)%8?y{Uo@L_i zvc>N%v3Q}YC~k*Qy-Uw+NaK6JA_J3|lxP6=;*94ar2XkecjLi^*eye>DrsKjTu0?S zmdA?o`)y|EKU9k;?bXVtp$NT|#ogrc0IXgZ`{UY`rS$LH+mowElCLoV{C{+Uu%ZtQ zv669FjD{H0eLT;8Ty}9cDi;wy4_FR(*wBJtOn_iWAW;W|tsf}>u$Dv>*YssUf#Hhb zZNWDmiddD%x^rW;XY$T`|4vlO9CN-p^zM3Y+6$el+=g%NrGj_BxNo}+`dA;W*9?LT ziTUda6nqC^7OeBrs1>V z4!vyTXxH_Cw$t(Awvn^b59~`Ptpd!}xICYgJ6-cATUbvZCljKs?j;!{S*QamAt*&zuFb>YHyyO*onBe^sH2ozO$AHwu5 z4&NX_0Y#2)9mC;eccN%=2%^dK1u8vH&ST38k(wX$uT?T$tC)Puy}cOgDw0jwn7g#c zH_A=*-tb3@IP05nqAPF4+`K5O$+p;{XSpXFAWqnBsp6Owbf~nW+us^I?KjXjJu7DA zeQOMxi`#WkF=X^_`gN0?TdhF;t~$nc&A5jy&7JG~4%Elzzhbm|w)Kv%gQMB4aK782 zkndeKH`HT?;MDVGz2T>|A&%nn)y<}*uHc^T{oVALA5q~&jf`duoN_u9=J<;>-99r%y*)>n-fA?@x0(=0*PU-Rx$=8Xz@_s`w4S%`uQd$~f97%<`Z)MU$7ZJDaOQN{SE9$Ja zU1I*m-S5PHXIF2MrC*3_aY;A_`JKp!!>j!Y@aW2f@3=Ef$8$^;q-)WdRT;cly7Vnb zYTY&Vus4F07rDM&Y+jNdGRV{4?BQ@@*!+*^ekUf|hNf;)RX$zh$ceWg-VN;9Tv9U` z;F2eMqb&JkCG4i}qCRUy-J<*Q54j|e`YMNSbVlnR zLWl9UPrPyU7Vo3p43vsAku*#ieK_8gMtK~FB5Br^u2vHQ%Mpq5xR#X%0WxoV0SUru zLBJC=YCy7>8w+#bLG@B=DgoCs%g=8cW7uk-m*we(q^A*prU__#2`pLRPBnqUOeAq1 zYUb0BoC&DQw)*|=S{EOHnVr5@BIhJg$!!oD~KnswCIcRT8#_ru_h6T5tqDQf_ z#rHQ@!Na*`EJ&SVpMGX(Gvor7x<7E`d;Quk@j23pVIU5iaYA8OvkH4W8Izne*N3|<34gt zNw>|_*@}ywaRtV-U})%f&y&KAIL#s>6Y)f;HJ4j{<-Fk60GP3i3|+F*iRdKI42Ka> za(sy%R-e3NXOw9>^bKVo*J;RO)-q>L?G|a9%ttPJ@rI3SmO}B37Te<6ENzO!U=^I5 zwzDNO)Mn`J<7x&>on1}#BIme@*4DvwVbR0zZs)=GWkp?# z&u4^0#i0P+YKeCjFaRJ4^MZz-6{MWcK=)g=QKDB=kn#i*6w`__Z7ykop`GG5!DITH z2YFJ6(&fH+^Ol?<5D*X$6A;Y7MwDw(+Puadvnup#yU=YY42in*y6>}Joiz_qRq`g@ z#n{VLt9$k6m_4}o@SA zX8?c~!lKA1#D?$$jN`-CC42;OZEK$TmrwI7e?x|w0bTvBQb@GVzEz%w<;6 zv3&Jn0Do4?(@SDNE@w>y`#@;Fu=t5es-6w#*JU}@MHMN3CINJsQAUszNv^^wuGBmx zzZvAGv*9eJpUs=Gn(^hF{3Z|(5D*d&5})d)>Zu%i-kOvAmQFp>+I6YV)`*FJ_HF&! zsv8w6s?2GHo?ahok33tH|E#(+hG(Buzpi0SuhLgkV)eZz%9%#&^JkT|0UmwNAKN5) z*Ej+&CsaS+;5t>BmnnnpE=p7&>+w|A$Npg?yKQ~wc@}y^P1zh@4x1Yk_d@cX3^&+~ zrA`ozhD1QAkfy~TzLT&q75j1;Cg@aNnhM;UQH`iuO=d>bzImdj0}u|8sTu#XMaNk`n|;{!L+qrV%-lYqR0TB(L3T?hv6lkPXM{ITJnIZ&v?seDkQ6 z1?waG@E`*;2GP2LJ3r5@ax_wGr7dUZoN#yP8gC%d5#w$xNr>#MVEZCLOj z$l9YSdv6T!WPkdMwb#^#K(&C5hxRCX7M@e4ks7IRT2ML`S}YHT|!&h)Qn z^wT7Ud2Q~M#*bpJ`TfSQ!zE0PQ@5A+$5a~Oy1b$J_06yRS?>LqYdmSvw`NY<#%6C^ zUVbb$)oa3<-`;9-Mh1_)<0(_hz>9;-saKKpcVl0V31e2oX<8)w1o;~a%p-O=?=g2G zQ$6f#wBFMOu1_j~qkJP@E_Qh+SQno!gt$-Bg|K}pHiUkf9@1olUc;*`mz0h2s3=f& zt(J{#X6q=;PFH5X9W1=wx3wb8t-&1ZUtice9xSd;jRZE?OZGZ$Spb1Re!mJVX*mgh z3N`naP?(?z8$T&ty1YVW@jPj)SDv|K=`JeIsK$x76kej|A+)9VXKOCBC+6*H|Hg?9 z$<{b!PaV~{-%s8!_aA=IVUqN<3?3ugKl#&(f!C9eJ#~*y`FB4d)7A2mDZ6L+#KBpt zAN9N4-(wUln4{O5r$6ML$cZasU8N z)pkWSGNIeHg0xG1uMKugt(RgcjwPC6N70ngQ26*nd%R8^{%iHL7-YiN5va@q^M&=i zy!zN3)EWT;a}eUCALSaGV}g=mA!_!rhGy^cr8(A7#E8Ul;wKT{6G$| zoofQHoRS8XhD{_fH0wLMc@#*T>bF7drDXsdKmxMC8t1+F%?nxX30QJ(4&HwDJ`>tR zOU9+%X4WbLa=jSCi_r!Yn(k5@m%+3yZ&0H-*O(iFU6nGsshagM*J{H%@zQG}`n;!< z608wpdM_V@=YzO2bOKE%N)}k9ft-Efku(yGo2qE}D+x$NHtj}XDTY1(pD40KvN>4= zIGYaR;bLtAjc%V2`o1(D9^a%Bo}E5vw(Ig99$)L+<>5u;?SCtd>sp_IN}fLDDU;Ut z^@Co=AHpQZM4;g1`L&0^L!PbcaxvJeCuiINx8E(4%uTv}lEY7EZFt=U{N2Ns@q%nM zyQ1r8XU@PV(M)ZKshX)w)&kNK=YfC~qbuYDARecJ0>w~Ac>9WL%&UUoB|4n(&3s+b z9l(ZM>>%Zip#$4IDE`skw}unvc4CkfstA_VjFZJ2er~uD)Bxrd^aDHtF*=Vm6VL?n zkPmc6G*?!hi?mMTalit#SW9^>EZIn+| z^JMIv#>+~UjLm=fTs`FUI%oMk2V2yMB3u=wV|1GietxBB~f0ZP9Z%cY?RjBPBc(VeF2(FG)3RgND~73mRf zKZ+_+{!Ie5HO0Ia`c9z(u_h83Jg2|iH2YNh)XtHo5~O}kDmqo4V)6+P5D*Z-6MFy5 z7}c#?ywmUbJaCGm({3D^a%W9SgV(1#CWt7f)=P#Pr8q6aqy-l4JL$`>sPy>hIE5qr zX~C}LH|uZ z$Y&`$O7f83i|VnjIh}H5%>!2=Z=^O@ zGGdJO((mqUO2?C;3z=RHyZ?BAH`J5j@RolU8BEdRI?wz4pw5N3hng$Nq%|_3A0<#G zWn}s2nZ*CjSk-kS=Pmh}@_IwfCdzz}%EH7PZV7sTq5)Edh9l`z6|V>?uZkQcO6Cz+ zrdypcE$a7kX3&s?Ry718ocCEiqt1=vkx#4o_I2pq&G=d~Kf#@wv1GOzj;h3GM&hWe zeMXxst4_>~GinpnqBjSbK$ONbx^AH-#3RNpqcgwP1m697I!ri6(&{(PbO&b7C&+d^%+V8C&UZ@r9XOx$)oqQb_3mpvSxOvFk&5qT zTy|f#{Iz3iS!npY8aKAmfz#LcEqYBY&8e^NfoeiYac`2F$D5{c9$-yVY-nz&HU6@V zxb(`j|DA>?Ho3~1wM44P+R{k2*K_Ly51INKAYLdnBNspSf13Y-dMneLl7*FG8bRRi zB*8a;=GF7)I@9&05x$%#z>C4)GHb9n9iQr$*ziTi)psH6O8o z8nmf>FHH6PZ&`}LwSJ+p!zh=c*iW=LoC+$U^~E*>vq{yTm`4g4U>2$nkTq2>Z@@uC zGzF|vVmw>kN%0d|%e_2EYRq_T?jZQIA�!S&{g~ZQN6AL&js&rA0K`I;VAK>h(gL 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

h*G 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�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

ORVU3)Tt3W+ai8t!(1Zkaf#C+UJ1_7|Z|UbO^PN zny#iNsQ~872l7~&u`@p6}B7YtJ*}XgVjltPa+5oZRtE z)fF&LVk(=W*@=kyzl(b({5M+8KSA+O^kVPC_+4^k3pBu%gp`n`TftQzkwuoZKzjU4 z+pjS+Q6@=G=ah-a&CZzEzlS~n7ym5$j~+f^67_!qF{g$j4<~#wKlDKyClZrR&fATCD%;ij@8pF_gDYP8M1Nekk*yAn}6L4TQb&Rs8Hm)|1VP@dfmd@3D|wI4&z3r z5slsb@rtq_97aTrknk8l3*IKu9D)gdC~MTjqcFMrkoWqo+zrK(=yTYkOXVJ{KG98L zO(S#chp`{k{l_F*cC-qvo72% zTEF^Y?Aa_pc)2^hq_rSJT;JRDe5S{~5%m$RMAWW#ZVdO`<&x3=S{<6hC^*Bm3o$Ht zlwVaWirj?KQgUlMn9r(k1p+#(DlW_w@A2*~yL=)5u7AT+^$RD>NQQ}G>f7m^^-N7Q zUtrxmTulT0UHZ>GS;U#nO>-jUpd9>OEFIoBc@S8q!)Q6*zr*hBmJ;K2E6lqe)X&aM z?Kn}Ku>m{N9R)w<`@_G#f81=(0$^j(H^#rr^nS)1S4dB?2k4}{;{`U|{l%jP*mE#C zR5hA=*oqh)xIKxV$LYZhOKlNTo-hqwzzmB7#QTUdW z3K1-6ppRN=KjrvZ#iJYMks(@EMnbvW?B`c+cIhXVmc({UCC`3i|%+p_*amEH>jhSaaQpvWl@Levd9ZR}T2p z&FG0Vo|RuiIIfD`<@IFzAAjU4K7MA=2q6EC8228)r*W}Q4a+{?TN}QmgBnP#@qVT2 zBs}VFUv(!?f|$W}B)fIh%v04plk3BLQR3!^yt!H&^c2*on`n62%@B1z+cec=@@x*# z(wH&n(@2@F`}X&VnIH$3&`Pt{?sYrx^lQuV-WWRyd^3knahOW8g*w>Gtf?z;CEc>56vwjr!_#BVjLD?-&kwx3b6Qa!fQ?L6$>}8gYV>7ZInTE+h-QWJj$@ZEy?djH|_Ku;4V~g27jXm z5tyMdbV(5mM4*VE1PcJ;g_>@!k{~8U7h+Kv_jEw!v7Eu6!K^UU1AAbi(D*??k{E$T zk3t4iVysKn1gBZ7!G*47r+L#AVa;)$+f7O8UHx>;(cOjk1~3XkK!5Y4i1^TYf5t7* zhp4h2?%IY4_h79>*7&!1*R4gaxu*RYZnv4pGt;A>+`AlU`oDu>W| z(T;1#oh^{DO71v|rJXD1hbaj#WHm%oz@p}oYn5#|lpx$*r3sL#P)@(Y{nGG8iI!AO zJ!V}Lzx@()wk>*~o{Ltf;Q}mCX4nbH`pqh`DKtRW<-UVh{-0mzSGL*9#t*$(${hs})WXFGKa)hyyy;CvR`S1E_dS5!;&f}-q zx!Z?Dm4CNvcSQ`0!VUXW8XEmLM04VM>wbR)M2*UxFj1rC^dE;|Xzv5!f7Q`_tNuQv zA_jh~MB@JZrJ|Xh0jSpn76=Pb6LB`xN5~?gEYbisjy73C?QDmP;j2uSn@&(kWr=6f z9!k2_rgNOx`nIt1)Y+V?uG2Kzbj^iu#{MBg$dG(~?pFq;3dY!{?cebut$K8AdNa|N zhk|I;*f`GSqv3taO6aEo@1HwF2pU&aSA4!|mCa=4Y z$T&-3CWQ24$J9;PB;M}eX_q5;_wGUT=O*ri=3I^L_b!vy?&n_k*}(559%JN4@Rz7P zGe%tYKS^}jFJd8T2~~gfmQ7L;%l?ue9K{*|fLPQM2TTK`*|f?Pb-n>)z}q602FzIG~g;pmIGk7ag>1w5MNk)Yj)-3 zn>Z*U88U_p^FslPrrwwbrJ*CTGy^Vsw447%?}232H8a1zeX)KH=35seH;Iz{E*Yb* zFlzlqmjoroM7DpNXo;y9uFB8_)20#HV2~NJxH7`3PCfso>S)j{wiUMn+B|HEe zBA`6biu(g3ia)WArN}`9Gh`wL&_9+#!aY;w1QC%;)_5N2f}duz#XYaS}iuEQ-{l z06A?U1G=JwO(0VQM*(pp7Klq~cO246r<9e+Sye022J?Ete2b8kK>-pBPnaSpP>@8_ z+g+b*ZDeoLL;$iS_A(VzdLD+j)2&|BrLX&^w3#m0_2$n_Y*yOyJqMp*Hdp4C#9_ZG zKVzso9sjtC=L`C?#sliAsTP8(vDQ7nV;i|hfTk+s&|u10b-t{8F=xYljC zcx2bsR54tq<{bbMgWXv0PY{4_kH_*-EQ06c6Yno z+pXHQ)=K(b>f-K1Ufb^29c3+961FT^fRPMLjtB^10TcmWfdWAviU1HI)CvVbjPf5q z#Xx)j-~*@-kNBSN@uu~3mA%bJumw&S?*i4}w7c5_Y&DgDicU_$c17Kti)Nxn`%TdM zvAZgoEUjP#fWl?;@ql!N8nu6C$}psXNUDaI<(sh; zyn0B8xg(7~dRGmsYV+hTS_8^R`_TOe>n<@1PQhzi_Sei3w6rccPPu#b4f=1?4J+r9 zE6;sFSqZKy#Dj5Sj}7iGR6Jo+yICan+a;37q)$vSX(POZLE{TvZ^d-`UvkX!b|ylW zZ18E;^5Sf9@fBjH#|;UJVFi8stGFi_rH{i|{9Oj3TGy+*K#bI$Ww!N;SGLXSdz`I- zw`%Ve0j56~mxNgkZAq9u;%nq(O{Q5FFMcU2*p`nyY|zMHEs!C6{He*Wjr@t@rz8hzK!s!Lx9);2RYjiIaBux}fw>5M6GIC0Kvj=YDr>K%?gjQ(|#%6V6fIJmdCRp=#_8@SEVvAi8oSfxIa{KtKxx-OJ zkJIH5{Mue8cx8s}vrxemuY&*ecvFd4=y8XlbmI zIwFXDbYZcrX^zj~DNn>jq}lV&loPK5Y@Oeg=_gg${ME4Mxx1=wEGG$HB_?eEnI`g% z4a&^$g+4U_P)0xy&@ycwhiBbITjrNoo0k{%;z^#hwHVoI`L0Lpt=nRSlGkG$7%Njh zH+hVA*HtDk#@I^N9Nmo#^~Et zFB;i%nuhN2D{S)ouYqT4vi8N>>yth^TnTq7`mc$_;-*gbi?naX(pXwHM^*7p@RmmA zUo$-MaPlG0*)JGR=Dhs~k8AE)6>EW&tT28=*KKql^W&7|P_rV*MtVt>4y%cJIU=IU z>rhe_frE`w@KF342_IrywXcnB0Z_jwj`bZGrdneOEf=$>R0D5oJM9ienCQ2Wj5#Fk$xq z@{(%nV-532nHP?2^!2?gy}!`A%Ua(-jy1n7Q|h9a$?raZZbs*E$8VG6#nQmoE6lbJ zud)vvZ?uX(W7F3Rd9ScK%wyD=z1thP0ag3+RmSTZ=WSPk%dwvaGDFMS&*6y+@g1aB z`3#Jnjl~7xy|nHBcr`6tiQ0u)jnjM>7qp&Tha{`+X~~}qrdV|KNZU7SG})0g!$C3e{X<`dy9GXiXb!OZ6>vkj`^@lX(yWL@%=W(;-&DHzuQ9#H=O%J)di+^ZdpcBUdh<= zZOpcT1Zr_Luq3r|YBU=WpI+GOb`Uipj%nftmWUX_H+b@08|>&_8Ca z{(Y=G-O^F(gFrDWvmgXMulsFJPR*9lC+Vr3x<+f*oWt7)p5xY^H&LGFOl?&F5flBeXfOGSUA z#G0J{zXgTE)`ogx(`?l_hjHHYH;V|uQ{&lKlPjY&1EPtR4hJMibl@?J3qy+nc@(di zSH=sjvL5zlSZ}MuQmt{Dt+lZ}N@Yp&TQyATsHWd;HxWtS8mq);bPjVyZtGchBv~XX z$u?UKkc_*IvN}kvifxM=q+QZ}VX<)F zP!9Ki!;*b>V$+%>pY8UmSZ z)rkxA6Jqx{%Mr)p0{895;qPj`XVwhDO*NNR!4=O|Ew;8ki2~_*9|_pTArH7K3VuDG zQ_gGQI+-j->s#^a1moLmUbm(Vq%I!)DlFS3L38!}zS!>HkLWxOsBtAy@c8HEoaPVo zi5Y41Yb{6)Gd%E;blF*DSS6ki8$piFG|tiK`cRiJ7e+&s)EQ@?bv{@?SX7p6fgG@a z&-nB-DAJSeJWOG;h@|E&I-E$K3zP+pX{e`O?JswoQzO$kZhuw;6c9CfK%IOtUc7Ph ztU8jE4)J<9=GdIW)o6RN;V}hS)XgM*H)8)=>M)UA@tfWEa!(h?Lnv5SasF_`PRBjJ z&V|N<_>_6c!B1|zyHs0jbV0U+ZAMMjCU0w(jR{wr3f&zS!#djSGugJmO4?&#Dq^>; zb%Ib$uimw#$zknt6GHTvDC7{42>}jQ$f6~~6as`CG!%<;1SwJv0wQIRl$K;x3<%e= zaD;J@na5dNh_!qMvIzq1vjL&sJg!5aiq;fVb4t(=$uuTb4nUaK=cs<5fMi5TnT}#= zDFR|NerjGPu!g{)0(k-g0|Mm#FV$?I>$HTNx$zwOULCt*$*H;V^OPsf;mpji?14S+ zE|h0~9~1v->kaT#Ih2v!IP4+wnu=4J(^yfZb+z>CPvO=30|=TvwW;8D0N$e%876MS=uCLRMPWZ|_SmG>lCXr>|NRjvpn(Z~l=jb4*xLgwKw{s=J4Q5tqHlCXlmjD@p`1Sq6&q zRz$qg!iud8X2kf+WfMN%KckMj?=y?=$Q`$(Ap&>{5D*X$haOwqz)K(LS-N)yTj~9? zW0?D?*p2wlV{u>Z92Wmu?g9SKN-=rap|$h~KJRx-u%Al-G2Qr_GqCym1TrME`6zY< z`lCW#&EZ08+(?(de6ebNgqH%#d>&&y>W=Y}t`5@y)gUbgl~Sc2;?I4RsqD*&(pdP+ zrK$hxx-?wBn$8f;A@Z0McK6&vL~WaL@s7r+-=Rid@;5?N`RZ3Oy2((AFLm97wNL!# zyLJ`Qi$ZZPjv>XK{B_-AsOd0SR+`aknSJ#N1!gFXw(gWtr0QbF*Fl;pKX~{UB%-f$ zgz-?4$eAcj$gCLONo2A0x5X)n!AwB*KtMo1I(nGc zrK76LPAR0+=9sC`i9x9RQ&w?XHd<4$P;xvj(@JXo$i=W12AyGHmdb!Ug?zTSHv`u1 zs-IK3miG~7;y%@VnxSdOEBnuaKBA8?wa%Zm%uZ=s!`lnBUy5qW@ejAF3b0yl`SykN z5{Q5gzLeHM*3+N09Uyx>XIL*c9Fo(-YQ03>hdqQ>FMf$#klYmEu^I5Lv*kiX4uKaqc@0!8te0y2sMVce)P57Si+ zw*G*Re6zDuw;ZE2S-9B$O^4>VW&0ND0l(xdgu++qN`H_Kl-OC(wqEtg2K_j7AW(m8 ze?4OyjeMSaQJE^_8FFz{D|b39s7djVNF@p!brA|Mv7W`Mf_F1cnkrdQAdt^8>RfZ0 zc^a66b!7`00<+g_uJi6$$Is^ErYR+v2&ggLNYY``f~1&(My%!;h^9dn2~%GH;PNIo zK&U`KdO+?d-k0@N9*`{_aP|j;<+WrZX9xX?AfM%S?dSoW?*WttPVz%3SQL(R>N?4K zuO-9oP)$$eQ%R1CM}L#l$|$*CE!htt5Q=FOW7k<*a_~7UIJn*R0cuvQT*# zKk&KN!3CT18>!h}@oKa%z=kQko0PhG)o##eZGnZ_flg$Z!T-_l28pnIM!G$4-1|Bf%!mlqeCX` z8slpj^@#fGrZY$DhMsZNyC2Ymsn`WmsrS)t!8w~#ay%vK6TQV5zN`J|b}6*!dIZE@ z2M6~L9$UDXE_HUUP!eA8Frk5Y&-4?41+OWK?;$P{D5wWmG&PFOJW$BH0ufgV-qxl? zC_%Q)2K$L_iHXbX7@@cduo%;MV=S)65|6{P~1C)RGv{aEFm#nhh8u<_+))q}v|Y+_?$ zwYC3k<@>ZQMeOPN0Z@}wb1+d-@&OPkX~5k`K}u*SlB{E~v@EltKp>xG*wQ4+HM&>C zEjx4?YZg6wAbXVA$`gxG3uLKya9e#OewrJjm`|Mk(nUy~ zQUhgi{ycGa?mV}V2{8-n&Dp0WDooDq=gyzF&6(!RuOH;B+FLGaG)h&SqyypD|I$d+RSr8?>E|fq~PF?gOU1B!j?XI>8C6 z70vtS|8uc9^W*dQPPKb8D>!_Bk;1tR zejSJbnWh#54L-xAGBr&{ZWUx=Ba=jji;8-i!IVNi^aBawL~^%mW6XUf>T10ptFC&6 z>iT4SZ2PC|KN-EHJ=K81u3mYY_RarG{Y1cT0+#Yro)t}W@p^$icF%&}y6`{vvecDi zJiK2xpYk^U++G=2wspqJ=;zG(Bb7u?lB-bwsN*_dx`i@CSrUOXDIzt2WtkPF0+}oW zX8H+w9%1^pO2Qzm;4_y^o@bxRtbFhj(RF+V5D*X$=MdZ@cJ}l=mJ^?fJX{lgjZT=m zcNmbf;rg)S=B_@&v&ZJPmCO0-K3LU~#cy?PL3&b@#-Lw|^8JLT=bvW{i0@-rc)(-IC4S+3jg%ny-pK z5FoBUY%c&XG6P040AK(GZN%`;Is=J`lGHeDEBxSB4O==Tk|su+I^!5gfpvfloRT+C zNZq?b4p0K@wOhTVtgUUic`2ab*5%KE!)m2IT4v0_%&sb*Pe!1XR;HYSMyZW*xj2+2 z;(Y)?005a0M58PK-$&nl-JQPM+ugf$b+^0SnO$3RYv0ms-Rb`?&2Fe!GTAjU1d*T% z1dIqt00I!jZ(^V*us~HU;3Ekid{lsf;m^PmVm<)^)%s68NjDT+HQm~7R<8}2#oR9*D85eL`%%oY)Ta2pJeVfxL>t8 z_!`MrTRG!j;hN=yWQrf)OI4fLAnmM zCY0UUz&B}Ge?NcsntQ(f!Q^kZP71}Z>2%@1j`;%bKM8(loPLjZLyPK*xWYbbb4eJ{o%HD1fL>zU^!8wl2=%Ll-Tz&>!4?k`YL z%Xev8{I7--)aX$8uLr4vod=KLPjvf617aI2etxjNJak<%f^SN?oTxYLX*s1%k-P4+ zxLabmvO{Wrd0&CeeP@)G4H1QR8uq`$-+|?hRoSX_0??$*{jd|J7A4T`2|j<^cNd~+ zg_=g8m~)&=tTc2bRu-F}NKE^^uDJvv+cn`2ge7zx;&5t3MuMB35d#B| zsP8g*2(Ka^;{kEB>DzL@uOTzONd<~FYc~lg^koF{d9Jsr?zH0@y6};`?T^g#EVb+Q!L{&rzjwVwBa!8j{ zIDOxgQ57ON0g8ZewID6owu1?(B~$G>k~7-yLodDy?LbrR~?M|*3K@EajT@Z*a@5Z(2juP@So}n{Vwi6K1IIYpDr@8rpX(Y0S)WM zznr|5x&m(P{Gv{3gV64#ry42dGkEN;l9mA7FvkPz)qeV~>vK9so#I)c`=&X&_n>*6 zs_O3DwKVnB7l%$+MO{Z%*fbB}D${iI@sxVzT2lt-Rhu_ruV3tH^eL~a*gwNfZjPIp zY^9s;NomocH_TZV3!F^V=2%^ir&Ji(YT911^P( zi?i?Pj+#j)VU(HX`uL}pvgvM&Nv0%0QRPA%nx=qhG4!B@({$jR{TP~D$U-7|URcD%QTye8rm_c2_7$)!yPU3yFc6(L!y8yC;J_iyzYzT1) z;A@j2tpar2)D%70Z<2}y8(;=Z8>a?=?!5Knft{UzkfJ-gIy&B`>Qf|ssr~>_mEaI( z);46Ao2;_LdHrE*cC}P?0oi%oCU(VW45}u^pIR4O9DYhWU;e&CN;Wm{xFzjzP8;x8 zxcmJZJ#2ow(AbsSZ-Ap$_ZycU$k2I!kwOu-NC6$%5vRCaz}luMWo>qAdi*rQ+lc!v z)~OU;%~ot^RWFk?Mg3>okjT<+`zu^5O0t?BS1`tIyxMx71;6#GCZSOsbg4KxlP$>} z<${{CK-3l~LduJDt)#jdk+IUQ2|Hg17W6DL{DId41`OoeN6N+MF)3h}pcj(``M3T zKedZv!$1hB`F?ZrKm2QvmI?1N6$!B&d1s-(rmtPjtQrf8xY5?mZMildTio_Nb~`;k z#jKQF1zC|Gre#Js3k8abI-VX1=RkoZ6y~X!aw-xJin>wqO#y-_3nrUrMOH;sNll)@ zZ}yZPEL3}ZQf9I?<)|?p{hc@El>fG5AZjF`PbAqCWgaocUmQ{5J*rI=kObffeSP(= zL4qaL1^1W(@^M<{Fo03x{EqE(g3`@n=rx*&OT$2fYle&p_Zaf4?3cn)e!38TU@9?m z0RaI4{dxsS7u>&+k71}|x?M4gcl}r|k=g0C?u~k>E4Ev87PybOcvmlz3?}v^!}=?} znGRDeVtuXeB4OGtSI=cL<~+gmd%|aT5TwyzO>b}~n?bjL!K4AzAnBLfzWU9J!0QuX$Ww18u<<+ z!#oba{^hc%s>jbU@TxpiGKD0MBd$m&blZ)J;n)s+S(f5ZNy$$H#w@B6QP)adDIhMT z!EB^z>uER-D&jrG-s~tnVy$_&%p$2s)J!pP=h-WBGa2vi5PDf`5{RZb0TAQPfCD1r zgNjO`q)5t3$Bf>F!fos=yFYR*B=AvI{c?qxD(1{y zC*kXuPyiLP3vD{BQeEy^4`P+xvsD5KLXHil|`Y^XsSO1JH_(DHc>s=MyS zDch@8IZQ9bagO4tX1Xy@+ElV7onqi~m{OT<#QLR4m}L^>=BS09=*2@}Vwl@Ssu+|B zYEi@MG}o#3hnYMu6h*TekC7C9AmYRT5AcYW1B(m13HP9=rJ)jAZ(c|Txq>1_@hE=H z%=n=Y1~73C*hPViEEdYe39-pqJ^|iJSGf=zu+51sHQ;yx45C~KAXP2ICCt=8BO##U z<3J(NtqvZ7Zdy@NT5~uQ$C?+q0+~Pvsz|nKou&ZHfP!P!ZUg%*F%EZTB*TK|9RhC& z`4y~@?*6t}{wuWF&#&pJ+K@e~CINZrC;?%V6e;C7L4_#H;R!xoGhRK5QHxOyjAW)% z5>ioDN?s`-J*C7}wVW--`TQ&=sgS4S&ygg0AU`fSnT z7%8_p@D2Qga|LKt-uiLVZ|t>jX;#pi(b$NZh!S!Yiv@qnNtGbcH&**x@}}vvk#PIE z{fTY$-RjPdx7k{~?8~2j>8FvtM64dW|K#l$M*2nB`nk+|xOUER2Z!Sx=weOdL$cMF z+vs&SM$cQF9!(|8u{JPdxOYQO)A0HVoU{j1QOWg=m>$?eJ$nPABG7B>P5nCVB1UIo zpb)6)BSMj&+exJ);KZsTX){1IIs=~iuv}N2K*zt~x0~vO3$rg|=HlgEl9+ynhLs@Y z_5Pf*4jKCu?d7%Mdu>;Uu)zG@=SxG;)F2qVKa#W@QNrWusyduSaam5G+1sGKgd9K= z5_2^*HV-i5Jf*6ct2k12dG)?Un^a*=NA=7g@$t`d9$O$CXz|R@SMs;5sp>m)dOD)7 zJ@v1EG1jYAVHD%1GLrdpg&Tv!Oi0o3yigIgR1U)D9$*!TY|2P-X_S$Q+c5ThPI4E| zK56|lcAVJt z)itlt_P8Qs#{cziTP!CN{t%1Dz;sefPzFrqui`s?noY7wSl6s)!6P@4TMpH~uSNB| z6+Wh~&*e+M<1M)z0ws>;)84GKKQ}EEvv9k-Jj_);bMB_Bmr9Z6eSo^+-E3s;Qbl5S z3XrXC)yU0fvoe3uYefchdlvj1OWRtPZ0%~g`%Z8Y@xtxg-9unj_PiiQYv1L*At&VE zc<#PF+*BX-SIMF*-5amN}gyxwvE(==$)j-M>35=!%;JaB@F{8Aq?-HM*C7FZ)9&~Rzu zQ=1zTAfL2wluSp{?Vpd?$-!DvCW{R9eo;9XGh3RT-*Oqo?fnbL!gAz1ZB5TkRe&HY z^855c{IOjmsNnc4flb5$Enj18lVIi;v+yVz+sG9b&2nQeeWdN>xJD+$ADqDI_JpoP z{^~0|K6++*X3u2s5KpBrO<)`l@gFJoe2%IVhvh73yu_6S?Q$6c`<-W`22C=@W%(Z? zn~1#^-l!aOusQblZDpoGpdJzOEX$KkXn&hzCTX{*$NX5GuPm!W5~AcSGY*1d7952Z zihXIe2?vK)4lSW`=Us?cqpJMVcq-2iDQn2Z*0BTy2m3(M;(eG|l~;CLrW~-wk@=Y- z#BFd?iN~TYDS|oN>6cP79Pbz z8ussPxq`;-a2qFSY|RoBNV#>83FT;FkbEF02n^JfcvsYjl4%M+o$hqP(}K!` zJpwf;P835PS9R?5#7I(`dxq$tnmxhtAfqd&IW}On$Iuc|%X6;3PQ(GAmc#+k0XIKI z7&0UP#s8&9k3Ti^&H^+bVHy50RR|{+5I~GTKwUugiDBK_l5~dIN@Uw0=xarzwV;{3 zp@*(S?KM{?=@5QC$8#q@S2%2QO0>aRowgol_=jLM%wg0Lzyx>Dci3bZ`efhFQ}d=> z8UC|XiUEXprDsr&XuZkqjAf+I?Go&TW$Sl-uGYvyUC9C2eVHhTz2}|pk{9t}J3mZ$ z5r$+Hf`)a2ahx>h`S#u{Z(GQ&=X;8meaGZX$4u*q-wzqy_@{!N=yvl;om883@>3PF z`K6}ikDkxEt)gZ2xF ze2Df01{hYsz>yh3J^=~HB!oUqVsJbODSezVy94ow_8`hdK@FKs*sRn&%Up^$QI*YKZcFI*Az)-Y7_Dn?}8kT^p$p2s&eLU2~~ z7y9(Ofpg>x3%%#eIIaGD#{FrTl1nCAZzX_i4oJQ#ZbXB3AZARr*)FJhtLoqE&iYfg7cqq~#xpQ-|VPA_OR$$5z zTWvtCEP0^*J$N=B*e65Dxw?Yog}eZSCw9Bpb~vjOSfp2`|9*t;@K8|Ms3@U+zb2}4HZ5KJNX4r2`lgoW2Y&Dezj{uYg~auwN;f3)Y!fn0%9A<{p;;0h}z>BCP?q zlU2dE`R>#fY>m#cP&({whhLjV1JAlPltv?cMj|keBG0(y+uG(>9LR_M|0Zb5AB8oJ zLWCx7|3GsG zNHZlIOA(@UNYQN+Aw5m#ATb9NH1Hh}F)h(%0+Yg?Vq8i2AM#ADRs*Am{0ImO2$t5n3m>?eB@o59 z%_EKDb>ADK!o+axFU=5*z>_BikM#maH_gh;mOd(LrroejV?ZW9iZ%O*o`^oIW-48( zn3RPhnp>DT;&QJEhoz=*ZocKFs)%9Da+srF=YY&JOY9T^$O2*@MitcqnOxMLRAtBj z@BNc1qi)6iiImxvZrhN4CRJX)U0(jEPPw%oIzW{XghD~u6$g~I{Ukc`zJCV(=}(;$ zH0YR_-E;8`kOWB`jt^3DL{v$L%Lock;LFl7IhPdHlXa!!6#}ACn#||r7OAM(Br0=d zXtnS4?0K(Kt)}{8b8K6$O2w9g{e+)b7XTYTKtMqCUzyqHzdWNR{KyaIdyd5rIko@o zUr(EHMo=n`xm}$g~-zBY~}%!5XNUp|;E?g!39_rqN0+ zUUKxNk>|PbLi5G9lb*N=%B|bM6H)=H5+PA=m}@fGWY@{Ak|j3TAKyuR0$jW zC{#(A?OyefZ}|Gk`ZHpP)W%SP?7_5 zFeQna=%Qw4LaP$G++-$sUq*dHMhAw4kyIV1K(T|_MVS^^ogJmc+W@m51jjDV#FGr< z=Y0mM>`IC)&rj#Bv5>AoOV3lY^nwDOgylI~0SJh4B%uO}I}WJ9gCn>)0HQnlsEAvwlcmzEdqpwU`T z8Oj+$TiMF;B$1R5`ErT_v_X!6>%I>VMoCpSIvu=K+J;^ZyJhX97Q`VLFJ@>$!9c z&;aJoRSsq~HBe0*0hC*EKp@e{;SvBN9Z(Fw!lj~P9x#VyUiC9owL#AP0p(NU0?+$& z-9rB->4zHny#`Rn&FU3c77{OKcPkyhFs8=zbSGv;;g=r~4Vqs+vo&Kl!<)W=5n}_Tl#?gU<_pU;Qf-)swH?LU*Jh{6Vi#RqW6w|En=w zq4~tz5yH&)7O}vDyItTKj8}Ok!RqiO=+XRCQ{wLQNhww>e$_8%oWwidEhl&V8Gd1; zeO(ltje-uvA5U%0>>IRjJ(VK&XJU7hmBtv4z){UREDPJb2kvmuSn^=X!r8o%L*=Pa#sp=4 zb9;e9v;ogYY5HLqJ3B2VeeZ~d${_FoHJA>y>DTeUag*IX)&_ka`xhEpUK^k3RBc9~ zo&eZC?_d1(iB<`C^nnfvktj5i&pRiKhWN-M)h)7SI zD43J`A(B_!P9r9b>oG_pbzaG}O~=}x&-lqL(NmD&>(SB?parNtsKv$eW>FA z{i$}dJbriMo>PX*Xu}s}TiPQV)qEMGHd$bixL-r`3huNL&xL7I0XE~ZsEm@1!U}<2 z>48tWmrEro(1F6%RZl4_3qsQ7k)n=FK@@TUDM8U;HC2@(F(^_G<%LOw3(^_Iix`Uy zzE`qu78A+{@6LGSz3pCa^g48#ijvSfv%~f9*YUoa%Vq8V9>kl1ED(#RZn+6E;32#1 zja&!yU3_=nzipVpd!6%?cxU!b19?{bm$5a~x+DVLvsk`$S1~&nsDi}%`TnFf;&r}y z{dZFd6g|*?P+hzDf344HAa=^QMHt^CPm2AXTiFo2{@2jdSB{#KL7-J}=-$0kZq_HO zLrt!QJU_{1L89Oq?6H5V!_>3=^w=ZkSt%JaB^=aUNJSz&DG)wE$^PuP3&}Yt2@t$o z$c2JkDF#33#ZoL&&v0gQPz3#tgizkkRPgDWH2IB_{1aXNkgsohz`!IIW|${2ZZS6o z@S^^4PphvoFz^u|KnM^51TOd1gs(4Ur?bO{=c?Z3;|D%n>!~w!V`}^Q=M4siOEU)1 zH&mo>VD^gVdW0vp<6){Du+d8$Cseu}E&0ix$|0*Q@aQvht7LZ**i-mz*BTs#1qo-) z>LjeEuEL{^YSY4|_hRmzv%LCm$V%>dZGB4LAb-)FLr+l>h}p`TRcku)U|BqsCFkb$ zIa~dk)by^f>++U&8>q9--URVKwbD&o&@AnjQgT8e=iWWyz6b*2y6GCe3#DMvGF&&< za6WA+fswAjUQ$r+9U-|5ccv6_(ElWkq{zJuXp7Vr=WQc4@o2kH1eCfkEoml>st|~H zJVbE}E+{NXj+$y5fdM^#1d0I1WUDzD0*fLuLP&xb>Z+9^N*r)Rd8kHE3&@xjLMAobU&TN>vmEbcYzqH=EN1A(R(eOt|c zK-!2;e0w=oTkk>t((2{p>THE8y$)1iZ9FaSTH-!~IwoTxtf9L%V-S|C+BxKT%F1@T zH2r;(o7l$l;Tz;G&v@?#s<38=-;d+F!s!S$Zfmu1@B%oZm(mh3Avw-11%Rc@q3PdfQVttW7Oz`842e#K_N}v!gkH8r)#u3eb!=Y&_QW{CM;A5 z#M2xA2pH$2P3WLJsA-{*B7<5R@=K1Ma|7L=KmvpS0bPKljI@ii0LI^(t_8lg3*WDd zWsz@o+?>l{x)ByjK9yeQ0dk16>EddbTvnPcnFCqV^<9hKX#S^%t`{D@*^CX02fkU* zEU7U$v&qZrG{tNx&|JMMi$XMFJ8%bgyRq0>@>%`mww8{tZgC{ZW*5{cGtJR;Ok7i+ ztTfZ_`85}Q%`qJpjCpyiXz}A+qqK+?(8`4m$gum$ZBZj{6 zI=MBM5V@1gS9yKD&+v#k+ye*Xel#}hm)t|Z!&Y?A@{^>7n(iT!D=WQxt&w7^-xrTs zbwRFjakinb!uE5FjY*Ax*uT>UzYH(gpD3oHY_*R+N{fj;OkGB2^o<%8w5hfd4r;>z zK?1bIi5yA^kP8WjoxF+xVv0#~ukS`Bb)MD4d5)FZJ6PD=}rjx?sM)Omo7Bu}p6T}?>0)PPa zU(z&5NSkM4*GML~bgw*)7@>89nN5B6(fcgtWv)z)^4>RB z>cy$L^UMCHWp9IG-;peFSX~#GlXKsZwST)YI!FtFH%^*hs zJ-6FI)@f4o-);AZGZ_7-H5`8*h{lq4{@J&Qp4oaGG|d-JDhLf z3B#lp_{|Ch$fYcS{TA6%eSPXW7kc`$0Y(8PE|RHyyFKrkap+W>@nhTeeD~Rn5uH#-?YcARY(m8*y##+VeasWVV{fGAZE)D2RUpl0u1 zyD@eNzhWot-e_;rYqca30Xn8~NdSmmT8+LG7=5`l-d8?Qc7zG|gJs2;aipLA3aPmqFE{>udJC-sp1r`Il>5tFsrSUJXV>w)xI-BC@r=cPo~) zzN$*P-=1_!2lk@uYujka5uk2QFdHOi2$O1~cI@n2Ry*_@;~=yVZ)v{RSC-_!i*9s6 zp4xb`g|mQMi{slZHoAbp)(MIS3Inq4Zfqx-ifZ6o{$2sFItOzvZxq%`CjEa;VNLFl ziDu%tJo|lN4^WaQHWoBQ9 zu)xLyNsScNxAu~&bsv3YM~%aAX(sMpInGMtCCw) z$ySF9z1Io)=9)PdfE#H$`DDK}j~ zXm+YY>(Uaa4pWGCcpvaTF}^gXUQ+D+r7rc$V&>@t*#D(B^(D&=(hH_U_l@+EEDvoY zQ8-81C|N2FN|XSHYS4g$TPCg|qc8OBOcenM5NEG-{Z4@E3!!#DK;_%&@!(qWA_E@P z5h#a{)gBo%?DNzCL)a%$cf>UaYmWY!tPt(`3j26z&JA){6#RbQH;3NJ7=`y5+b_4p zJ=UF|#fSd+6|vn1Y|5)?{sPcR(8mH$MRf#3PvPMW#DyF!QUF6%nOf2iE7+JRL> z&d)C*IYDCeGOlNRp^=Tj`4v zx>S9;%N&Eo>)c)M*y!VipsRGh)n-Xfo3-S>_o-UKk(6m#3;Xi&(3$0e-_B+@s*Q`! zfyPZN*Ii%BiLsG7e!T2tMmey!>Cf753QR_Kwl_RR=FlyKgdQxVz-=%PdA~*IK>ja5njRFyEBVf1duOn}Yhy zz42yWLKf5m(ISm=>#x|j=u-2=xvc{LM4YMQ^_v$J46|$yo7$9?$}XBc;asZ1IIYM4 z_Xc*`>fgRIHRCG{H%xxR?sVb)iNpU2o$5E#Xiy~?f zl?7We`S@f?I;AcIE1#tEBL~#V{>Z>*uk{w$&k{UN&K7O$lG%^o8ULFs2h^z&=xL*u zAq>Ye*!Wq|Hi&{i!LVRcd!Cs%$^gNjt7u7rrg5eDDwHFLN*LOMk&&cxvW}`Dc|J|H#fI141I5I- z(y8!@yFeLveR&$Ic9)G9u)1Cb(~(2e-D8gX%bs=!d1)SwC#rH)TLdu^ErS9@#MPB)Bt(HL z!2wyy^HImWh%u<#Kjg(6&tTC@zNOLklzDcXHFd?_yk^hH()e{eXZO54nyUlw_`jl) zfZLV^ZI{vln3R^yfw0Be{~sEBlx4&c{PXJoy}Wzv4KENJ+-#RNE{4YZrkhu>!|)(# zG~*a8Gxuo+f5B2;QkQBHaZ~1Oy=%2Dc1vBBH45jKD7pnfk6OwHbxXo`wdxTA90;Ms z)zEP_?HVhNXU|R2rUC_{cati{<9d3uz?h7VHLsQ z{ANBALfd?}zVm9^P^+4mo|*_E?)gQQo}j=4RpTpjhEaHgm2CHE#M6JsFEY(t;q9rG zvSSuc1Q`ubo~A#|nD@x)Kj;KpxRZ5*rS4RvGb&A_zJJ(BX#>#5#c~{vi&Nm-(CEpE@S<7Kh-g3wutmde;XQAACv}FXzrSB9@9QQd zgZ$-EL|0|u0tv=KTy&2I6M3 z&J&d%K|qzZ@BvsLaM>3Rpj?k+GnU2Ka{W%>zLRA-j;JvocVJ7UiPnFr*vA|B6#kff zBAP9a*TDa$=-uFDYS4NW&%sc77wJf(4o*GE0O*9Xt-4aARVjn3SkIQ~_d1 z{qn)`HHpkctzl)LXh>6R33LvBs=HAOHA(tUU1#>x^8HV0w8(RJRmz9M?R$PW&!C`4 zLPCxtWhOcFDG9{TRzTvgc}vI%Nu`GFP3gI9y_PnKyiO&{3#0v@0FV?+3fpiU3sY0& z2(yGZ2O0>mlExt&n)5MxL%Vh5m*1X5o#@(qKT=E8AC~Zmp+XQGq0gdqI71St68Kb+ zFev7@eN$3FOIJfo>4K8VNf@I6MbjbZ0dWt|{Z6Ej0f`wxqBOLczVHDXh+%oqIe%IA zkd)IjBlb4^#lNp8%V)EjNlW+O%k@99Egf~7KzCpHXU}YFlas!-77EH*9dtW5(^bMc z$U1@=XyHg^0#aMiN|7@JHAIgKg-kypcJV3&h@2p+s;njn(nu_ty-)33U1lL7DXUwJ zitB1U)k-9REh*2y-ZszQ-3A>s8yJFtUysXU0+}LvAx~23$0do6cxd4EX zAu}QXfIcWPm+fa$3MQM`N=qgbA3WDm6EDfh5+!e^%*+Kq9_lVSh;N{X+RGg-bIbB} zZy%~#Ynx7wqoqV@deMVBT30)o4s@vH-?-?bHyx^4DN%Hm9+OL!WPH;gPyhfk0#Gyt z0RIMi@7uk*+irK;o!z!w)24NHw@uQ$E^F4^wyn}->Do5rn&20SCLkH85kLqcWfcel z82kdG2B|0_AR!dzs*KA{(Gi=-laUWo$hza(^d6`nzmfYH zh^RKRtljywOh;P+4xQ>-y;`J&RX)u?d!044R&@K(*rKn%=|oOtq^})oW|H8~9P~aN5q&C;Q@!-^d!$j5gV5)Jm%o=;_hxWI|<` zifdHvF;&&^@sk4l;{Q(=X{$5`U9Q6ByIn3^J=&t(9yk2yc2{!Q71G;wsc2=M<=~53 zd#NzbbXw_^I&tY6&un5wE(vF`BHdPv{e!b2C@fhg*=cps!!g+6tdJUrYn_p9dzjdu zQV<9?bMK#A{knnbeuIVMNgz{2Fwn^zs?%@(hD0bEi>EvlwO}; zIn*Uw+sxurBVw`t_dEzjZR(}VZt$_t>+0OqGWirT5)LL^K~{OAcbX{WrW&9Lcc{}g z&}Fed%clRw;kQj~FY$_11H8Fzs~y%=6>8b7)!LkA-4x5$rFC1+m!-?(Sj0bT|5yvydVTIuBt?|h@nj*0!v?pQ2NX^Urw!y3 z-4yP&jjiZBvzXUf&Ya20g(fbeOl{H+c`+1Wb}34?5~;ulUMu<#l9S4PSNxVQ%Vl7q$bta@JxSuwA1J|=eW5oWAj zbKw)7lpMznV!87g-%$E9qA)l4ITJAn$C|1F1At0XDFM$a1QCeiR5a5RqV!BN8QOGF z>_%G{ZD(x68`Su3`ZZg`9~w-Bat2yz7=kJ0+5wz7&n5thso8=(feAtYLQW)JqA9Yo z<;$yD*nPL_Ai_Ln?m8ylFqwu0Va9RW01;zCZHttYD0|RfsD9%upAjp3akBj<`)JCj z_Fum)vDXDR-fVSrx+~)A&t`Xo7NGu^b!yO`Qtea!U*^QlXHi*?JYo0REVHD$OW zlB7-e+RE}5NOG`l4};hel=DC*V^XFLO_76nJ8n!8A)-{sK~k>=zfU-H7Mum(feP_C zNOEvV7Sg-Um=xfc6DC-pyjWY}f%(`&Lfadx-20r0u zkjHFCcK_tSSow_9MKuf(rYJ^9vh_#-3XrLUg~yRZ?gW#LDby&xOHJ}Pw=R_^+6BA} znXN-Zwqn3J`2UW;O*}zsApK@vU7b-esT(j$6FR~n+~tX!iDE6{o@c32cMQ4F2#roo z&FC?N&%$t$|1e(md!IaKN-oE{QJLR+V39;WoiAl5nQgZ`ET5p{+b$ow`>d=&}Yj1;{>kb^+O`SObSpQA~Vraz?uUQ z0#Ju65(~BFDx^}Hoq(gbft$3x%qTin30l)5*m<-x!Xb^kvZ(K^)!iskY-M-D)W{B5 z^ED60x_UQ|rwAy-69o(7Z86(*HXu!SPdRBJtVLyvHe$;wC-s|=f6|CkIV?p;IxWI0 zG@4dWp8vnnu@5eBBVKVcGc%Izf@4zg9NIq7wc}tXEz(Z}O}Ce^n#Uqbmn5@wOYyi+ zHu13z%PDl#g@62Rj|JNri)yR4lYCj_mo$MU`2c;7u)apSp}2Nz^edgK?8I0J^NPb* z-b9P-a@qu)CfTd@CQ^(vAbE)0#%!QO`<{7-;HPbn{MUhCPqz*{ai??QP~1sm;F*tp z@%kj?aI<8HaQFPi0{Qe1PyD9^&;Q74%;cr$ZzrmI+hVC$A->EDf5#4|@UQv<$<&FE<8HLm=)2i!{4-R0vplDLEZ^+EWL{!%i!Yiwf`!-K1F5i%O z^A$jRoo;KBK5A7+?KPlw^fim*}dO@?8_C~#dX8h{t7%Ujcq zL#;2lcBVr~#Ni_7@xP1=;J8DXXvu|L0}M03NTM3Jv3JQ$RSW%8n`rQYY1`y6dy&f4 z>VdcNI~inTqdVXqTi!wsG$F;Zzx}v9pI9kM%zkJLgR&N|3ZtP<<51{EmDUuw-R<9v zt4oI)zZ+2Zyq}-AM#^W;;lr;KcwokiGguonV5*V-Ibu!1c#!p}`XJtRZ5sCcv9o7C z5&-XS@!DNo3m(63CL}o{0(cq`MG8w(B$3RcGskO)#innoQiQO8jA{&V@iXPRV~c55 zzEA`bbYC_qh$RNYku6+(sZg+!y^$GE&M@K2!Y(DqNwEc~Jy)W2h!MAE9jp)%e&-8! zbVRbUxNp&wNHC6++!4KekB}k~akOMR91_vnO*)saur48{^q-T-?Xg%O94PUUN!S|a zJpqw`I53nAi6C0Y^YK6@7@Y5`b4(7Bh76z?Pk@tR|9vo;kk~ma2aWhdBx#n=*YwuX zDRvT8)xX-C_{>%UH&3710v9PQ@n_YYRKA|9J1tM-o00J;Cm1koVV07N!X1l512@r1 zU`;o)-mW&hJz3ZCHu(6B*0}nlH%qug8yLsK$xN&wFmK4~EC_+a5(+`SmY2zTa63+FFxoBZQzk-EXs4A-Ajb&APXDK~0H~&Q3XOMR>At z?3~WUYt}9A>$%+7jmbwA>W@ojL3GxI<0po*e^3Q#$w#?+8jQwo7kk;h{y*pW%?f3N z0z&aBz6%99!OZlYo)X$BMCXUVBeF1zHk;!yuAdCGi?h7`HYNSHS!Pn>)4i1$FEByY zCvHlard@r0()u{QwBU7?W<-73wYD=?Y3G1~IqG`;Ddq&s(xG>B$YkE2HZ8YzD-UD0 z5q7KpiD~dJ)F9RB=t6(oWq32er=N(jUUAbE}oKq5v`4x~uuXkHP765xf%E0ILC zMW9*ANxVFNk+QKp^6z*qFxMHg`#^zrv$G`lIU3c_PI3WFI&1){`9%G@jyXBAS6h1PE#Q_p1QCi@sdc1B=#b+`v)o)GB@&H0O__J;u1q500J}>-X^iNOONtUb0wa1UcGZ;UC#w zIgrg{`8$XCr;=Ljib`tPRNR5;SfjqYs5sAx|6nrFO2sPHqtpc^!Q2~OPxCXazw8@_ z1Q^|iQ57%~QNAV3$oW6f-!VE&A~Fu$n&dZ&KR$xQ(c$KJ{crRr2cz%Q%iI3xj@^bF zD)zhiHtmYdcEsfX|nog zd<<`dBNB4XCu$!*|cKjU^g7wTODrM&1bz2 zAmRRHN>3}_pZvN8%Rz$;SEGFF#Oh^h@$;<)PudDhg6O zu1V5I0wQ-AN~0;kOia}B??~F#U#f1PBHwV|(RI1Gl5N?%`&`SW&ivQxgx$QpTE${Q z*N;N(1qu^RzE&`_1)#~)Xh4%>-Mt1CRUAqb#Zw7<3do~vQ&P4lx)THAP(m#I$@n!v z_(6tdYx)s`EXc|1<8;E!bIx$@V`kRLi}0+Pwm|=~o?0V{WM< z$9nTo7!b!qsWX8%i_K@8{cH5%#Z2Wp8o~`z2FlX&HSRUJY ztrlgZIyfXJ5@Mag@F0B?8s|wMS&j4PErfa>k-T0?k)KFn^Q>DK#i{z&+mgrSelWww z!1Pf`Py<%4G&|~^kXqO!-7{8&)3@&}v16}E%KTQhGs??0ZPq>GYNj9I|CqD+$wt7- zRnvB*XeV~FPf+(t8#R__sfD51X@j-z)*733mL~InoqAY0-jw-Kz<%{zYPWMb?;YGL zzzP;{_p!lzIpQ|^9NeVX4o`%>gt#3XeC&R~ncW{s0X82jBRqYAA~EJool>-@zKiei zEgMxrxYa+?yRX3ckiWCz5hp&#EnNrrrcyb5{Rnq)?-_?J#b?QetP^A2D^W$4qsp5= zzjtEs;;tO$wC!-7Gop$7Rane5Nzg4@Cs;lnLEEhvr|rG1btR#bo#Ss^E@~!w_T(^D z)x#JDgsZDm0;|*XJQJTEuxK$+7#ig6Z8Nhm3ifp>?=vyHHSpLMqi>gcU)R#h)>4Z9 zLpdAkm@Y*0B*|H5yvzEWyjgUCJW5oPJcOznyhr^;+SnJ;P+-k^Rv!yVKIY#_h8xCQIq<7<+rMes>5*D!?}3cvpj zs7|h?9BC>VXN^2ue9$P{4XL~V8MyYo_jQ_mLpx5=47MH_*&luR4MVmL59<}s=VziN z6zs+{o049_a0iaK>_gv1mh-27@t@Kd7s0%2J5Gc3u_ma*VoQ-b{Txfj11ol?QQLyY zsW+h?JA%}9iC5Ue&~yi|OL%TlKy`0r1t>ZC$tWlpC6zsx1_>uI-Sa@Suc9sC@2Ud^ z&pGtxwU*r4-xD33{W@OeVTqUu*c5SbKqU!!fWq2ozCk(dGnya;((x&VNR z7ZOYGc~lA}%8KOE3>ZT>jEOX^G_^*(G7%(Y&MFd8eJT$W0G^>G)LdLN$-8UF`IdHC ze?>+An)^&i z98Rs;j|IHPdm-c@;-M%{2EEI?*-!W5=cBJKK6yAmz!0)zDRrIxFsRx~k-=vstNwbnM!JGyo`u?Ix5JPN4=TC^qTM$+1ci$;Oou)S zpy{X`l6gNlozHjLtYXwXl7R$(cw>p?<~XQL4gdnCQBYX)953@wQ)dZ5B6jK5v6#`y zi+OywJU?elQCH`g?zTEtkrgAsIv*J!YK5mp8?0^{iz(aJd|{)jkWBz20$7$U6aXS8 zaswPx%H)?%;)e=nMkj5ivskHE1lxM*)U*#&9>it)t1Vsn(3gW#{RWGqhe zUwDn#%CZX5_l!dF{konh8Wx+VN|ysEWu1^ka!4Mr6fF$QB-9+95>OL#$lZ9&K3Vb0 z&=PkJJ%49Q0svv2_2vGHXjYm}9aZ6Drb|Y`dzvsmZha@jgi^TRJUWs9ga`BmKyspd zfG{6|DjX&1ID({nM~Vc@O5c;yooVg9{<{7nU!pdzn{(!m-^Q!NRf=}QXVvU`M>J`T z;ApYa;Wbs_&IF23dB~Tpr=anfGdqDvnoJ^an*!bB_RhY zKpVFUvEL*aawv=kX}9yYN($Fjq;3QYEtu!)j1hZ$^QmV7CDLUX$^u_AABiDu`= zXHfW*%!=kj1ETRNzKaGv!9w&(&@$tNgD$2bSIdkP(a$U^W-);p%4_1<^{Y6c_@;!q{7v#g|qWIkxUwJ!|YBTyT(8fq0W>D`_9zFK~0h~N&a~$ zJuC$rCkH_Gl$C%W3Bs|-Ic6l<^?ikQ$`)t`QT&ct$BnW&fjE*X>1R=rfVL9oD?m!LIIxU}*c2de z^Q@ZW#-1KzVkaT{2*>|Ra=)iMa{Mgv0)@{22hHslRsjc?pgnV*=8_Hb%viMcRC)fL zgVec_9sns1ga}kp1)9M9ip^BRFfWsZG%Mgl$VHJk9LW>s=!O&?JM?+*Bw712;UBn< z(tm|ha1Ik9iDJYOrH4WV6hTW45b0^M03Z{p2WUxPqa#Q}m*t;@kTQxj2F`F&hRU58 zbNHi|sDp6Jmj0l{Docfhth1_6I!(9uqwx8hRjwA#ytd+?-T%L|Wq2+vN_KhfrrEA~ zl~lDBo@LZzKXx9|KtTLF@iYhKiCHKCgbPx_9z0@K_n?$|0+>mNg-41UE3|?Ap9u>V zn^#UJTRry(Bl~=YEe8=3d4liqN}b^7zeP+~tK|Ttah`MacP29SCUX^3iXbV#IU_Ny z(h7Vj0j7>9WaZ|4rh|h^dtDF+M&Yq0CP?DCrT!VnMD5cTtCK?uKFq((Ovan`+}=E_ z&Z?k0JbdN1E&{&!z9@|S@dbRiy={CNRF0EWMIx<1x2)`8c02Jkh?W1X|# z&tg=kNMu#TCQ;Yo{(``&27r>mJORhP1~4Fr<1DVy(bF6X6()}XuR>mmB&{vN?C6kr z9%F|SviBrrZH@8rzz=3xeoXnfo^p{)A{A$e$)7MQm#DY%HAC^#=mEM(=H^0dgnKH-xw-F-eU=k9qp7bKD*i4x=IL}fL) zXwJGhX;9f=nJ^_u#PCWCTmC}l)jxcSX{dWth`_^xV#fgShI)$F*M@s=Di>+Kn=m_u z{p~3tOs`hR=3>Baxp*Uv%2bG0unk`c#sio-?6k${)lvq$Z1pf|i)Xd!!^2&hS`rTZ z+xCi%bk#@ZhC|R2)&6BR!e=6ekQsO#)CJgzAG) z5=AwDFpNaGJ`<7^Z-}=}iMcY#;Myjih@H?OfTs1P2*X_M_For!08YK_7$kvl_u z@emQ}WbrQ$RHEEe(?HZyNCill4mF?%BIhi^@J9)SG%Mgl$VHKQ96QwMat%16^B$E` zz+qkOjL#DjEkK9`kW?ay0VpFiD}V#lYcn-;*hbMN_%64>0G&W$zxR~~(24&hD~Gel zppucqNhC!Q&HpD2D!q-5C&R~n1G08RsP2I-R|An+wGmUxBuF9tJ~hKX40Lu*V?^pZkv$qsl99&1YydA z5F>~p0tg_&i=aLW0s@g5gk&TLRZvhN1rPwg1&DqC0YL}&AL9Io!KqXoK+_a-BtcmM zl4dfPWyAC78!phg^b9&KvK*|>1>6v8^o0dC7#gFC<6>qezHIjN2K($Asgm+Sp_;rELb6m_c$ zZ=9E>1?y1l0v`#aJjI(TMSz&LyJF77x3IE!yY5)PHwVt){vziBal3k|n%WTSc|Gn@ zZ4jsZx9yyHkZzmMl9!4O@dg{=PqoWo{5b4t8@pf4mJJxwc0RiCH+6tDv}3dQ?XNV+ z9{r<~s?RqN2Yv0YbEoMZX$o$Q!(}e_>Y?z)>uRDk&6Rj^ofZ2>vod?j99VVbO?_cS zhBcQ}k<&)2xnJs*y~%Ts671@wWC6GjMIr@8uJ@Idp8mkdo^4pBzaQi$RM8zdr5iLQ&lSdwY=D5 z9f#BG75Qf{NUP4ZWV_BigYz+egDO^XkO0>x8fq*l=$)D%KN;NODFXrIEDg^yKpokr zgLOOTPkBf7iI)prx+92wLk=ByQ_3GhdfltO4>A=`i$vrJKolnCgMtRaIwGJY=SUMM zRSrr7^*mTxbG~XSYa^>jz>9QY!aeblQLz(w1DtU-d5gnMH&QH-z-EV|qZGntY4=P= z4KX>846$Ms+-~n%1|lWIazxUBLSWw0&s%XHyDhKMIoh`6k@C6?3wrHJ?se7Rwdkb| z-cQm1^>akEne=|HyO$%m{Vbb8or%=b!`Kfx5uGpf4A3nbKDfH0@%B0_oGWo7=HP3? z-kWnc|_(PV6T$FdlC@MkP5vBcH= zVW(wXrokcxQCxwvaX}yJF$(FD#BcYlYtQeVvX2G(_W3Zq+q!x>UZ|>DJbnWF4`bcFk!Q{} zWSBdgWsmssVQfycQ(QuCa#~L9r6?I>%!}Qy7y1Bl9)?OkU;4gWA~rS7+%U>JyM7~< zOcEO2#F45uuhi`T8gGbVg@V&a%A#VFjAIq%Sareh(M zf_d5O#sR(yzuZRPt`gIzzDoUNCWFw}TsQtr=Wm){mt0~q(PW9+hj1ERa~ll&Y^(wP z_g6&OdRh$s)6_pnktT#CPQ{ZPRLhNY12k%uNU$|&Gzy?5hXB8`_MC0*oHn&9k{cEJ zvvB#nH}@%SNhnV!EEGF3$s23(S#f(py#*wF0h-Q{odTSmjuN@^5b;OPC*q|9FH^~5 za8NXdwAIxx91NNyg;{08{7K7h>EwuTKGif2jbalz9I{TsmlD2+5VxQEHg9&U^zAl% zI~7`UwQ-IwvepJnT zbI;Xp%~c!R7Db%0J%B&no8dX2-@K&PDn_MmC?|funsJ7#SUKLfhH=(Su zoL}pl1$@@7t9IDtDeGaikt^GB(jJ+uNFo|-<7916f@)+8=(FhF+_#e`<2iZd>v zGhR!j>1(@}QHHifMtk?M7F!(?WA^YVn>03eE!(l{%x3BMG$X{Qk#*oeZ4Pa@qev*S zG(k^o#W*}oQk1qVqgtd3Ag~G$j2T(9k>2XkG9Wm4XU;%gK$0MyD_C7!>+!RDi{Z^i z{^Ge{8+)xeB)pRfzYOnmA94E&CIHAys;aDw3NZwesjCP)#2h4v4g{$VfmW zD*+5c!cd~X9;J?EJd;M=8+Y|>LT5nQlIZd+tVOp-7Re&9B;Vv(e2aaNio`_%NV3!`7;MjZcr0?XZI zX|y|ESrcY}O#ZpQLciWHFVdwhdxs8J33t1=w?fL8-?lt^Z*12xHAp5BI5>TM2ac`T z%zh^#HD+Gji910n9Q7)$?`XqAT%p?Hw76?)r_NJ*Vo732v3RLqHtuCIa^};5qgxeA zKwj^Z&D)&e7jFW-eSeT!Y$&FF4z{2;(A>X1)mNc?(NX=0`|*EB7TO)jZO7xd*%BI# z7s2Qs%%!hLL&F%^9cFzy1<|_l#vCQI@-&tz=65)2be3&u1D-ex0U z1BYrZf;k@lqj}{lld@0UFImD&gqBFsI!+=4Ca(h@65&py#2iBndl;z_eMk#sA5At@ z38(b!IG38yQdz6ne=I|0eiz$XBI?sJPA9o94->cqi1mqMh019nIN;9Ff+)a;2VH~s zLDbZCQIQ}5Td17hGnXrpP<_ImEQ|L@5w#isu)$1NfUo-4pXk=fynwP7v_n8!qGdcF zL(5TBA~@tg*5*eC?K*f&4OrX43LRAJ=ByAg=f@Uv#;4wvGwOgu7>?s1VU~`?1W^x} zSrP{c@Rf{r+Da{^*Uh=fSj_J|TiHb6p>OcI`2Jy#n06SRqOqb$(Rj{a67WepGqL$a z_c!d!(%i$$YJrRXulQfs=$7-PC>+m0>I&mqODfOnLH)f|r|}H8?{^Ous*LcV&2jDn z)A03v5$@e*-WEZ8E2-doDkIzVjhWgg;aH_M(wOH0MBiF%vsk`M8HRMH7}njbEHw(M3H1CN->T}q?tLA zm1PBym0Wtl0f6bdFk*jI#HulU~w5X{6<2kY((1T~%`4T+>%%cp_GueeP7Y zmX}w{()V2R%&u@eBbUBwiV$J43#)Cdy>SbDMEY zd184TnB5EQ26?#Dl)It2<{rh#t51Vi{(9XT@@w^%QauyBbA_rl*Nnp6e=0pfcP_+CGg zkx`L08dT8djcwi5H6JT?zaX3NmF~gkd}2ys2{l#$<}vB#ps)99y37^bDiwS+($Gu- zH0@Szo0QcB8@-We-3*rE;DhX?w=SNmE&lD-#rJtE$T64$|59%ApD`ZmAGUlWhtt^G ziDS62O2P1lrVm+=9BC?ErDRa3V*;V}At)Y7#Ft{xAx{T7)dyJ82oMYfva>c%7|>CD zB~?)wTs?L1E;?cs>|_nK8sWN`qX=EHxB1!6-26m|rVC6jAV3QcfcthQNKrlZ=~GYB z%jGDpApiK!?jtnILbddYEZR77~O4l z#v88FT*3IFM_F;oflHJ{&yYR2|N72O1)Fy_u?YsQKTN`g#VB`9H{9tR$BgyvDrQ1&aLvj$IA z_&SF3zHt2s6IHv!-CprR&?Es=(tA)U z2c)D4IjBX6=NOs?MreAbsz!%#MVy-!x^@Cf00G>gPB9{!RFhqWCQ8Q9OS`nG_!KKZ z0fK-43sR(Z3lQbu2#75JRiVGmce|l36*NEu4lhgW1pr#{{xvVe`*Dw>*Cc9Fgcvu~ z@aN;rCcK#DfqT$woJI>0tAN0%we3#SXDzvpK|jF!reYH&6Kys)h0sSL5+>#dk*IbE z&x2Ggl=fwu(3bHgz5uwI9f%jh=}L>fCLjDZTKfvu@nO}DtEAp~WDW61OPkSHX3WdU zc||*`=W`DIf`i3YWtpRWR&7*BdMsQUc&O5ntS>Y*9g)HV=wNw}sKW+=#DGdpCLh-U zU`ZfAG87}_GtGhUB1jclZFLSQPF}8TUjQy^C%#q(S_ApIpRo=|0)Xenr_XpR6*+vfyBb zMDfIY_evXR5Y(c8U_wdHhOL-%22>=u(8U1VRom-NfM*M!qL5OIwa_33%Y^hCZ~!Ub zL<=CzQ}Z%OFi5rTPp0r};S;_9Aw0b*gYWp>Fm*_r!k-!^&%zVb)@z?=Opr1o_&KS> z`*ZRsVlwJ)hEKObrvA@+4&`KiB8<`zrwULGLqMrW5;Q-Z^@YK-^fB+ys3lRA}%YUttesd;IuY4%K9(>lc zQnS;a8wDf#ObvoO+j(rbscm5HS$Pv(d5q)#&X8SvWix%SZRO*XHHD&X&w|j3 zMqAdG#(sWjnK90!Jk*TSa!fFbz_AsW+Z^_3sHzNTlrTU`9pRRA0t7<=%PpkL{kI$P zh%H((9HrrLa!A5WOb9xYt<*|O;?O`2o{-a@IlaO=SI*mbtZWYM5c;7qKX3ym5nF-y zOOB5C?$hMb7#N5$a}U1tZ9tj!=JO*J!<$y*L!AeU>~?cXW0Z1b;%0ZrlimE|=@*6K zcTi}{GXK}NG(RO`c$nR>uTLOb`BuY%6z~^3(y;f6aVA_=U7Pe33`Ulx%CF8KVuvPc zNuSAZV7rvBUz6w2|F-@qA^(;=PeJX$?IO1t;XjrZT~{X~>)<7lq=2*yjo%K$h)FrB z5aj8YYL#IUf>iy1ri5u3G$lRF`cmh(ML#taJul2s=eW{8OGTO1sh(V8VRPpvjp7*X zS>VZ~`?X0=VC)!7raAbXnbck)yQFLr6dgwOW8b_2*|(}ER}=IcpJ@+@92a-=;^)ubL zAc^4bGuxrSqBl)mUbr@s_%gVe@(adh6JX&sOoGhVW+DvsST}iL$-Yd8%-Cj980g;8 zn{SR8+e|@*V>3xIfSV@DW^6NA8E(yl&5Um*oiW~2b{OWgIq8_O3&k`e9vsn88H%jh z-1k@B1QMD4CKcRi7$!@DWP`uP_fvRIz26j^e~-H?K=q*xexjjeboEIjP3OMxBukCN$6Q!(J4jb0~gIpdtd1>=Fu6&aw`*0{<#Or#eFZTZ_-r~{gs(G zxhs`hw)V#~?-K#n@Frcm;fugd?~Twgu7*PyUx1_+)?n-br`xA=udI&~IP@3gX!s~Y zF!0#VI+VZ`@NjV+py}s`6Cfpr7ywW>fly7$4Ki>Z;G~hw3f<^xWlkYC5XAPsBW^>WLfD(W#zr5!0jEKq0Lql&@Mk36P*=7YV`mv0VGfLelQEkhY-VO>Bz{SY^5TRAx!O;AwsFI}IFLuyF|lCe+vfO#%tdyX9)PslDZN8|YQJ&gH$LIzetKMqPvU;3lsNqNb@& zki9zC;&d0F6|cI2yQcsa)Xg=3M77mb(^N3@-6d|XA&Q=?wJOo#_*{Y#=~gZ3h`t~# zH?>TVmiA+(Q!wFDll&~Gk5b!~mW$G)OW)7ej2s-Wt}Y0cw;tho?pqJ+{Q=840qJl} zbHO$Fh}d%%LuYqYqRD@Vu%iJs_O7?r5(Mt9+6Ii$hm-73UBWWl)dsj(yroYdT4KHO z+Va#Ze9eDzLan;CQJ1_x-wuT(G%VM?8m0{O0pAojvu@vg-6||Nu+@2aTGwp)kM_|H z{g9%OTO_X-mu!1W7fHVf`DwI-Vs{u6x?HimVfTUa?L~Md-05HwJw{CT)TYSm-@d=} z^hZn?i23ixT3wRx;X@D0N|q@ygp6GPE20EU2I_QfHwJXlwDtLYL&oU{A%EShjf*GWxJW@PK*OTH@S zJP2vNVujC*y!b_+hc%jPr(e1BdT=x|R1nazfjlJBjtGcBIjSbf=kn#uh=-dKkF+NnXxLOElyO^sAzqXGo19MDL#3BZjY0;3qFg`x4ok79r`Q?F!S zjt3+7-{yAMuGiCxq-*%9k zPZQ%VmJn#5T)>!Nbh7I4o^QX6`x@lb6q7B+(`mKsrQO{MzR6+rMUmk!;uOi8*N;*> z;&I^jwvEmpk2H7{*S6p7x-!XI^ZD^lcMM-*|dd-nvv$B#+&IpOLuKOp!2o^gwea)y= zRuk(|)iAv)!K3a&g^#0>emK2Y8?xg9*FD*XJRQGyn*+$5zu4M#CmAiv2HSll19(-^ zm>mm80W`o-r*_5EN(!D6y*`s$O7-?wv$ruolvKixD9(ZFj-|k&cDg>@Hv&6zfeo_cB~bhD@-Q~XVjrk|T=T0_%0(Xz#aUtcK2Kqx&9;4Y zQH7brSXW1lltX$Mj2)T3ugGbDQsw6<9}Uq>NoAt`-EOJrdTB2w&9u(4%<=J6Cy9Ao z_t9nSr>I6^p1f0rgS|~9R;=*sQSDM?f1{-_rbC0umGR-b-2kcJJc3gglVnScKX~Q3 zf124&%tDbsFwLTj!X$`o6-7h`k(8@Q9HT8utH2)>5UBGc2O4^DwRi|-ElwU`TGFF+ zZNk2mhogfO@pIp7QprP%4rE4bms?(ja9hNXUr0P8vNl@lwydJ9|3aB!WwqU#$An(W zHH+hV@(Z?T>y@q3ubM0my`o>lELzbvn9HPVhU>I6rbE%Gl4Xdo#mYqoU7|r5KTj7> z4hw9Fp!@W={FR&E#t{w-mxZU?D-mecVwyzxO*zaB!XJ(FPr+%uQRLeVo7b_?^K}`f zy#~+v+P16vHFl{kR?2Ry=6KdV2_J$M(n4 zZL>wM^&=)Vq?aNL{x%UC`r}s?b9a71S_iBr$x>h(oB1QTQh^*3N|kafE{r|q0$5~n z$8ggOEk8d)X0wJ7Y_PwYB0N))o}jRIQEu zF`8}q0THS-ZW|SqqNfQGi6{@KKMuTUlA?|zCvpux4q7xy3xc&!Vwy7{SP>wMN;36o zUZ}b&=WLQoNkf{b5d!1lkYeA&?TL>CR2_Z~aVP);+rEty>a&5Y`cu-mDWJoAYza&k{tI6qb-0uy}{Vy-M3ubciob`nthVLWv~1D zxR=}t>vRA5=}!c8lCisN;{!fdn4oWr#=bh>23#Fe4&r1zOP8J&582%!a;5I+SDk9B zyL6P0NZzWBnhi64ZIY6Sm{~Xutv-gbr|KB8wfdNs+DG~CPTmJva2_EPq-?B=b*9rq zBOO3eRdv%aEtQfbzeG^0G2eX}48zHQ)fBqD_T}I1lu9lXr8ddswU4(BP+qea+O)Kz zg}ePntlYF_ib_a*t;#OSSTl&vIEp3aNE+P=DZ0NeuQcIUzx0~owadq{#YtGw9-0!q z4_q7HT=k1Lwsu{QoVV}a(Re>hT_SIelCb_7cY8JPa3_ajvM0@fQi-J`I!Ry*tn@_k z2TVJl9scBbaIh6K6Z3^cmb<`Z=FoVBCLkWhfU64l==9Z=dhdK`P2E#oY6CSlHhh&> z&4#qjQ9^yTJ0pl77uTEZJTXW4n=o!(71UDA$ik^<-Y7=Jn*zb|JGSF}wJY8PbD~(f z8hA(AI;>}T0U>I1Fhoe=rmODZ5cq@(YfS|knly}I3e{bR`^ zZg$*}82okT;do@J4bl&NvL`QG<{!OS?9!W+odxjNQaN=tfKg!zeWI3-RraW+*{tKe{M=pxI2$rQu3=kRSN_&WF<| z*&tPAIJ@zStQ5FvNUY3cW`a~yG99c|ut_Aw5}ceLEt-orP-MCVfuu=f8#05yOs4GG zW5nZX>5K{+mx&(sLadA{XP)C4l#vYz4jY@e+1NN-;kEk0mHM8}$-Egv^2GWo!!bf| z8d8}hjL2}fpqR_>(YvFP6oav7j|ljj7ys@wDp0yRA|5d`=u*f?b9o-ceua42;2u zxC;Ju%4#ezi#dn3Y2zJjqjk9>W^Is=vNkvW2up)CJa0$~T_7m}F{+BK&aE}SW$*0S zW7}6UMt&E2x{MNT!YvWu7`^V~+74|KLKX?-QPe{C4Lz;MEg0vYM51BkBL}{w-`iP? zTWl=k_=fa|YuK<3;kXUJy{iK-Q9O;WxAVSnp!%gIhr2u*K8uT|G=&E6ufM$tYEnb@ z6l~N2H+)2&^6|q+w*JdfBXKD|w@E)uformy)LOi1I*gc_W+Sm8Kp2%|H$ogGs&h{& zf-G_8R^x2mm{edukGaj1tHBf~@y=2R)TS-T13=i08cDisW=P5rdcVzM5KV$C5~jHT zh~p**fbf8T|A4LTksuf63))J7T>5ywPg@PE8Mkc(Pn8CKT(Ipg^KTY@#RY?n`f8*6 z4;y+EXV2?zcBMY`5cmzgyV2{+C$qxQm^7t%s9HQ10uE7G7dOeE#@*@KoXza! zV4Os=n;C7h$JcWq`BJF#;AOw|!I#M%m;1b|&JXCVWW1Wen47>;U9C{Nx@ra4 z>w90XPl*+KDhE8COFG;5SYdsqfs5)4^A)H`ObXKQ;0rD%f9R0|Ey4yq`1cb^^L=lY z$Y1iFmsyZ$;63nzjVYTuYF}PU=XEzP1ilf%Iz$fna#VCNq|RIhFjR-+v&eRn0a9|Q zD1@I%5AiPT#p+cIg=y71k4bldnURzB4!w|WI%?Lw0u}@ zs*0=4sYXr#ua(2*Hgf{gC+|2vG!>rh2(XJ(P-CEs0CSdlbo}K@9elbQK&dY}NHg7R zoY#aaB+N>o=9rSq3Bn+RARs*;9&LIVA=pFkMom`xSfWQsYJ|=7oc-q3Gl*{r)63 z45n`2Bt6ydBF>LgnV?3U}rOq?KomF(?~=;exWtc3xtqqnC}X0Ak%*OE}MM+ z7v>Uxixnie!sZb#M z-`b1E|Ka1lkN#g-v0JS2#hrQ+cDqwB<+<-dmkM7zY4LBoR=mcS<$~%xJXOKPP8&Y^ z;o;`B9f_+G7h}H8V51ope=1xIjThq$Ije;w zzh4eFzy=t$?(O38gf2D}#1-c-?XRPz9blW+u7CE`;GcgJk}>=S)9w16o?M>6zTz9s z@(W_F^6B}L4gZ?Rjg;;zBSxtd#MrG|a$ZJrn(Vr2JlPCY#ZLwu*p+^xI8s`?*>yxq z;PgYuIRG$ViR)YFffKSDKXGWvC@?>w+nOuwxT#t2hV9>}8lBq<-gf{14+w#BJ7-y4 z)X;NRIW+HSk=z}On5g&fV<5lj7UMH&=$tFcn~lZlwK(;ss!584pl#?uN0PuCI1*EI z`B9d3>Bv|bEfP=_2S|*G%tm5GfG|PH+cc}IA*_NL49fHOzhQ#%!(%on@$+)Y$An<( z1Ox;Gt_OC9>6g7)^;Y!f^e86_O2a%Cq0~&r0v}4z{PjL7AsgI!4Q;;^<$U&bRW6BB z$u+0%N{gY{)Al(kTgYY@NKKMjJqn{y)&1`uJ4DY8fj|M zwJg8sZBtZ!2!@Bvcvc#u2x`N`t5LKt3`v&kc5|P4#t1wSMw96^oHWpW;s0^gq{#?UIu;sa<)BikoTE0flFBzxwQMYn zU(KhMg`Z?rB!Ra8Yab)eWH^neO0qdBq=Zs$EKbXk%Y@&iHq?B zZPP2vhLrr_N0x_Pn=v6_E|kKVJtcCez8TG}TJwVYw3(tN5-tj}JFuAd1@u$_ z8o%=YJI;-S?Wi~@wTMUmf2V=nDQe1bPsk$`NefIA3LMW%dL-K^NFq@OQZvLjQIOVR zhG8pWgb_&wJV!*!h2j-aoP?Qa@N@Hb-kM6;-8~TxrHOHFQ;K+eI1kYDb3{~-$>HVr zg1iodX8)v@(mziWh@sdh|~36`%_zxFLo+=jc`tnAf(c{g2-JI@qTxlr7f zCMK*abqjG|Fmk2KE3_6AA4UfXS*3q~FW`GS02l)YW-`KyX(s0#xjFwRbaugk;csB#PM&BS+RVgRX?nooivEDazaARu!+OPtnwB_~9R zHSY5jl;z_;M+P`yS)aReP^n8SwKooBk%CdqBnV1G0(Z$jaJ?uk>+oH9e^RK?A5=E6F(z1S|bePXvBIH(+64q6LSMkPf#CwIt~bB$Cw8f;5pp5bL#O zw9@mj*`Z4j3R4525g0~2{&u{5o#(vd?tg%w;GMO>^N$O~{8O6G6#Ox^m)5Lj%6Y#JjWz}pgN&2Owpf} zAcqKnb(B%&wK!VsH?f>VvbL@P|T|3A`FEd zqS~oM4wa`mwESijQiU?~npJKW6nbawr{r>0>D9gK7{)59>ysQCHf1%nmp@qN5UH^& zrllr1aU;S&9o5cKbUZAH5(WSWg;5x5B4!w|WI(Z$kq`>s>NJvin~q*S%3nNfl)L&# z8Xii`sINEH^3y=(pzT8a0s;`_5D)?Y1^`1tMKk~aZdLN3-3693w+Zt}{U5shZ`w%W zcH2AYWw&X`RaJHscXQ;No|w!`xmnzi`9<-<0!n&;cI5!WGXO;*0C!*jHV*%mQtULI ziH4da$yS~v!Ee?%d`WCuOWr&-(3WiS0gH3+cw%fow7sgVnS``fu905CK@+6-vay$ZIk>R4`r_%f0m)k^G$hf`EmOIPW*YjE=&gA-B zR0X%_C(fr$YH&K;P;o~atjarm{oWvnBsQ?Sk?wU(?>ZHgE;Y*_in?9FOA}6|)?-}n z*AB{rW94%-pv%SxNLkzsc+tq$1i?kkM0I3c`FW;81F5TtNv<#SS<+d%fRvPB^kvSVl;{D#Mv|jRk zYPpk+m@)Lsk2#sA@;I`s{Eu$-iNH25wLH3(R$l#w~;S~6;X z8V_Ztr`St<{M$mdZE4?E76Jfk__9Ghs&W?YXE&Rsk{wTqF{N5he2*^+=a(49wY=_Y zak~iIfzP)i2HP$ouTpGS#*er7iy?WNb|PYOuun)@v$(R|@!mTnm&lIMzOil5*EZ1B zD(six?^gG)zC~^N6+2q>c(1_|V=+$ar(3wveyR_sQ+T64#;Chvy=%5fW&>B!)pW2m zbI!!y;eO`vz796@ua~!JcZsca+i+WkR@b?A7=3lCSy?Nur@sDFve1a}vt5I17k`lR z8jhP7ygO#VDMO45|IRAO9B+w`3JohHSJ$5h%<8d-M0W5bP z44_2?2SL2IEeND+v|*-gHEGPS)zpPnz2lqD?{9fOyt~-d+D5b$T`#@0EO>;@!!>{Z z$vI~U7&hFy#O{O!#%|s{h53pBexH&o4`IT05ydlstSb$RxV#yh;_gP4C9v$#Tz0A-=3DW?Rcy z|J`SB6G3)swUqjmt}&3KT-W1qW6E2dp9%4I1zK2D5Hp)A|9kQqoX)PpcQw<~>9?)dS}h#6&u@P1|f z9{vd3zNvyWM3WOW4RgMj@S;gb36nf^x;?aX&8D6tfHZAXsp+!wmLJa#S|6AzlHjz` z#)s07nm2?4T^0l-Ktv!oP2fO0Mm_|=*D+Cv<_NS11!;V&Mcmk2dxGa2CO^hQ_>ugx zBMeZ7S9`h5Xw7bHBQh~#%G;NVzi-wM-?p_|kY9Zf)`Ual8X>Wey<7IN9;GKiF1pL~ zxA@0zB<#$+et6@4Y;=1 zv9Fw+pn0_mgbO}Jk*?YFT?-NV{;8^JRIR8E+&E9QgiUZo2?O8MsJh06rW6my-?NcG zKauhO-UlO3>XE)2w#j&$YFeA7I!ew9?WZ|GMh#WsljrZ`oT3(hbwrrg@1gE@{)|k6 z)DRiOXUDvRpIJw+X#)YiN z?#NOs$1?C4eA3}09&OrjS-Z<)TuZa+kymh!H%)p|r%f0^(e)L9 zc6+LLxN#==+~P5ly_-1GGsCU5ium2x*s%-NVv4HmE5rw1>}yx68i}WRMwx^5_JS2Pb11A&9sb8zp|o;b6YcK>e>lSnU>g^s+)k@DuM)@G?7mr5(ujS z5@8$*%etYTA`SqYWPV1(XogCZ5+!_zg!T?@LLq~5kh)WACXJU1J^%Z2b-(TZWjTA-?gY&YB9!ELAf470-95Qwa6mTIai z47`UR{u3Y?Z7=aYH$>Sm8tSYSD3M43EAQKFP6B}xkT2YjP7 zz0J{_1^@0tMqjDmaAsPQKg;?(+)JM#bCAM%b*D|70Uo?nN4qM*+Lsk}X2>bJt)v+g*K(z1;zvkdKGl*4yVdVhoW(#ZYa#wtcBN z3HH)-;6#`#0n$Ij(UHHGsKq9vr@|ESp%I&D83li3L=p44#1vT2qs^SELA`VN$6uSP zbNS&Ic5BVcf#|uK6LNw{Y$bqU5s@QY-_$i#ZbOoti6{aT9wIZMKc5@gQFxRnB}&lq znJvXv%Oj|IyH5t*Xj$O&lCy1~j$${?W|yzEs;4BS zZKO4p+~P{~n;OqR1z*?2XQL@gcXzQVhU>&+uIaIeem;f$fqgMC%j`Kt6B@()zh+6e z<+W%HeSJJzwf`DVG9Z+euRH&cfMLo4)P^86=$NJLw??Vll&()qWb^D;U zFHU)%>kK_@HI&|lhTkU}0vF2MGav3;>(n`}$J$|@uR1{>MDo#c5Ku8ifa|V`6e#vj z*fOb!ny6;J)^_x0AE9;R^N(iQadF1xJsHuR9(L|c6Mv8^5T9r8pBX9>lgxIC!)9(c z1J3NBum|npXe{)HbKmZW?jKKEXZQsg1zG}uE8iE$VA&|r2XhFVZxd$)C@9v{K*qCv-&v-_z&?=xGy$l^rgJ%fqB(k zxAK!}?LN5$I5ke2)l3st$2m>-)a}fN!EZfAcq0&dQh&6wz|^Vl+^v0ua;hod2ED-< zB7bq6W&29EfQh&@izS9Pb zXPGcAVkQjsxy&VvJXMeJ>6`&$k0XQa<7|ClrIm5g#^;5M|L*%H#(MGrMyogb*Vis~ z^zD66+*LxzO7O-0NNn=FYN82k55icdZmVG;Vpb{E|K`p+zZo z|0mORr|5yLr~kRL!5(fs*u&I*7!yF}=&E_ew3TCwpC=`QaKMgB2XEB9dlk+O$6cAt zy5-MoGFFFo?!r|XSeh*j%lz7#>yk}(JHc`B1}VO){3W@1rN0v51Kk$1lqPv^{yVs4-;LB(=|)KZ z?c!UU7boIuIN4{r(H7gqzc|H#jI}ti4!46ZQ?c6L)jJoJ=@Ui#^@C0D=;PCQXT~hsai01H;Em02i#M#_LZ9ceI+o?%!Pl1O zSuXr@`OiMnD{*3Un128F&Ogy6->0}^Cg#Ba=mjTto=!B}WHCL2-ePxXr!Y4{&ZM>E zi{dtAQc9ocG1l7#1WoX_JuZ2&*y{Rc>s_^L{E~yB~=+kJU*6!Y^1JfLvr< zgls&j6(Yz)46{;oK*NYJsJ2NXibPCc$PmsKHX5MaInSjuICUGxb4Ny8aBEz1%^|H4 zz!GnX{oX0!a9A^QQ4KFII+0MB)ynuCECU=SQqMc1x=HOarc`1!=#n%VXo5r_60qSk zg#nnt6BEM8n?T;pBuiei9Zi4_;K&ihY zPlQFva-Ad!^p1BWLIKY~5F#LrmP25O2t~bTXSt1evm@8Mn1fu7HxdacE0G_&&a;=@ zS`geSo1w2w=!eDS$w&}i$cVue-l?vcjN|&z+UjAj#zZ9$z*AMRK&S>32u-YZL4_D< zNMj)eZVKaRc#EnwLhCHNIy-Jri<-aH3qojSb~JM3kP$tv%S(!HWwLx<>PjP?hUjvL zur(Kfag8t@K*_-q!6`sS5E=G&y-NIYRpbxMx)$51TR{*0A1yIT@x1c_t6D{YMc*Q) z^>#kGVt}WYxs)g#3D=ji9CvW;pYe^e`~8*k z&9gO&)gr}Pb%#%ITlQ3xk`!hzrYVpZ`#O=!^QWQ4?^;Li%P>Koy z46ne&gMorXQ;wL4K$s+7ev_d*bM2pmC`^5oA?8-nrDu%+cjtJjtML!8xTgVk40h6jgLRsGlWSctq`rs1BY!O=4pMxOx{kk=x?F< zz%>(La;JI`4#xtZo)iL4tjh^-hnu*h5Vxb<&6&t@d8Sm}Ib~QCOtSLnnHCzq7m0i% zi$vEE_)DbA9pSi0#1fjSlCEd?!RQ$E#`VnP*BRET!Edk@>90&rS?b+IgOf+RohTd$KY1>DJ@Hx6%xkN!y~lFIf` zFa5{XHsOlz!dSSB4i)YX_Ed2DW{*)&JlJhXFRPnZEQIF!&fr2)XF|Qb6Y%>6*6FDO zsy0t11iY^z&55=4=e!!dQ)9;`Jg2>(BB7qh`I*T?9#pH;GfY2pK39{`Pve?cScv(goAZaVpmzsL>d2&bm zQoOI((gT;1&I`Y0q!^ho$tKYx1!qEN^A4V#KJFigEg(!MssygF0wSPaYEsw)LM}+U zBS`ftl7(_vp0mjPWUCXqKHx*Y=A^K>@W=JZBXVO23Clj<4Epgv)eZDW5@P}8kkPLO1RWShk};e{1iGfnh(07Q zZ$IJMO-r?FhRbfr;rX^O>R37#!4FTarIE#RtnnO(lECGC&NTJN%UdZMlzgI8K{(O`Kixz725{QApHHKp-U$RRY%tj3oO^5|j1P zO#OAiU+?dm@U-zB8w;cli6Ccq!8Y*n9{EHED!LsBjLS_TWJp|&{PA**Iy_nb{&nz~ zK0!LGy7@8D+S}_hD-a6^PmgD~i+m!h+?=ohg5Dy)*gO&w2f{u$b;&|Bp+$lHT+$T^ zmqmJ!#FO!EKA@X-=787=-V zSG;639~XyaW`~1z=mon|;Z@k6F#>oDqeTH)4q^lfK#-(CRfrVoayC#<_2643?kzW~ z8#cd!%mCtH&@Mlrb4A);$&w(52z3nu5s3>OAe787L4ZR@x~iHH>$DzTU5!^Lz58nE z#Y8XS8Hx~4+(b!lrN`rcWmm&+OB5=W>=QLJz(~&?3ZSwfJTVG14M`5+SIt81Z6=2T z6rA)4rR~9SrtmsY<4~(8u;p7qc`^5lE)c`$U@1{As*i@O4(6l}N%CQ_OqGJ1<7^<|6$wGvgK#%z{tsli9t+J?pq> zUM|*JS66AAWB$D*6Xw?arIIm4ND8HP)+uSVKKzC@K82OytB!!9RGnhq*Cv*z(_?8C zV*bRoEj*Ub*gO*I)&J(sKNLs9lq1*q&VP|2nZ>r77KBU1y-W@w@c<&HiJ<~q7k3sU zV3UxG8Z?a`BG8p2HPV`othT0fKoRj0MKYWJ=X6M=vvQJMm(d`N*n%!GL^NdXdBOSNmn7Gt|p+m>tQsrEra9BGiZOK7|W@ zo#CD?MlMai!DYDi?=fHNTMo$aVw1$58+XP^B|Y2R^8>>1P(*>T&{GHx2+r%t0_noI zE;UHclo>OBWkeC?w(l{lOT(V*CTRemi ze{I!h^f}+IqB7XEhqP=jg_-Ri$r#d`0Sk~*$KLY5Q^Of`%7P}Zn zsnq9ls_Z9Ai^m2QW2|&1^Of$hN~gsPN}BGB+W%*>7(>q`gC%c&u$$E3TErzTeoG=K zM3Bad@$@`0IC4W0UK}FCazI7FDpM@bIHK4U8-mz)E76diu_c`p!8~KdXnLM18A}hS zRU!$99l+G0KwmH=8lQN;3JhUc4=wBx2P8WxQ&6QE=Dw!6xLQb2sFx_BbkkdIkk?{L zBJ!7c*v~SNPxbQidn{Y#Thh&&{Vu^KYqT!%Z46QxnMb)ne@NXs(W8F zLk*M17%sg~Ct}GVC0TWsY!jO+ycIq(`XZ1yfUr=g0YGwbH3q6#4_H$R66S=dI%sWb zV*hg=OEjdIF|)r+T+KtHohM~6Pg@vo$KYNln0=G?kr?$znMQKD0#(BrP!MVuA_l}l z6enc7WC2l_d^J;ClR=nN?fiZ0qt4g5-D`Q_KBTxz zvu(@;5}29RvYvyP+l|C;Uu4M*{%o98PqO9=@sgg6$s}PA5CQ-I07FASGXMZ@WyFx} z3z|4c3Dqa=|K00P8YD?|Z|;dVw%ig6G5=Xgx|W@K)g9TFSTCBu6c;dOt{Bz<02!IM zq5}Zw1CJUa_G?LzB9dr3O)c@jUqrFM)N|6}h)8n|P`66*LftQ86t%N1(Hfk+LjMO%CF< zLF!Wsx-q@8?x*SZp;LMG^2tYjSx#aEE6GKx>L~Aj6;@Z+d#@1t+dpACu-}9sDpum< z9%A}XJ1j+O^*WrywtY|3X0C|(zQk#CDfI3A6363TZnKD?q}?n_b?WoaQ#8UUTZ1Dp7uqAzTP=v;gWVf)Gk`> zQ(0LHR!eGjQ&fE2TW>da-?P0XID3PYym%eK?d+CWtBcoat1GRIMFtSWYn4snyY}}O;zcg=uuQ|8rTC-?@RJL&xK^29VEZ<%AZr*DRZrWc> zs}9Usx;=1GWw&k{SStiQX>PqkkU&(oU=cQ2-oPO*Jq{jutFPh` zJDvSU+$+3kJAvbZL%%(p*=`Yec}&TR&400G6?Xx^l+_SgxP5S`#*{0Gn5iCU-EEFb zZJ!{vgNX41x1aq)NKq4?-Il#gFQsuNp_X6r*v18zJ%;g?#@`ra57yqwlIh#Gvpvw~ zO|7LhZL$ko!1nz=NUcactFGdEHLpo|=9@a2=Kc<;cKeo5g%9BMUyq*9%{;>9`c!v~ z8Lbwk(xCefoz1zIQ>C6X_ikS)^uxd_hI6VEv{uzar(y4GKjiDOPG$b& zY{Y}XLTXJqA~p3gJLC6cltX)azYgEqXb<@mX>xl z*|pzSt;Kix1>9!)Dktw%`SWxO`Mc_~Md)t&BUrazWB%fizy9$nnbpd}TJ_7UXQpqR zP8d9O$EnXlz*ivD<;+!#%D4!_z z=`j`fMOL_h4{-21te5YUvXc7Q#4|ykPDc_n_k>?B;l2fny1$lhg_XbF>Ch+Ht9+z1 z5$;kZuF!fqdmC4Q$&`uZNI(pnqr!M8ui|-uj9G^)QN;COqMHZ>!CE}ChL(hUVSbQA zD}1n$kh&dT*~-H<6o}tzu7OXKzhkCT!2@@ILV==?6e+i2+oHf&!6?93z;Ls4UAf1B za_H!sU?1Z83W}bcSFXhyv6_{w+0lIw|Hb(C?Pdv^;CNdR(wAcc6Q3dk4Lkk}i4GGHlR`K5WH|NN`$)E*` zi}`gOMd?T1)m>*R_DbCV2a{S_^Cj|ol5&`3o_t2)6Vv72+eerQ)69N3D~AK!gkz&m)E?Hlu-co9Me4$R?tFbyUyqlrA`jtH1K+jER*G>u?R>N{ zDdtigB2Ol|(rE)%+?mV;@MT(9YE0$IjkJ%S7=-0#dwx5cyYe$3taSs$EDQw{D=M$! zmqXd^O2YWj5T!}ai{QOi_Y#?*lgYC?H?89En7QE?qR}uE_E&1_k+?9Uw%g{?w5YuF zCh~9FcF~0$Y0C?|B!|GOH3-pA$Sp4!O9}|ew6W9=u%3}#Ow28YW}`M~)hIltIq&D3 z-GF=js0t7P!~;aI@ci-oH&i<|%=y&b4bnUwsY7JH#P+Gb_|3sbGf6UL0%2$S$2)WX z!mT6UkoSi*%uo@sATdQvBXkrR3ONb3C~*=JseF02ZpWF168@=U9Rp*1UgupEBkOL$ zw!5~0t}8DNmN%_t+_Q6=x%)8UL!V3GOf?xov+<2B9+_ToQOwDMDz}W+-xRoLJhmDvhmO}s$kbga@t<^TZ$e_Nd+Du z2t@>=G#<=I_s)WIH|2)8`m`CXNB4BtI7YY7Ya3O7xrkH>2&t~g0BZj@V^zS`bAO;g zgon0ijB-g;KvtvOq#=%_r3vQmp_K-PR1o7(8ebSY%kP|c(yg^eU$ z0^k)FJ)WMGKvpT!RLD@6G&}u+gimVO1{zGn29+>C`MvkX$NI2N?hXG}yCrY~XY~n3 z!sURr3!BvniUU#Cc5+31})}L7=Fd#t7cTAo)g#-fGOFn7HLY zJ3P|K-~MyVXTtO87mtymEaJp=@W!@69xbU@YPQ8gd*EQeRiM@hWQBw)PGLtgr#utq z7ap(fq@EZ13oJ zx$HhL`l!OS%xf&IG_?k7ENo;uOnNy+*)(7|# zDF@=$wRd;m{E4H?U47nTNB^4?o?&E(=lPv7(M*(yw7ELn6=@2o1R2hSxmR;Y2dgZY zOIxPW>5Y88Bw^<=u}hg6*HGullB4@15LhZwOD)C=wpZ2t%L&R^*-^`r%-qT3&xul* z5|G1tEWL_AGdX2!&$}4G)F{)9@d#4JCw)CQKick|yVEk z3*&}ikmNXtYL0?-JEYScp=yg7COT^^QFM9_& zf_kaSd(5jm9Qx>9dNYX`>K&?K-wfT0u>;J&PkJ+0@Kv5G{_c^?uR5-j)SWN&92E#7 zx?Z2dVbbUcGDJB@%1WcGzQsqMYbRLOI-QvFt&X|-xs!fa+((UzB)b2(+W5pF0d-Jp zv!7!uG_=IrrY5zG)>E3%U|86lYh-MoK{SPAs6|$~Zwe?HC{m5J0OqnJCA6eez+frROgU9j3w2%Jbf6AOQ_IW7QVJ%A26X%WQ_IK+7z7Lg zCS~q!!pvu>jOl>5YEl(r=mJS%p9^oQJ$vfqt_?L8`#0A^DNjWf*!kt$iZGpaPamPmS z(PKmv%*sPnOtpeY+sEH&=Tc^aH%nysLHZF%>iIZv@o`T1$TF{m+G63d+(} ztQ##K<5dFL1_4vPW=*rww#)U_)-ms5t3i>k2=W}<$d z^u0L5Nw|AOwoDlMVmjXLgzDhj*5+x^PiqXHm>%sO)$p^MIkN_`uWl3Z=_zC0TJ}I{Mdlq@k>r^*tun5Zo0( zNeVA}zh;dITHGkkQX%Fe={cAwW^xU`)R1tMBwJ^2YXWG+b{gVKH#Kr<2gz~nYTOb2qtppteIlH;lMxI@rJU4VBGfK~_exBhC~?*d zlclGSA_L8@S28T8OH7(-E;QIZvLR-eS^lv`)6h@OBNCg52gMLFGk(OOJ%*y3BX>_!L$HMFAn+LV7x8{8=DXS(_ zT!siPyU?@P@JFY3|hgO-&t4(?un<83u^N3Q0as0Hwdg0|kTg`U$V%l6AkM?!i33K)a&j zG<+pZ&rmkZz!(sQ1J`GB)FKr9lm%1+hB4aXB&vDc3xXooLuqtO`O@avK}yUtL5Yw7 z`B>K)eaM+;YZu36XP$zT51;Zrd-E_8j^~_0Z4}rcVvo*-4twP=_9~h*w_$iWEj3`e zc`n<_RK7zk(?mm_F662#;!4-a{Y1*VH#gRjL{K#~LdeqDtV4Pb_O1$lxJ6>~O4YwC zBOy_=rOAqXiNTzMWQB!M`hWW(ZF&+l)|9&(4rx`UhriWx#>-iw7O!HYe`Zo)RZ)Y~ z-gx^06KR%_)Krb{iDdCI?%+yPI|6e^3-qHBk{u__FdyfZ&~WIu(Q*AD$TXwvV?Rmp zJJ%Q=BoZJ95C%vms16WT+_mk8x+)$TB>qNk;!0(m@5Fdfro!It0b2G0pVm~-7P~31 zeQ{5pF=RJrV8~+t1PRcqPK?sVJfAqt`f9d({Kbd?Q_*2lOMH7$P3GgsVjtJ^glun$ zH~{E0`Kjrhd+81;%!(dvDG`oD4`ZELhf?!1X4&vsLlu~whI6$;FKureyge~^fnrXC zd#Etwn-1}BB9eu*D*BlyD$&_#M3X-bloy(#9;3UZ3~}h9>#HF@N$zQ_-%stTQCM+a zoAQqj)rjyG#&dg!t1&4UOGTm+DXz^7vgnX%D0Nm)i!J1kg)InUV%q)h-Lul#*YeU9 zW`&A+q^V*J36m5shR;y}Jt$C$r1T^qlvcSk4@f=%0)PPgLA~;+1q<4BfCRO~v`Ixb zuaTK4Lj{1t$X&}0uX@Cbz<|NgXtO=lAzIW0vXvLcPynr&RRmxkg zcYYXRs5nmkVuTtvb(z5u=+h}{!%9khJ@|mN_wp$z-^Z$zH5G=+O{tz~`z6N(3;Y|B z4sr{_NvGS-bIv+r2D`%cRf$FDRX!k;iMr;kSRKi@dA`RrMw1$fkOPe(oA1?a*d~;g zof-8cN6oY8TSa!nmp@I@emX+}dU@er%}9c@_o2VPdfRAxdToY|deoCqzqm@3O^uKJ zmM*sYWZN<BWK(pi?!Y%0f&7<9_yQfL6BL^<6)$tRhh%H4kD_GFgq+*OSztp za>a8T6WeVh(92#+*=w5%K`2MPTYRvDS4fZ{NEameK!!w=BEaB9|A zoavTnn#6u*(6t}DUwTWp1zJ}vj++$r2PH*;4wQziDM-)MQ{hBGR3r$S!pP{9I3bG$ zJIJ96TM!`eT4&LP9H)(%%oFSt*ur#{7_h{uJ5`p+o*U)Gp*SX>$RjE^7T~QZ zixQ=vRfB3Gw==!{hW9%Uyg~25hT0V%3JeIB+9YbUG zZrqE9Ce#KQMzrRGsLs;xvrU@9M~P4Zb>mE}GZ&e8oGwZE01w^BFyYyfpIvi1YXLNU z;)#BfzVJ|Ol*$JWk;VEam11l!S`a>`TKkn9r!M3UAru*5(swoiZaiLdCtIbM1X+@A zze`d<)$J)0x+09Frk`1vdIUB{>AV<-qu_Z(CDT-Xp%HS4&s!3lO7G9OIjuPIbZ|oL zHq(sfdy9qtm#&s*AyyLei?=-$g(aJ-_u_t%Z4!pb2_Vn=2RS$d5p~nd|Aat@M?o~) z%ILQ3p``>RxnhbR2bQI&U=e*L%@PoPk!YjBc&alywgp#2NPwytKx|7N?DKf+;hB?d zU5H=@=>f8U0DM6Y0;9#`N=q_NU+{rab<5}Spl~wbewj1G{c7<de`obad(_jiuc>{>GIT$Rt4Wu^rTed`W9zP>SsC+H!S_tgDI@b0{`P-d1~<(x zngQe2fU*mHrs%T2BV^VeIRQw>_v-fqm09*R^Q@!8I>0(9oq2%Pw3gj`bjf6SlU9D| z1P~OH+>R~lF$xLO>t^exJlB3s*CCQtHsq|TvsKUhqj~wE}foH|O@}kH!6D$khRHinz_EAszva!Dm*zfN+ z0|z)o)brxQFg8F1{x8zob}lZ`g0K+xSgZzE_>AUDz4IodeJgJD4JjDO|EfZmqx zAvqq{fwyk(#?E<`YzCFW1G;$;G_n*@6fnw);}ATlFp3P4W&~<^q-cS|@V1aZ7PTOg zDTPcbm+FvHYNrRW4%p|y&Ld_(pdar<8R_hbCDLfvl3R9=VWH`r4A16KgajY~0)qgE z(?*8#xj5I#U%%AIf0@EQVR|svQp>gD3^1opHJVRJM+C15I)o+X!Wye<8n}x3&wkx% z8HL-)nQN|Qt=*>C)E&?;V~KwnLzB&7fT#Ux?Tca-EsP&l9_lSr9pS2Sl&kCzqk5hg zs6)x&J3Tmf&YDujX3jaE5+4Isx7O)$iv7=X@0{+ZxYNN=_^PIkkET`8?#A$6a2Gd+ z0ZYOOCjtkY9G?GzG#W0-r1x$Sn7}9p5YSngjDfpCTpJCaQfUhl`hxWbAfkXf#8kt` zp&*`6R6(McSW{Ue$v9D{pbi&?xl)r-P=8#f{XZ52fxf@*A!}MCg66T29;D@squm#J zC8`uT4-1F|~W2mu182SL`U?!@_&J(e$!IzJSJ(MIz* zX@kyJpeQ;EDof?AsFw)uS*0=fnAc|AsBRt*FY6UtQc z2aGu0n2K;Nz_^1&N$i{S-^fw%JdRref~S~HX2v8p=Q2?k4WECWHKqF@Aa0WZPc{&o z0k6oge5P5+Sr*?w9V(+i+e7mu-_*2VAsU;*B ztqimOP`dMP-R*9>Tf4ILgY?1yroDikxnNiZ07hoOiVOg&0l$fIw8TfoPLf2AX;|@s ze{IFqCzUkF;_2O#T-oBaVMDTkfKu$-+sPIc+;+nbr3LJ;obm;7#l`aFA#95Q&sa`! z3k@!d<>X~=0ox*|O!>mxC?#2&6-4s@07d|cW&q&+z`gh0`*!c{?OfO0cI|f3(%RsE z@7CJe_Uo>=wrq#o#?96s0j!LIVgwQRC9eob!eBtZ2+;rmZ6qQVVOJ0+;ZF#^kc0py z1W&+6j6dUcI$NEPPj#J#YdR?i$A*jE@6~g%W4h_sO?H*1DnJQEJyQ>$+PD#zES?%i zyD2)Tn-dU?4LG&>RJPv%onrutL;Zhh44wSvG%dg_=hdKZ<%) z=n{$%DZ*!}DKgMOF6F9i6*Q4f{oAgl@T3ea5fX+@CxP6cWu{qsLN3tI{mF&6*)lZ#%+%YN)RK-+n znGH+Lox_92rF_v^KfVP}gc?RA*^U|cl zwKjcpG8FX_nF^`HBm?t*THH}o$xwMm(UX}KgEcQxel)?UTDlPnjmc9ypC_vH|0`>% zIt~iE#i`CarjQ?jSjl@?_wMszNJC+{oxJQQW=MSDb&bh50u|bj`~}FPZdW&IZ}BXN`mj*b2dGENJqZMr+4?K*W+EHU9)#}6c12&U;NNMFL@%Qn@+0@ z`r2THeQuswfYjAv`Q$w~RH>;I)+zbF(>uDu*SuS<%Ne4!^{fb2k41K_rzE@^_Nkly zWmAR<{z%6^n6$bPGAK>F4fTJ!iT$HpDsmQwU3Z<~k!tXjOcotmWBB+T?X(&ypQdYK zl$6UsCH)>h*nxI~kGM~+_?hte*izACQoU=eT8py$1E0m+fEJFg&Ty!<;TlBCCv1E% z*9IV(!SBi#0cz`gH%Ulrqe1%K#n`@EnsF-WJfF?SckP;I3yL=D0?aI*WN-QSDe$wn z4R|N4HnoES)Y%|Q#H%&2-Ry+hDsND_gU=G;n=)7Fnsu2{`~YHjthR>GUlU)pM7Yd8 ziE4^BKs#{l%}>E4Kg8ZX_SDPT?j)7V1`v0)Eg6;5V1lRB*0!fog4jb6ls@RfAKH~r zniYG)cM`O$wv;fP67uR!C3x0fTvCZ4@2cLw;}!6!vYRr6L}$3OT~2mxWInq3ZlqwTExiF*Dv#u-r4o}Fn^+JY9SkJS<) zjb6sIHEQh5lGs5jK{Ao0kBa>+zy#kydk1;s`qD`qc13NcD28|p@EmGul5Zjd{+9qk z|5N>1><bOn*_^3>|dz8Axn69&bkAwwRfKP-#o6>cJwj*=lNTjs-+3hq4Y9hw0RD~V>QLb zn-BtCU0e?08o1oo#5p@YB z>O>W?S6!xcDkV``$7-x=E`ngpm!}<>=@M_&rhK>7O_@kNp1}3l$ z%p7I!Ft%7k!9UUAfskW;W-S({49B=Z4zR;=I2{hdfpCzH?1LQihcO%*4u^yL?uQ9? z`(EjI&5w=kH`G7gc2nhKe)R^P+a(cJaKxMUfwk;$wdzD#ghrp$iI0VxUBb=Bc(n^W zlnOiBWZ8!5OeLmktU(+uUZWn@h7a-^EoMFGT(71NY*2+PBrqfy68)qIYWj8jEQnmyCJs;tb{EIsc1#qoN0g}C+?W_FhAquZBNL( zwsr=gfhWYZbQk|62VC3fTmr3QtA0$C<= z%+ZmFz~+JKIb5*cWESrS2l8y2`OHhv~4s9|A%Vac#9?#u)T#QLx>us4cX z#}URZc((zm?AT=*&))1sil(G_a$qE7BMP1j$@`>JZ>tBT>B+5dhiugu%<*()p>y8_eRAGl*1{>=bG9(TPwiBqxfexklVEYI92s^ zyb?KalfC=7&5QeSljk$GgYV~2c6m4Nff7Acupucxk}t_BMNGGJDJvg6?tTI1ohd18e>5tF(k~JKg5@D5OdnJH(*=KECH(F6R zc3Axqi#JZdTNb{``n@-@4BPzw-2i?hBsHqPv78h zL+e92r6H|}V+WE$d4CZQMHrCH0SqG@k`sr69~MnCy#?Qjj3{;j0k`~w9iRMQBxEt} z38sB>%z4W>RyM^|wIWQiAXUh2GFQ2QNHfdsl$-h={6d;g`QSn4kPpu15(~`27IFys?UffSs+wLq! zdxV$~O97%V0)kIgY@YJX=fVFD`>(-!9-+F2M7Cs;U0?*7AbX4IFE^Wa>1&38Z zK$M}d(8}N$b2U@MI*`y;OoR8U>N3|Sh)=*5J<0?1=t{ubz;3}~{houoy?qJaCJBML z&NIW@vKHNnMwXT(k7_$K=$+^3Zt8T_ou|6NQfy;B2S2)m7$J{geP*9-qvv<#_A*Ux za=X;Ws_D))#r40mk2Aj`RRT{8MW;YwAfkdk_zAq1*8v_NYAA<_M{x+z<2_+v-73!7ck=wC>o@!fI9sUeHEq+qf>Ev4d|&wF+f+rF z3|{?jASyz+P}K9o@p_${N|zo#MPlvn&8m#-6PJ@-fbSn?_-{(vPqMB{xyREGE=+bv zSQg=DkqWGGoB2|QumdG1N^kQ}iK%iQF@mTJ2RABg@DM}`8p0`kC8Ch&mL|U2H(nn6 zomK1#!9J5x0>N81qQTWg$RhgRo=|lnpYst*2!3y9>*(s{g7u$U4}&F0$?sByDQZJE zWphAOkhLn}n1cOvhyUmGXJH_1O3OS-Sa|ovXIuleE0?T(4e9)?y>VfNTkBk?W>mT6 zdUHW`Ag)3-j{OTTwSP(m(#@h!r7*ug&(i9lXQbTS4tF2}DcaZD>C7^A(egXmXh&v{ zW>h{w$WcTQH8fHMbfPR|ETIm_59swd7>os%T0^z5Ghhg`^EAZRc{+q972S5$Yt;#P z2Ta2S-dX#9nW15rXTyn(aYylja}F=4M;Q24Zl0o%YBaI*Ykw?b=&e^kd6T${0U>DM z{UYMuT*rHNYm93=Dq){=#;LbB%N>Mg{a5!T^GUebvtN3v&sHj)Y{pcT3I-mxVx2ei zl0(CZ4xLDt$~rPI0y8yy&p;xc;s{cC z4Buo#a6v47s_{hVS{3eSKBFdLI}a#|W=wLDI*XRct!C8fDfBWFRU4mA<<*I_^}Vzf zWieCAmHuQ6R;7!{rkTJ@dM1}inX^P2>l;jvSMALy=-+}~j!jIOYlQh>S6|?quHxb3 zo7Isi4w(4Zl=lXcH;;b%egw?Cc##8}ytwnK4cB*OZ-xZ}1|35>gs#eT`>1;>e|FC z4;YIkOFFYNop&w5$@dNjp}$YON#fe!^S{!7%E&YfjN)lwqOE*PpatZ#I7zcf5ZFX8 zkSB|3Hnn^vB~wa!Cy>Cui3kA>QeoebI1J-(u8@O$WMN~Y%N`D)#*`@vDflMfM#w0M zo=UQ6gMt&wD6_VIiKTdha~K$;e+{B%=NU%lV`fak?ecSVTns2YIY#JFHsnF7=;|fN z0S`YLMI>az8$OW1hg-KOkbR-Dqleixfg7+Ib?Ry&Zdw>_>m-l1TQOI_b~Vg*+p zo|>;377ZAI3}~b_eurfvd!X-4hz_=DrIy?5$Of4+qVT;5KbP#i&G5~u?9&n|w%V!R z&giRc`3$k?%*mD5zAUc5lsAj*xekpJIkU&&S5V#!pY~mXY;OIl2YvR|Z>XjP-EYtJ zOW%OmEqwgr-({^b|6~{nMw~a~Twj&7!?G;sPP`k?q0~eH6uE3g=2ciW;yp4A)z_uP z4x8S;;VPJCtoqMI33mtAeCJIJlj$1w9JxMa>>FzFP4{-`ioFWX z1h?)wul;|OO)o+R%Wq{R^FX;5noiSY>0#%l@7mM9ad{bT{`1_}+N%u#L0~GELOw+` zx~yATUR=7v%)Hfy&EEwOE4F_D=C#3 z187QWaE&LdJj}($ik0g2q(LR%>#9p%8A@?ksEc{|CxBuPLf}P}7Gv#9C5|1;{=c=L zbQ!nIoOl$bo6}T8tV3lmS73oEi+3MF3ZpzsN0G7w6)*31Yh?RAK&uyFyvrSG)BDKCKi(Oy`uFe0XXyYk* zpl1Zsfnzo;*NMG8q9KBa5I#g|yf4K$OvT<-P4U%{HhCJ4rMZW<`Bn>CmR{+RqK9I& zfWyU_7RY+~=4wzb#z~v33ddmWwhCo76{B2QG;EP|J8I-=_@$(_|EBoM{&Q^n&1&1{ z{gXI*W3=~67pZSQf|0ebDL+fy&86vwK9%=dhchdoVAZOl{EIi^ z)VNK2x_;yC2)oUO* zr1K(g#+@(DQpRqO__((MJC8)U{IIn%Jo0#!ioJOn->>EAytbgG7a?y_Ave#)hi%2V z2Q$L{VI~dG%xgT>51XU#8>C1wA^=_Icp@c;b&2jKm&TZ~&TKQ+U4#>YW;G$r$h#lz zzjm4#rsIW5L4z*m4jE-=`0I2<12-4jsZXO?p3Ot;WULXbX@KFcgT(qf<1GY_NbdZ=>~f>) z{&I$8Jc9jP19<>&Z9d>gcYlTIjiTgvHIC?cQ~*Rq@QvXeYUOhR@(TK zKHiq0fM~r%S<(vL*947|)WhVY@ybqxi{rlBzwvAGao+UX3F=L+*%TviIDN@|+nR6| z;ce<1(L(KxoLVF(=^BUD0iL$vtp-B`()6&k zcWJ^Ba|Yhj+_E;ow7(D1MP0DZ`EtYeuNX1tVYBwwUS%n~745bP%u=DGI=XBf|E*uI z73<$Lu8& zwUjMEF%bfs^E<4ph4eAGY(PLdMn{IT5b~V4r^LPAc57j~wp~6Ody%T#0y0_eM)C%3 zWo=5()iWojjI%yNRuz$fgPWrWm0HiT#mFzVv7`PoVT`4CE#Go_aP|R;Om$yGncu$% zXL7(dE>9Uw%~*hzzdNgivo@p%B)4==tl`27pzph08b-C|k5dZ{jZUnaS*s26W07Jp z_B)u~f^ZND3`kNqP>e^>GeI;3Q}W*S22@I#l}Vk8)=8r#Z?2m-E3scjuLv)B*JI7P#_=ZVX7@JT(hbr5{Jc^VSxDgJEDI_0j3{7X@iZVv z#iU{^6p28j;&U>@phL-_OIgBdc(V_6_DI|n|8pvCMfelagLGbDA_$<@yqQ-yd!z~v zSX}8Kx*K_U{HTev8>~n7x*OcA*-u`Anmn1iQip}pC5jI(Y4W0G27z7^C23-cg9j`- zQo+OeOq?YU`XZJ?h4n1km>d-35jYo883`!zl*y@pb_|qgfY3CIEQB58B%kvD%IyAV zh(MKl4G?@YQDV{pvyCx`m5KFE#YJIZs-jJ-H`RsIH>5fXjX*eusuSmcu6gvluX_Q+ zz$mxbi8Y#Z{>Zi7clsXbC-48ULb!`An>}`=u4_oS9{gS-{_>#;0@dZt%?3|i)n7rZ zSci}fGzH4Eu@peSfVakE@fa+V9`viY_6mp~OKrIYqll!B!#HRu=cor?L_N>m>+(AB zzN)ysP(}7i(*p^kZnn{~gyNcd=a1qK2AKK-d**;)833V?0JA6n4hKKA zBk81ObV4R+ex2177x=VM9G*-`MhRePfZ^_hNU~a7eeV#cXx(ljhp-B6x?LICQEJ0w zmthVCY+YT2=4g6dU51lwM=G!k`4D7vTA5|S8%Lt#a+0J;0D=GjGb0B@U;zJr+k3nF zw%hKRw%yF@qpk04TWyzQf4i?+Nm*qywsy1?z*vJO6cNM-gd%`qB}tJ41Qdo_lUNbp z6a@Jd5Cnb&01;3?7eGJmYC6x&oHe*v)EdnVsCBf-%L21!KpI)vaJFKmf1qB2JLdv( zbFLrr>{Y+Ui<1k>mrvI7ecqEh6X*8l~&Yj~A_Txe#~IW#o#`Wc+MYsLp;o7L*J0DiW~ zacNn%O`1~!KnKI;&0buy(ZD`MKe1YS+ANa;*mI6*?faE$TJ|8i8?U&lo8R;_zm{}r z9v#%N`>Prt&1~i3^>dtAYuDg+ZEyR4eVSF#KG;q=`)v>R7@Jr&H3;UMj3nIOw@^k{ zmdQ1C_WiV7Hdn8&mDy9^f3PdmO*mxlILq_RwrUb`6*M;)4U6acA1aLy^R!lSn=vZF z#dbL3F-BNf^%-Y{d`Y)B6W}UhtcVO%Vos8&{JJ3I+je}ME4x5nU=9D_C_a&%lBJ_+ zqMnXOQE+uADNDdXjS}!ss2fWt2P-!=A4`qnRtuc&CcxVSsu9`sfPx};v_jC-Ac_#P zb0i>4#ujiABIK%#!6ZfEf@(ii(5u$fLD+bM;_GF)&-2ZSIll`OkS%kge9-qBvX@VP zy7;MWlQ&pvv)QGXTKtL~KrO@F1*Mv{WT#34jjQu$VmfOsMP!6agLEvZ57PO!)=&2)k;kPu+XO1*TEl|uaHdy6wusGd@ z<`64VFQ-SX~`DuJO=(M4j(k#qD6F zauea&LmRiO`3ju_{jjyRjs+jfg+1d4eZA4vl)G(J&!WY`H-3GLc3g$IP2T#*(@wq7`|RwSTXZWUIFME5mc$G(ARvYDHqNe zTpilA3%(0zk&Swpi9s4pg%573EEh-PpddP&qJ-v1VH8R4ho&S^5(%qHEz+iY32Jkg z{1s$7CcAla^JjQ)mYbf9Pj_pgYR+t`_RHqXxVPzT?dQUZSo6Q9M&Pt``By~nu14!V zM-SOCZ5r#pPjlaW$mIW~Yjax?hR0ANKPhUKZn~*QlcEXkudxIr>O% z-+ynXwgav=+&;j^`x`F}rIIJVQl;@?**+a8>g}guj1Bf$kC0DkQ<{r2cj2S{nMS&y?HEco<21<-nFBHr z+6>laNJL1OB%`fYqc9vj^2bF28Ija9+I;@SF5LZUtqX+BiNP+#-g}37MUVM=jX5=J z*Dy1$#UK@?r!Ibr*duJ}8(hT=gvHeF)X9#FI+F$BI9-Bk((oKCH15n{CCm-sisc&? zx+H{xhQ3g!EEd2is8%&De>LF?fkOp@RfTD`TEm?6)y&crfTBn9tPz(#R74-qu4Dd<(qQN4(`BHar8hD!xSLB`*&w3PBZ8E@TY_45#Ry>z2UIK}korNjI zZge*rX^On`bb6oii5w04-L*5$&sk5}tMi9?hjrP?>b<-jz{k)1>FaO$OQ7Kx`mm1Y z{RMLZ1dI*4q3Pk4#+2ZLcw^2Rr^JV1E)liP=WGj}Y?Zt7lrSXmQbuA8+BdX}A7wQr z2Kw2U@HYB)p+n<~}gpz{aP&OZ0)jl&Z0wwj3F z%_7W8t9cRP-XJ=64(WNpQ0{=I(YQ%T8i>m$U2(VEsU(CDjm?Zz#bVa38bBp2IZ}i$oS2xz$KoYPMsSKr;1vZ@X_R1QkRP>S z8JS;lD|EYweIt$DDGC=E1L?Gc91hB)2EW8{3_P4ff)FP!m@xIp!Y?BM2Jq-v$Cshb zB^^dfh$bXqDG4zGVo!aMkbqDz73s)<#rYlMqHf%x8xl|ywizG$&)1@8oj%r?m~0*1 z1j7Zxf*BRp1#_R*LaYLqAmUdeIzF^0BG|G5O*P#;AS)riA<} zCdTNO#GS=?o*XDBDSEa19a2&Q)kd1&kf?8w8bMcgU11>1?hV#x#u? z?P&yd1Ox>HIQ)ag)YG3-vKG-wcKq@0J-$iJs^7<;G04hS``$v$9ekzw0gF|Au^6+d za7=WK7iFTStop+ND2U(fwBVg{)YH{;b!K4g9#8JYz7FKq+e%|V@DQ<3Q0dqO;JUKL zFRshe5t8wZoZ|7d$HC}EU}zclaDAGkpMIF848LEIOD90&o^G3A2`L^|3CEV>_=b>c zU!hAY<+^O?&yr?SL%4NpLzD~5T{w>Oj!%&1bSyQ<%Ry8LxdvWTl8`S^YFV!Ogxh+d z<(Bgh0wT%olo@7;$_lVk2x68>Q|&=Fdt=Vrugc3XDtk0ACH!|{jE3MzSnVlp+v+6gTR?VW^tJ zp?abmQqly1QJ(!4X6Zy55Mub);O;PiMuD|JV8wlbUGZsHt)sDHCwFlgt0xgcO-yYP zRf5Q=4*-Y+Q%QlJdnc1b7gvtfwDUgf0CqFR$_RC*x6bTnn&dt4d`zfVjGZ`8RRm5N z(pOM7y8I{MzqQPCyleIf?2n?5M3Ot_M)1(4qV24VtV@<xbRC%tF3i=HhldKUgC+};;r!?b=B9_fW$^{Dls$*aBP8CLEP~Xk#JF?Z_uuGY7k<81%L;&2`t8QZwR(UtEs%vn-VG?_E8b-=nz#ss_CE+yk7E0s)Mz+93K4UT_m>o^ao(rG#0n>lI@>f5+o+ zcLuBHW&E(MI1#nm{a1L#BLR5lIj(RWe!vkT;O>|Mb7$&64R>>pa=z^QN_=nodA~8O zc+uti#QaU6&{6~BNimR-)UY8nEYy{(j$!f!NRvtq1F;FmRl8ZyXX7PO$PXP>iNGyq zu5HnJH*Icsx<`O(r5VDck%CK=KjOV+?5(yKW#$p_JV_!+V+ROm5Si1$BT6t}x;Bnv z`%6GzV~>6ADAz_#t93y;VN{-I1;ux`oQ1}k^F+mQc_^>1LsT@@>;>A zlHb#SNnTqv6Ou>;q$5jSL>v(rx6M7{(8Y?>NFQ=c9g)CDVHP!X!H-9S$A3#Av*ARc zRFh!e3u@;{^6J$f06bT?r81H4v_?caB zw8~7x_RYcz;%7WiukB@)93cOg!tu4)TF_o{JV@mA$ zGai{NHpg^I9e_wejlmCf(cPG;RSk|Ur;jvnAAGP9=&_Z`C9 zM-z@L=t=d>{NqfYmaG2f?fYOzT(HIhARr(h-7Om}OAYRRyXMpH{A?fV#zD2UZVglp z+Pk=TYsA-Mt_na{YJLlk(s_8Z$EtiyMC@>DrpEpnYAmS7bKT$SP8cfNEc#UUONC7y zUUF9&-?17QL_V*rI0}!RvDwyma?k(UmN4{X_dkXO*1_CTB5B>$G?ce}(fokz_$@nT zN=+l^Nm=%A2eqEx=L@+#!uV@aHOwIzsVk8A%6giBb85&;Q+3KvK+6no_E%ax?)BFv zeB%4|EVLe6h4z*@e(>XXrFM@CB zBVBr&gy?_D0lRz|85?dRr`GJF2B1h>K5$hfc*(S^Ub(0*ac^` zh~*WXIMiq2dm4-G{1fD$Prmsvx^)OFYn=kiy_LBl=R5%kqfkqbaSPBryK?Rd0bz$v zh6CPocG^h(#iKqaLxJh15xGaxllNWPzKzSFnxUc!v7IDIoH=i@Q4R(-SV__K;s_O~V<3$--u7%k9=e)r9c^lir+;|ACp3f@dC8ewvloPEjjSC(B&1T6#+GgYmbJ zZkE_cktju{dTM(ih7Vi(do~&K<5F7ai$Rt6(Jd<`sQ^R>*xHyVitzXiiJ$?%$cRI( zH#T%y?+p)A1v@-)2B`U^`tvt_#~f)3(Mp;@K`nLxKlGXHN`<^-d$~nJ%1tk0_{ORE zyS$54%Zn!9D6^h)m-fGd+;wB0DSvegAHao8=>NW1N}0CPX)up2%h|&Y+yB^OU*p91 zHfuO1q68(0at?fT}a){HC$mjjJyo`Q{S{o{CI@ch&M!~`f+xb zQ**v_lxZyaEIk@C1dj?pz&JUOR6tbgM%04T9SaLp^F*jYAU}9@S#b{-E)amofPlAv zn=GX>O&1_NgY|8rc_xERZxSi#A7id7+E$Rp5vyXkx>RaD8iPJum2H=(cS{n|eWw#+ zfpk?Y{xyv`F_E{0s3d9Pt@2-p&@W+BsgL})Y*e`|tY$2$%U9>6OZFdp#(Z`p zGkhT{!>xQpvDsKW?Bz7oo*MyU4X@*JUXmdjm~xO{KNBjr4%jU4O~OPmhyp+dQS+3y zy_fW%liobaz67X+UZN=F6sKj@|CISTm|_9)#{!tBkmkdQsh(R&R}zCLq`Z)2sH#^Y z{LME;eUfBboaxanRC_6a8jSnhuZ! zQ1G#yIP~WCid-||iE&0gCENe&g~6v!}C$%Q$hnh9sA zfe?iHv)9=5b5{xob$J-A^1$SBV^H5!>S&{d-2vIf5D*X$)H`5O?JG`m+9$tT8v} zY3brlbR%d8&k9SObZ3^!eR`@Ksa7}+lu7kiABP&_Xs;qp()G)M88l1$CN-6dCHqp_ zrElMs!=;9#-HMSI5ENC@98+GN`M$l;wy zX~Nf(ZOC6VHJfewJ6H~Rn0V59vk#t`V<~$AY=51YX2S;Tacs*snAE0tF8ey|PqTu& zb9>egaFj`lj^tAKuglb)%5{~h>Zsl8f^O%zgjZ;;A!Twb0^i(zlc=oj_gc9i&qI4} zNA2#<`~oVzIxD%Ht>}AqIxi^|g7VQr)Fg1iEJqXLQyn}Kz;nP;uGGhf2i=OANy5+A z36!SVcwzz%K@3bM=)L96q;I=xjwOwiA1N=_o-5{%fF$p(_OonDtSm@Uv(!X?KYsLI z&k@p)s_XN#aCq&hd+*&h7q`AGtPQD|y*w!W{5s9s>pu)PLNX;uP*Vd?SfU(Dl+ti0 z^`xqfAf)e!M?t42c6rVw4OU+5RoyS;LU~RjoDxLD8rt-ZqyENs?&wNbNZY->d zo$v%i1O)#D`TMTPc(cS@+1o4yG$QNG4yBhj+gox#4bS8~I@|Mp7XPBHyz!N-NqK+U zy_Ai?=B7o%`<ax9lL979be& za=~YmoSV~xib^hJ(pfyy+uc#A6;3+K9#idZsC1G>o#kgMuA3G8%LPm!YXI#;IMJ!C zLWfC;xD;40s+cD{Q0Y6CySe`4J~1W4;7^p>EqMFcKLjoM{~KMGt_kT`xB19d%HdH&nFK~@){Szc(z%8;@Y_e-BFZpi72mw>fos4)x$hu{Q?;oq zFg(Z(W?xKEXSBk+$I_G|B&;Zp&+!T*QI4RenE7TwhoJuR-7W=G2!jL8o)4^VhHVgP zx2TW*-wnritR2w<^A}%4fbcJvs-ihb987Wp(8GY+2&ncMXa?Y_TloOVXT4 zY5hR+)s6Mp^Bk@5!TKe?k0I0<3hogxmdnIZNFF5SR%rmKq8JLX$y+2eNSuppPABZ@ zxhn;PwLDQ$w@`If7=*5AyXY00Q%=vy-^(jBaSrH;9ftGaXBwH@s3qM8(lOIWEk_h2 zz#MSA4PFpUfGYh=kGA>Y#)0ku2nYxWX$ZM;#Y3{hZsj$Y&WV6IVtZS+vH^H4_sZZ+ z_{Z#e$9{(&EX@wEUpSETuFN)~{@BNd!QZ_4&xZhv5D)?Y001*YMKk~aUR6k;bQd7f z9ktwA?|-q|=%hxDg3_`1kw{2Y&Q|YkOg1J8twVf^P)~@ST3u%aA)CERVjgbKn2#u%!f)I#5 zgqDa}BvB-we?fji0AfS_k@y7u$RCya*kOvY|4+?UYF(GJ#*%e zsL13Z-L$!2-Fp3Y*_|!J^JMY7x*sD)5y)cq*R?oN1H?^DO}|CbN`HL1E#};Ox|!Jk zUFljplM$=)=H5`Qn6W6{na}WcyE$fYLiP$XZoKL3Y!8Or-5$`(%)Q|A2eJ|1QVZF# zf%tr{@CpIf*-BF*R@0SLtDUK;%%;F>ChhDY?+(L0IpuGGv1JWyEfz`nF0|J8Ei5J}Q@!RNY>` zDI{`c{8%z1qTz4E=Y%P9g0wN8YqaN`ESVk!nGv7B5@1a{s4<4JOJ zY*udW`Zg3CU8oKAt&K>gIF|U=nYzi9HTKt%+q+p*o!0Y8uuwXVWJcBzsLDSS3)6W~ z^{g|e&|rJI`C7Nz9#1OC;V6UPWB931W^)xl`&L=E78-rcd|=nWHx!d$w*n2q1Z|t_w{F1X1YZ zI8ja)thNer2of%UPzk69(G+AYZO!&z8pc28yM-&WyBzj>wju2Esz^8PKp6(`QID4D zz-mXrMI}5B+?ZlX3{D9K^+d;RAYE9TFE*;Iu&u`f40t?c{cUx}{QPa8(Yw&d#LYn8 zqr3yYPW!8En>)`jbvoU=NPgnF+1%$EGg9^J%q|%x=D$z=<>j+~FSpvR{LK#D>-9sj zU-Sq={e*e)lDgq;h_SxMs2SUwiS|Do7jMfuY-dJa5mZkA>BITT1T6+i_~M4uo$XOs z+z8W>MtG1VaM5*HZ988_uQJ2s-SAD3pom#{MJM|ql1IQx+&Q*~gw@GgN+xac*sT&j zkBS7#7~c@2eeV5>;(uP5R*eDH+B+jFv7O)^YM#OlUB|Ln?NbyQfz3$e(oGSELLbDBP#0e zZWcR@Yx1{`bS7Xo5-$+lsnbv@6G-(pum#R0UQ1@=X3gLRg8 zjD&eU`rMHm)7w4MucTKEdHl0kPc--V)v}ztTr7ZDdCs*$SUQ%**IurV?pA`sBGzs2 zi}$NCoVR&Zp2dopkrb3FNuaYZB@@02g3dTmSjmjfc5BjF@3pO)B^45#|0-{JnZ*o6m)(!)7PwO-#jEPHt$_cAs-N>1-PU*6 zE$z$r%?|!+(PhH*jaW#lAi+NJ%hP9xBKN$l;N{BLPQJID$5+@|yUrx8z~JDT9P`~3 zrewX~qFPhj_1T|{9;ZB6n#9vN%j(ihg|q|<&QXNd&qN6^x;SaP*s^ZSXS$G{->Zy6 z+F|xg**7qIv$R)9%m<%BpX5i;9O1A+7Vgy9qYzhzUUu&;QF?6X zR9uN+Wp$j@W>b61pfkP5`F6=mAZWU9h_akVZDNRWb+UB{L5bm_YKT6~+hfcnJi0=` z)#Yc!9oiM67d>OwicF2zJZCR+G>lSQG0MnM81lL^csKC%OB^%Cj4nA#PR$k%ICl!|0F1kR9YNbh<2!J!9K*5Wxdm&QU%pfLgeo{Hz1z811MEoj@Oq=c)v z6cR8~P^G{yi3cZ<@RrRTKWkKZY#0D>go&+9HvWc^HcW}?oVmhUB&WSdKca+Bvvn{Z zn>%(u% zdfKfKG-h7MBkQqPKO81Sio#3?A#`-6wk_20jdfU>tnMc zchw&u(g}1|_nlpshdtqE(E)w8Aw8UXeYC#BX8W)#D_idgrgT?jyhqQb>YDIxkMunA zkiFuqpb0<&fL^kqB1nXhnVew!kG~Q^u%ako2pNM4G?%!(HcbQ3CpglCrWLbc}r9l zm7?V&n~hj7jq`L0O%9|Y;;#x2lsRZNDMIm`2kU4MSCt@N(FMb`mV1Y3d6KJ$s034} zATy5-?_43buyVW3M1`RT>2~>#734tiTGs|%>l>^u$2Kx4?6{!-p(Ic~;I9jc%Jv%+ zy^d|GXLqpM@%Q*AJXZUK=?^{HFXRAw?vG#n_o;lvOE#wMzQ6u2E;ZIt$7z_);+UM0 zn$#m>w}wtLJza&+`s&tPCD19nstj6#;hURH3~bYje`FYzxf>l(_Ke+&ZGc83!+LQoi=Py-NhMjY9QbxXR4LdWN`2`6%tw2 zbm|$Bk_rikqLgb>0Oosukj$xct}Cis1VvD}^;K5F;4U2wkH@T!b=VHY&o^3Lpzina z6>wo)8xx(Z6wL z3vwVo6Ruh<_}{^Utk<&goOob$>+h_^4LNjmt;`*7IgjyCzJ|0T_>sU$9+sDQW~i3( zo|yqInPuRu?3QwP#%|X8ZmsB{S(2Y$4zRkA(>N%VyqSrUAt;nENs3?+t!dPeq6o*j z;*2Wl{z?EL@}p?S3KgZ*eN;+SwPy4zOP$`5^zu?PF{wxPL>?c#@fBk@C!*S}h? zbpYRb1EDteev^S4#%_1{J`w$hgp&$!*0oPL-&xlo>ac0vz+2`ASMJ})vb^zzovkUV zN~$9;m$z}a-KcqzC#Tx)<`Pp_bXy_Y-4lC{;(b z4#_zLTzWHj?C#5UU#+Xy+uLwa#GhV5MmygSX$z59-olyqlLH?#O&C01t9jV}qXa1* zFmUJPn43=@qPg*!1ehq63H8)GZGm_>ivkiJL{?S+GSOVtG3}({;;#x2iaAmzM`X-G z6D==?y4c&0{`y;1J6t+}67bN4M+wb&0Q3k90t5g7s=tU))f_^LC4mhTkVp#wIz!2V2u<}o0u)W*pB@9+wUkp_y`NBXdH|##w9vX0ojQgNL$lV) za@G_17l2R;2He!q|4OgVvaQA#L+Ra@X-Ccj`SXbCvi+Y8S`oh9;}8L{l(dbAf#ea+ z9Y^U?hI%nz5mN;)sS+w{KuW4lJP|^&sHtg|G2qN}cz!FXg!qgCqD=*gr>BqAM-P~~ z>D!hQKZ9h1F4=0jk&o3#IyyDN{V&u#N{5Rv+z7))RuWk0dK$h&R%TSf}G@){&oT9XOpN#dF{vwYXJQ1GacolGw(DZ%+G7I zkQ?BQOdN^vZ;x}KH?uj#SLzH1pt48leX)e?SVWetdM}`c>-qW<$~djXw^Pl!!FYD0 zbg9ujL-S5hXtPc0Eq{~|>pJ61LyHvU=P%oCm&mg9+fYvl;Mo^ST)M<^>JgKp+9{QG z=W@1Vl5x+za4E>RG@x2KbcdD~ZYA=YFQw0n$@bFXB=Yn1mUG0fPwjjk9be{SwTxf7 zPs$#jsk%N*@UI9issW@h^vS5@Mxm*og{0RtOtgu^U@en`Sxta4u#&`>%sz6pSgD#m z%dxe4c7XwV1RxGMh?W!Xj7y36#hMAn2`7c~m40a@7mir03xJG6;yf)^i4_JwN~lp` zLQ>5XB26&V59EpdDT$@`i;!WqHD0KrYiNdT#(`+UZsuGsT zK}k~7b5*_)X?%OiLMXavt+K+Dd%rRdZ*Z?_bc?d~cX)SV)LA6)KJl-3ef*q6$k~4J z_|2cYE)!>TdElboBl_3&Am&R_x)_YD3ph#?=4iM$c6aL-u8DrKJs2UzsskD-Siih2 zghOc$2aJSzwq3#eUxK<}I z8eak`*S;gkVgDSwF=P%Bcb6!0id5yP1eo{~!K9J;vRvt8facVb2|&3f?skvCTCujeGbkWZ44;S2f3e zFJtam5-FuaDd(0xNhR!jMX42ZNfv4RAQOsBjc>^O;zlT;?G*dIx zB#)x+i6~iMizSjYQjo>aQxjtx(M~N?xVXl;c@(XGY06RB-%9hXA`-Mt2V|w!F^lfN zo2(VAb*JmYe4SyqeoOTiWx$_E*kkSiI$4eFh`!fP8W&;j0-6F!0eur+3#e-0=RhxL zK`6vX`3kn7{MnNB__rA}&H6JByhrFLMdJb+kc}vN6ybDF(FRJ+#W$u4jB0@bv9s1u zry7mMs>#Z|Umh9d&O5rFNNJIllIID6N*qaHQUXLZ0H6viv7Vx3&yp3-eAsw1`hIPA31Oc>YZ*$yAIFTizFM?w_y7JJcQj(jMOXi0(i z%8n|6H^qt;NL2sjV%C0*72|f&d@@0Hgo_W=7zOzySCD-n;Gg{k^T--JiSLZEKp6df(ja zcjv8bcI)G|q&5`oNMi<~Q2)tVRX{2Ugn*(EC<3%ZMlA^_0wRDYWc-Bq00M|8_zd?6 ztsh4K)WAB~mR-hkG-x|r!7BoHkP+ams1riZt|o&Pi`_3&Bc3oDxmW9S^FcaOpat-W zzTI`SAUQc3ZQR`$u z8kakpDFEjFcf#QbUo;-UIC=)#&fKi{(A|XB3I1D^p8;-@e%@cT?+MOc) zJaYy=;yabryxg*1i2b@wJfiA=d&C|xu9mvSz{>Ut>1H}{>t2EPgb!<>SueMzox5i2GaJ`m z1&iStYcCwSQSjRBS&U45i|raGhpml))v0G~dl~8SaQ=zbzorfFz@9q6F*uBwlbxm@PwM>Ve4GjSc`?`?xw9ubqxDQ`|| zx@_L5vI_VcJl>hl$?bjzH?KTqwRV>HvKIk z^;XL!ld;C#YO?U}4Bp$r6Hm8OH;b0`f}6#@O+N$sz2(bgX^oVi5M7{dt4*rGx3Y=H z{OVa*WaBfGmG^3%{gBaxYBarLrf-1%RY*PF`o7>4vq8q&hTrSxtLx1=;m>T(t={;Q z-O(u~WDEa~HdjUdgJ(C*(+Aw#?pSo4;yQ^KFf`U<92`teUf9O(zI*8X6?c{odtJ>%n5sCQ4IgUbP^m8#4&5=-|Tt6D_RQZ zBhTO;(XjAF-|!hxC+yg+bj&>0mb@K*!h@I=&P$SKznnZo-d#3 zpVtt~93!)GHUib#vzYS7-0Y68Gsg8+U*!>ym)LS-T0e%YxwkXPD8rX94jWVV-t;0< z6tWpChgSc0y1_lGzo{_elWnrQOy+^|_AK~+pM8+B<5g|W!Jm4)5Gcde-d~bwf1Ht* zn%jRoef>xW_hKB3#E050e2I@ok1Xe2pN4VF`%+^JxmlxqTF9mr?a?DGrm^YuTgqDI z&Ge;E>G(GRhZ&(lb$3kjQ0BH{sDgKg6Q7`GxrGb zaM1ep@^JO4e}+$E@1ccG{DXXGi0iOS2{Qae_DT5kAn)y+*B_ZS{c>V09=A+sx3SDb*=Bak^`jfOJCf4!Oq;>#p+C*%>lLV znt3mHqT{&?ZcH%Wx3c!gbv?iBWhI%NQ3eAU?BPH3W9*S4d)wG?x&;Ngs??DsmXF(! zO4b}0hUq=6%Un2~NXTRAA|Gm9@`PI+IY@3{ zz(Xo>CfrbHR9Vz6tVBpeVo^{?vn=A(^xmKICJUZOxS1_35II#2(kRpA7l+?TR+l{lA~EE(H_{A?#%o<$F0>5vsimCv<9gK|W3cUz z=K8PdD#y*d1qN4A;&b&HoIdXGas6$HW?VvYr%M8Uc-f&Kp7R7i)rBgk0f>vz23Qmn zk}L}<_eh+99yP^=%zh_XW^$VtivXTjC7d_xzZqTt4WXKv=KK}Bfua9BlZ}J-A+JP5||Idh+%g zybxo(Ut=<95VgC`_;0zTdEe(K{NK&4B`&2J>QAGs0b4KHV6)G5Vc~L7i>%v$;bL>| z+b#*;>BH+Ye1W;rA%N<@mbbDTy<$w)ro5!AOng71H=t} zQqg4+m3bUo5X03?=jrU`Wv;y;Sek$YQJE#@8MZ62T~C+8@Z-#7hr#)K>Zi0*5C-!{ z`V9pB=9e}-a?Fm37kH!+n1QGlRzT(k8>rkanMe*1?1~6WNDlc32D<3*YWg4l}tg*TWLen$Z_HGDqY;3ZkUTH5GOO~PdHsPR2}CMt&4$SLj{gJ3&slQ z`GU_#q&ru892oI}{WfI-DTNDb9Z3Pw45>&Z$Py7)6cmyy3!3`6w1K+AJ}Wf@+NN>A ztSRUmn>f~C5dq5?KRj=txrxGzq_;Kqye-7dpw5($!RD-03H1iIS|k z377su%R$}(&gTyy0A9-(j_oJ!IpDZ-|bU)iL z&H6c=VcfEHFQjp6p1BA0OaO+#{$7LnRBI?wVB_bC}=G0+WtQo~-u@=J$l-)|rVPviE^mo~l!NI2;pQ*Y%ryTR1 z+I{ZGwkdT=$BXo6>sKn4s!B>}bEm!2n$yoF!{k4oM5;_uJ%P^B^vvi-p4p1G$E&dq$~Ffo zWnvpImlX|o!h6L6*CNXgh&NlH_UKPESyWdjOaer^BJREo;DI8bKrc}Emj6t^(%=?P zm;f@+_m@AXwXdV*JDZW5j{B!p?6r`dX2s5zx4InkKiQk(RE^lH^G{{j_^GDe+{EyB z^PIw2n~&f=86Lqo9&;9*P0z5?tHq(#a{Q^3Xj$wgDfL+f!rBi`W9H@lRwthX5mvSv zQBENO($sP8`bqG33X6DR(?-FZZ3LNLxbADVaC*8zU1+hXWxIh!i?fJwip86hvS+cu zQC2_Y{Fx5C!f|~6^)KhSc*)d=)?)ub4xAx^VtuS&ZbqT8NA-g&uF57`7kgZ;edF8| ziS59y1=d4RNoXux7pMzK&NK-}C2(LdG3y$Zk17{$oi?8yp73I(i+gv-Ep4ue^pE?pv2SaZjgTr?}rg15b zF7_&Y`wq%4-_AV+`p`7OqA;rn0t{CK4T^veY#s;Ku!&S{oZ{Er@s`N!=*<@dg%l|M zmDzTZqbrGf=$!8F`*xJ9FZhtH8=EY}Au4qw;vFD@G5%S%GmL80-okVvraFCR?J8F` zV|dL!()_lJimsBoiNqj&*|&jDFd{A8jP&4Z%WGGe+MW$Zc{>jn+sDiOd)F%*b@X^Y z3N{!RrQ4t`$W*^|N!U>6VQ8NwH+{Z>7gxZ>W=aP7oiz5Qx4qwl2uWdXgd+_Q06teh z@cvjAr1WCoh=Qh~ZAkQbQ3vYKW6@m~@}E+W;^?^dWf87GRQ&+@m?@n)9UpePa?R^;Pgahlak%g&v zgozVOo#m9dfJxZgL(02pB{HG&ep}f%p@!h%Pbdst^hJ^@TMu?Ij2j#_`si z#H;q)NBJ-JF290`z3f@zk#ZjtjvSe1T(uTO14}W*>4hh8!ZR{}Y6)j9VALe%1+^Qb zsxKr9T5GDh6E1|*czh!Z!fvhsQFs%`CE5~l3AO}Wf-QlUuuC9>`2@0pw@Y3(;U@a! z-zb^VVX=2t@;LH{>7NU`Vrs5T(#htDH{gJ&WjWuGw zQ1q$xxoM{+B_*I5)B&r!8y?UO!EpjWN>)KR6qh8`IO`1?=cO)~bZ~eLDqc?gdQN~8 zRrvMV(ybQDNk2dBXsH6m0%n1y|8@%QNuV4jUy7^flkA=PB)bPa1@V(ao@$5zffB>+FbJu?Umf=B*Yp{Bndx^a`-7gCIvyJ~)+Q)H zYIQxpz&zFw3IQ>RW2tZ;tk`%WVUG#Sg**psbGxN!N%f!-U$Rh*MMDrP>x=zQz8aN5 zAgTaH1L%1Y-GX51JJ9FM`5?@9EikJNd0;0ZAjz6zfuKee7unee6w?)lG{2sH+FZ_K zGWlZls=0eQ`wVWMUs_lV9wka8QWA|(&8+J~Bc{pW;#W838H%6)tergAf!5FDi~$uj z6BIOKG-?X7l#c6?_vT>zhN-j^UN|vSXpj9iwhVfGsehXxZpJv>T&dAb_@M5LX0p9?f%^;kP&I+8 zKV-p>_6?{_b7f(9!I-EK5aSXnR3ZUFAbuu=wfNRtT{cwWdHM1375+)Yb}_Ub>Da=A zG_FUvYC(@w*Gbq70FVp9Nmk@oDJOyjmA7|3?}WKtCPy>3)5BV2oq&W`P(^@@fC>SF zw;~4ykgKVn9+ieS>C~^15vMh~i!O8Ya7bjwOkM_b4Hg_D7!X$2!63w`90BNN5=vA> zkxdcT73D%4qEv79lHYhmvcj4qg_;69ff~@95gY;FaYJ1Vt`ED3RJ$hp3ejv{1Ih2< zr)q>vy3v;^DFQiNW2g#9M)detHD1D`A zukILSe8wwFH50Ctm6f&C^{(^>1!{gmSHF`lO)5}EGOEnE&;N;_eJos@0-a>`*$8uV zsQo?{DJUA`kf?wN&~*n1T%4XIQp}QXuxNUBAbSbP^+eRLjr&Xze(W(B z0K^4UkztHq@Dw zrf@3S|F(;%<#95d@TD5zWKi@Y11h$*5cvN*SQXH7-(7#q|9HDHWOgyP!iZ;imR7Pv zcj1oCz(j&kRG3o{ARIZF!ZC6ftbl-ef-I`(ada9;L}*cpNC?g>g2K2P6>3daDzygI zFa{Um1mRP}W~lW6Y80d@^!)_)i!QYWp$d8k1Zbd=fVcrwH3depLLI9DuW`cO9f{*8 z<5(9^pcg2q`!}eJZt7rqd5<0>`axCSCGDeQ31Hzb_Ay`o(XYgbsk1Ku>~?h0#Q&+= zA_IBvqw$I4LT7%C7awkuy2GIYq7~TgMVhLf$XFC(0$W)sf*5e&JVbyIIV7fbMXm>f zybzW|i z2sQQ)c?AlA0#bhf01yxY00savL`5_J0B%+Fq4$LvO>qjn)&IwCf1JjX_?9G_n1{Gk zB7sHbOgZl{vza_unUT3ts5GxBUQj?>FW9aCKxPJtW&q$13~8&`KR3ap(O3l(0tsLE zvSJOi1_x*)*6Gxo2I=q89_2D`;Iq-yt_sxa2Id(Le{+BW7cZb&p~yqr{JZPvJP z$AqiL;_)L%Vzqd2L2PO|;^CTtMA(1^xF7-m05bw$GzEbBhd#f$`*(NUZtX2*-DT}C z*L&@?>t(R4``Y|j?0{)%*CAVCtk4BQL=*))P6^^4lxy)_7In_Q1PLi-$v6!sr@z zuhov_bd_Dy_1uE03n}{5pYFFRX1ZIHz7=_@f%wzYqBZIgcmw`q=Lal{OB7e!4|Kl{ zEY9!yGovE{)$Fo17asp5^Wg%qgN3ia%iH)hjl1ssNp*kU?#qEbvCiK6yBLp35!kzN zn?hEejN3vG$lUG+ke;F56f8Y2r7bYiX4k2%v**eaiVT1n0 zJ{0St(P}dU^J z!PKhqYKmvpm-N>n2jZ?d43lRBcdL^QJuYa_xnrGF3umsFHgrewxwa^Fxv~`(YHSK6KHlzqA z?{Kg0cEIbTQz8%n^RTBQmHw#l%(5a0(|t8rZ-deJhAL14CO}YJH*|xGh*q2KgalQ1@n*RzTonSIq-5};A~j7 zx%;(UTUy+;Jl?hB72;Fpzu%P$D{Z!Os=EzUU-}$d5XC)4*0QR0QhmVmveR~fjz_z_ z(#AA=$XWa9WM3@^5OLF&f#kZiMOnu3%SIsFZo)x~n?#Avatas^Jp1WCwx<-vdj&?_v8OgtE@}~Mpj;HUjWl~s{xq_$2 znD02AD*|y%B~W6|qBU7279uH?lyZWe1XGM*5(TQnRE3G>CuK@ml72w3_b$cjJR4$q z_(h(2#6WIV^@BeG4HBtkY8PD!8=(?L$Fk8_0Zzm_-QHTj%{?D^&i=LwQ|bDfV3KVH zK9_Chgpi0fd$8Fgi?Cq%@VW|tZ8D|>@44+l{v9I6%(Rv@+V$Hhm>VJjl zEB|Q*PDKFdC)1OX)`H*i2>8p*T;$SYps>PN)<9dRjQB#!PtoJXy0SG`B3Kt3rhGhH z{hYWjq9IjNnq?XLt+g$1=Wos6lEht(6=!pk7*inOOCvFb1GHyOj$QXUbj zGBWeHEe%-)cE8$3a7z=Og+A{cp4)=X5Aq+KIjX*s2l+M5>UiO7fu-9A_4lP11#9No z->71rBq@eow^-$OaX*XFZA@d@dbY&*3bNhN)?D90d~VP&wwvk^TBeu8t3|fHcqh|6 zqxQj3ldqiDA=!YRu>j{8UUcIu#0K&NfXJlzyYtjdQWfTboQpqr2Z3sC%)eUB{{gdGS zRSy>#L&KZ$bin&3d+mBvwTP#E+IB|XK?`b$>5areWCiyc2zEycQ7UkWe!^%}~hs6(7d zS6A13*MwYzb^lMj>a2UKtKI6>z@Rq1WcYh(9GACG+a;+4Wm-r_7Zj)z`Jm{PN{~K_ z14T0|6iw|GU9~q-f)=t2;yOFS6rb_{LZ8*oK5;q!QVAlYCQl<)f{ zeGV2i9^RKFC+y`WdM2F3?4}!E#fbj>E@-l`A~vsoH)j*(nrPIor339W?7JCmCmODc zycK3!ZUs)G*(0*R{43`6jtv%0zyE z)owg{V?djamZv2Ww1&Sj^T^>aR1iLeS}LW1C<^UkDI%l(0(}?oJp-d6*8pukdYZ5m zsQWy?lq8aw!pR{QgqkJkv85FxbRC)~b1fBg06#F&ruG?gAN^)aC(~!_>ujvC$SZTT z01UveW4?9b7RjxwYO@mJZ(n#FZL_i6Th-WB?cU4D+OcJN+->hdU&-A*fveX4$A`IQ zD=)D@n&% zT^pP;_ymK#^u?K{>d90g+*g@Zas(k+*+~`@=THK)IHf%jY%NpNL~Jv%7BD(kgjwdu z9bjN!V3&Pw0{d1F*JfV-mnmG$|COr4AEjEeXEFbC1U3@(vu0ir05c*9S6t~TI zx&LYxYb7SaU(j~bILf>k<&cx;vz*&qZ7rV9vI`xbXZ&_ocA&c^?#7CuEOG}BWh4tJ z0+Cy37#t?-ZK8+@3j37{l(PT`HE^MV=mrLBUAMKL`@#`E_^W_<`QvCk(|+4V+P9~= zd#o|vc3>-J$rRl!+bWrDHIp2p=o9j6<*?RV7SGh%^wEQs zz^3&|O!-b0GajxzOPP(JYv(%783g6!e3|UwF8d?=^Zz=J6P6|@FmQW!JYYRTK#ioK!*AP)1;_3cNVSNKun|#=4paF!rHUx z5w{v!EH#C71Kd^Wm}4m!^+^|*wqHp{r8Dxg=q=3T%#mU1Lz>ac{Km&}Y6kVC@-qnv zjjE&tda`p%6%M84T46L)HI+Y7wP%_Z%2G5D%q(a-pVZyJjFBSTH@S(bXf%K>wP9Pf zl=|p&Ist`@sI?3u*;3|`H|e%6p3mo{DI}L_cQ&O-M|y)SUh$CH(hoewk9KayO)2x1 zaov@f0E!cuTE7VE6m4ILabT5wK1|zwY{_na4G_Wcmq)`^rLq2WmWY4?Qj#Z(0+UoX zl<+fFBUFSXDH2ea2sVH)uFs-=Ti}2^hl=JLXe_qe+DB%LCiokpGqM6I@OddhbiH>* z!@1i0%7-B3)rrIN=OI9nAg^#mnAH;tOd})*i#uWdMpuaZQ3JyR1Nj4T-s5f+>C#b0 zAD~(Idx_tsY+){CSuOTTFP8RKdF?13uO7QGRXTNd%lk5-z=y(K(s{SUMP@KhuQ68M)ZcJJ=j6nb307lGy&JZl;L#aB;E z{WS7jBb~LDrNY8vzphQ>MS>-Nuo+rwagaRS0g2C8L zC(hcUuvo$8z|ovXqb3rJmCE4H<9~y22Ap6zYg=49@6f%m)kht5d;*$aU|?W>U@ZL? z9BZEMe+X-=DO2HLidbT;$z71HNhuG%o=e|@cl%~c>eA-ER1Pj;n1{5C2<;EPd+uccKH=ACeOkc z!|=GHElGikLDGqV+z}rz*w3v4C6UM=_-&b?0MF((i!*+~h6pgnLKI-B^DBMgk+zH6tT!S8I#``g42rd77`(0b&G zWD9w_^S4FZ!?{)GFWQ2#ICbaSb%RIN?0Vd|`Zf6WReu&Ndkc}zCmfy$pLC#TLELla#)k1w z@l|{(;Do646jzZ<;la7coBOJp1*Ne3R&v-0IWC_iSgRH&*6c%Vc{ zq>AO+_}#Es(S!uWnP3)kSuoYXqQF?3=S9{RG`67FUYdpukE*IFh20CuV`FTtsM!sePyDgikKYj2zGdg98KX z11+QR!u>tf?NC&d7AVRdPMcx~0X5W^oXS{(51E7VD~KwC#UnCzv@iK97mXX%YdL!* zec3nG)M;dR?6r9+@p$fr_J1U{RDm9yKmTezS1z+Kr@ndxP@DbgCV=rY6JFBSy)*=T zbl8s+Hhvr)i+Ay|G2PpJ1cBa9U_g;g@O=~@r~gJl7jhH5mak?K+H#LuQKfH_52jP? zXcbP9roVvg$1DVf+@1^Xjzs-)2 zOQTuLq{hj;yVzei<02uo(;z7K3I!xLyY})0^b7yO>Bl$BQ>Do7f8oeGBe^H|Vun+c zC+jYjGnwnmnz@lvZmxj}0VSwJo?p6;xF0h#h!jhbD^SWx!c;v?$pU4lN%n?D3I~J* z9~8zbSRNQB<4y2B&BnNN=vy!b&tP!v{$5HBG3cIs+PhJF2gvzPkfl6U8l!^>N60** z`vU_517z$C@!6OPU;ee{+xAPl2#q*SiGOy{t&)*HYr1tX#8t#lVY1M8N#w%DH7y11YJQhM(sdQ8I|vOhc6J`@Y;u+Hu{CQ<%uQ z?53p2M#zWTJ8D=mU_AykC5Rv$hSUoG4-hHsj%?oPgCb5RNJHZf={G zHx@HxZlbQ5*NPti2>pP2aKK>90nNz36&L^!1OKK;;#e=$*d~c5)3w3^pZwG}ztVb?v1uX%xG)415c+ty)fA+Spob8RZf=pthEl2RtAI zt)z0qkwpib%r6E*YcpB401&WH3x$zUi2??LHZ~Fks{(vrApzNp@Cah&0|F?3FAzW{6km+bAovN( zL&Fpo`{qN!GQ)B~*QT-CDR##*#gvb@F_nG^cu|G5fQzoQ~~Nn>k@} zm{upY?^e6r>n17qDq$$jXTM%hD!m8sBM1!@oMKu7cgVvF6fHLXI z+4G`RRrxerYC^;_cJ&bVr!lHt0byjziP4tiX6Q6~MMddrV21LVx!}It)I}eJ%h{?g z2bK@RRC+udUqK&(n73n(j27DhJfcNhZpE zZk40!rT6aGPK%Kpiqy{A)_|Z}QjB*yN;F&eI8DW-j*xd%$1RO-w5MYGRX0voo9CXk@mk0n@K^zFkp)-x@4hw&7=3gQc|GAfv ztqPXasrceYJcx<3pu|tWfJ(e%MwejVep?yOtVcW~oy{fwNSW!K%4h{WU%Hl;Q|ccX zcctcW07|6;=RI5!=zBQZ{FFBCUNcM{ZQ<~|Fr|sgTu3}}c#SmTB*=HY~ z&&vC;dLyuNt`zKMyP=Bx?B)3OF6%Bsg@u3Kc=AKbu?QE-N@lglQ_m8;!1L7Br-$2< zy9SIe1Mq;~;~Fs}XtE-W3jMf*J>PG;9~bC%4Z~ZzXZpp>lo31%S!V8(9tZr2nSdgE zEr=H^%~Bv`&>^LGC=t;v>sFLmOUMDKh`^GqYy_EYIYaWScyPgay4-DbzBS*erC2%2 zZSd006!4B0BL(b-q_4l+$fdOeJn`|0`a$*S#)b#9neHS|om*xBk~#X8lr@V&%4qFKJrT027sXs-l-Z_U-^Lzs3pWWz|41XGUc$3?Tm88w!ZsBOuE#Swh?*Q zf}4h?7K1CfJk0K0^szx}Z;P|DuBx5pg{M5WYu4G*RTjydH{Nwuz$;%JZ}+Mvk^^pp zueVH;W#gW|_i_2~N9&HY!pj%T#T>&l9~c;yiH_0*HY~2M>UB3${;uH70REkCu)RHFjMs6dld5zgN1ng>5xn6~8M<^$H?}(lC@UEt%DJJL=46;|!kUoBQ2V&nI1kZ4$&*8B+@%!fO# zNOAiXg&Kc*&FZ_*c1J=p(HTzM13%VW%& z^5h&ZGLAhW3-yx5fnmSZY^+Sq;@xtF8)K4RN%FUZMB2}PVp z945{{GCOf127;osOgz8_mdpiK3W0W}S!kkD4S)n8jY#LIaB?7)MR1ReV*yn3L}~z8 zh-RgxiE5s(QO0L1%FedQ*U&2y&ijNUh-&!H?GUJ!USdb2cfWT|@Xz~}HBw`aQSk|K zkyqt-edtdApRQ`>DnL=;evK9>(CXiS83O+X6@v{_SV%2 zH@`Km*Klu4t>*c-TE##@~jIF1oEPPyrr)?#RleQ_^+#O%#$xwO=B$r)`iI; z00L$+=^$acVOvM2M}vXzS57N`qcqBgb#0w4ZNhdFX4pE$kF^iuQ85A+Pn_KeWD*=$ zmmcL$m9+%5Iqu76_w19ko=W$S&hRAAD@rHfBSF)Sgyjlf5m5is}+GB+bt zKNfzw3Qh*2#3j3qmx=aKcB{v#zbxjyc{7&rCVO5|a%0L#6{?AHK2b8%Q{(8LZm*R}1mA;Apc=t@Q;gnG#Up1${7!79_PBqqsrknn; zX;bDmV+LyY*mPcLdRp)SesUA>l!T#gINEX2W$5 zgTfwR9Xa!E81$%q#k*sDc`LdKl-27_Vl=Y7RaQ#H@~ytyIA;`(HkJ6VX}35b#GNwz z4f&(hn`aTcLn#WNTW9}i@b-ep7IBB9{17{ za$%<~XDn(+Wp|l!>w$;#B(+bj?^dSx0=0X-uXvufj3AUK_g#i&%BT27Cd$%uCI+c+ znj(N-)rJDGwV`i#J1AOv@sK^tk&ej{w`P`Y_MFp5UY1S+VSI&qay8riCkqDuNn6U$t-JJDZ(m!-2Fcto$Gp+WHKbjo zjQy{l4fMv}Ke20*gwaU)|&%B5zqw#$muSUMXHh+|z1B)U*r%Fx}x*(6dDnLY_mG_f42 z#xke^NwUB^RWca(7ea^k(_0RUCy^NB`13TIvV+Frc}kx6@1Kf1R=0%a>AQo(YatE)3cg?x znTF5sFfFumzP`qg>zi)bzw{>)C_8b(?i9Th6^bmjRQ&E`Z#TkG^=~e~#d5Iyz$yV- z&4|9;iZOQ{S|uH9$}=LVnw*{YjRFQG*@~|m=~`C>Ig>P7FbMKAv-;zz zfTW>aBsjl%YEMY_-|yE=sC8U><>gLRW9)4A11y{eCtqzXl9vSoD#P1SyNna5TxueE zhEeZp0l{Gv*>Fi}F2Z)MDj}4S#(b6HbYk2p9q;IB?0*d0RH^kRovaI>oE~T7p7P8J{bH~+IYCWM0TDQEsxg$lbm}}kaBet)xPC%p zcjM+JDqZ$s<(zSxV<(f0bEoHdDct8EVVRM-Q;)ZZ9sWJGsIdnrE3#r28x@5XY@@2V z(%=fYQyI1knnR~ZvtgoHsdaHc2+%AD+i56O;LLS0Rbs|l0^CLxRiq4G6497v!w1zG zR8^f)J(p8D3D3z7rLO7c{>DkQSa~}9mFXv$!tw)&T}NR&rFDEuL4S?e26ikFGMtmK zEkk-|N;*rzc%SG50YQS3AbWl$CxN(_@an4h2heAYGyY)aqWB8@b2@L~&$+N}*KVwi z9<&gP&ieUbO>&<41EtBv6}x*6;K)BO*m%XYH9v))Jx|Rl>6elbF%IA6f40OuT+B=( zoh*mH9A>TQy9)f~$X0ZVUzyCEFwk=4$r|SnfF(5* zp&4RPL&P}q7aSDUd1{+@+-Ci;z2x2_5}^~%skqdS&wotEpUWG2x!0mjf5fJ-U9dLd zZJWvK)-n*}El+kCL!-_U(F}dZ7(VAPu6}pxQ+%lpwYCW#cAK|TduKd=EfL~F_Vq05 zL7A^%OFk2YQjn;7!rpDF*cmJ&NcY2ALgqa>H8YbYXBUB-tWz5COxbU9yT2QVq1?^s zc8ud-DJwLhqe@tDS?Q7-aY&-42OvXW`N!;A=Xe_+K}eAQBwMH#1(e@Wc0)-f`MxIq zcH3FyUjOsmT-%qTJY>*}HS6Ku9JM59!OY=5tJ~PBu=Hv3{ck>8pPnV6eq9}${oA*B ztmn#yuCHD7^Ur@+$q)(apY_)`PH~pW{5xCTV2&dl4}GbybAEBp$9!X_DH3AL?hps)v(8DF(``uW%Td1&^Kjbk$ z-+Bv%-_Y-ti=@eFc?F)BhH8Ld$4?Ak3j07nWn!Ep%8g#CxEU-YNcX>>N(!Bkge|Cu z17y9@;6R&0f61$XNj!<_3W*U4snCoeqTO_y>)Z!`*5Zwn z!~-$0F~q|O5`qLJK_VYQ;aw{)`4Ac~SbKf`&}a5K;2xng%tP<24iG%aEWdGdqqQ~g zFZCK5Cf?qob8Wh+q2Cc=vvrO$2Yo|7zs@ajWgGZRlb2 zV9GJjU~eq%#sT(Tz;!Dk3E2EH<&t+iNB#}P9LsdI{|v)`)un5Dl|_>^klu#;K}>3Q)}pUdx!EVEbRA>uKl7~a4?`Et~JK0 zgq>=FWLgOVVRpbgB}*hnEU*?YO%Bw929ruwIc^y(#x&FZ{QoH~`=Rw^O2-EN&WWL zSZuzgl!R#Lt4+@1eUUO&awkn8tsWTM{4-~*4A_^M#(RG zW&Dy2!k%JBl8H1%wLc$IR>>Nr!6q>KXOvQ3nQ%&3wFx&M;7E`XB+hR^F}YwNt{`mB zo<1225$?#7c4tI^En3#b^9@hAUUj@O7yPqwvTB= zkpWhwg%yBnUDIG_1S}I~+lkUEY7O~0-uh|ABLwL;oLb^yf374VOGYGhhMjuGKCIK$ z_@=-GROo^H9F-yW$h>W`xGX*KFW4f+X7wYTnW?Vgadx}TubOVJKioEb!Et_!5p_k~ z3JSaReN|feAe{xzlIdYuYq`-uf4&s>x1l}Q|{#S9VyIv8}b(Cdp3BK zH_4bZ#+rmCDGz7?Q6Pa}s#+BS6vHOr0?uVWHN!A0$H~*M6D^2u_jW#SiKE(9w|3-5 zAFgUDEj!|G5>1{I4O9(GU|MQ(Z35G(N+N6tdYT$w$!G?yrmBd=FP>?Q`Dh5O+F5h! zT7F26)==C?6Pf%yf~B#;B+4*#lznTnSX~fTMeG0tgnGn5Ajc(gWLcu5L3U}2pU`%G zwBWks+aGtkA?EJW541-WYLgH~NM#LJm4yW`MbzK|j|GeT8>H}sxvHeC22|6hU*o&? zF1zR~5W843T1g%Qa$f}s+zr%Ls<`L@+|t^j|~45ixy-nzR(hdv|;c z?S|FiVgwLsiev#0#!5n>S%;z(rWw^C=vRD$9Is(+x;1RtWOuq(e0v#k;fhYHw@nbh z6NiEWs#KNknD+g@L_(OC zl{Gmcv5Vyt5DF4UfQTAR5(QDl0<>8L0C$f9b6RHXg(k*mUa<5-kPNdr7I z25Gw=6->!Q4|{`hY|+xDtVJ+sv%Ku$aWcn$Xk&QKWW;+v?5|9#I=#rU<2Fj%)Ni8Z z(^~R|*|gUS|C~MeH*Ktgu(?Egc795cv2TXJzfd04oZP(-Q>+esN|1d&Ywhlfzs@}b zv-$!{d8AgbFgo3@;ICmfKHqnLYKbi_y9u${uKN4Pecy(!I*~o-Q-|7#q5!uItWW5?EAyV7sR^T5X^XXU&%03EyJuo&OEQ(>ybxr>x?{I7 znEhJt_b6++BAf}zfdr@#l{w&)Kh6W-P^uy|<3kY_1Eya)%~)DYsW|`4xq^EV-H&$jZ8gRbxY~9na_pp9B_#W2 z{=1gRX7bHq9mz?>qIF8?fdb`r!*T}zGD25G000eOW}w`EbpTl=NfMZuQ~cnQ-M8x6oF5xsSbQwVE}3y|isLYI@m~rM1%N&5mzd zw5CNTdTD?urNkheY+$E?GD#3f000>QE1Cm<`vbk-d+*)7?%kc;ZhO1i=4v(D+Pf|7 zZPKo@)^zT&w~Rz+3|h*7`9owu1o!|FM8veT0)8tZ*g}Acpo;UOzY2;7hzKBn4WYO?WqP`BR?)`Eh2dc$6E8QewtqCXVn356&focPbqm& zqsTA{)TIX<)8Q;bla(ijC3id577YHi?y0FaXa%4?6oV;>uavB*NCn_&ZJMOwMxCjN z_QG_9+fTP9+eFsjou%!jMc+q9T<~Yse&wK;$D)5jJa0{Ymb-=VEnLNO|ByqAt3~8v z-)HOYbVcAM+04gaqP8BgkE!0yzE{;pXd3<@v@}DUIu0=>ZQc|^Imh>OhNW}0>lieA z-h!sCS3SXr&Bm~?(`~VpHM)YUPL*wx5mN!$;eZe9ebbGU6ZQ7|TobSd#!&U+e4^my z!T|1LA}JjZ5;EloQWBgaOsG$Oq%dm0vVrkbG5}V4l1l^EE8d$7&WMDTtEK8H^1uwb zhq5cJW`%4*t7KZO&L-(1s}*F67!BEPo5Fp0N66e<9Nf}AAS)_(yW)9OhbbtvJf26^ z;d;$(FT4bFuNhVuNjau3ZBs!Sj;HRbY>KQ*iWRYvBtt&1WS4>t-ld~U6xjC*@DlPdl=v*LqqwQ z=!8IN7y6qQ;ccPPUe-D>8!2(6E|SKQb$H?Gz0tk>3v1|rO=$J^hJmD|4S&47=o-4; zSgIL3Boc|IZmo*D%iD0w4l%15SWv6QJ|jBUGi(eRsj@hAT_E zl_QiKBvMdxyfz}FI5;>J5GiJ=sVF1AKVKLqT*y{nXpzk8>wi2RfWZo|iqKnq^0zkE z4zg}LI$&prmyrr7t&dObfohCvY|~oHPo#EkgIRH%GTi+qM!U9k{6fnct&$#EsWe<@ z>UIj>Md>#ldy9bB=Sq5G|Wl>=1rPcfpc*E(|S6m5);%~?zx`?-QGk=|1%dJur z7qjlTu;aQ!+>Z8-k2)e4+wvg{FRy0i<%l2SI`H+8nSZ-`sK|r zicZ*;g{3*q`iw$0+s|8x!NlV)Znr(2EZ@R_(&1h2XCU`icF23-G0z|-A)3PpXqp`r zonJ*kyLy#0KuaEwdQeZuZ?}7@yOLcYS%DZ`{!?=I<` za2~(teGpr^pYa%cItnsuxgy%x(b(*IY(?7s6vdB_sM!N!&#Ty*$aBAWaeBKZ^sO77 zka0Z>H%1Q(2B~rO6z8uyG&e2Y5yp?HT)QD|b(43o*yvF`&UXua&Dg2Ir(Oh9AEI?) zhuTcx_n;DkG|Z}MVf;I)!u`C-Wc)B<48Cx0de*3_rmXhTieX{bpqr*)L=_19xr8;XU+ev?ZCfk;EY{3ZL7a zG0VZD3V3DjtQ50!IT(u#hdU(7lTy9$OqG5?3J&kX?>**MpDQctOxLm5JDAdI|H`XH zNf+Mb0Pe#Ze5*keQj{>u(I}<6R;yF+kh=ie>NQe08e~ zc?QaGr4+#mlwxbKGuetTbY`*j;Eb8mi~gmVR0=GRNYl*fdpwgcAx8`YBppDCnb1Oi zr;M`ztlb4(4ytgEHx0AdqvE4|kqrv&fgRNU7JM{_9K6WB#T-vgDdrGg6LU1Mu<~Kg z5~bg9oGQy9)64zMD=nns1MP}lG)(*rm#;n1vDK_qpx`WBoMC<=yCV7)?o<5dJ<|Bc z(_J&|jtmmD9Z2Q!1LI&GrsqclTf}E&QuQq@=%b}bPmB}JSL8K`S_y8S(xyH9ueqYC zBYpz<5oqxr|FQDNepJ|_oG1}VSW!;_pSl5y)EsNV(-l>I_H)QW3-5RUqR4hs)e$6T zJQ$&M0<)2V#92|dmgNX(k#S~MW#)IAakRTJ$XCEc-}%vBqh2KS)*L1$504pQF?8s? zIixgwy5ho5F*7>o@aq0PGfD0~Jl4Q-G*0KQ(f)d&;sHKVF)hvaf%qs`5)f1s!odsp zO9XHW-93Q@ul)m0i5f7 zS(vogaM=|ib~DQ+*(8q49F9yakq_9{!ArUxGiutc6BcWjuywFqWjYr&?##nE1|F!5I0(DP7A>#%CG~(%T>H*j$a@y|o%vpkFuJGV7x3 zbuBtIyRv)g{fEj@?Pacy=3>DGDt4A=&(oz#so=gZ)I{p){vKvui zd#Olmt0&xOsc~(pEb8Gj@r*>vZipTx9TE&9c;J-kpLv=do|X@&@f~&e`?s$eBjs%Z zMxJr$Wis2_dzpOCP4_p2m3KE;o=$r8I@sLv+IUK5Ya7k84!Hj@{nyn$f9=`-b{8+K z7lyqe@Qcs)P+L!gKXgb>8a~97yUX+7A|Go^%CDBE$fLgw34dAGo~hUQ*5hG1Q2*@fSSO;#E)E zKiqu+$9M7px1x6dwo+faOw~p?!k0gQ`5G*k?Cu$UcRarrSiJWyQBNI{VGX{!KbGFx z(+Olbt|eLKoRz?+hZ^bVm}RT9g5Cq>7rBA(#+J^#optv8u7|vlT~FyOtyeg@9n+?^ zPE*ncvr)e?`&NW&+sM_R5xwQw0->hQw#sMkm;bh{py45Mz1KqW=G~R%VK|$b5T?Cv zkU#n7Acx^p>u{oR>bm=T@-aIST6jQRY{=5{B4(%e>@iwIv?~@oEFNiZPE5Ogib9iQ z7`KT6(d5I)sHhzXjslWPStBUg03eDc7>bLLShQRGVyQRDbrK2JCb7sj?ku;C$Lg#O zSNpljXUZO`3x+gw(_6~U+K*HfV@>iOHK%Nx$Oon1u{5e6qTd4h-HlYwCttiD?|7Z{ zaJjq<_>idq2wI@6Fi&kvt=w;Qav=vbaA4E*>9*1Bx%+k0G~vKqG!x>%RLj$K9z#lJ z2X_0n$|}FO@k!;nT(&?<-@NlQoPHSmacPpaH*NK_cT$MD`aWx}Mt~iiK8eF8SC)b- zR1y%g)Z|6FyJ3=I^Bk`d$UYE781h{4W(eo{>Dzg9gIDIgFezGQ$hfU5c8v&T@X&ih zfN8@~A&Shsc3jk@5Mu+`5t|q;UK-@nm`J2ZUL*Mc5!UF*m!vV#Lb( zrJcPLTV{^3g!8gwv@}JX zT7uShfMO2aqZv_O-o}6oA}tv%@3LUnc;mbKqTK3&+I@s6SDJDbp-xLNX`-ogApN9g zZ#YZqcBeSFySj`z|BDqSY&`({363hl;LdgJsUJ5d-z$bOs_IePLhmA4HQiNtDe)^a zf9H)T58#(Ty?TH>Qisl$>K*1ur~+UgeWRmMMO}#Gv*^Svt6cQXj@2kw6&00lBEbIy|!!$ z;up)N&XHK4QoDyv5=T8LUt}hIFtUBpb41z&$#Up_vHHQksfyclqbk`4MB9UHPA!kv z(&ZoB4T@Q1NXj1t#5@$wZ)+U6n^C*81u#=9ry;OSw+aoTXI!CHNF$SNSfu`hseSmP z4WIv|Nbk&h#yJqkMsa=+s7r{MuHwvDEHN~0wBAuni7xr#)!7td%)L2~n9-F!)nR`S3P01+&8pAjYJHIe- zC_}ZrJr2VIErtSdCASY8%ueJe;|H;6GEiu|2juS{k++tKF2hnF#D?Zn058epC4K%X z0#CN_2~OlSu}{mP~)CPwj11lx&+XF!j`{LwBH=`hGiV!K+zJ z{M$>_jJ<++efs#p#RC^-ME49=JXJGo=9EIPA~Q%jag;#7Np+G(=WJ!1C3w?-8Ontr<&6lR@o~^QjkKBd6h7$2vhj3QuU$H67zYwWW=#> zy_5dLn@`J}X+}ROn`t_WQ&r0p0_y-S<0wS}C59YY@U+5NAV@L3mo+WPXMjr(B=e|D z6Nq93M2Hb0zX**6+(U0)p;|vpa|DmHY3Tp@<%4VX8;(rjN8qh|%H(mm)LaKS{eMDY zFHR)Sy^2Q|MFp3^@H|)?4#h91>8O zoRJV?Y0C$gEu(v4TE=QYx?Y>>d<{rnnZ|V5Cw-0+bbzh@+wS>dKmDi z0u!PZDTyk=Nq853yl(YYsGX+qRTpRz$Zw4V}kj;eGz< zjWvc_)a$I7gBP|uaJF!hn*ROocdA8W5baL794G~^Bj*h@U30N%0R21+5R$m!ha`j` z9aPXV^hH#X6g4lD2$`KW3%atfZf-TSR|J%#qg^x9Jxwwc;c@iXGqszs4=Ek%HQ8D- zP{DY4(Hy6t5n_Z0FGBU#>j3-Zdd~*be^>Pu+HwzXWU6xi`|qyUDWcP>_21V9K41@T z`bqo5U++czx&nBB*3DCIiVP@zOj9*=`Tnq-xTbC7Xo`HpHg-z78XBba*M|QrWxsJsSC18N9R6z-|3Tu4no5Wpq%TSI z!%!d#^K<3UUnci3TNWPjF*f;@6aejiW{K(%t@dnO3@kaNyI7t%G0Zo7;v`?ma# zqi5$}6KS>U)mCQ>7Sk!ea<&izGEbzZ%$;eZjz$M+Ii9BI2T29LGxO6zZL=13;Kmw* ziV%h{~)ai)XKe*D8H1o|VQ^asR;AHkeJNWgYo z!JQeTnURx!YQk-CQEDBlcY@p&R7s{MN|}ldqN$-d133DgFdLDhg&;8#{tBJ4R*nBu zejiw1N@s+ zrXtBQF1ECn%hrphW`!`~WV@ixuV1|GZ>HQ#qi$FhS0+Ce{KB+pxbGfHL^=ThK-1XJ zeI|;SAW2Jr3;>HHR~Kwy2yS*o*i_t9>qQ=l{ogp)W%C3sgvU&4Bm@O%!;?lBIi^s+ z!r>A4{J?gW#0^8Jh3nzo?;KrvrrwWLb6ZTS0BbW627Eh3C#k$i?FFbg z$irpad^fPN=~8*VuugM=FuQ9={k({#ijTXb9Nq2emxIi)FEm2bq#*TCW#OZ3<))4i zsqlLB6M98EtBl^+_-uf|tCLQ}{k#vX;U=|I?w}}Y=hqeIX!ErGEk9axg}cgg^&AK5 z4-sTdgEnn0&Kv%CTYw;Ph~KkT^Ytw!XiLr$@*!~m)uIbQu3rg{LhHJPQj9r|YB1L4 z-UqBY&=nnmtOcZUKsjvLD4n9j7HRIal=2AKoNNtS=x#rGzgkn{d9M0aU;z1I&wM)H zaH~MVC{maM3W!1-earGyAiyV7Q4&;Pv(m0^%EI=zWN5A!Hp**aS_~a!E43zA)wy6R zx@?Td}zo*w@J3M!6FB~!VUhZ>&k z06WRc8-axVG7)3QUr}&J@2Z6hm;j?x3@c`0BJ0eSTKyHuMwREw5 z!#ua4EnK>BGS7g$!JXURx#bMPS!|Nz7;|_2>>|(__l>NnY}l-Wb=Mvi z@aT;a7F~W6&ncV^Zk@eL>8L( zzjcIu(RSWmA0&9tw}`9D)k9fuPHr33Pwf7?w<+e@J=f*siu>p5V#)HNulBD%G)9D z`_$bNEZ;6Qw;^WEPuoKxUD`HFwPfB;x;3n*t%e?q=DeZ&J z!`)hptAmU%#F0)?GR91eYOxL!4S1Pt-o%pA)z0C9xL*_=MNyB_@p7)jk!0ahR~3Fo zfNh;{ca48jc3_ih{LHSFd-yeGu@$hFTT>ppmBT|s z>h*8Z$#RUm;OS0W))Jc(6Xhad^n3o<#1jc~%X_lp#3IGQVj(oc^Ed^UmXj4Bz+`H9 zfs&rX$B~kbASH!45hOtKfHYi`=MoTIV#smhLz zlm&$e1T*{cNpuq@f{}t@!I1S~xcoBQaA03B@81Lt+?KSy(~{PwR#J-W=4K$2%7G#^ zQ{MwTdY&8sRpjLfS)f4bm;3#1YzFZ9&e4t{cKlW>0xiBzXoP5(G^A%(4o{+yC;Mso zGkdUeVk?8ORWHEW#8wtQzje~{M@VWv@RmJDAhxN4hyABlxclUvkL)>3 zB{5IBwJzG?gxzyZ54csW5P0~EsAze&jLE@4+Mt1t+ZkFn7+hqze%pc3xxn zZXS`ebAh&@hpDd=qmD>!Vf+%gXOP|7U;YjtcMMP2Zy#-CXM$~~`w3&)^UpFk$CjJb zp7ma8iJ=poIMfYtqxo8zq;CSC!))NIgaAsj_){j=CA8E_)_dyPRLyxnuS^nD^gMXZ zbjs*2jifvw;ou3$j;a!nbx24K&ykWuObbnt#WYtw?oKe@%+Q5%$4a4;r%Vp8Iv9C>MHYyk^HmQZp$)QK7S<$T$?IV(&P9C zF%OY&;b(~+kd3g|y2ojGtXMZ#4eo{fp1Ukxu>HRBbX-ajCPwP0a-8H9OD0O`CqJSj zsD(so6M=5?!mixdiV&CVWexPAWXL%(3p8#j-agON2^L8Lq)jyc`E+|U180-U>H%Pq zAV+J|B*}+_5PowsNKODHROGKX;FrUVb60h2rimm00m!PuR1H9nNAr?69f{O3WeSZZ zp`K)&ADzGHU%wa5i?4@4w;0`}hR=TvKicFp zdceYc83Tv6kUh`I$oTaN*%L>L+o#Ti=zoDg2xYWIL@yxFPC(&Q3C#{ls9HH7t0V

CwGEk`Sqd>XW+ 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

J|E4-%aNX<^hq@6b1nS07aNis~ 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�&Uw4lf3r3XsI_a>Th0 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

2`3E2y$&Z#IE$n#L@n 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

3dq$Yt=YF)#?mlovGHZSski3s$4JSJ%*W%D_3nI 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 IpMU=Vj5+MKI{*Lx diff --git a/Documentation/nunit3-test-results-release.xml b/Documentation/nunit3-test-results-release.xml new file mode 100644 index 000000000..06ce2dd4b --- /dev/null +++ b/Documentation/nunit3-test-results-release.xml @@ -0,0 +1,904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Documentation/opencover-results-release.xml b/Documentation/opencover-results-release.xml new file mode 100644 index 000000000..2abaed6cd --- /dev/null +++ b/Documentation/opencover-results-release.xml @@ -0,0 +1,26175 @@ + + +

+ + + C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll + 2016-03-24T02:20:50.3825554Z + mscorlib + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit3-console.exe + 2016-03-05T23:27:30Z + nunit3-console + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll + 2016-03-10T04:46:51.898274Z + System + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit.engine.api.dll + 2016-03-05T23:27:30Z + nunit.engine.api + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit.engine.dll + 2016-03-05T23:27:30Z + nunit.engine + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit.engine.dll + 2016-03-05T23:27:30Z + nunit.engine + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll + 2016-01-23T02:45:41.3556585Z + System.Xml + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_64\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll + 2016-02-24T01:49:04.6045612Z + System.Web + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\Mono.Cecil.dll + 2016-03-05T23:27:30Z + Mono.Cecil + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Remoting\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Remoting.dll + 2015-10-30T07:19:38.0026412Z + System.Runtime.Remoting + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll + 2015-10-30T07:19:36.3463962Z + System.Configuration + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll + 2016-03-24T02:20:50.3825554Z + mscorlib + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit-agent.exe + 2016-03-05T23:27:30Z + nunit-agent + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit.engine.dll + 2016-03-05T23:27:30Z + nunit.engine + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\nunit.engine.api.dll + 2016-03-05T23:27:30Z + nunit.engine.api + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll + 2016-03-10T04:46:51.898274Z + System + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Remoting\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Remoting.dll + 2015-10-30T07:19:38.0026412Z + System.Runtime.Remoting + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll + 2016-01-23T02:45:41.3556585Z + System.Xml + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_64\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll + 2016-02-24T01:49:04.6045612Z + System.Web + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\packages\NUnit.ConsoleRunner.3.2.0\tools\Mono.Cecil.dll + 2016-03-05T23:27:30Z + Mono.Cecil + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll + 2015-10-30T07:19:36.3463962Z + System.Configuration + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\bin\Release\nunit.framework.dll + 2016-03-05T23:27:28Z + nunit.framework + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll + 2016-03-10T04:46:51.898274Z + System + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_64\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll + 2016-02-24T01:49:04.6045612Z + System.Web + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\bin\Release\ICSharpCode.SharpZipLib.Tests.dll + 2016-04-18T19:58:44.2823924Z + ICSharpCode.SharpZipLib.Tests + + + + + C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\bin\Release\ICSharpCode.SharpZipLib.dll + 2016-04-18T15:32:37.0626596Z + ICSharpCode.SharpZipLib + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <Module> + + + + + ICSharpCode.SharpZipLib.SharpZipBaseException + + + + 100663297 + System.Void ICSharpCode.SharpZipLib.SharpZipBaseException::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + + + + + + + + + + + 100663298 + System.Void ICSharpCode.SharpZipLib.SharpZipBaseException::.ctor() + + + + + + + + + + + 100663299 + System.Void ICSharpCode.SharpZipLib.SharpZipBaseException::.ctor(System.String) + + + + + + + + + + + 100663300 + System.Void ICSharpCode.SharpZipLib.SharpZipBaseException::.ctor(System.String,System.Exception) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.FastZipEvents + + + + 100663308 + System.TimeSpan ICSharpCode.SharpZipLib.Zip.FastZipEvents::get_ProgressInterval() + + + + + + + + + + 100663309 + System.Void ICSharpCode.SharpZipLib.Zip.FastZipEvents::set_ProgressInterval(System.TimeSpan) + + + + + + + + + + + 100663301 + System.Void ICSharpCode.SharpZipLib.Zip.FastZipEvents::add_ProcessDirectory(System.EventHandler`1<ICSharpCode.SharpZipLib.Core.DirectoryEventArgs>) + + + + + + + 100663302 + System.Void ICSharpCode.SharpZipLib.Zip.FastZipEvents::remove_ProcessDirectory(System.EventHandler`1<ICSharpCode.SharpZipLib.Core.DirectoryEventArgs>) + + + + + + + 100663303 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZipEvents::OnDirectoryFailure(System.String,System.Exception) + + + + + + + + + + + + + + + + + + + 100663304 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZipEvents::OnFileFailure(System.String,System.Exception) + + + + + + + + + + + + + + + + + + + 100663305 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZipEvents::OnProcessFile(System.String) + + + + + + + + + + + + + + + + + + + 100663306 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZipEvents::OnCompletedFile(System.String) + + + + + + + + + + + + + + + + + + + 100663307 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZipEvents::OnProcessDirectory(System.String,System.Boolean) + + + + + + + + + + + + + + + + + + + 100663310 + System.Void ICSharpCode.SharpZipLib.Zip.FastZipEvents::.ctor() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.FastZip + + + + 100663313 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZip::get_CreateEmptyDirectories() + + + + + + + + + + 100663314 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::set_CreateEmptyDirectories(System.Boolean) + + + + + + + + + + + 100663315 + System.String ICSharpCode.SharpZipLib.Zip.FastZip::get_Password() + + + + + + + + + + 100663316 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::set_Password(System.String) + + + + + + + + + + + 100663317 + ICSharpCode.SharpZipLib.Core.INameTransform ICSharpCode.SharpZipLib.Zip.FastZip::get_NameTransform() + + + + + + + + + + 100663318 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::set_NameTransform(ICSharpCode.SharpZipLib.Core.INameTransform) + + + + + + + + + + + 100663319 + ICSharpCode.SharpZipLib.Zip.IEntryFactory ICSharpCode.SharpZipLib.Zip.FastZip::get_EntryFactory() + + + + + + + + + + 100663320 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::set_EntryFactory(ICSharpCode.SharpZipLib.Zip.IEntryFactory) + + + + + + + + + + + + + + + + + 100663321 + ICSharpCode.SharpZipLib.Zip.UseZip64 ICSharpCode.SharpZipLib.Zip.FastZip::get_UseZip64() + + + + + + + + + + 100663322 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::set_UseZip64(ICSharpCode.SharpZipLib.Zip.UseZip64) + + + + + + + + + + + 100663323 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZip::get_RestoreDateTimeOnExtract() + + + + + + + + + + 100663324 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::set_RestoreDateTimeOnExtract(System.Boolean) + + + + + + + + + + + 100663325 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZip::get_RestoreAttributesOnExtract() + + + + + + + + + + 100663326 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::set_RestoreAttributesOnExtract(System.Boolean) + + + + + + + + + + + 100663311 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::.ctor() + + + + + + + + + + + + + 100663312 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::.ctor(ICSharpCode.SharpZipLib.Zip.FastZipEvents) + + + + + + + + + + + + + + 100663327 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::CreateZip(System.String,System.String,System.Boolean,System.String,System.String) + + + + + + + + + + + 100663328 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::CreateZip(System.String,System.String,System.Boolean,System.String) + + + + + + + + + + + 100663329 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::CreateZip(System.IO.Stream,System.String,System.Boolean,System.String,System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663330 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::ExtractZip(System.String,System.String,System.String) + + + + + + + + + + + 100663331 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::ExtractZip(System.String,System.String,ICSharpCode.SharpZipLib.Zip.FastZip/Overwrite,ICSharpCode.SharpZipLib.Zip.FastZip/ConfirmOverwriteDelegate,System.String,System.String,System.Boolean) + + + + + + + + + + + + 100663332 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::ExtractZip(System.IO.Stream,System.String,ICSharpCode.SharpZipLib.Zip.FastZip/Overwrite,ICSharpCode.SharpZipLib.Zip.FastZip/ConfirmOverwriteDelegate,System.String,System.String,System.Boolean,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663333 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::ProcessDirectory(System.Object,ICSharpCode.SharpZipLib.Core.DirectoryEventArgs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663334 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::ProcessFile(System.Object,ICSharpCode.SharpZipLib.Core.ScanEventArgs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663335 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::AddFileContents(System.String,System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663336 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::ExtractFileEntry(ICSharpCode.SharpZipLib.Zip.ZipEntry,System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663337 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip::ExtractEntry(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663338 + System.Int32 ICSharpCode.SharpZipLib.Zip.FastZip::MakeExternalAttributes(System.IO.FileInfo) + + + + + + + + + + 100663339 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZip::NameIsValid(System.String) + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.FastZip/ConfirmOverwriteDelegate + + + 100664486 + System.Void ICSharpCode.SharpZipLib.Zip.FastZip/ConfirmOverwriteDelegate::.ctor(System.Object,System.IntPtr) + + + + + 100664487 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZip/ConfirmOverwriteDelegate::Invoke(System.String) + + + + + 100664488 + System.IAsyncResult ICSharpCode.SharpZipLib.Zip.FastZip/ConfirmOverwriteDelegate::BeginInvoke(System.String,System.AsyncCallback,System.Object) + + + + + 100664489 + System.Boolean ICSharpCode.SharpZipLib.Zip.FastZip/ConfirmOverwriteDelegate::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Zip.WindowsNameTransform + + + + 100663349 + System.String ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::get_BaseDirectory() + + + + + + + + + + 100663350 + System.Void ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::set_BaseDirectory(System.String) + + + + + + + + + + + + + + + + 100663351 + System.Boolean ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::get_TrimIncomingPaths() + + + + + + + + + + 100663352 + System.Void ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::set_TrimIncomingPaths(System.Boolean) + + + + + + + + + + + 100663358 + System.Char ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::get_Replacement() + + + + + + + + + + 100663359 + System.Void ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::set_Replacement(System.Char) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663347 + System.Void ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::.ctor(System.String) + + + + + + + + + + + + + + + + + + 100663348 + System.Void ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::.ctor() + + + + + + + + + + + + 100663353 + System.String ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::TransformDirectory(System.String) + + + + + + + + + + + + + + + + + + + + + 100663354 + System.String ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::TransformFile(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + 100663355 + System.Boolean ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::IsValidName(System.String) + + + + + + + + + + + 100663356 + System.Void ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::.cctor() + + + + + + + + + + + + + + + + + 100663357 + System.String ICSharpCode.SharpZipLib.Zip.WindowsNameTransform::MakeValidName(System.String,System.Char) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipConstants + + + + 100663360 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipConstants::get_DefaultCodePage() + + + + + + + + + + 100663361 + System.Void ICSharpCode.SharpZipLib.Zip.ZipConstants::set_DefaultCodePage(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + 100663362 + System.String ICSharpCode.SharpZipLib.Zip.ZipConstants::ConvertToString(System.Byte[],System.Int32) + + + + + + + + + + + + + + + 100663363 + System.String ICSharpCode.SharpZipLib.Zip.ZipConstants::ConvertToString(System.Byte[]) + + + + + + + + + + + + + + + 100663364 + System.String ICSharpCode.SharpZipLib.Zip.ZipConstants::ConvertToStringExt(System.Int32,System.Byte[],System.Int32) + + + + + + + + + + + + + + + + + + + 100663365 + System.String ICSharpCode.SharpZipLib.Zip.ZipConstants::ConvertToStringExt(System.Int32,System.Byte[]) + + + + + + + + + + + + + + + + + + + 100663366 + System.Byte[] ICSharpCode.SharpZipLib.Zip.ZipConstants::ConvertToArray(System.String) + + + + + + + + + + + + + + + 100663367 + System.Byte[] ICSharpCode.SharpZipLib.Zip.ZipConstants::ConvertToArray(System.Int32,System.String) + + + + + + + + + + + + + + + + + + + 100663368 + System.Void ICSharpCode.SharpZipLib.Zip.ZipConstants::.ctor() + + + + + + + + + + + 100663369 + System.Void ICSharpCode.SharpZipLib.Zip.ZipConstants::.cctor() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipEntry + + + + 100663374 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_HasCrc() + + + + + + + + + + 100663375 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_IsCrypted() + + + + + + + + + + 100663376 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_IsCrypted(System.Boolean) + + + + + + + + + + + + + + + + + 100663377 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_IsUnicodeText() + + + + + + + + + + 100663378 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_IsUnicodeText(System.Boolean) + + + + + + + + + + + + + + + + + 100663379 + System.Byte ICSharpCode.SharpZipLib.Zip.ZipEntry::get_CryptoCheckValue() + + + + + + + + + + 100663380 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_CryptoCheckValue(System.Byte) + + + + + + + + + + + 100663381 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_Flags() + + + + + + + + + + 100663382 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_Flags(System.Int32) + + + + + + + + + + + 100663383 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_ZipFileIndex() + + + + + + + + + + 100663384 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_ZipFileIndex(System.Int64) + + + + + + + + + + + 100663385 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_Offset() + + + + + + + + + + 100663386 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_Offset(System.Int64) + + + + + + + + + + + 100663387 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_ExternalFileAttributes() + + + + + + + + + + + + + + + 100663388 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_ExternalFileAttributes(System.Int32) + + + + + + + + + + + + 100663389 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_VersionMadeBy() + + + + + + + + + + 100663390 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_IsDOSEntry() + + + + + + + + + + 100663392 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_HostSystem() + + + + + + + + + + 100663393 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_HostSystem(System.Int32) + + + + + + + + + + + + 100663394 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_Version() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663395 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_CanDecompress() + + + + + + + + + + + + + 100663398 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_LocalHeaderRequiresZip64() + + + + + + + + + + + + + + + + + + + + + + + 100663399 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_CentralHeaderRequiresZip64() + + + + + + + + + + 100663400 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_DosTime() + + + + + + + + + + + + + + + 100663401 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_DosTime(System.Int64) + + + + + + + + + + + + 100663402 + System.DateTime ICSharpCode.SharpZipLib.Zip.ZipEntry::get_DateTime() + + + + + + + + + + + + + + + + 100663403 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_DateTime(System.DateTime) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663404 + System.String ICSharpCode.SharpZipLib.Zip.ZipEntry::get_Name() + + + + + + + + + + 100663405 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_Size() + + + + + + + + + + + + + 100663406 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_Size(System.Int64) + + + + + + + + + + + + 100663407 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_CompressedSize() + + + + + + + + + + + + + 100663408 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_CompressedSize(System.Int64) + + + + + + + + + + + + 100663409 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_Crc() + + + + + + + + + + + + + 100663410 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_Crc(System.Int64) + + + + + + + + + + + + + + + + + 100663411 + ICSharpCode.SharpZipLib.Zip.CompressionMethod ICSharpCode.SharpZipLib.Zip.ZipEntry::get_CompressionMethod() + + + + + + + + + + 100663412 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_CompressionMethod(ICSharpCode.SharpZipLib.Zip.CompressionMethod) + + + + + + + + + + + + + + + + 100663413 + ICSharpCode.SharpZipLib.Zip.CompressionMethod ICSharpCode.SharpZipLib.Zip.ZipEntry::get_CompressionMethodForHeader() + + + + + + + + + + + + + 100663414 + System.Byte[] ICSharpCode.SharpZipLib.Zip.ZipEntry::get_ExtraData() + + + + + + + + + + 100663415 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_ExtraData(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + 100663416 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_AESKeySize() + + + + + + + + + + + + + + + + + + + + + 100663417 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_AESKeySize(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + 100663418 + System.Byte ICSharpCode.SharpZipLib.Zip.ZipEntry::get_AESEncryptionStrength() + + + + + + + + + + 100663419 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_AESSaltLen() + + + + + + + + + + 100663420 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntry::get_AESOverheadSize() + + + + + + + + + + 100663423 + System.String ICSharpCode.SharpZipLib.Zip.ZipEntry::get_Comment() + + + + + + + + + + 100663424 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::set_Comment(System.String) + + + + + + + + + + + + + + + + + + 100663425 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_IsDirectory() + + + + + + + + + + + + 100663426 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::get_IsFile() + + + + + + + + + + 100663370 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::.ctor(System.String) + + + + + + + + + + + 100663371 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::.ctor(System.String,System.Int32) + + + + + + + + + + + 100663372 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::.ctor(System.String,System.Int32,System.Int32,ICSharpCode.SharpZipLib.Zip.CompressionMethod) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663373 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::.ctor(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663391 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::HasDosAttributes(System.Int32) + + + + + + + + + + + + + + + + 100663396 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::ForceZip64() + + + + + + + + + + + 100663397 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::IsZip64Forced() + + + + + + + + + + 100663421 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::ProcessExtraData(System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663422 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntry::ProcessAESExtraData(ICSharpCode.SharpZipLib.Zip.ZipExtraData) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663427 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::IsCompressionMethodSupported() + + + + + + + + + + 100663428 + System.Object ICSharpCode.SharpZipLib.Zip.ZipEntry::Clone() + + + + + + + + + + + + + + + + + 100663429 + System.String ICSharpCode.SharpZipLib.Zip.ZipEntry::ToString() + + + + + + + + + + 100663430 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntry::IsCompressionMethodSupported(ICSharpCode.SharpZipLib.Zip.CompressionMethod) + + + + + + + + + + 100663431 + System.String ICSharpCode.SharpZipLib.Zip.ZipEntry::CleanName(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipEntryFactory + + + + 100663435 + ICSharpCode.SharpZipLib.Core.INameTransform ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::get_NameTransform() + + + + + + + + + + 100663436 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::set_NameTransform(ICSharpCode.SharpZipLib.Core.INameTransform) + + + + + + + + + + + + + + + + + 100663437 + ICSharpCode.SharpZipLib.Zip.ZipEntryFactory/TimeSetting ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::get_Setting() + + + + + + + + + + 100663438 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::set_Setting(ICSharpCode.SharpZipLib.Zip.ZipEntryFactory/TimeSetting) + + + + + + + + + + + 100663439 + System.DateTime ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::get_FixedDateTime() + + + + + + + + + + 100663440 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::set_FixedDateTime(System.DateTime) + + + + + + + + + + + + + + + + 100663441 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::get_GetAttributes() + + + + + + + + + + 100663442 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::set_GetAttributes(System.Int32) + + + + + + + + + + + 100663443 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::get_SetAttributes() + + + + + + + + + + 100663444 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::set_SetAttributes(System.Int32) + + + + + + + + + + + 100663445 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::get_IsUnicodeText() + + + + + + + + + + 100663446 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::set_IsUnicodeText(System.Boolean) + + + + + + + + + + + 100663432 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::.ctor() + + + + + + + + + + + + + + 100663433 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::.ctor(ICSharpCode.SharpZipLib.Zip.ZipEntryFactory/TimeSetting) + + + + + + + + + + + + + + + 100663434 + System.Void ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::.ctor(System.DateTime) + + + + + + + + + + + + + + + + 100663447 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::MakeFileEntry(System.String) + + + + + + + + + + 100663448 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::MakeFileEntry(System.String,System.Boolean) + + + + + + + + + + 100663449 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::MakeFileEntry(System.String,System.String,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663450 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::MakeDirectoryEntry(System.String) + + + + + + + + + + 100663451 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipEntryFactory::MakeDirectoryEntry(System.String,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipException + + + + 100663452 + System.Void ICSharpCode.SharpZipLib.Zip.ZipException::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + + + + + + + + + + + 100663453 + System.Void ICSharpCode.SharpZipLib.Zip.ZipException::.ctor() + + + + + + + + + + + 100663454 + System.Void ICSharpCode.SharpZipLib.Zip.ZipException::.ctor(System.String) + + + + + + + + + + + 100663455 + System.Void ICSharpCode.SharpZipLib.Zip.ZipException::.ctor(System.String,System.Exception) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.RawTaggedData + + + + 100663460 + System.Int16 ICSharpCode.SharpZipLib.Zip.RawTaggedData::get_TagID() + + + + + + + + + + 100663461 + System.Void ICSharpCode.SharpZipLib.Zip.RawTaggedData::set_TagID(System.Int16) + + + + + + + + + + + 100663464 + System.Byte[] ICSharpCode.SharpZipLib.Zip.RawTaggedData::get_Data() + + + + + + + + + + 100663465 + System.Void ICSharpCode.SharpZipLib.Zip.RawTaggedData::set_Data(System.Byte[]) + + + + + + + + + + + 100663459 + System.Void ICSharpCode.SharpZipLib.Zip.RawTaggedData::.ctor(System.Int16) + + + + + + + + + + + + 100663462 + System.Void ICSharpCode.SharpZipLib.Zip.RawTaggedData::SetData(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + 100663463 + System.Byte[] ICSharpCode.SharpZipLib.Zip.RawTaggedData::GetData() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ExtendedUnixData + + + + 100663466 + System.Int16 ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::get_TagID() + + + + + + + + + + 100663470 + System.DateTime ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::get_ModificationTime() + + + + + + + + + + 100663471 + System.Void ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::set_ModificationTime(System.DateTime) + + + + + + + + + + + + + + + + + 100663472 + System.DateTime ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::get_AccessTime() + + + + + + + + + + 100663473 + System.Void ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::set_AccessTime(System.DateTime) + + + + + + + + + + + + + + + + + 100663474 + System.DateTime ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::get_CreateTime() + + + + + + + + + + 100663475 + System.Void ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::set_CreateTime(System.DateTime) + + + + + + + + + + + + + + + + + 100663476 + ICSharpCode.SharpZipLib.Zip.ExtendedUnixData/Flags ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::get_Include() + + + + + + + + + + 100663477 + System.Void ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::set_Include(ICSharpCode.SharpZipLib.Zip.ExtendedUnixData/Flags) + + + + + + + + + + + 100663467 + System.Void ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::SetData(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663468 + System.Byte[] ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::GetData() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663469 + System.Boolean ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::IsValidValue(System.DateTime) + + + + + + + + + + 100663478 + System.Void ICSharpCode.SharpZipLib.Zip.ExtendedUnixData::.ctor() + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.NTTaggedData + + + + 100663479 + System.Int16 ICSharpCode.SharpZipLib.Zip.NTTaggedData::get_TagID() + + + + + + + + + + 100663483 + System.DateTime ICSharpCode.SharpZipLib.Zip.NTTaggedData::get_LastModificationTime() + + + + + + + + + + 100663484 + System.Void ICSharpCode.SharpZipLib.Zip.NTTaggedData::set_LastModificationTime(System.DateTime) + + + + + + + + + + + + + + + + 100663485 + System.DateTime ICSharpCode.SharpZipLib.Zip.NTTaggedData::get_CreateTime() + + + + + + + + + + 100663486 + System.Void ICSharpCode.SharpZipLib.Zip.NTTaggedData::set_CreateTime(System.DateTime) + + + + + + + + + + + + + + + + 100663487 + System.DateTime ICSharpCode.SharpZipLib.Zip.NTTaggedData::get_LastAccessTime() + + + + + + + + + + 100663488 + System.Void ICSharpCode.SharpZipLib.Zip.NTTaggedData::set_LastAccessTime(System.DateTime) + + + + + + + + + + + + + + + + 100663480 + System.Void ICSharpCode.SharpZipLib.Zip.NTTaggedData::SetData(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663481 + System.Byte[] ICSharpCode.SharpZipLib.Zip.NTTaggedData::GetData() + + + + + + + + + + + + + + + + + + + + 100663482 + System.Boolean ICSharpCode.SharpZipLib.Zip.NTTaggedData::IsValidValue(System.DateTime) + + + + + + + + + + + + + + + + 100663489 + System.Void ICSharpCode.SharpZipLib.Zip.NTTaggedData::.ctor() + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipExtraData + + + + 100663495 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipExtraData::get_Length() + + + + + + + + + + 100663499 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipExtraData::get_ValueLength() + + + + + + + + + + 100663500 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipExtraData::get_CurrentReadIndex() + + + + + + + + + + 100663501 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipExtraData::get_UnreadCount() + + + + + + + + + + + + + + + + + 100663491 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::.ctor() + + + + + + + + + + + + 100663492 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::.ctor(System.Byte[]) + + + + + + + + + + + + + + + + + + 100663493 + System.Byte[] ICSharpCode.SharpZipLib.Zip.ZipExtraData::GetEntryData() + + + + + + + + + + + + + + + 100663494 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::Clear() + + + + + + + + + + + + + + + + + 100663496 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.ZipExtraData::GetStreamForTag(System.Int32) + + + + + + + + + + + + + + + + 100663497 + ICSharpCode.SharpZipLib.Zip.ITaggedData ICSharpCode.SharpZipLib.Zip.ZipExtraData::GetData(System.Int16) + + + + + + + + + + + + + + + + 100663498 + ICSharpCode.SharpZipLib.Zip.ITaggedData ICSharpCode.SharpZipLib.Zip.ZipExtraData::Create(System.Int16,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + 100663502 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipExtraData::Find(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663503 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::AddEntry(ICSharpCode.SharpZipLib.Zip.ITaggedData) + + + + + + + + + + + + + + + + 100663504 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::AddEntry(System.Int32,System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663505 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::StartNewEntry() + + + + + + + + + + + 100663506 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::AddNewEntry(System.Int32) + + + + + + + + + + + + + 100663507 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::AddData(System.Byte) + + + + + + + + + + + 100663508 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::AddData(System.Byte[]) + + + + + + + + + + + + + + + + 100663509 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::AddLeShort(System.Int32) + + + + + + + + + + + + 100663510 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::AddLeInt(System.Int32) + + + + + + + + + + + + 100663511 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::AddLeLong(System.Int64) + + + + + + + + + + + + 100663512 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipExtraData::Delete(System.Int32) + + + + + + + + + + + + + + + + + + + + + + 100663513 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipExtraData::ReadLong() + + + + + + + + + + + 100663514 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipExtraData::ReadInt() + + + + + + + + + + + + + 100663515 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipExtraData::ReadShort() + + + + + + + + + + + + + 100663516 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipExtraData::ReadByte() + + + + + + + + + + + + + + + + + + + 100663517 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::Skip(System.Int32) + + + + + + + + + + + + 100663518 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::ReadCheck(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + 100663519 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipExtraData::ReadShortInternal() + + + + + + + + + + + + + + + + + 100663520 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::SetShort(System.Int32&,System.Int32) + + + + + + + + + + + + + 100663521 + System.Void ICSharpCode.SharpZipLib.Zip.ZipExtraData::Dispose() + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs + + + + 100663524 + System.String ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs::get_FileName() + + + + + + + + + + 100663525 + System.Byte[] ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs::get_Key() + + + + + + + + + + 100663526 + System.Void ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs::set_Key(System.Byte[]) + + + + + + + + + + + 100663522 + System.Void ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs::.ctor(System.String) + + + + + + + + + + + + 100663523 + System.Void ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs::.ctor(System.String,System.Byte[]) + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.TestStatus + + + + 100663528 + ICSharpCode.SharpZipLib.Zip.TestOperation ICSharpCode.SharpZipLib.Zip.TestStatus::get_Operation() + + + + + + + + + + 100663529 + ICSharpCode.SharpZipLib.Zip.ZipFile ICSharpCode.SharpZipLib.Zip.TestStatus::get_File() + + + + + + + + + + 100663530 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.TestStatus::get_Entry() + + + + + + + + + + 100663531 + System.Int32 ICSharpCode.SharpZipLib.Zip.TestStatus::get_ErrorCount() + + + + + + + + + + 100663532 + System.Int64 ICSharpCode.SharpZipLib.Zip.TestStatus::get_BytesTested() + + + + + + + + + + 100663533 + System.Boolean ICSharpCode.SharpZipLib.Zip.TestStatus::get_EntryValid() + + + + + + + + + + 100663527 + System.Void ICSharpCode.SharpZipLib.Zip.TestStatus::.ctor(ICSharpCode.SharpZipLib.Zip.ZipFile) + + + + + + + + + + + + 100663534 + System.Void ICSharpCode.SharpZipLib.Zip.TestStatus::AddError() + + + + + + + + + + + + 100663535 + System.Void ICSharpCode.SharpZipLib.Zip.TestStatus::SetOperation(ICSharpCode.SharpZipLib.Zip.TestOperation) + + + + + + + + + + + 100663536 + System.Void ICSharpCode.SharpZipLib.Zip.TestStatus::SetEntry(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + 100663537 + System.Void ICSharpCode.SharpZipLib.Zip.TestStatus::SetBytesTested(System.Int64) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler + + + 100663538 + System.Void ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler::.ctor(System.Object,System.IntPtr) + + + + + 100663539 + System.Void ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler::Invoke(ICSharpCode.SharpZipLib.Zip.TestStatus,System.String) + + + + + 100663540 + System.IAsyncResult ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler::BeginInvoke(ICSharpCode.SharpZipLib.Zip.TestStatus,System.String,System.AsyncCallback,System.Object) + + + + + 100663541 + System.Void ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipFile + + + + 100663543 + System.Byte[] ICSharpCode.SharpZipLib.Zip.ZipFile::get_Key() + + + + + + + + + + 100663544 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::set_Key(System.Byte[]) + + + + + + + + + + + 100663545 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::set_Password(System.String) + + + + + + + + + + + + + + + + + + 100663546 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile::get_HaveKeys() + + + + + + + + + + 100663555 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile::get_IsStreamOwner() + + + + + + + + + + 100663556 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100663557 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile::get_IsEmbeddedArchive() + + + + + + + + + + 100663558 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile::get_IsNewArchive() + + + + + + + + + + 100663559 + System.String ICSharpCode.SharpZipLib.Zip.ZipFile::get_ZipFileComment() + + + + + + + + + + 100663560 + System.String ICSharpCode.SharpZipLib.Zip.ZipFile::get_Name() + + + + + + + + + + 100663561 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile::get_Size() + + + + + + + + + + 100663562 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile::get_Count() + + + + + + + + + + 100663563 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipFile::get_EntryByIndex(System.Int32) + + + + + + + + + + 100663572 + ICSharpCode.SharpZipLib.Core.INameTransform ICSharpCode.SharpZipLib.Zip.ZipFile::get_NameTransform() + + + + + + + + + + 100663573 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::set_NameTransform(ICSharpCode.SharpZipLib.Core.INameTransform) + + + + + + + + + + + 100663574 + ICSharpCode.SharpZipLib.Zip.IEntryFactory ICSharpCode.SharpZipLib.Zip.ZipFile::get_EntryFactory() + + + + + + + + + + 100663575 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::set_EntryFactory(ICSharpCode.SharpZipLib.Zip.IEntryFactory) + + + + + + + + + + + + + + + + + 100663576 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile::get_BufferSize() + + + + + + + + + + 100663577 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::set_BufferSize(System.Int32) + + + + + + + + + + + + + + + + + + + + 100663578 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile::get_IsUpdating() + + + + + + + + + + 100663579 + ICSharpCode.SharpZipLib.Zip.UseZip64 ICSharpCode.SharpZipLib.Zip.ZipFile::get_UseZip64() + + + + + + + + + + 100663580 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::set_UseZip64(ICSharpCode.SharpZipLib.Zip.UseZip64) + + + + + + + + + + + 100663542 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::OnKeysRequired(System.String) + + + + + + + + + + + + + + + + + 100663547 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::.ctor(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663548 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::.ctor(System.IO.FileStream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663549 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::.ctor(System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663550 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::.ctor() + + + + + + + + + + + + + + + + 100663551 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Finalize() + + + + + + + + + + + + 100663552 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Close() + + + + + + + + + + + + 100663553 + ICSharpCode.SharpZipLib.Zip.ZipFile ICSharpCode.SharpZipLib.Zip.ZipFile::Create(System.String) + + + + + + + + + + + + + + + + + + + + 100663554 + ICSharpCode.SharpZipLib.Zip.ZipFile ICSharpCode.SharpZipLib.Zip.ZipFile::Create(System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + + + + 100663564 + System.Collections.IEnumerator ICSharpCode.SharpZipLib.Zip.ZipFile::GetEnumerator() + + + + + + + + + + + + + + + 100663565 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile::FindEntry(System.String,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + 100663566 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipFile::GetEntry(System.String) + + + + + + + + + + + + + + + + + + 100663567 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.ZipFile::GetInputStream(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663568 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.ZipFile::GetInputStream(System.Int64) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663569 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile::TestArchive(System.Boolean) + + + + + + + + + + 100663570 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile::TestArchive(System.Boolean,ICSharpCode.SharpZipLib.Zip.TestStrategy,ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663571 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile::TestLocalHeader(ICSharpCode.SharpZipLib.Zip.ZipEntry,ICSharpCode.SharpZipLib.Zip.ZipFile/HeaderTest) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663581 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::BeginUpdate(ICSharpCode.SharpZipLib.Zip.IArchiveStorage,ICSharpCode.SharpZipLib.Zip.IDynamicDataSource) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663582 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::BeginUpdate(ICSharpCode.SharpZipLib.Zip.IArchiveStorage) + + + + + + + + + + + 100663583 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::BeginUpdate() + + + + + + + + + + + + + + + + + 100663584 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CommitUpdate() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663585 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::AbortUpdate() + + + + + + + + + + + 100663586 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::SetComment(System.String) + + + + + + + + + + + + + + + + + + + + + + + 100663587 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::AddUpdate(ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate) + + + + + + + + + + + + + + + + + + + + + + + + + 100663588 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Add(System.String,ICSharpCode.SharpZipLib.Zip.CompressionMethod,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663589 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Add(System.String,ICSharpCode.SharpZipLib.Zip.CompressionMethod) + + + + + + + + + + + + + + + + + + + + + + + + 100663590 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Add(System.String) + + + + + + + + + + + + + + + + + 100663591 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Add(System.String,System.String) + + + + + + + + + + + + + + + + + + + + + 100663592 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Add(ICSharpCode.SharpZipLib.Zip.IStaticDataSource,System.String) + + + + + + + + + + + + + + + + + + + + + 100663593 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Add(ICSharpCode.SharpZipLib.Zip.IStaticDataSource,System.String,ICSharpCode.SharpZipLib.Zip.CompressionMethod) + + + + + + + + + + + + + + + + + + + + + + + 100663594 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Add(ICSharpCode.SharpZipLib.Zip.IStaticDataSource,System.String,ICSharpCode.SharpZipLib.Zip.CompressionMethod,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + 100663595 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Add(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + 100663596 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::AddDirectory(System.String) + + + + + + + + + + + + + + + + + + 100663597 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile::Delete(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663598 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Delete(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + 100663599 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::WriteLEShort(System.Int32) + + + + + + + + + + + + 100663600 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::WriteLEUshort(System.UInt16) + + + + + + + + + + + + 100663601 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::WriteLEInt(System.Int32) + + + + + + + + + + + + 100663602 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::WriteLEUint(System.UInt32) + + + + + + + + + + + + 100663603 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::WriteLeLong(System.Int64) + + + + + + + + + + + + 100663604 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::WriteLEUlong(System.UInt64) + + + + + + + + + + + + 100663605 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::WriteLocalEntryHeader(ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663606 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile::WriteCentralDirectoryHeader(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663607 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::PostUpdateCleanup() + + + + + + + + + + + + + + + + + + + 100663608 + System.String ICSharpCode.SharpZipLib.Zip.ZipFile::GetTransformedFileName(System.String) + + + + + + + + + + + + + + 100663609 + System.String ICSharpCode.SharpZipLib.Zip.ZipFile::GetTransformedDirectoryName(System.String) + + + + + + + + + + + + + + 100663610 + System.Byte[] ICSharpCode.SharpZipLib.Zip.ZipFile::GetBuffer() + + + + + + + + + + + + + + + 100663611 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CopyDescriptorBytes(ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate,System.IO.Stream,System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663612 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CopyBytes(ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate,System.IO.Stream,System.IO.Stream,System.Int64,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663613 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile::GetDescriptorSize(ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate) + + + + + + + + + + + + + + + + + + + + 100663614 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CopyDescriptorBytesDirect(ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate,System.IO.Stream,System.Int64&,System.Int64) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663615 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CopyEntryDataDirect(ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate,System.IO.Stream,System.Boolean,System.Int64&,System.Int64&) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663616 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile::FindExistingUpdate(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + 100663617 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile::FindExistingUpdate(System.String) + + + + + + + + + + + + + + + + + 100663618 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.ZipFile::GetOutputStream(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663619 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::AddEntry(ICSharpCode.SharpZipLib.Zip.ZipFile,ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663620 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::ModifyEntry(ICSharpCode.SharpZipLib.Zip.ZipFile,ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate) + + + + + + + + + + + + + + + + + + + + + + + + 100663621 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CopyEntryDirect(ICSharpCode.SharpZipLib.Zip.ZipFile,ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate,System.Int64&) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663622 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CopyEntry(ICSharpCode.SharpZipLib.Zip.ZipFile,ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate) + + + + + + + + + + + + + + + + + + + + + + 100663623 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Reopen(System.IO.Stream) + + + + + + + + + + + + + + + + + + 100663624 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Reopen() + + + + + + + + + + + + + + + + 100663625 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::UpdateCommentOnly() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663626 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::RunUpdates() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663627 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CheckUpdating() + + + + + + + + + + + + + + + 100663628 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::System.IDisposable.Dispose() + + + + + + + + + + + 100663629 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::DisposeInternal(System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + 100663630 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::Dispose(System.Boolean) + + + + + + + + + + + 100663631 + System.UInt16 ICSharpCode.SharpZipLib.Zip.ZipFile::ReadLEUshort() + + + + + + + + + + + + + + + + + + + + + 100663632 + System.UInt32 ICSharpCode.SharpZipLib.Zip.ZipFile::ReadLEUint() + + + + + + + + + + 100663633 + System.UInt64 ICSharpCode.SharpZipLib.Zip.ZipFile::ReadLEUlong() + + + + + + + + + + 100663634 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile::LocateBlockWithSignature(System.Int32,System.Int64,System.Int32,System.Int32) + + + + + + + + + + + + 100663635 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::ReadEntries() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663636 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile::LocateEntry(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + 100663637 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.ZipFile::CreateAndInitDecryptionStream(System.IO.Stream,ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663638 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.ZipFile::CreateAndInitEncryptionStream(System.IO.Stream,ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663639 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::CheckClassicPassword(System.Security.Cryptography.CryptoStream,ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + 100663640 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile::WriteEncryptionHeader(System.IO.Stream,System.Int64) + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipFile/KeysRequiredEventHandler + + + 100664490 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/KeysRequiredEventHandler::.ctor(System.Object,System.IntPtr) + + + + + 100664491 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/KeysRequiredEventHandler::Invoke(System.Object,ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs) + + + + + 100664492 + System.IAsyncResult ICSharpCode.SharpZipLib.Zip.ZipFile/KeysRequiredEventHandler::BeginInvoke(System.Object,ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs,System.AsyncCallback,System.Object) + + + + + 100664493 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/KeysRequiredEventHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipFile/UpdateComparer + + + + 100664494 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile/UpdateComparer::Compare(System.Object,System.Object) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664495 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/UpdateComparer::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate + + + + 100664504 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::get_Entry() + + + + + + + + + + 100664505 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::get_OutEntry() + + + + + + + + + + + + + + + 100664506 + ICSharpCode.SharpZipLib.Zip.ZipFile/UpdateCommand ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::get_Command() + + + + + + + + + + 100664507 + System.String ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::get_Filename() + + + + + + + + + + 100664508 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::get_SizePatchOffset() + + + + + + + + + + 100664509 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::set_SizePatchOffset(System.Int64) + + + + + + + + + + + 100664510 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::get_CrcPatchOffset() + + + + + + + + + + 100664511 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::set_CrcPatchOffset(System.Int64) + + + + + + + + + + + 100664512 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::get_OffsetBasedSize() + + + + + + + + + + 100664513 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::set_OffsetBasedSize(System.Int64) + + + + + + + + + + + 100664496 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::.ctor(System.String,ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + 100664497 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::.ctor(System.String,System.String,ICSharpCode.SharpZipLib.Zip.CompressionMethod) + + + + + + + + + + + + + + + + + + 100664498 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::.ctor(System.String,System.String) + + + + + + + + + + + 100664499 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::.ctor(ICSharpCode.SharpZipLib.Zip.IStaticDataSource,System.String,ICSharpCode.SharpZipLib.Zip.CompressionMethod) + + + + + + + + + + + + + + + + + + 100664500 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::.ctor(ICSharpCode.SharpZipLib.Zip.IStaticDataSource,ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + 100664501 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::.ctor(ICSharpCode.SharpZipLib.Zip.ZipEntry,ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + 100664502 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::.ctor(ICSharpCode.SharpZipLib.Zip.ZipFile/UpdateCommand,ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + 100664503 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::.ctor(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + 100664514 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.ZipFile/ZipUpdate::GetSource() + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString + + + + 100664517 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::get_IsSourceString() + + + + + + + + + + 100664518 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::get_RawLength() + + + + + + + + + + + 100664519 + System.Byte[] ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::get_RawComment() + + + + + + + + + + + 100664515 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::.ctor(System.String) + + + + + + + + + + + + + 100664516 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::.ctor(System.Byte[]) + + + + + + + + + + + + 100664520 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::Reset() + + + + + + + + + + + + + + + + + 100664521 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::MakeTextAvailable() + + + + + + + + + + + + + + + 100664522 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::MakeBytesAvailable() + + + + + + + + + + + + + + + 100664523 + System.String ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString::op_Implicit(ICSharpCode.SharpZipLib.Zip.ZipFile/ZipString) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipFile/ZipEntryEnumerator + + + + 100664525 + System.Object ICSharpCode.SharpZipLib.Zip.ZipFile/ZipEntryEnumerator::get_Current() + + + + + + + + + + 100664524 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipEntryEnumerator::.ctor(ICSharpCode.SharpZipLib.Zip.ZipEntry[]) + + + + + + + + + + + + + 100664526 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/ZipEntryEnumerator::Reset() + + + + + + + + + + + 100664527 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/ZipEntryEnumerator::MoveNext() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream + + + + 100664530 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::get_CanRead() + + + + + + + + + + 100664532 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::get_CanWrite() + + + + + + + + + + 100664533 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::get_CanSeek() + + + + + + + + + + 100664534 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::get_Length() + + + + + + + + + + 100664535 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::get_Position() + + + + + + + + + + 100664536 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::set_Position(System.Int64) + + + + + + + + + + 100664528 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::.ctor(System.IO.Stream) + + + + + + + + + + + + 100664529 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::Close() + + + + + + + + + + 100664531 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::Flush() + + + + + + + + + + + 100664537 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100664538 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100664539 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::SetLength(System.Int64) + + + + + + + + + + 100664540 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/UncompressedStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream + + + + 100664549 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::get_Position() + + + + + + + + + + 100664550 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::set_Position(System.Int64) + + + + + + + + + + + + + + + + + + + + + 100664551 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::get_Length() + + + + + + + + + + 100664552 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::get_CanWrite() + + + + + + + + + + 100664553 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::get_CanSeek() + + + + + + + + + + 100664554 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::get_CanRead() + + + + + + + + + + 100664555 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::get_CanTimeout() + + + + + + + + + + 100664541 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::.ctor(ICSharpCode.SharpZipLib.Zip.ZipFile,System.Int64,System.Int64) + + + + + + + + + + + + + + + + + 100664542 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::ReadByte() + + + + + + + + + + + + + + + + + + 100664543 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::Close() + + + + + + + + + + 100664544 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664545 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100664546 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::SetLength(System.Int64) + + + + + + + + + + 100664547 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664548 + System.Void ICSharpCode.SharpZipLib.Zip.ZipFile/PartialInputStream::Flush() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.StaticDiskDataSource + + + + 100663643 + System.Void ICSharpCode.SharpZipLib.Zip.StaticDiskDataSource::.ctor(System.String) + + + + + + + + + + + + 100663644 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.StaticDiskDataSource::GetSource() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.DynamicDiskDataSource + + + + 100663645 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.DynamicDiskDataSource::GetSource(ICSharpCode.SharpZipLib.Zip.ZipEntry,System.String) + + + + + + + + + + + + + + + + 100663646 + System.Void ICSharpCode.SharpZipLib.Zip.DynamicDiskDataSource::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Zip.BaseArchiveStorage + + + + 100663659 + ICSharpCode.SharpZipLib.Zip.FileUpdateMode ICSharpCode.SharpZipLib.Zip.BaseArchiveStorage::get_UpdateMode() + + + + + + + + + + 100663653 + System.Void ICSharpCode.SharpZipLib.Zip.BaseArchiveStorage::.ctor(ICSharpCode.SharpZipLib.Zip.FileUpdateMode) + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage + + + + 100663660 + System.Void ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage::.ctor(ICSharpCode.SharpZipLib.Zip.ZipFile,ICSharpCode.SharpZipLib.Zip.FileUpdateMode) + + + + + + + + + + + + + + + + + 100663661 + System.Void ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage::.ctor(ICSharpCode.SharpZipLib.Zip.ZipFile) + + + + + + + + + + + 100663662 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage::GetTemporaryOutput() + + + + + + + + + + + + + + + + + + + 100663663 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage::ConvertTemporaryToFinal() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663664 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage::MakeTemporaryCopy(System.IO.Stream) + + + + + + + + + + + + + + 100663665 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage::OpenForDirectUpdate(System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + + 100663666 + System.Void ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage::Dispose() + + + + + + + + + + + + + + + 100663667 + System.String ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage::GetTempFileName(System.String,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage + + + + 100663670 + System.IO.MemoryStream ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage::get_FinalStream() + + + + + + + + + + 100663668 + System.Void ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage::.ctor() + + + + + + + + + + + 100663669 + System.Void ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage::.ctor(ICSharpCode.SharpZipLib.Zip.FileUpdateMode) + + + + + + + + + + + 100663671 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage::GetTemporaryOutput() + + + + + + + + + + + 100663672 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage::ConvertTemporaryToFinal() + + + + + + + + + + + + + + + + 100663673 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage::MakeTemporaryCopy(System.IO.Stream) + + + + + + + + + + + + + 100663674 + System.IO.Stream ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage::OpenForDirectUpdate(System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + + + + 100663675 + System.Void ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage::Dispose() + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.DescriptorData + + + + 100663676 + System.Int64 ICSharpCode.SharpZipLib.Zip.DescriptorData::get_CompressedSize() + + + + + + + + + + 100663677 + System.Void ICSharpCode.SharpZipLib.Zip.DescriptorData::set_CompressedSize(System.Int64) + + + + + + + + + + + 100663678 + System.Int64 ICSharpCode.SharpZipLib.Zip.DescriptorData::get_Size() + + + + + + + + + + 100663679 + System.Void ICSharpCode.SharpZipLib.Zip.DescriptorData::set_Size(System.Int64) + + + + + + + + + + + 100663680 + System.Int64 ICSharpCode.SharpZipLib.Zip.DescriptorData::get_Crc() + + + + + + + + + + 100663681 + System.Void ICSharpCode.SharpZipLib.Zip.DescriptorData::set_Crc(System.Int64) + + + + + + + + + + + 100663682 + System.Void ICSharpCode.SharpZipLib.Zip.DescriptorData::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Zip.EntryPatchData + + + + 100663683 + System.Int64 ICSharpCode.SharpZipLib.Zip.EntryPatchData::get_SizePatchOffset() + + + + + + + + + + 100663684 + System.Void ICSharpCode.SharpZipLib.Zip.EntryPatchData::set_SizePatchOffset(System.Int64) + + + + + + + + + + + 100663685 + System.Int64 ICSharpCode.SharpZipLib.Zip.EntryPatchData::get_CrcPatchOffset() + + + + + + + + + + 100663686 + System.Void ICSharpCode.SharpZipLib.Zip.EntryPatchData::set_CrcPatchOffset(System.Int64) + + + + + + + + + + + 100663687 + System.Void ICSharpCode.SharpZipLib.Zip.EntryPatchData::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipHelperStream + + + + 100663690 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipHelperStream::get_IsStreamOwner() + + + + + + + + + + 100663691 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100663692 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipHelperStream::get_CanRead() + + + + + + + + + + 100663693 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipHelperStream::get_CanSeek() + + + + + + + + + + 100663694 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipHelperStream::get_CanTimeout() + + + + + + + + + + 100663695 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::get_Length() + + + + + + + + + + 100663696 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::get_Position() + + + + + + + + + + 100663697 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::set_Position(System.Int64) + + + + + + + + + + + 100663698 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipHelperStream::get_CanWrite() + + + + + + + + + + 100663688 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::.ctor(System.String) + + + + + + + + + + + + + 100663689 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::.ctor(System.IO.Stream) + + + + + + + + + + + + 100663699 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::Flush() + + + + + + + + + + + 100663700 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100663701 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::SetLength(System.Int64) + + + + + + + + + + + 100663702 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100663703 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + 100663704 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::Close() + + + + + + + + + + + + + + + + + + + + 100663705 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteLocalHeader(ICSharpCode.SharpZipLib.Zip.ZipEntry,ICSharpCode.SharpZipLib.Zip.EntryPatchData) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663706 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::LocateBlockWithSignature(System.Int32,System.Int64,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + 100663707 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteZip64EndOfCentralDirectory(System.Int64,System.Int64,System.Int64) + + + + + + + + + + + + + + + + + + + + + + + + + 100663708 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteEndOfCentralDirectory(System.Int64,System.Int64,System.Int64,System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663709 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::ReadLEShort() + + + + + + + + + + + + + + + + + + + + + 100663710 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::ReadLEInt() + + + + + + + + + + 100663711 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::ReadLELong() + + + + + + + + + + 100663712 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteLEShort(System.Int32) + + + + + + + + + + + + 100663713 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteLEUshort(System.UInt16) + + + + + + + + + + + + 100663714 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteLEInt(System.Int32) + + + + + + + + + + + + 100663715 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteLEUint(System.UInt32) + + + + + + + + + + + + 100663716 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteLELong(System.Int64) + + + + + + + + + + + + 100663717 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteLEUlong(System.UInt64) + + + + + + + + + + + + 100663718 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipHelperStream::WriteDataDescriptor(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663719 + System.Void ICSharpCode.SharpZipLib.Zip.ZipHelperStream::ReadDataDescriptor(System.Boolean,ICSharpCode.SharpZipLib.Zip.DescriptorData) + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipInputStream + + + + 100663722 + System.String ICSharpCode.SharpZipLib.Zip.ZipInputStream::get_Password() + + + + + + + + + + 100663723 + System.Void ICSharpCode.SharpZipLib.Zip.ZipInputStream::set_Password(System.String) + + + + + + + + + + + 100663724 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipInputStream::get_CanDecompressEntry() + + + + + + + + + + 100663729 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream::get_Available() + + + + + + + + + + + + + 100663730 + System.Int64 ICSharpCode.SharpZipLib.Zip.ZipInputStream::get_Length() + + + + + + + + + + + + + + + + + + + 100663720 + System.Void ICSharpCode.SharpZipLib.Zip.ZipInputStream::.ctor(System.IO.Stream) + + + + + + + + + + + + + 100663721 + System.Void ICSharpCode.SharpZipLib.Zip.ZipInputStream::.ctor(System.IO.Stream,System.Int32) + + + + + + + + + + + + + 100663725 + ICSharpCode.SharpZipLib.Zip.ZipEntry ICSharpCode.SharpZipLib.Zip.ZipInputStream::GetNextEntry() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663726 + System.Void ICSharpCode.SharpZipLib.Zip.ZipInputStream::ReadDataDescriptor() + + + + + + + + + + + + + + + + + + + + + + + + + + 100663727 + System.Void ICSharpCode.SharpZipLib.Zip.ZipInputStream::CompleteCloseEntry(System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663728 + System.Void ICSharpCode.SharpZipLib.Zip.ZipInputStream::CloseEntry() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663731 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream::ReadByte() + + + + + + + + + + + + + + + + 100663732 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream::ReadingNotAvailable(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100663733 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream::ReadingNotSupported(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100663734 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream::InitialRead(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663735 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663736 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream::BodyRead(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663737 + System.Void ICSharpCode.SharpZipLib.Zip.ZipInputStream::Close() + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipInputStream/ReadDataHandler + + + 100664556 + System.Void ICSharpCode.SharpZipLib.Zip.ZipInputStream/ReadDataHandler::.ctor(System.Object,System.IntPtr) + + + + + 100664557 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream/ReadDataHandler::Invoke(System.Byte[],System.Int32,System.Int32) + + + + + 100664558 + System.IAsyncResult ICSharpCode.SharpZipLib.Zip.ZipInputStream/ReadDataHandler::BeginInvoke(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object) + + + + + 100664559 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipInputStream/ReadDataHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipNameTransform + + + + 100663743 + System.String ICSharpCode.SharpZipLib.Zip.ZipNameTransform::get_TrimPrefix() + + + + + + + + + + 100663744 + System.Void ICSharpCode.SharpZipLib.Zip.ZipNameTransform::set_TrimPrefix(System.String) + + + + + + + + + + + + + + + + 100663738 + System.Void ICSharpCode.SharpZipLib.Zip.ZipNameTransform::.ctor() + + + + + + + + + + + 100663739 + System.Void ICSharpCode.SharpZipLib.Zip.ZipNameTransform::.ctor(System.String) + + + + + + + + + + + + 100663740 + System.Void ICSharpCode.SharpZipLib.Zip.ZipNameTransform::.cctor() + + + + + + + + + + + + + + + + + + + + + + + 100663741 + System.String ICSharpCode.SharpZipLib.Zip.ZipNameTransform::TransformDirectory(System.String) + + + + + + + + + + + + + + + + + + + + + 100663742 + System.String ICSharpCode.SharpZipLib.Zip.ZipNameTransform::TransformFile(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663745 + System.String ICSharpCode.SharpZipLib.Zip.ZipNameTransform::MakeValidName(System.String,System.Char) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663746 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipNameTransform::IsValidName(System.String,System.Boolean) + + + + + + + + + + + + + + + + + + + + + 100663747 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipNameTransform::IsValidName(System.String) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.ZipOutputStream + + + + 100663750 + System.Boolean ICSharpCode.SharpZipLib.Zip.ZipOutputStream::get_IsFinished() + + + + + + + + + + 100663754 + ICSharpCode.SharpZipLib.Zip.UseZip64 ICSharpCode.SharpZipLib.Zip.ZipOutputStream::get_UseZip64() + + + + + + + + + + 100663755 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::set_UseZip64(ICSharpCode.SharpZipLib.Zip.UseZip64) + + + + + + + + + + + 100663748 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::.ctor(System.IO.Stream) + + + + + + + + + + + + + + + + + + + 100663749 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::.ctor(System.IO.Stream,System.Int32) + + + + + + + + + + + + + + + + + + + 100663751 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::SetComment(System.String) + + + + + + + + + + + + + + + + + 100663752 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::SetLevel(System.Int32) + + + + + + + + + + + + 100663753 + System.Int32 ICSharpCode.SharpZipLib.Zip.ZipOutputStream::GetLevel() + + + + + + + + + + 100663756 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::WriteLeShort(System.Int32) + + + + + + + + + + + + 100663757 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::WriteLeInt(System.Int32) + + + + + + + + + + + + 100663758 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::WriteLeLong(System.Int64) + + + + + + + + + + + + 100663759 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::PutNextEntry(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663760 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::CloseEntry() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663761 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::WriteEncryptionHeader(System.Int64) + + + + + + + + + + + + + + + + + + 100663762 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::AddExtraDataAES(ICSharpCode.SharpZipLib.Zip.ZipEntry,ICSharpCode.SharpZipLib.Zip.ZipExtraData) + + + + + + + + + + + + + + + + 100663763 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::WriteAESHeader(ICSharpCode.SharpZipLib.Zip.ZipEntry) + + + + + + + + + + + + + 100663764 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663765 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::CopyAndEncrypt(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + 100663766 + System.Void ICSharpCode.SharpZipLib.Zip.ZipOutputStream::Finish() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.Deflater + + + + 100663771 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Deflater::get_Adler() + + + + + + + + + + 100663772 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Deflater::get_TotalIn() + + + + + + + + + + 100663773 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Deflater::get_TotalOut() + + + + + + + + + + 100663776 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Deflater::get_IsFinished() + + + + + + + + + + 100663777 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Deflater::get_IsNeedingInput() + + + + + + + + + + 100663767 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::.ctor() + + + + + + + + + + + 100663768 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::.ctor(System.Int32) + + + + + + + + + + + 100663769 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::.ctor(System.Int32,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663770 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::Reset() + + + + + + + + + + + + + + + + + 100663774 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::Flush() + + + + + + + + + + + 100663775 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::Finish() + + + + + + + + + + + 100663778 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::SetInput(System.Byte[]) + + + + + + + + + + + 100663779 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::SetInput(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + 100663780 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::SetLevel(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663781 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Deflater::GetLevel() + + + + + + + + + + 100663782 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::SetStrategy(ICSharpCode.SharpZipLib.Zip.Compression.DeflateStrategy) + + + + + + + + + + + 100663783 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Deflater::Deflate(System.Byte[]) + + + + + + + + + + 100663784 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Deflater::Deflate(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663785 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::SetDictionary(System.Byte[]) + + + + + + + + + + + 100663786 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Deflater::SetDictionary(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.DeflaterConstants + + + + 100663787 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterConstants::.cctor() + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine + + + + 100663795 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::get_Adler() + + + + + + + + + + 100663796 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::get_TotalIn() + + + + + + + + + + 100663797 + ICSharpCode.SharpZipLib.Zip.Compression.DeflateStrategy ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::get_Strategy() + + + + + + + + + + 100663798 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::set_Strategy(ICSharpCode.SharpZipLib.Zip.Compression.DeflateStrategy) + + + + + + + + + + + 100663788 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::.ctor(ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending) + + + + + + + + + + + + + + + + + + 100663789 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::Deflate(System.Boolean,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663790 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::SetInput(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663791 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::NeedsInput() + + + + + + + + + + 100663792 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::SetDictionary(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663793 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::Reset() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663794 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::ResetAdler() + + + + + + + + + + + 100663799 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::SetLevel(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663800 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::FillWindow() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663801 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::UpdateHash() + + + + + + + + + + + 100663802 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::InsertString() + + + + + + + + + + + + + + 100663803 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::SlideWindow() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663804 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::FindLongestMatch(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663805 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::DeflateStored(System.Boolean,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663806 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::DeflateFast(System.Boolean,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663807 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine::DeflateSlow(System.Boolean,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman + + + + 100663808 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::.cctor() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663809 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::.ctor(ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending) + + + + + + + + + + + + + + + + + 100663810 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::Reset() + + + + + + + + + + + + + + + 100663811 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::SendAllTrees(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + 100663812 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::CompressBlock() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663813 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::FlushStoredBlock(System.Byte[],System.Int32,System.Int32,System.Boolean) + + + + + + + + + + + + + + + + + + + 100663814 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::FlushBlock(System.Byte[],System.Int32,System.Int32,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663815 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::IsFull() + + + + + + + + + + 100663816 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::TallyLit(System.Int32) + + + + + + + + + + + + + 100663817 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::TallyDist(System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663818 + System.Int16 ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::BitReverse(System.Int32) + + + + + + + + + + 100663819 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::Lcode(System.Int32) + + + + + + + + + + + + + + + + + + + + + 100663820 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman::Dcode(System.Int32) + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree + + + + 100664560 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::.ctor(ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman,System.Int32,System.Int32,System.Int32) + + + + + + + + + + + + + + + + 100664561 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::Reset() + + + + + + + + + + + + + + + + + + + 100664562 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::WriteSymbol(System.Int32) + + + + + + + + + + + 100664563 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::CheckEmpty() + + + + + + + + + + + + + + + + + + + + + + 100664564 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::SetStaticCodes(System.Int16[],System.Byte[]) + + + + + + + + + + + + 100664565 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::BuildCodes() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664566 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::BuildTree() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664567 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::GetEncodedLength() + + + + + + + + + + + + + + + + + + 100664568 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::CalcBLFreq(ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664569 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::WriteTree(ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664570 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman/Tree::BuildLength(System.Int32[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending + + + + 100663821 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending::.ctor() + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.Inflater + + + + 100663836 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Inflater::get_IsNeedingInput() + + + + + + + + + + 100663837 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Inflater::get_IsNeedingDictionary() + + + + + + + + + + 100663838 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Inflater::get_IsFinished() + + + + + + + + + + 100663839 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Inflater::get_Adler() + + + + + + + + + + 100663840 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Inflater::get_TotalOut() + + + + + + + + + + 100663841 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Inflater::get_TotalIn() + + + + + + + + + + 100663842 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Inflater::get_RemainingInput() + + + + + + + + + + 100663822 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Inflater::.ctor() + + + + + + + + + + + 100663823 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Inflater::.ctor(System.Boolean) + + + + + + + + + + + + + + + + + + + 100663824 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Inflater::Reset() + + + + + + + + + + + + + + + + + + + + + + + 100663825 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Inflater::DecodeHeader() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663826 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Inflater::DecodeDict() + + + + + + + + + + + + + + + + + + + + + + 100663827 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Inflater::DecodeHuffman() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663828 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Inflater::DecodeChksum() + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663829 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Inflater::Decode() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663830 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Inflater::SetDictionary(System.Byte[]) + + + + + + + + + + + 100663831 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Inflater::SetDictionary(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663832 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Inflater::SetInput(System.Byte[]) + + + + + + + + + + + 100663833 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Inflater::SetInput(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + 100663834 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Inflater::Inflate(System.Byte[]) + + + + + + + + + + + + + + + 100663835 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Inflater::Inflate(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663843 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Inflater::.cctor() + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader + + + + 100663844 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader::Decode(ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663845 + ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader::BuildLitLenTree() + + + + + + + + + + + + 100663846 + ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader::BuildDistTree() + + + + + + + + + + + + 100663847 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader::.ctor() + + + + + + + 100663848 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader::.cctor() + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree + + + + 100663849 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree::.cctor() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663850 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree::.ctor(System.Byte[]) + + + + + + + + + + + + 100663851 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree::BuildTree(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663852 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree::GetSymbol(ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer + + + + 100663860 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::get_BitCount() + + + + + + + + + + 100663864 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::get_IsFlushed() + + + + + + + + + + 100663853 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::.ctor() + + + + + + + + + + + 100663854 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::.ctor(System.Int32) + + + + + + + + + + + + 100663855 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::Reset() + + + + + + + + + + + 100663856 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::WriteByte(System.Int32) + + + + + + + + + + + 100663857 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::WriteShort(System.Int32) + + + + + + + + + + + + 100663858 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::WriteInt(System.Int32) + + + + + + + + + + + + + + 100663859 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::WriteBlock(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + 100663861 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::AlignToByte() + + + + + + + + + + + + + + + + + + + + + 100663862 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::WriteBits(System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + 100663863 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::WriteShortMSB(System.Int32) + + + + + + + + + + + + 100663865 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::Flush(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663866 + System.Byte[] ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer::ToByteArray() + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream + + + + 100663871 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::get_IsStreamOwner() + + + + + + + + + + 100663872 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100663873 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::get_CanPatchEntries() + + + + + + + + + + 100663874 + System.String ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::get_Password() + + + + + + + + + + 100663875 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::set_Password(System.String) + + + + + + + + + + + + + + + + + + + 100663880 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::get_CanRead() + + + + + + + + + + 100663881 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::get_CanSeek() + + + + + + + + + + 100663882 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::get_CanWrite() + + + + + + + + + + 100663883 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::get_Length() + + + + + + + + + + 100663884 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::get_Position() + + + + + + + + + + 100663885 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::set_Position(System.Int64) + + + + + + + + + + 100663867 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::.ctor(System.IO.Stream) + + + + + + + + + + + 100663868 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::.ctor(System.IO.Stream,ICSharpCode.SharpZipLib.Zip.Compression.Deflater) + + + + + + + + + + + 100663869 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::.ctor(System.IO.Stream,ICSharpCode.SharpZipLib.Zip.Compression.Deflater,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663870 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::Finish() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663876 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::EncryptBlock(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + 100663877 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::InitializePassword(System.String) + + + + + + + + + + + + + 100663878 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::InitializeAESPassword(ICSharpCode.SharpZipLib.Zip.ZipEntry,System.String,System.Byte[]&,System.Byte[]&) + + + + + + + + + + + + + + + + + + + + 100663879 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::Deflate() + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663886 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100663887 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::SetLength(System.Int64) + + + + + + + + + + 100663888 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::ReadByte() + + + + + + + + + + 100663889 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100663890 + System.IAsyncResult ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::BeginRead(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object) + + + + + + + + + + 100663891 + System.IAsyncResult ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::BeginWrite(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object) + + + + + + + + + + 100663892 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::Flush() + + + + + + + + + + + + + 100663893 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::Close() + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663894 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::GetAuthCodeIfAES() + + + + + + + + + + + + + + + 100663895 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::WriteByte(System.Byte) + + + + + + + + + + + + + 100663896 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer + + + + 100663899 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::get_RawLength() + + + + + + + + + + 100663900 + System.Byte[] ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::get_RawData() + + + + + + + + + + 100663901 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::get_ClearTextLength() + + + + + + + + + + 100663902 + System.Byte[] ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::get_ClearText() + + + + + + + + + + 100663903 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::get_Available() + + + + + + + + + + 100663904 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::set_Available(System.Int32) + + + + + + + + + + + 100663914 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::set_CryptoTransform(System.Security.Cryptography.ICryptoTransform) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663897 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::.ctor(System.IO.Stream) + + + + + + + + + + + 100663898 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::.ctor(System.IO.Stream,System.Int32) + + + + + + + + + + + + + + + + + + + 100663905 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::SetInflaterInput(ICSharpCode.SharpZipLib.Zip.Compression.Inflater) + + + + + + + + + + + + + + + + 100663906 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::Fill() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663907 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::ReadRawBuffer(System.Byte[]) + + + + + + + + + + 100663908 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::ReadRawBuffer(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663909 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::ReadClearTextBuffer(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663910 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::ReadLeByte() + + + + + + + + + + + + + + + + + + + + + 100663911 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::ReadLeShort() + + + + + + + + + + 100663912 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::ReadLeInt() + + + + + + + + + + 100663913 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer::ReadLeLong() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream + + + + 100663918 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::get_IsStreamOwner() + + + + + + + + + + 100663919 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100663922 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::get_Available() + + + + + + + + + + + + + 100663924 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::get_CanRead() + + + + + + + + + + 100663925 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::get_CanSeek() + + + + + + + + + + 100663926 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::get_CanWrite() + + + + + + + + + + 100663927 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::get_Length() + + + + + + + + + + 100663928 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::get_Position() + + + + + + + + + + 100663929 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::set_Position(System.Int64) + + + + + + + + + + 100663915 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::.ctor(System.IO.Stream) + + + + + + + + + + + 100663916 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::.ctor(System.IO.Stream,ICSharpCode.SharpZipLib.Zip.Compression.Inflater) + + + + + + + + + + + 100663917 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::.ctor(System.IO.Stream,ICSharpCode.SharpZipLib.Zip.Compression.Inflater,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663920 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::Skip(System.Int64) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663921 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::StopDecrypting() + + + + + + + + + + + 100663923 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::Fill() + + + + + + + + + + + + + + + + + + + + 100663930 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::Flush() + + + + + + + + + + + 100663931 + System.Int64 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100663932 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::SetLength(System.Int64) + + + + + + + + + + 100663933 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100663934 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::WriteByte(System.Byte) + + + + + + + + + + 100663935 + System.IAsyncResult ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::BeginWrite(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object) + + + + + + + + + + 100663936 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::Close() + + + + + + + + + + + + + + + + + + + 100663937 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow + + + + 100663938 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::Write(System.Int32) + + + + + + + + + + + + + + + + + 100663939 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::SlowRepeat(System.Int32,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + 100663940 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::Repeat(System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663941 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::CopyStored(ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + 100663942 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::CopyDict(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + 100663943 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::GetFreeSpace() + + + + + + + + + + 100663944 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::GetAvailable() + + + + + + + + + + 100663945 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::CopyOutput(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663946 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::Reset() + + + + + + + + + + + 100663947 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow::.ctor() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator + + + + 100663951 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::get_AvailableBits() + + + + + + + + + + 100663952 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::get_AvailableBytes() + + + + + + + + + + 100663954 + System.Boolean ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::get_IsNeedingInput() + + + + + + + + + + 100663948 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::PeekBits(System.Int32) + + + + + + + + + + + + + + + + + + + + 100663949 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::DropBits(System.Int32) + + + + + + + + + + + + 100663950 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::GetBits(System.Int32) + + + + + + + + + + + + + + + + 100663953 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::SkipToByteBoundary() + + + + + + + + + + + + 100663955 + System.Int32 ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::CopyBytes(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663956 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::Reset() + + + + + + + + + + + + 100663957 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::SetInput(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663958 + System.Void ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Tar.InvalidHeaderException + + + + 100663959 + System.Void ICSharpCode.SharpZipLib.Tar.InvalidHeaderException::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + + + + + + + + + + + 100663960 + System.Void ICSharpCode.SharpZipLib.Tar.InvalidHeaderException::.ctor() + + + + + + + + + + + 100663961 + System.Void ICSharpCode.SharpZipLib.Tar.InvalidHeaderException::.ctor(System.String) + + + + + + + + + + + 100663962 + System.Void ICSharpCode.SharpZipLib.Tar.InvalidHeaderException::.ctor(System.String,System.Exception) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler + + + 100663963 + System.Void ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler::.ctor(System.Object,System.IntPtr) + + + + + 100663964 + System.Void ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler::Invoke(ICSharpCode.SharpZipLib.Tar.TarArchive,ICSharpCode.SharpZipLib.Tar.TarEntry,System.String) + + + + + 100663965 + System.IAsyncResult ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler::BeginInvoke(ICSharpCode.SharpZipLib.Tar.TarArchive,ICSharpCode.SharpZipLib.Tar.TarEntry,System.String,System.AsyncCallback,System.Object) + + + + + 100663966 + System.Void ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Tar.TarArchive + + + + 100663978 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarArchive::get_AsciiTranslate() + + + + + + + + + + + + + + + 100663979 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::set_AsciiTranslate(System.Boolean) + + + + + + + + + + + + + + + + 100663981 + System.String ICSharpCode.SharpZipLib.Tar.TarArchive::get_PathPrefix() + + + + + + + + + + + + + + + 100663982 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::set_PathPrefix(System.String) + + + + + + + + + + + + + + + + 100663983 + System.String ICSharpCode.SharpZipLib.Tar.TarArchive::get_RootPath() + + + + + + + + + + + + + + + 100663984 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::set_RootPath(System.String) + + + + + + + + + + + + + + + + 100663986 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarArchive::get_ApplyUserInfoOverrides() + + + + + + + + + + + + + + + 100663987 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::set_ApplyUserInfoOverrides(System.Boolean) + + + + + + + + + + + + + + + + 100663988 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarArchive::get_UserId() + + + + + + + + + + + + + + + 100663989 + System.String ICSharpCode.SharpZipLib.Tar.TarArchive::get_UserName() + + + + + + + + + + + + + + + 100663990 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarArchive::get_GroupId() + + + + + + + + + + + + + + + 100663991 + System.String ICSharpCode.SharpZipLib.Tar.TarArchive::get_GroupName() + + + + + + + + + + + + + + + 100663992 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarArchive::get_RecordSize() + + + + + + + + + + + + + + + + + + + + + + + 100663993 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + + + + + + + 100663967 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::add_ProgressMessageEvent(ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler) + + + + + + + 100663968 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::remove_ProgressMessageEvent(ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler) + + + + + + + 100663969 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::OnProgressMessageEvent(ICSharpCode.SharpZipLib.Tar.TarEntry,System.String) + + + + + + + + + + + + + + + + 100663970 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::.ctor() + + + + + + + + + + + + + 100663971 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::.ctor(ICSharpCode.SharpZipLib.Tar.TarInputStream) + + + + + + + + + + + + + + + + + + + 100663972 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::.ctor(ICSharpCode.SharpZipLib.Tar.TarOutputStream) + + + + + + + + + + + + + + + + + + + 100663973 + ICSharpCode.SharpZipLib.Tar.TarArchive ICSharpCode.SharpZipLib.Tar.TarArchive::CreateInputTarArchive(System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + 100663974 + ICSharpCode.SharpZipLib.Tar.TarArchive ICSharpCode.SharpZipLib.Tar.TarArchive::CreateInputTarArchive(System.IO.Stream,System.Int32) + + + + + + + + + + + + + + + + + + + 100663975 + ICSharpCode.SharpZipLib.Tar.TarArchive ICSharpCode.SharpZipLib.Tar.TarArchive::CreateOutputTarArchive(System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + 100663976 + ICSharpCode.SharpZipLib.Tar.TarArchive ICSharpCode.SharpZipLib.Tar.TarArchive::CreateOutputTarArchive(System.IO.Stream,System.Int32) + + + + + + + + + + + + + + + + + + + 100663977 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::SetKeepOldFiles(System.Boolean) + + + + + + + + + + + + + + + + 100663980 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::SetAsciiTranslation(System.Boolean) + + + + + + + + + + + + + + + + 100663985 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::SetUserInfo(System.Int32,System.String,System.Int32,System.String) + + + + + + + + + + + + + + + + + + + + 100663994 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::CloseArchive() + + + + + + + + + + + 100663995 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::ListContents() + + + + + + + + + + + + + + + + + + + + + 100663996 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::ExtractContents(System.String) + + + + + + + + + + + + + + + + + + + + + 100663997 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::ExtractEntry(System.String,ICSharpCode.SharpZipLib.Tar.TarEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663998 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::WriteEntry(ICSharpCode.SharpZipLib.Tar.TarEntry,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663999 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::WriteEntryCore(ICSharpCode.SharpZipLib.Tar.TarEntry,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664000 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::Dispose() + + + + + + + + + + + + 100664001 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::Dispose(System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664002 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::Close() + + + + + + + + + + + 100664003 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::Finalize() + + + + + + + + + + + + 100664004 + System.Void ICSharpCode.SharpZipLib.Tar.TarArchive::EnsureDirectoryExists(System.String) + + + + + + + + + + + + + + + + + + 100664005 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarArchive::IsBinary(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Tar.TarBuffer + + + + 100664006 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarBuffer::get_RecordSize() + + + + + + + + + + 100664008 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarBuffer::get_BlockFactor() + + + + + + + + + + 100664021 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarBuffer::get_CurrentBlock() + + + + + + + + + + 100664022 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarBuffer::get_IsStreamOwner() + + + + + + + + + + 100664023 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100664025 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarBuffer::get_CurrentRecord() + + + + + + + + + + 100664007 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarBuffer::GetRecordSize() + + + + + + + + + + 100664009 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarBuffer::GetBlockFactor() + + + + + + + + + + 100664010 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::.ctor() + + + + + + + + + + + + + + 100664011 + ICSharpCode.SharpZipLib.Tar.TarBuffer ICSharpCode.SharpZipLib.Tar.TarBuffer::CreateInputTarBuffer(System.IO.Stream) + + + + + + + + + + + + + + + 100664012 + ICSharpCode.SharpZipLib.Tar.TarBuffer ICSharpCode.SharpZipLib.Tar.TarBuffer::CreateInputTarBuffer(System.IO.Stream,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + 100664013 + ICSharpCode.SharpZipLib.Tar.TarBuffer ICSharpCode.SharpZipLib.Tar.TarBuffer::CreateOutputTarBuffer(System.IO.Stream) + + + + + + + + + + + + + + + 100664014 + ICSharpCode.SharpZipLib.Tar.TarBuffer ICSharpCode.SharpZipLib.Tar.TarBuffer::CreateOutputTarBuffer(System.IO.Stream,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + 100664015 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::Initialize(System.Int32) + + + + + + + + + + + + + + + + + + + + + + 100664016 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarBuffer::IsEOFBlock(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664017 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarBuffer::IsEndOfArchiveBlock(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664018 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::SkipBlock() + + + + + + + + + + + + + + + + + + + + + + + 100664019 + System.Byte[] ICSharpCode.SharpZipLib.Tar.TarBuffer::ReadBlock() + + + + + + + + + + + + + + + + + + + + + + + + + 100664020 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarBuffer::ReadRecord() + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664024 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarBuffer::GetCurrentBlockNum() + + + + + + + + + + 100664026 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarBuffer::GetCurrentRecordNum() + + + + + + + + + + 100664027 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::WriteBlock(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664028 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::WriteBlock(System.Byte[],System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664029 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::WriteRecord() + + + + + + + + + + + + + + + + + + + 100664030 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::WriteFinalRecord() + + + + + + + + + + + + + + + + + + + + + + 100664031 + System.Void ICSharpCode.SharpZipLib.Tar.TarBuffer::Close() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Tar.TarEntry + + + + 100664041 + ICSharpCode.SharpZipLib.Tar.TarHeader ICSharpCode.SharpZipLib.Tar.TarEntry::get_TarHeader() + + + + + + + + + + 100664042 + System.String ICSharpCode.SharpZipLib.Tar.TarEntry::get_Name() + + + + + + + + + + 100664043 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::set_Name(System.String) + + + + + + + + + + + 100664044 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarEntry::get_UserId() + + + + + + + + + + 100664045 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::set_UserId(System.Int32) + + + + + + + + + + + 100664046 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarEntry::get_GroupId() + + + + + + + + + + 100664047 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::set_GroupId(System.Int32) + + + + + + + + + + + 100664048 + System.String ICSharpCode.SharpZipLib.Tar.TarEntry::get_UserName() + + + + + + + + + + 100664049 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::set_UserName(System.String) + + + + + + + + + + + 100664050 + System.String ICSharpCode.SharpZipLib.Tar.TarEntry::get_GroupName() + + + + + + + + + + 100664051 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::set_GroupName(System.String) + + + + + + + + + + + 100664054 + System.DateTime ICSharpCode.SharpZipLib.Tar.TarEntry::get_ModTime() + + + + + + + + + + 100664055 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::set_ModTime(System.DateTime) + + + + + + + + + + + 100664056 + System.String ICSharpCode.SharpZipLib.Tar.TarEntry::get_File() + + + + + + + + + + 100664057 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarEntry::get_Size() + + + + + + + + + + 100664058 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::set_Size(System.Int64) + + + + + + + + + + + 100664059 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarEntry::get_IsDirectory() + + + + + + + + + + + + + + + + + + + + + + + + 100664032 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::.ctor() + + + + + + + + + + + + 100664033 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::.ctor(System.Byte[]) + + + + + + + + + + + + + 100664034 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::.ctor(ICSharpCode.SharpZipLib.Tar.TarHeader) + + + + + + + + + + + + + + + + + 100664035 + System.Object ICSharpCode.SharpZipLib.Tar.TarEntry::Clone() + + + + + + + + + + + + + + 100664036 + ICSharpCode.SharpZipLib.Tar.TarEntry ICSharpCode.SharpZipLib.Tar.TarEntry::CreateTarEntry(System.String) + + + + + + + + + + + + 100664037 + ICSharpCode.SharpZipLib.Tar.TarEntry ICSharpCode.SharpZipLib.Tar.TarEntry::CreateEntryFromFile(System.String) + + + + + + + + + + + + 100664038 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarEntry::Equals(System.Object) + + + + + + + + + + + + + + + + 100664039 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarEntry::GetHashCode() + + + + + + + + + + 100664040 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarEntry::IsDescendent(ICSharpCode.SharpZipLib.Tar.TarEntry) + + + + + + + + + + + + + + + 100664052 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::SetIds(System.Int32,System.Int32) + + + + + + + + + + + + 100664053 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::SetNames(System.String,System.String) + + + + + + + + + + + + 100664060 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::GetFileTarHeader(ICSharpCode.SharpZipLib.Tar.TarHeader,System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664061 + ICSharpCode.SharpZipLib.Tar.TarEntry[] ICSharpCode.SharpZipLib.Tar.TarEntry::GetDirectoryEntries() + + + + + + + + + + + + + + + + + + + + + + + + + 100664062 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::WriteEntryHeader(System.Byte[]) + + + + + + + + + + + 100664063 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::AdjustEntryName(System.Byte[],System.String) + + + + + + + + + + + 100664064 + System.Void ICSharpCode.SharpZipLib.Tar.TarEntry::NameTarHeader(ICSharpCode.SharpZipLib.Tar.TarHeader,System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Tar.TarException + + + + 100664065 + System.Void ICSharpCode.SharpZipLib.Tar.TarException::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + + + + + + + + + + + 100664066 + System.Void ICSharpCode.SharpZipLib.Tar.TarException::.ctor() + + + + + + + + + + + 100664067 + System.Void ICSharpCode.SharpZipLib.Tar.TarException::.ctor(System.String) + + + + + + + + + + + 100664068 + System.Void ICSharpCode.SharpZipLib.Tar.TarException::.ctor(System.String,System.Exception) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Tar.TarHeader + + + + 100664070 + System.String ICSharpCode.SharpZipLib.Tar.TarHeader::get_Name() + + + + + + + + + + 100664071 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_Name(System.String) + + + + + + + + + + + + + + + + 100664073 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::get_Mode() + + + + + + + + + + 100664074 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_Mode(System.Int32) + + + + + + + + + + + 100664075 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::get_UserId() + + + + + + + + + + 100664076 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_UserId(System.Int32) + + + + + + + + + + + 100664077 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::get_GroupId() + + + + + + + + + + 100664078 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_GroupId(System.Int32) + + + + + + + + + + + 100664079 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarHeader::get_Size() + + + + + + + + + + 100664080 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_Size(System.Int64) + + + + + + + + + + + + + + + + 100664081 + System.DateTime ICSharpCode.SharpZipLib.Tar.TarHeader::get_ModTime() + + + + + + + + + + 100664082 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_ModTime(System.DateTime) + + + + + + + + + + + + + + + + 100664083 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::get_Checksum() + + + + + + + + + + 100664084 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarHeader::get_IsChecksumValid() + + + + + + + + + + 100664085 + System.Byte ICSharpCode.SharpZipLib.Tar.TarHeader::get_TypeFlag() + + + + + + + + + + 100664086 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_TypeFlag(System.Byte) + + + + + + + + + + + 100664087 + System.String ICSharpCode.SharpZipLib.Tar.TarHeader::get_LinkName() + + + + + + + + + + 100664088 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_LinkName(System.String) + + + + + + + + + + + + + + + + 100664089 + System.String ICSharpCode.SharpZipLib.Tar.TarHeader::get_Magic() + + + + + + + + + + 100664090 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_Magic(System.String) + + + + + + + + + + + + + + + + 100664091 + System.String ICSharpCode.SharpZipLib.Tar.TarHeader::get_Version() + + + + + + + + + + 100664092 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_Version(System.String) + + + + + + + + + + + + + + + + 100664093 + System.String ICSharpCode.SharpZipLib.Tar.TarHeader::get_UserName() + + + + + + + + + + 100664094 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_UserName(System.String) + + + + + + + + + + + + + + + + + + + + + + 100664095 + System.String ICSharpCode.SharpZipLib.Tar.TarHeader::get_GroupName() + + + + + + + + + + 100664096 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_GroupName(System.String) + + + + + + + + + + + + + + + + + 100664097 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::get_DevMajor() + + + + + + + + + + 100664098 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_DevMajor(System.Int32) + + + + + + + + + + + 100664099 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::get_DevMinor() + + + + + + + + + + 100664100 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::set_DevMinor(System.Int32) + + + + + + + + + + + 100664069 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::.ctor() + + + + + + + + + + + + + + + + + + + + 100664072 + System.String ICSharpCode.SharpZipLib.Tar.TarHeader::GetName() + + + + + + + + + + 100664101 + System.Object ICSharpCode.SharpZipLib.Tar.TarHeader::Clone() + + + + + + + + + + 100664102 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::ParseBuffer(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664103 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::WriteHeader(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664104 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetHashCode() + + + + + + + + + + 100664105 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarHeader::Equals(System.Object) + + + + + + + + + + + + + + + + + + 100664106 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::SetValueDefaults(System.Int32,System.String,System.Int32,System.String) + + + + + + + + + + + + + + 100664107 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::RestoreSetValues() + + + + + + + + + + + + + + 100664108 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarHeader::ParseBinaryOrOctal(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + 100664109 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarHeader::ParseOctal(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664110 + System.Text.StringBuilder ICSharpCode.SharpZipLib.Tar.TarHeader::ParseName(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664111 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetNameBytes(System.Text.StringBuilder,System.Int32,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + 100664112 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetNameBytes(System.String,System.Int32,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664113 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetNameBytes(System.Text.StringBuilder,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + 100664114 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetNameBytes(System.String,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + 100664115 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetAsciiBytes(System.String,System.Int32,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664116 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetOctalBytes(System.Int64,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664117 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetBinaryOrOctalBytes(System.Int64,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + 100664118 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::GetCheckSumOctalBytes(System.Int64,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + 100664119 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::ComputeCheckSum(System.Byte[]) + + + + + + + + + + + + + + + + + + 100664120 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::MakeCheckSum(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664121 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarHeader::GetCTime(System.DateTime) + + + + + + + + + + 100664122 + System.DateTime ICSharpCode.SharpZipLib.Tar.TarHeader::GetDateTimeFromCTime(System.Int64) + + + + + + + + + + + + + + + 100664123 + System.Void ICSharpCode.SharpZipLib.Tar.TarHeader::.cctor() + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Tar.TarInputStream + + + + 100664126 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarInputStream::get_IsStreamOwner() + + + + + + + + + + 100664127 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100664128 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarInputStream::get_CanRead() + + + + + + + + + + 100664129 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarInputStream::get_CanSeek() + + + + + + + + + + 100664130 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarInputStream::get_CanWrite() + + + + + + + + + + 100664131 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarInputStream::get_Length() + + + + + + + + + + 100664132 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarInputStream::get_Position() + + + + + + + + + + 100664133 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::set_Position(System.Int64) + + + + + + + + + + 100664143 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarInputStream::get_RecordSize() + + + + + + + + + + 100664145 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarInputStream::get_Available() + + + + + + + + + + 100664147 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarInputStream::get_IsMarkSupported() + + + + + + + + + + 100664124 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::.ctor(System.IO.Stream) + + + + + + + + + + + 100664125 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::.ctor(System.IO.Stream,System.Int32) + + + + + + + + + + + + + 100664134 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::Flush() + + + + + + + + + + + 100664135 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarInputStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100664136 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::SetLength(System.Int64) + + + + + + + + + + 100664137 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100664138 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::WriteByte(System.Byte) + + + + + + + + + + 100664139 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarInputStream::ReadByte() + + + + + + + + + + + + + + + + + 100664140 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarInputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664141 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::Close() + + + + + + + + + + + 100664142 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::SetEntryFactory(ICSharpCode.SharpZipLib.Tar.TarInputStream/IEntryFactory) + + + + + + + + + + + 100664144 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarInputStream::GetRecordSize() + + + + + + + + + + 100664146 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::Skip(System.Int64) + + + + + + + + + + + + + + + + + + + + + + + + 100664148 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::Mark(System.Int32) + + + + + + + + + + 100664149 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::Reset() + + + + + + + + + + 100664150 + ICSharpCode.SharpZipLib.Tar.TarEntry ICSharpCode.SharpZipLib.Tar.TarInputStream::GetNextEntry() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664151 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::CopyEntryContents(System.IO.Stream) + + + + + + + + + + + + + + + + + + 100664152 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream::SkipToNextEntry() + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Tar.TarInputStream/EntryFactoryAdapter + + + + 100664574 + ICSharpCode.SharpZipLib.Tar.TarEntry ICSharpCode.SharpZipLib.Tar.TarInputStream/EntryFactoryAdapter::CreateEntry(System.String) + + + + + + + + + + 100664575 + ICSharpCode.SharpZipLib.Tar.TarEntry ICSharpCode.SharpZipLib.Tar.TarInputStream/EntryFactoryAdapter::CreateEntryFromFile(System.String) + + + + + + + + + + 100664576 + ICSharpCode.SharpZipLib.Tar.TarEntry ICSharpCode.SharpZipLib.Tar.TarInputStream/EntryFactoryAdapter::CreateEntry(System.Byte[]) + + + + + + + + + + 100664577 + System.Void ICSharpCode.SharpZipLib.Tar.TarInputStream/EntryFactoryAdapter::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Tar.TarOutputStream + + + + 100664155 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarOutputStream::get_IsStreamOwner() + + + + + + + + + + 100664156 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100664157 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarOutputStream::get_CanRead() + + + + + + + + + + 100664158 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarOutputStream::get_CanSeek() + + + + + + + + + + 100664159 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarOutputStream::get_CanWrite() + + + + + + + + + + 100664160 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarOutputStream::get_Length() + + + + + + + + + + 100664161 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarOutputStream::get_Position() + + + + + + + + + + 100664162 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::set_Position(System.Int64) + + + + + + + + + + + 100664170 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarOutputStream::get_RecordSize() + + + + + + + + + + 100664172 + System.Boolean ICSharpCode.SharpZipLib.Tar.TarOutputStream::get_IsEntryOpen() + + + + + + + + + + 100664153 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::.ctor(System.IO.Stream) + + + + + + + + + + + 100664154 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::.ctor(System.IO.Stream,System.Int32) + + + + + + + + + + + + + + + + + + + + 100664163 + System.Int64 ICSharpCode.SharpZipLib.Tar.TarOutputStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100664164 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::SetLength(System.Int64) + + + + + + + + + + + 100664165 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarOutputStream::ReadByte() + + + + + + + + + + 100664166 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarOutputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100664167 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::Flush() + + + + + + + + + + + 100664168 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::Finish() + + + + + + + + + + + + + + + + 100664169 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::Close() + + + + + + + + + + + + + + + + + 100664171 + System.Int32 ICSharpCode.SharpZipLib.Tar.TarOutputStream::GetRecordSize() + + + + + + + + + + 100664173 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::PutNextEntry(ICSharpCode.SharpZipLib.Tar.TarEntry) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664174 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::CloseEntry() + + + + + + + + + + + + + + + + + + + + + + + 100664175 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::WriteByte(System.Byte) + + + + + + + + + + + 100664176 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664177 + System.Void ICSharpCode.SharpZipLib.Tar.TarOutputStream::WriteEofBlock() + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.LZW.LzwConstants + + + + 100664178 + System.Void ICSharpCode.SharpZipLib.LZW.LzwConstants::.ctor() + + + + + + + + + + + + + ICSharpCode.SharpZipLib.LZW.LzwException + + + + 100664179 + System.Void ICSharpCode.SharpZipLib.LZW.LzwException::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + + + + + + + + + + + 100664180 + System.Void ICSharpCode.SharpZipLib.LZW.LzwException::.ctor() + + + + + + + + + + + 100664181 + System.Void ICSharpCode.SharpZipLib.LZW.LzwException::.ctor(System.String) + + + + + + + + + + + 100664182 + System.Void ICSharpCode.SharpZipLib.LZW.LzwException::.ctor(System.String,System.Exception) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.LZW.LzwInputStream + + + + 100664183 + System.Boolean ICSharpCode.SharpZipLib.LZW.LzwInputStream::get_IsStreamOwner() + + + + + + + + + + 100664184 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100664191 + System.Boolean ICSharpCode.SharpZipLib.LZW.LzwInputStream::get_CanRead() + + + + + + + + + + 100664192 + System.Boolean ICSharpCode.SharpZipLib.LZW.LzwInputStream::get_CanSeek() + + + + + + + + + + 100664193 + System.Boolean ICSharpCode.SharpZipLib.LZW.LzwInputStream::get_CanWrite() + + + + + + + + + + 100664194 + System.Int64 ICSharpCode.SharpZipLib.LZW.LzwInputStream::get_Length() + + + + + + + + + + 100664195 + System.Int64 ICSharpCode.SharpZipLib.LZW.LzwInputStream::get_Position() + + + + + + + + + + 100664196 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::set_Position(System.Int64) + + + + + + + + + + 100664185 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::.ctor(System.IO.Stream) + + + + + + + + + + + + + + + + 100664186 + System.Int32 ICSharpCode.SharpZipLib.LZW.LzwInputStream::ReadByte() + + + + + + + + + + + + + + + + 100664187 + System.Int32 ICSharpCode.SharpZipLib.LZW.LzwInputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664188 + System.Int32 ICSharpCode.SharpZipLib.LZW.LzwInputStream::ResetBuf(System.Int32) + + + + + + + + + + + + + 100664189 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::Fill() + + + + + + + + + + + + + + + + 100664190 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::ParseHeader() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664197 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::Flush() + + + + + + + + + + + 100664198 + System.Int64 ICSharpCode.SharpZipLib.LZW.LzwInputStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100664199 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::SetLength(System.Int64) + + + + + + + + + + 100664200 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100664201 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::WriteByte(System.Byte) + + + + + + + + + + 100664202 + System.IAsyncResult ICSharpCode.SharpZipLib.LZW.LzwInputStream::BeginWrite(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object) + + + + + + + + + + 100664203 + System.Void ICSharpCode.SharpZipLib.LZW.LzwInputStream::Close() + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.GZip.GZipConstants + + + + 100664204 + System.Void ICSharpCode.SharpZipLib.GZip.GZipConstants::.ctor() + + + + + + + + + + + + + ICSharpCode.SharpZipLib.GZip.GZipException + + + + 100664205 + System.Void ICSharpCode.SharpZipLib.GZip.GZipException::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + + + + + + + + + + + 100664206 + System.Void ICSharpCode.SharpZipLib.GZip.GZipException::.ctor() + + + + + + + + + + + 100664207 + System.Void ICSharpCode.SharpZipLib.GZip.GZipException::.ctor(System.String) + + + + + + + + + + + 100664208 + System.Void ICSharpCode.SharpZipLib.GZip.GZipException::.ctor(System.String,System.Exception) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.GZip.GZipInputStream + + + + 100664209 + System.Void ICSharpCode.SharpZipLib.GZip.GZipInputStream::.ctor(System.IO.Stream) + + + + + + + + + + + 100664210 + System.Void ICSharpCode.SharpZipLib.GZip.GZipInputStream::.ctor(System.IO.Stream,System.Int32) + + + + + + + + + + + 100664211 + System.Int32 ICSharpCode.SharpZipLib.GZip.GZipInputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664212 + System.Boolean ICSharpCode.SharpZipLib.GZip.GZipInputStream::ReadHeader() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664213 + System.Void ICSharpCode.SharpZipLib.GZip.GZipInputStream::ReadFooter() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.GZip.GZipOutputStream + + + + 100664214 + System.Void ICSharpCode.SharpZipLib.GZip.GZipOutputStream::.ctor(System.IO.Stream) + + + + + + + + + + + 100664215 + System.Void ICSharpCode.SharpZipLib.GZip.GZipOutputStream::.ctor(System.IO.Stream,System.Int32) + + + + + + + + + + + + 100664216 + System.Void ICSharpCode.SharpZipLib.GZip.GZipOutputStream::SetLevel(System.Int32) + + + + + + + + + + + + + + + + 100664217 + System.Int32 ICSharpCode.SharpZipLib.GZip.GZipOutputStream::GetLevel() + + + + + + + + + + 100664218 + System.Void ICSharpCode.SharpZipLib.GZip.GZipOutputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + 100664219 + System.Void ICSharpCode.SharpZipLib.GZip.GZipOutputStream::Close() + + + + + + + + + + + + + + + + + + + + + + 100664220 + System.Void ICSharpCode.SharpZipLib.GZip.GZipOutputStream::Finish() + + + + + + + + + + + + + + + + + + + + + + + + 100664221 + System.Void ICSharpCode.SharpZipLib.GZip.GZipOutputStream::WriteHeader() + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Encryption.PkzipClassic + + + + 100664222 + System.Byte[] ICSharpCode.SharpZipLib.Encryption.PkzipClassic::GenerateKeys(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664223 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassic::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase + + + + 100664224 + System.Byte ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase::TransformByte() + + + + + + + + + + + 100664225 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase::SetKeys(System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + 100664226 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase::UpdateKeys(System.Byte) + + + + + + + + + + + + + + 100664227 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase::Reset() + + + + + + + + + + + + + 100664228 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform + + + + 100664232 + System.Boolean ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform::get_CanReuseTransform() + + + + + + + + + + 100664233 + System.Int32 ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform::get_InputBlockSize() + + + + + + + + + + 100664234 + System.Int32 ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform::get_OutputBlockSize() + + + + + + + + + + 100664235 + System.Boolean ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform::get_CanTransformMultipleBlocks() + + + + + + + + + + 100664229 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform::.ctor(System.Byte[]) + + + + + + + + + + + + 100664230 + System.Byte[] ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform::TransformFinalBlock(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + 100664231 + System.Int32 ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform::TransformBlock(System.Byte[],System.Int32,System.Int32,System.Byte[],System.Int32) + + + + + + + + + + + + + + + + + + + 100664236 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform::Dispose() + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform + + + + 100664240 + System.Boolean ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform::get_CanReuseTransform() + + + + + + + + + + 100664241 + System.Int32 ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform::get_InputBlockSize() + + + + + + + + + + 100664242 + System.Int32 ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform::get_OutputBlockSize() + + + + + + + + + + 100664243 + System.Boolean ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform::get_CanTransformMultipleBlocks() + + + + + + + + + + 100664237 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform::.ctor(System.Byte[]) + + + + + + + + + + + + 100664238 + System.Byte[] ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform::TransformFinalBlock(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + 100664239 + System.Int32 ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform::TransformBlock(System.Byte[],System.Int32,System.Int32,System.Byte[],System.Int32) + + + + + + + + + + + + + + + + + + + 100664244 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform::Dispose() + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged + + + + 100664245 + System.Int32 ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::get_BlockSize() + + + + + + + + + + 100664246 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::set_BlockSize(System.Int32) + + + + + + + + + + + + + + + 100664247 + System.Security.Cryptography.KeySizes[] ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::get_LegalKeySizes() + + + + + + + + + + + + 100664249 + System.Security.Cryptography.KeySizes[] ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::get_LegalBlockSizes() + + + + + + + + + + + + 100664250 + System.Byte[] ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::get_Key() + + + + + + + + + + + + + + + 100664251 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::set_Key(System.Byte[]) + + + + + + + + + + + + + + + + + + + + 100664248 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::GenerateIV() + + + + + + + + + + 100664252 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::GenerateKey() + + + + + + + + + + + + + 100664253 + System.Security.Cryptography.ICryptoTransform ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::CreateEncryptor(System.Byte[],System.Byte[]) + + + + + + + + + + + 100664254 + System.Security.Cryptography.ICryptoTransform ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::CreateDecryptor(System.Byte[],System.Byte[]) + + + + + + + + + + + 100664255 + System.Void ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged::.ctor() + + + + + + + + + ICSharpCode.SharpZipLib.Encryption.ZipAESStream + + + + 100664256 + System.Void ICSharpCode.SharpZipLib.Encryption.ZipAESStream::.ctor(System.IO.Stream,ICSharpCode.SharpZipLib.Encryption.ZipAESTransform,System.Security.Cryptography.CryptoStreamMode) + + + + + + + + + + + + + + + + + + + + 100664257 + System.Int32 ICSharpCode.SharpZipLib.Encryption.ZipAESStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664258 + System.Void ICSharpCode.SharpZipLib.Encryption.ZipAESStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + ICSharpCode.SharpZipLib.Encryption.ZipAESTransform + + + + 100664261 + System.Byte[] ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::get_PwdVerifier() + + + + + + + + + + 100664264 + System.Int32 ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::get_InputBlockSize() + + + + + + + + + + 100664265 + System.Int32 ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::get_OutputBlockSize() + + + + + + + + + + 100664266 + System.Boolean ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::get_CanTransformMultipleBlocks() + + + + + + + + + + 100664267 + System.Boolean ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::get_CanReuseTransform() + + + + + + + + + + 100664259 + System.Void ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::.ctor(System.String,System.Byte[],System.Int32,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664260 + System.Int32 ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::TransformBlock(System.Byte[],System.Int32,System.Int32,System.Byte[],System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664262 + System.Byte[] ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::GetAuthCode() + + + + + + + + + + + + + + + + + 100664263 + System.Byte[] ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::TransformFinalBlock(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100664268 + System.Void ICSharpCode.SharpZipLib.Encryption.ZipAESTransform::Dispose() + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.ScanEventArgs + + + + 100664270 + System.String ICSharpCode.SharpZipLib.Core.ScanEventArgs::get_Name() + + + + + + + + + + 100664271 + System.Boolean ICSharpCode.SharpZipLib.Core.ScanEventArgs::get_ContinueRunning() + + + + + + + + + + 100664272 + System.Void ICSharpCode.SharpZipLib.Core.ScanEventArgs::set_ContinueRunning(System.Boolean) + + + + + + + + + + + 100664269 + System.Void ICSharpCode.SharpZipLib.Core.ScanEventArgs::.ctor(System.String) + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.ProgressEventArgs + + + + 100664274 + System.String ICSharpCode.SharpZipLib.Core.ProgressEventArgs::get_Name() + + + + + + + + + + 100664275 + System.Boolean ICSharpCode.SharpZipLib.Core.ProgressEventArgs::get_ContinueRunning() + + + + + + + + + + 100664276 + System.Void ICSharpCode.SharpZipLib.Core.ProgressEventArgs::set_ContinueRunning(System.Boolean) + + + + + + + + + + + 100664277 + System.Single ICSharpCode.SharpZipLib.Core.ProgressEventArgs::get_PercentComplete() + + + + + + + + + + + + + + + + + 100664278 + System.Int64 ICSharpCode.SharpZipLib.Core.ProgressEventArgs::get_Processed() + + + + + + + + + + 100664279 + System.Int64 ICSharpCode.SharpZipLib.Core.ProgressEventArgs::get_Target() + + + + + + + + + + 100664273 + System.Void ICSharpCode.SharpZipLib.Core.ProgressEventArgs::.ctor(System.String,System.Int64,System.Int64) + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.DirectoryEventArgs + + + + 100664281 + System.Boolean ICSharpCode.SharpZipLib.Core.DirectoryEventArgs::get_HasMatchingFiles() + + + + + + + + + + 100664280 + System.Void ICSharpCode.SharpZipLib.Core.DirectoryEventArgs::.ctor(System.String,System.Boolean) + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs + + + + 100664283 + System.String ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs::get_Name() + + + + + + + + + + 100664284 + System.Exception ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs::get_Exception() + + + + + + + + + + 100664285 + System.Boolean ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs::get_ContinueRunning() + + + + + + + + + + 100664286 + System.Void ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs::set_ContinueRunning(System.Boolean) + + + + + + + + + + + 100664282 + System.Void ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs::.ctor(System.String,System.Exception) + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.ProcessFileHandler + + + 100664287 + System.Void ICSharpCode.SharpZipLib.Core.ProcessFileHandler::.ctor(System.Object,System.IntPtr) + + + + + 100664288 + System.Void ICSharpCode.SharpZipLib.Core.ProcessFileHandler::Invoke(System.Object,ICSharpCode.SharpZipLib.Core.ScanEventArgs) + + + + + 100664289 + System.IAsyncResult ICSharpCode.SharpZipLib.Core.ProcessFileHandler::BeginInvoke(System.Object,ICSharpCode.SharpZipLib.Core.ScanEventArgs,System.AsyncCallback,System.Object) + + + + + 100664290 + System.Void ICSharpCode.SharpZipLib.Core.ProcessFileHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Core.ProgressHandler + + + 100664291 + System.Void ICSharpCode.SharpZipLib.Core.ProgressHandler::.ctor(System.Object,System.IntPtr) + + + + + 100664292 + System.Void ICSharpCode.SharpZipLib.Core.ProgressHandler::Invoke(System.Object,ICSharpCode.SharpZipLib.Core.ProgressEventArgs) + + + + + 100664293 + System.IAsyncResult ICSharpCode.SharpZipLib.Core.ProgressHandler::BeginInvoke(System.Object,ICSharpCode.SharpZipLib.Core.ProgressEventArgs,System.AsyncCallback,System.Object) + + + + + 100664294 + System.Void ICSharpCode.SharpZipLib.Core.ProgressHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Core.CompletedFileHandler + + + 100664295 + System.Void ICSharpCode.SharpZipLib.Core.CompletedFileHandler::.ctor(System.Object,System.IntPtr) + + + + + 100664296 + System.Void ICSharpCode.SharpZipLib.Core.CompletedFileHandler::Invoke(System.Object,ICSharpCode.SharpZipLib.Core.ScanEventArgs) + + + + + 100664297 + System.IAsyncResult ICSharpCode.SharpZipLib.Core.CompletedFileHandler::BeginInvoke(System.Object,ICSharpCode.SharpZipLib.Core.ScanEventArgs,System.AsyncCallback,System.Object) + + + + + 100664298 + System.Void ICSharpCode.SharpZipLib.Core.CompletedFileHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler + + + 100664299 + System.Void ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler::.ctor(System.Object,System.IntPtr) + + + + + 100664300 + System.Void ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler::Invoke(System.Object,ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs) + + + + + 100664301 + System.IAsyncResult ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler::BeginInvoke(System.Object,ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs,System.AsyncCallback,System.Object) + + + + + 100664302 + System.Void ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Core.FileFailureHandler + + + 100664303 + System.Void ICSharpCode.SharpZipLib.Core.FileFailureHandler::.ctor(System.Object,System.IntPtr) + + + + + 100664304 + System.Void ICSharpCode.SharpZipLib.Core.FileFailureHandler::Invoke(System.Object,ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs) + + + + + 100664305 + System.IAsyncResult ICSharpCode.SharpZipLib.Core.FileFailureHandler::BeginInvoke(System.Object,ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs,System.AsyncCallback,System.Object) + + + + + 100664306 + System.Void ICSharpCode.SharpZipLib.Core.FileFailureHandler::EndInvoke(System.IAsyncResult) + + + + + + + + ICSharpCode.SharpZipLib.Core.FileSystemScanner + + + + 100664307 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::.ctor(System.String) + + + + + + + + + + + + 100664308 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::.ctor(System.String,System.String) + + + + + + + + + + + + + 100664309 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::.ctor(ICSharpCode.SharpZipLib.Core.IScanFilter) + + + + + + + + + + + + 100664310 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::.ctor(ICSharpCode.SharpZipLib.Core.IScanFilter,ICSharpCode.SharpZipLib.Core.IScanFilter) + + + + + + + + + + + + + 100664311 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::add_ProcessDirectory(System.EventHandler`1<ICSharpCode.SharpZipLib.Core.DirectoryEventArgs>) + + + + + + + 100664312 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::remove_ProcessDirectory(System.EventHandler`1<ICSharpCode.SharpZipLib.Core.DirectoryEventArgs>) + + + + + + + 100664313 + System.Boolean ICSharpCode.SharpZipLib.Core.FileSystemScanner::OnDirectoryFailure(System.String,System.Exception) + + + + + + + + + + + + + + + + + + + 100664314 + System.Boolean ICSharpCode.SharpZipLib.Core.FileSystemScanner::OnFileFailure(System.String,System.Exception) + + + + + + + + + + + + + + + + + + + 100664315 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::OnProcessFile(System.String) + + + + + + + + + + + + + + + + + + 100664316 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::OnCompleteFile(System.String) + + + + + + + + + + + + + + + + + + 100664317 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::OnProcessDirectory(System.String,System.Boolean) + + + + + + + + + + + + + + + + + + 100664318 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::Scan(System.String,System.Boolean) + + + + + + + + + + + + 100664319 + System.Void ICSharpCode.SharpZipLib.Core.FileSystemScanner::ScanDir(System.String,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.NameFilter + + + + 100664323 + System.Void ICSharpCode.SharpZipLib.Core.NameFilter::.ctor(System.String) + + + + + + + + + + + + + + + 100664324 + System.Boolean ICSharpCode.SharpZipLib.Core.NameFilter::IsValidExpression(System.String) + + + + + + + + + + + + + + + + 100664325 + System.Boolean ICSharpCode.SharpZipLib.Core.NameFilter::IsValidFilterExpression(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664326 + System.String[] ICSharpCode.SharpZipLib.Core.NameFilter::SplitQuoted(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664327 + System.String ICSharpCode.SharpZipLib.Core.NameFilter::ToString() + + + + + + + + + + 100664328 + System.Boolean ICSharpCode.SharpZipLib.Core.NameFilter::IsIncluded(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + 100664329 + System.Boolean ICSharpCode.SharpZipLib.Core.NameFilter::IsExcluded(System.String) + + + + + + + + + + + + + + + + + + + + 100664330 + System.Boolean ICSharpCode.SharpZipLib.Core.NameFilter::IsMatch(System.String) + + + + + + + + + + 100664331 + System.Void ICSharpCode.SharpZipLib.Core.NameFilter::Compile() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.PathFilter + + + + 100664332 + System.Void ICSharpCode.SharpZipLib.Core.PathFilter::.ctor(System.String) + + + + + + + + + + + + 100664333 + System.Boolean ICSharpCode.SharpZipLib.Core.PathFilter::IsMatch(System.String) + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.ExtendedPathFilter + + + + 100664338 + System.Int64 ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::get_MinSize() + + + + + + + + + + 100664339 + System.Void ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::set_MinSize(System.Int64) + + + + + + + + + + + + + + + + + + 100664340 + System.Int64 ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::get_MaxSize() + + + + + + + + + + 100664341 + System.Void ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::set_MaxSize(System.Int64) + + + + + + + + + + + + + + + + + + 100664342 + System.DateTime ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::get_MinDate() + + + + + + + + + + 100664343 + System.Void ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::set_MinDate(System.DateTime) + + + + + + + + + + + + + + + + 100664344 + System.DateTime ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::get_MaxDate() + + + + + + + + + + 100664345 + System.Void ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::set_MaxDate(System.DateTime) + + + + + + + + + + + + + + + + 100664334 + System.Void ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::.ctor(System.String,System.Int64,System.Int64) + + + + + + + + + + + + + + + + 100664335 + System.Void ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::.ctor(System.String,System.DateTime,System.DateTime) + + + + + + + + + + + + + + + + 100664336 + System.Void ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::.ctor(System.String,System.Int64,System.Int64,System.DateTime,System.DateTime) + + + + + + + + + + + + + + + + + + 100664337 + System.Boolean ICSharpCode.SharpZipLib.Core.ExtendedPathFilter::IsMatch(System.String) + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.NameAndSizeFilter + + + + 100664348 + System.Int64 ICSharpCode.SharpZipLib.Core.NameAndSizeFilter::get_MinSize() + + + + + + + + + + 100664349 + System.Void ICSharpCode.SharpZipLib.Core.NameAndSizeFilter::set_MinSize(System.Int64) + + + + + + + + + + + + + + + + + + 100664350 + System.Int64 ICSharpCode.SharpZipLib.Core.NameAndSizeFilter::get_MaxSize() + + + + + + + + + + 100664351 + System.Void ICSharpCode.SharpZipLib.Core.NameAndSizeFilter::set_MaxSize(System.Int64) + + + + + + + + + + + + + + + + + + 100664346 + System.Void ICSharpCode.SharpZipLib.Core.NameAndSizeFilter::.ctor(System.String,System.Int64,System.Int64) + + + + + + + + + + + + + + 100664347 + System.Boolean ICSharpCode.SharpZipLib.Core.NameAndSizeFilter::IsMatch(System.String) + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.StreamUtils + + + + 100664352 + System.Void ICSharpCode.SharpZipLib.Core.StreamUtils::ReadFully(System.IO.Stream,System.Byte[]) + + + + + + + + + + + 100664353 + System.Void ICSharpCode.SharpZipLib.Core.StreamUtils::ReadFully(System.IO.Stream,System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664354 + System.Void ICSharpCode.SharpZipLib.Core.StreamUtils::Copy(System.IO.Stream,System.IO.Stream,System.Byte[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664355 + System.Void ICSharpCode.SharpZipLib.Core.StreamUtils::Copy(System.IO.Stream,System.IO.Stream,System.Byte[],ICSharpCode.SharpZipLib.Core.ProgressHandler,System.TimeSpan,System.Object,System.String) + + + + + + + + + + + 100664356 + System.Void ICSharpCode.SharpZipLib.Core.StreamUtils::Copy(System.IO.Stream,System.IO.Stream,System.Byte[],ICSharpCode.SharpZipLib.Core.ProgressHandler,System.TimeSpan,System.Object,System.String,System.Int64) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664357 + System.Void ICSharpCode.SharpZipLib.Core.StreamUtils::.ctor() + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Core.WindowsPathUtils + + + + 100664358 + System.Void ICSharpCode.SharpZipLib.Core.WindowsPathUtils::.ctor() + + + + + + + + + + + 100664359 + System.String ICSharpCode.SharpZipLib.Core.WindowsPathUtils::DropPathRoot(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Checksums.Adler32 + + + + 100664360 + System.Int64 ICSharpCode.SharpZipLib.Checksums.Adler32::get_Value() + + + + + + + + + + 100664361 + System.Void ICSharpCode.SharpZipLib.Checksums.Adler32::.ctor() + + + + + + + + + + + + 100664362 + System.Void ICSharpCode.SharpZipLib.Checksums.Adler32::Reset() + + + + + + + + + + + 100664363 + System.Void ICSharpCode.SharpZipLib.Checksums.Adler32::Update(System.Int32) + + + + + + + + + + + + + + + 100664364 + System.Void ICSharpCode.SharpZipLib.Checksums.Adler32::Update(System.Byte[]) + + + + + + + + + + + + + + + + 100664365 + System.Void ICSharpCode.SharpZipLib.Checksums.Adler32::Update(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.Checksums.Crc32 + + + + 100664367 + System.Int64 ICSharpCode.SharpZipLib.Checksums.Crc32::get_Value() + + + + + + + + + + 100664368 + System.Void ICSharpCode.SharpZipLib.Checksums.Crc32::set_Value(System.Int64) + + + + + + + + + + + 100664366 + System.UInt32 ICSharpCode.SharpZipLib.Checksums.Crc32::ComputeCrc32(System.UInt32,System.Byte) + + + + + + + + + + 100664369 + System.Void ICSharpCode.SharpZipLib.Checksums.Crc32::Reset() + + + + + + + + + + + 100664370 + System.Void ICSharpCode.SharpZipLib.Checksums.Crc32::Update(System.Int32) + + + + + + + + + + + + + 100664371 + System.Void ICSharpCode.SharpZipLib.Checksums.Crc32::Update(System.Byte[]) + + + + + + + + + + + + + + + + 100664372 + System.Void ICSharpCode.SharpZipLib.Checksums.Crc32::Update(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664373 + System.Void ICSharpCode.SharpZipLib.Checksums.Crc32::.ctor() + + + + + + + 100664374 + System.Void ICSharpCode.SharpZipLib.Checksums.Crc32::.cctor() + + + + + + + + + + + + ICSharpCode.SharpZipLib.Checksums.StrangeCRC + + + + 100664382 + System.Int64 ICSharpCode.SharpZipLib.Checksums.StrangeCRC::get_Value() + + + + + + + + + + 100664380 + System.Void ICSharpCode.SharpZipLib.Checksums.StrangeCRC::.ctor() + + + + + + + + + + + + 100664381 + System.Void ICSharpCode.SharpZipLib.Checksums.StrangeCRC::Reset() + + + + + + + + + + + 100664383 + System.Void ICSharpCode.SharpZipLib.Checksums.StrangeCRC::Update(System.Int32) + + + + + + + + + + + + + + + + + 100664384 + System.Void ICSharpCode.SharpZipLib.Checksums.StrangeCRC::Update(System.Byte[]) + + + + + + + + + + + + + + + + 100664385 + System.Void ICSharpCode.SharpZipLib.Checksums.StrangeCRC::Update(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664386 + System.Void ICSharpCode.SharpZipLib.Checksums.StrangeCRC::.cctor() + + + + + + + + + + + + ICSharpCode.SharpZipLib.BZip2.BZip2 + + + + 100664387 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2::Decompress(System.IO.Stream,System.IO.Stream,System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + 100664388 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2::Compress(System.IO.Stream,System.IO.Stream,System.Boolean,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.BZip2.BZip2Constants + + + + 100664389 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2Constants::.ctor() + + + + + + + + + + + 100664390 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2Constants::.cctor() + + + + + + + + + + + + ICSharpCode.SharpZipLib.BZip2.BZip2Exception + + + + 100664391 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2Exception::.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) + + + + + + + + + + + 100664392 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2Exception::.ctor() + + + + + + + + + + + 100664393 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2Exception::.ctor(System.String) + + + + + + + + + + + 100664394 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2Exception::.ctor(System.String,System.Exception) + + + + + + + + + + + + + ICSharpCode.SharpZipLib.BZip2.BZip2InputStream + + + + 100664396 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::get_IsStreamOwner() + + + + + + + + + + 100664397 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100664398 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::get_CanRead() + + + + + + + + + + 100664399 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::get_CanSeek() + + + + + + + + + + 100664400 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::get_CanWrite() + + + + + + + + + + 100664401 + System.Int64 ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::get_Length() + + + + + + + + + + 100664402 + System.Int64 ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::get_Position() + + + + + + + + + + 100664403 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::set_Position(System.Int64) + + + + + + + + + + 100664395 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::.ctor(System.IO.Stream) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664404 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::Flush() + + + + + + + + + + + + + + + 100664405 + System.Int64 ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100664406 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetLength(System.Int64) + + + + + + + + + + 100664407 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100664408 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::WriteByte(System.Byte) + + + + + + + + + + 100664409 + System.Int32 ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + 100664410 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::Close() + + + + + + + + + + + + + + + + + 100664411 + System.Int32 ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::ReadByte() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664412 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::MakeMaps() + + + + + + + + + + + + + + + + + + + + + + + 100664413 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::Initialize() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664414 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::InitBlock() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664415 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::EndBlock() + + + + + + + + + + + + + + + + + + 100664416 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::Complete() + + + + + + + + + + + + + + + + + 100664417 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::BsSetStream(System.IO.Stream) + + + + + + + + + + + + + 100664418 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::FillBuffer() + + + + + + + + + + + + + + + + + + + + + + + 100664419 + System.Int32 ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::BsR(System.Int32) + + + + + + + + + + + + + + + + + 100664420 + System.Char ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::BsGetUChar() + + + + + + + + + + 100664421 + System.Int32 ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::BsGetIntVS(System.Int32) + + + + + + + + + + 100664422 + System.Int32 ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::BsGetInt32() + + + + + + + + + + + + + + 100664423 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::RecvDecodingTables() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664424 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::GetAndMoveToFrontDecode() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664425 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetupBlock() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664426 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetupRandPartA() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664427 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetupNoRandPartA() + + + + + + + + + + + + + + + + + + + + + + + + + 100664428 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetupRandPartB() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664429 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetupRandPartC() + + + + + + + + + + + + + + + + + + + + + + 100664430 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetupNoRandPartB() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664431 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetupNoRandPartC() + + + + + + + + + + + + + + + + + + + + + + 100664432 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::SetDecompressStructureSizes(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664433 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::CompressedStreamEOF() + + + + + + + + + + 100664434 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::BlockOverrun() + + + + + + + + + + 100664435 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::BadBlockHeader() + + + + + + + + + + 100664436 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::CrcError() + + + + + + + + + + 100664437 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2InputStream::HbCreateDecodeTables(System.Int32[],System.Int32[],System.Int32[],System.Char[],System.Int32,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream + + + + 100664441 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::get_IsStreamOwner() + + + + + + + + + + 100664442 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::set_IsStreamOwner(System.Boolean) + + + + + + + + + + + 100664443 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::get_CanRead() + + + + + + + + + + 100664444 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::get_CanSeek() + + + + + + + + + + 100664445 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::get_CanWrite() + + + + + + + + + + 100664446 + System.Int64 ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::get_Length() + + + + + + + + + + 100664447 + System.Int64 ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::get_Position() + + + + + + + + + + 100664448 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::set_Position(System.Int64) + + + + + + + + + + 100664458 + System.Int32 ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::get_BytesWritten() + + + + + + + + + + 100664438 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::.ctor(System.IO.Stream) + + + + + + + + + + + 100664439 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::.ctor(System.IO.Stream,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664440 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Finalize() + + + + + + + + + + + + 100664449 + System.Int64 ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Seek(System.Int64,System.IO.SeekOrigin) + + + + + + + + + + 100664450 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::SetLength(System.Int64) + + + + + + + + + + 100664451 + System.Int32 ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::ReadByte() + + + + + + + + + + 100664452 + System.Int32 ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Read(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + 100664453 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Write(System.Byte[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664454 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::WriteByte(System.Byte) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664455 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Close() + + + + + + + + + + + + 100664456 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::MakeMaps() + + + + + + + + + + + + + + + + + + + + + + + 100664457 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::WriteRun() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664459 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Dispose(System.Boolean) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664460 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Flush() + + + + + + + + + + + 100664461 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Initialize() + + + + + + + + + + + + + + + + + 100664462 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::InitBlock() + + + + + + + + + + + + + + + + + + + + 100664463 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::EndBlock() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664464 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::EndCompression() + + + + + + + + + + + + + + + + + + 100664465 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::BsSetStream(System.IO.Stream) + + + + + + + + + + + + + + 100664466 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::BsFinishedWithStream() + + + + + + + + + + + + + + + + + + + 100664467 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::BsW(System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + 100664468 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::BsPutUChar(System.Int32) + + + + + + + + + + + 100664469 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::BsPutint(System.Int32) + + + + + + + + + + + + + + 100664470 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::BsPutIntVS(System.Int32,System.Int32) + + + + + + + + + + + 100664471 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::SendMTFValues() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664472 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::MoveToFrontCodeAndSend() + + + + + + + + + + + + + 100664473 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::SimpleSort(System.Int32,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664474 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Vswap(System.Int32,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + 100664475 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::QSort3(System.Int32,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664476 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::MainSort() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664477 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::RandomiseBlock() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664478 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::DoReversibleTransformation() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664479 + System.Boolean ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::FullGtU(System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664480 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::AllocateCompressStructures() + + + + + + + + + + + + + + + + + + + + + + + + 100664481 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::GenerateMTFValues() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664482 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Panic() + + + + + + + + + + 100664483 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::HbMakeCodeLengths(System.Char[],System.Int32[],System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664484 + System.Void ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::HbAssignCodes(System.Int32[],System.Char[],System.Int32,System.Int32,System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100664485 + System.Byte ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream::Med3(System.Byte,System.Byte,System.Byte) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <PrivateImplementationDetails> + + + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll + 2015-10-30T07:19:34.0182785Z + System.Core + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll + 2016-01-23T02:45:41.3556585Z + System.Xml + + + + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_Adler32.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_Adler32.htm new file mode 100644 index 000000000..1e39316a0 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_Adler32.htm @@ -0,0 +1,283 @@ + + + + +ICSharpCode.SharpZipLib.Checksums.Adler32 - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Checksums.Adler32
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksums\Adler32.cs
Covered lines:25
Uncovered lines:15
Coverable lines:40
Total lines:237
Line coverage:62.5%
Branch coverage:61.1%
+

Metrics

+ + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
Reset()1100100
Update(...)100
Update(...)200
Update(...)979.1770.59
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksums\Adler32.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// Adler32.cs - Computes Adler32 data checksum of a data stream
 2// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 3//
 4// This file was translated from java, it was part of the GNU Classpath
 5// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
 6//
 7// This program is free software; you can redistribute it and/or
 8// modify it under the terms of the GNU General Public License
 9// as published by the Free Software Foundation; either version 2
 10// of the License, or (at your option) any later version.
 11//
 12// This program is distributed in the hope that it will be useful,
 13// but WITHOUT ANY WARRANTY; without even the implied warranty of
 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 15// GNU General Public License for more details.
 16//
 17// You should have received a copy of the GNU General Public License
 18// along with this program; if not, write to the Free Software
 19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 20//
 21// Linking this library statically or dynamically with other modules is
 22// making a combined work based on this library.  Thus, the terms and
 23// conditions of the GNU General Public License cover the whole
 24// combination.
 25//
 26// As a special exception, the copyright holders of this library give you
 27// permission to link this library with independent modules to produce an
 28// executable, regardless of the license terms of these independent
 29// modules, and to copy and distribute the resulting executable under
 30// terms of your choice, provided that you also meet, for each linked
 31// independent module, the terms and conditions of the license of that
 32// module.  An independent module is a module which is not derived from
 33// or based on this library.  If you modify this library, you may extend
 34// this exception to your version of the library, but you are not
 35// obligated to do so.  If you do not wish to do so, delete this
 36// exception statement from your version.
 37
 38using System;
 39
 40namespace ICSharpCode.SharpZipLib.Checksums
 41{
 42
 43  /// <summary>
 44  /// Computes Adler32 checksum for a stream of data. An Adler32
 45  /// checksum is not as reliable as a CRC32 checksum, but a lot faster to
 46  /// compute.
 47  ///
 48  /// The specification for Adler32 may be found in RFC 1950.
 49  /// ZLIB Compressed Data Format Specification version 3.3)
 50  ///
 51  ///
 52  /// From that document:
 53  ///
 54  ///      "ADLER32 (Adler-32 checksum)
 55  ///       This contains a checksum value of the uncompressed data
 56  ///       (excluding any dictionary data) computed according to Adler-32
 57  ///       algorithm. This algorithm is a 32-bit extension and improvement
 58  ///       of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073
 59  ///       standard.
 60  ///
 61  ///       Adler-32 is composed of two sums accumulated per byte: s1 is
 62  ///       the sum of all bytes, s2 is the sum of all s1 values. Both sums
 63  ///       are done modulo 65521. s1 is initialized to 1, s2 to zero.  The
 64  ///       Adler-32 checksum is stored as s2*65536 + s1 in most-
 65  ///       significant-byte first (network) order."
 66  ///
 67  ///  "8.2. The Adler-32 algorithm
 68  ///
 69  ///    The Adler-32 algorithm is much faster than the CRC32 algorithm yet
 70  ///    still provides an extremely low probability of undetected errors.
 71  ///
 72  ///    The modulo on unsigned long accumulators can be delayed for 5552
 73  ///    bytes, so the modulo operation time is negligible.  If the bytes
 74  ///    are a, b, c, the second sum is 3a + 2b + c + 3, and so is position
 75  ///    and order sensitive, unlike the first sum, which is just a
 76  ///    checksum.  That 65521 is prime is important to avoid a possible
 77  ///    large class of two-byte errors that leave the check unchanged.
 78  ///    (The Fletcher checksum uses 255, which is not prime and which also
 79  ///    makes the Fletcher check insensitive to single byte changes 0 -
 80  ///    255.)
 81  ///
 82  ///    The sum s1 is initialized to 1 instead of zero to make the length
 83  ///    of the sequence part of s2, so that the length does not have to be
 84  ///    checked separately. (Any sequence of zeroes has a Fletcher
 85  ///    checksum of zero.)"
 86  /// </summary>
 87  /// <see cref="ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream"/>
 88  /// <see cref="ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream"/>
 89  public sealed class Adler32 : IChecksum
 90  {
 91    /// <summary>
 92    /// largest prime smaller than 65536
 93    /// </summary>
 94    const uint BASE = 65521;
 95
 96    /// <summary>
 97    /// Returns the Adler32 data checksum computed so far.
 98    /// </summary>
 99    public long Value {
 100      get {
 15101        return checksum;
 102      }
 103    }
 104
 105    /// <summary>
 106    /// Creates a new instance of the Adler32 class.
 107    /// The checksum starts off with a value of 1.
 108    /// </summary>
 720109    public Adler32()
 110    {
 720111      Reset();
 720112    }
 113
 114    /// <summary>
 115    /// Resets the Adler32 checksum to the initial value.
 116    /// </summary>
 117    public void Reset()
 118    {
 1165119      checksum = 1;
 1165120    }
 121
 122    /// <summary>
 123    /// Updates the checksum with a byte value.
 124    /// </summary>
 125    /// <param name="value">
 126    /// The data value to add. The high byte of the int is ignored.
 127    /// </param>
 128    public void Update(int value)
 129    {
 130      // We could make a length 1 byte array and call update again, but I
 131      // would rather not have that overhead
 0132      uint s1 = checksum & 0xFFFF;
 0133      uint s2 = checksum >> 16;
 134
 0135      s1 = (s1 + ((uint)value & 0xFF)) % BASE;
 0136      s2 = (s1 + s2) % BASE;
 137
 0138      checksum = (s2 << 16) + s1;
 0139    }
 140
 141    /// <summary>
 142    /// Updates the checksum with an array of bytes.
 143    /// </summary>
 144    /// <param name="buffer">
 145    /// The source of the data to update with.
 146    /// </param>
 147    public void Update(byte[] buffer)
 148    {
 0149       if ( buffer == null ) {
 0150        throw new ArgumentNullException(nameof(buffer));
 151      }
 152
 0153      Update(buffer, 0, buffer.Length);
 0154    }
 155
 156    /// <summary>
 157    /// Updates the checksum with the bytes taken from the array.
 158    /// </summary>
 159    /// <param name="buffer">
 160    /// an array of bytes
 161    /// </param>
 162    /// <param name="offset">
 163    /// the start of the data used for this update
 164    /// </param>
 165    /// <param name="count">
 166    /// the number of bytes to use for this update
 167    /// </param>
 168    public void Update(byte[] buffer, int offset, int count)
 169    {
 6243170       if (buffer == null) {
 0171        throw new ArgumentNullException(nameof(buffer));
 172      }
 173
 6243174       if (offset < 0) {
 175#if NETCF_1_0
 176        throw new ArgumentOutOfRangeException("offset");
 177#else
 0178        throw new ArgumentOutOfRangeException(nameof(offset), "cannot be negative");
 179#endif
 180      }
 181
 6243182       if ( count < 0 )
 183      {
 184#if NETCF_1_0
 185        throw new ArgumentOutOfRangeException("count");
 186#else
 0187        throw new ArgumentOutOfRangeException(nameof(count), "cannot be negative");
 188#endif
 189      }
 190
 6243191       if (offset >= buffer.Length)
 192      {
 193#if NETCF_1_0
 194        throw new ArgumentOutOfRangeException("offset");
 195#else
 0196        throw new ArgumentOutOfRangeException(nameof(offset), "not a valid index into buffer");
 197#endif
 198      }
 199
 6243200       if (offset + count > buffer.Length)
 201      {
 202#if NETCF_1_0
 203        throw new ArgumentOutOfRangeException("count");
 204#else
 0205        throw new ArgumentOutOfRangeException(nameof(count), "exceeds buffer size");
 206#endif
 207      }
 208
 209      //(By Per Bothner)
 6243210      uint s1 = checksum & 0xFFFF;
 6243211      uint s2 = checksum >> 16;
 212
 14027213       while (count > 0) {
 214        // We can defer the modulo operation:
 215        // s1 maximally grows from 65521 to 65521 + 255 * 3800
 216        // s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31
 7784217        int n = 3800;
 7784218         if (n > count) {
 6243219          n = count;
 220        }
 7784221        count -= n;
 8556640222         while (--n >= 0) {
 8548856223          s1 = s1 + (uint)(buffer[offset++] & 0xff);
 8548856224          s2 = s2 + s1;
 225        }
 7784226        s1 %= BASE;
 7784227        s2 %= BASE;
 228      }
 229
 6243230      checksum = (s2 << 16) | s1;
 6243231    }
 232
 233    #region Instance Fields
 234    uint checksum;
 235    #endregion
 236  }
 237}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2.htm new file mode 100644 index 000000000..637b2ac46 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2.htm @@ -0,0 +1,148 @@ + + + + +ICSharpCode.SharpZipLib.BZip2.BZip2 - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.BZip2.BZip2
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2.cs
Covered lines:0
Uncovered lines:20
Coverable lines:20
Total lines:105
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
Decompress(...)500
Compress(...)500
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// BZip2.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36// Suppress this in CF and 1.1, not needed. Static classes introduced in C# version 2.0
 37#if !NETCF_2_0 && !NET_1_1
 38
 39using System;
 40using System.IO;
 41
 42namespace ICSharpCode.SharpZipLib.BZip2 {
 43
 44  /// <summary>
 45  /// An example class to demonstrate compression and decompression of BZip2 streams.
 46  /// </summary>
 47  public static class BZip2
 48  {
 49    /// <summary>
 50    /// Decompress the <paramref name="inStream">input</paramref> writing
 51    /// uncompressed data to the <paramref name="outStream">output stream</paramref>
 52    /// </summary>
 53    /// <param name="inStream">The readable stream containing data to decompress.</param>
 54    /// <param name="outStream">The output stream to receive the decompressed data.</param>
 55    /// <param name="isStreamOwner">Both streams are closed on completion if true.</param>
 56    public static void Decompress(Stream inStream, Stream outStream, bool isStreamOwner)
 57    {
 058       if (inStream == null || outStream == null) {
 059        throw new Exception("Null Stream");
 60      }
 61
 62      try {
 063        using (BZip2InputStream bzipInput = new BZip2InputStream(inStream)) {
 064          bzipInput.IsStreamOwner = isStreamOwner;
 065          Core.StreamUtils.Copy(bzipInput, outStream, new byte[4096]);
 066        }
 67      } finally {
 068         if (isStreamOwner) {
 69          // inStream is closed by the BZip2InputStream if stream owner
 070          outStream.Close();
 71        }
 072      }
 073    }
 74
 75    /// <summary>
 76    /// Compress the <paramref name="inStream">input stream</paramref> sending
 77    /// result data to <paramref name="outStream">output stream</paramref>
 78    /// </summary>
 79    /// <param name="inStream">The readable stream to compress.</param>
 80    /// <param name="outStream">The output stream to receive the compressed data.</param>
 81    /// <param name="isStreamOwner">Both streams are closed on completion if true.</param>
 82    /// <param name="level">Block size acts as compression level (1 to 9) with 1 giving
 83    /// the lowest compression and 9 the highest.</param>
 84    public static void Compress(Stream inStream, Stream outStream, bool isStreamOwner, int level)
 85    {
 086       if (inStream == null || outStream == null) {
 087        throw new Exception("Null Stream");
 88      }
 89
 90      try {
 091        using (BZip2OutputStream bzipOutput = new BZip2OutputStream(outStream, level)) {
 092          bzipOutput.IsStreamOwner = isStreamOwner;
 093          Core.StreamUtils.Copy(inStream, bzipOutput, new byte[4096]);
 094        }
 95      } finally {
 096         if (isStreamOwner) {
 97          // outStream is closed by the BZip2OutputStream if stream owner
 098          inStream.Close();
 99        }
 0100      }
 0101    }
 102
 103  }
 104}
 105#endif
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Constants.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Constants.htm new file mode 100644 index 000000000..a7d52f030 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Constants.htm @@ -0,0 +1,239 @@ + + + + +ICSharpCode.SharpZipLib.BZip2.BZip2Constants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.BZip2.BZip2Constants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2Constants.cs
Covered lines:0
Uncovered lines:56
Coverable lines:56
Total lines:197
Line coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
.cctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2Constants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// BZip2Constants.cs
 2// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 3//
 4// This program is free software; you can redistribute it and/or
 5// modify it under the terms of the GNU General Public License
 6// as published by the Free Software Foundation; either version 2
 7// of the License, or (at your option) any later version.
 8//
 9// This program is distributed in the hope that it will be useful,
 10// but WITHOUT ANY WARRANTY; without even the implied warranty of
 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 12// GNU General Public License for more details.
 13//
 14// You should have received a copy of the GNU General Public License
 15// along with this program; if not, write to the Free Software
 16// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 17//
 18// Linking this library statically or dynamically with other modules is
 19// making a combined work based on this library.  Thus, the terms and
 20// conditions of the GNU General Public License cover the whole
 21// combination.
 22//
 23// As a special exception, the copyright holders of this library give you
 24// permission to link this library with independent modules to produce an
 25// executable, regardless of the license terms of these independent
 26// modules, and to copy and distribute the resulting executable under
 27// terms of your choice, provided that you also meet, for each linked
 28// independent module, the terms and conditions of the license of that
 29// module.  An independent module is a module which is not derived from
 30// or based on this library.  If you modify this library, you may extend
 31// this exception to your version of the library, but you are not
 32// obligated to do so.  If you do not wish to do so, delete this
 33// exception statement from your version.
 34
 35namespace ICSharpCode.SharpZipLib.BZip2
 36{
 37
 38  /// <summary>
 39  /// Defines internal values for both compression and decompression
 40  /// </summary>
 41  internal sealed class BZip2Constants
 42  {
 43    /// <summary>
 44    /// Random numbers used to randomise repetitive blocks
 45    /// </summary>
 046    public readonly static int[] RandomNumbers = {
 047      619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
 048      985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
 049      733, 859, 335, 708, 621, 574,  73, 654, 730, 472,
 050      419, 436, 278, 496, 867, 210, 399, 680, 480,  51,
 051      878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
 052      862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
 053      150, 238,  59, 379, 684, 877, 625, 169, 643, 105,
 054      170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
 055       73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
 056      909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
 057      641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
 058      161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
 059      382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
 060       98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
 061      227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
 062      469,  68, 770, 919, 190, 373, 294, 822, 808, 206,
 063      184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
 064      715,  67, 618, 276, 204, 918, 873, 777, 604, 560,
 065      951, 160, 578, 722,  79, 804,  96, 409, 713, 940,
 066      652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
 067      645, 863, 803, 350, 139,  93, 354,  99, 820, 908,
 068      609, 772, 154, 274, 580, 184,  79, 626, 630, 742,
 069      653, 282, 762, 623, 680,  81, 927, 626, 789, 125,
 070      411, 521, 938, 300, 821,  78, 343, 175, 128, 250,
 071      170, 774, 972, 275, 999, 639, 495,  78, 352, 126,
 072      857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
 073      669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
 074      944, 375, 748,  52, 600, 747, 642, 182, 862,  81,
 075      344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
 076      897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
 077      433, 837, 553, 268, 926, 240, 102, 654, 459,  51,
 078      686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
 079      946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
 080      978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
 081      680, 879, 194, 572, 640, 724, 926,  56, 204, 700,
 082      707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
 083      297,  59,  87, 824, 713, 663, 412, 693, 342, 606,
 084      134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
 085      343,  97, 430, 751, 497, 314, 983, 374, 822, 928,
 086      140, 206,  73, 263, 980, 736, 876, 478, 430, 305,
 087      170, 514, 364, 692, 829,  82, 855, 953, 676, 246,
 088      369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
 089      804, 378, 215, 828, 592, 281, 565, 555, 710,  82,
 090      896, 831, 547, 261, 524, 462, 293, 465, 502,  56,
 091      661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
 092      768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
 093       61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
 094      372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
 095      780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
 096      920, 176, 193, 713, 857, 265, 203,  50, 668, 108,
 097      645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
 098      936, 638
 099    };
 100
 101    /// <summary>
 102    /// When multiplied by compression parameter (1-9) gives the block size for compression
 103    /// 9 gives the best compression but uses the most memory.
 104    /// </summary>
 105    public const int BaseBlockSize = 100000;
 106
 107    /// <summary>
 108    /// Backend constant
 109    /// </summary>
 110    public const int MaximumAlphaSize = 258;
 111
 112    /// <summary>
 113    /// Backend constant
 114    /// </summary>
 115    public const int MaximumCodeLength = 23;
 116
 117    /// <summary>
 118    /// Backend constant
 119    /// </summary>
 120    public const int RunA = 0;
 121
 122    /// <summary>
 123    /// Backend constant
 124    /// </summary>
 125    public const int RunB = 1;
 126
 127    /// <summary>
 128    /// Backend constant
 129    /// </summary>
 130    public const int GroupCount = 6;
 131
 132    /// <summary>
 133    /// Backend constant
 134    /// </summary>
 135    public const int GroupSize = 50;
 136
 137    /// <summary>
 138    /// Backend constant
 139    /// </summary>
 140    public const int NumberOfIterations = 4;
 141
 142    /// <summary>
 143    /// Backend constant
 144    /// </summary>
 145    public const int MaximumSelectors = (2 + (900000 / GroupSize));
 146
 147    /// <summary>
 148    /// Backend constant
 149    /// </summary>
 150    public const int OvershootBytes = 20;
 151
 0152    private BZip2Constants()
 153    {
 0154    }
 155  }
 156}
 157
 158/* This file was derived from a file containing this license:
 159 *
 160 * This file is a part of bzip2 and/or libbzip2, a program and
 161 * library for lossless, block-sorting data compression.
 162 *
 163 * Copyright (C) 1996-1998 Julian R Seward.  All rights reserved.
 164 *
 165 * Redistribution and use in source and binary forms, with or without
 166 * modification, are permitted provided that the following conditions
 167 * are met:
 168 *
 169 * 1. Redistributions of source code must retain the above copyright
 170 * notice, this list of conditions and the following disclaimer.
 171 *
 172 * 2. The origin of this software must not be misrepresented; you must
 173 * not claim that you wrote the original software.  If you use this
 174 * software in a product, an acknowledgment in the product
 175 * documentation would be appreciated but is not required.
 176 *
 177 * 3. Altered source versions must be plainly marked as such, and must
 178 * not be misrepresented as being the original software.
 179 *
 180 * 4. The name of the author may not be used to endorse or promote
 181 * products derived from this software without specific prior written
 182 * permission.
 183 *
 184 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
 185 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 186 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 187 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 188 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 189 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 190 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 191 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 192 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 193 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 194 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 195 *
 196 * Java version ported by Keiron Liddle, Aftex Software <keiron@aftexsw.com> 1999-2001
 197 */
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Exception.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Exception.htm new file mode 100644 index 000000000..594b7b55f --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Exception.htm @@ -0,0 +1,134 @@ + + + + +ICSharpCode.SharpZipLib.BZip2.BZip2Exception - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.BZip2.BZip2Exception
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2Exception.cs
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:90
Line coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2Exception.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// BZip2.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37
 38#if !NETCF_1_0 && !NETCF_2_0
 39using System.Runtime.Serialization;
 40#endif
 41
 42namespace ICSharpCode.SharpZipLib.BZip2
 43{
 44  /// <summary>
 45  /// BZip2Exception represents exceptions specific to Bzip2 algorithm
 46  /// </summary>
 47#if !NETCF_1_0 && !NETCF_2_0
 48  [Serializable]
 49#endif
 50  public class BZip2Exception : SharpZipBaseException
 51  {
 52
 53#if !NETCF_1_0 && !NETCF_2_0
 54    /// <summary>
 55    /// Deserialization constructor
 56    /// </summary>
 57    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 58    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 59    protected BZip2Exception(SerializationInfo info, StreamingContext context)
 060      : base(info, context)
 61
 62    {
 063    }
 64#endif
 65    /// <summary>
 66    /// Initialise a new instance of BZip2Exception.
 67    /// </summary>
 068    public BZip2Exception()
 69    {
 070    }
 71
 72    /// <summary>
 73    /// Initialise a new instance of BZip2Exception with its message set to message.
 74    /// </summary>
 75    /// <param name="message">The message describing the error.</param>
 076    public BZip2Exception(string message) : base(message)
 77    {
 078    }
 79
 80    /// <summary>
 81    /// Initialise an instance of BZip2Exception
 82    /// </summary>
 83    /// <param name="message">A message describing the error.</param>
 84    /// <param name="exception">The exception that is the cause of the current exception.</param>
 85    public BZip2Exception(string message, Exception exception)
 086      : base(message, exception)
 87    {
 088    }
 89  }
 90}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2InputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2InputStream.htm new file mode 100644 index 000000000..0a0182a94 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2InputStream.htm @@ -0,0 +1,1077 @@ + + + + +ICSharpCode.SharpZipLib.BZip2.BZip2InputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.BZip2.BZip2InputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2InputStream.cs
Covered lines:308
Uncovered lines:118
Coverable lines:426
Total lines:1001
Line coverage:72.3%
Branch coverage:65.2%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)2100100
Flush()200
Seek(...)100
SetLength(...)100
Write(...)100
WriteByte(...)100
Read(...)49085.71
Close()310060
ReadByte()758.3336.36
MakeMaps()310080
Initialize()68054.55
InitBlock()1384.2160
EndBlock()283.3366.67
Complete()28066.67
BsSetStream(...)1100100
FillBuffer()263.6466.67
BsR(...)2100100
BsGetUChar()1100100
BsGetIntVS(...)1100100
BsGetInt32()1100100
RecvDecodingTables()1894.6791.43
GetAndMoveToFrontDecode()2691.9276.47
SetupBlock()48485.71
SetupRandPartA()600
SetupNoRandPartA()2100100
SetupRandPartB()700
SetupRandPartC()200
SetupNoRandPartB()362.580
SetupNoRandPartC()200
SetDecompressStructureSizes(...)677.7854.55
CompressedStreamEOF()100
BlockOverrun()100
BadBlockHeader()100
CrcError()100
HbCreateDecodeTables(...)10100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2InputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// BZip2InputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38
 39using ICSharpCode.SharpZipLib.Checksums;
 40
 41namespace ICSharpCode.SharpZipLib.BZip2
 42{
 43
 44  /// <summary>
 45  /// An input stream that decompresses files in the BZip2 format
 46  /// </summary>
 47  public class BZip2InputStream : Stream
 48  {
 49    #region Constants
 50    const int START_BLOCK_STATE = 1;
 51    const int RAND_PART_A_STATE = 2;
 52    const int RAND_PART_B_STATE = 3;
 53    const int RAND_PART_C_STATE = 4;
 54    const int NO_RAND_PART_A_STATE = 5;
 55    const int NO_RAND_PART_B_STATE = 6;
 56    const int NO_RAND_PART_C_STATE = 7;
 57    #endregion
 58    #region Constructors
 59    /// <summary>
 60    /// Construct instance for reading from stream
 61    /// </summary>
 62    /// <param name="stream">Data source</param>
 263    public BZip2InputStream(Stream stream)
 64    {
 65      // init arrays
 2866       for (int i = 0; i < BZip2Constants.GroupCount; ++i)
 67      {
 1268        limit[i] = new int[BZip2Constants.MaximumAlphaSize];
 1269        baseArray[i]  = new int[BZip2Constants.MaximumAlphaSize];
 1270        perm[i]  = new int[BZip2Constants.MaximumAlphaSize];
 71      }
 72
 273      BsSetStream(stream);
 274      Initialize();
 275      InitBlock();
 276      SetupBlock();
 277    }
 78
 79    #endregion
 80
 81    /// <summary>
 82    /// Get/set flag indicating ownership of underlying stream.
 83    /// When the flag is true <see cref="Close"></see> will close the underlying stream also.
 84    /// </summary>
 85    public bool IsStreamOwner
 86    {
 287      get { return isStreamOwner; }
 088      set { isStreamOwner = value; }
 89    }
 90
 91
 92    #region Stream Overrides
 93    /// <summary>
 94    /// Gets a value indicating if the stream supports reading
 95    /// </summary>
 96    public override bool CanRead
 97    {
 98      get {
 099        return baseStream.CanRead;
 100      }
 101    }
 102
 103    /// <summary>
 104    /// Gets a value indicating whether the current stream supports seeking.
 105    /// </summary>
 106    public override bool CanSeek {
 107      get {
 0108        return baseStream.CanSeek;
 109      }
 110    }
 111
 112    /// <summary>
 113    /// Gets a value indicating whether the current stream supports writing.
 114    /// This property always returns false
 115    /// </summary>
 116    public override bool CanWrite {
 117      get {
 0118        return false;
 119      }
 120    }
 121
 122    /// <summary>
 123    /// Gets the length in bytes of the stream.
 124    /// </summary>
 125    public override long Length {
 126      get {
 0127        return baseStream.Length;
 128      }
 129    }
 130
 131    /// <summary>
 132    /// Gets or sets the streams position.
 133    /// Setting the position is not supported and will throw a NotSupportException
 134    /// </summary>
 135    /// <exception cref="NotSupportedException">Any attempt to set the position</exception>
 136    public override long Position {
 137      get {
 0138        return baseStream.Position;
 139      }
 140      set {
 0141        throw new NotSupportedException("BZip2InputStream position cannot be set");
 142      }
 143    }
 144
 145    /// <summary>
 146    /// Flushes the stream.
 147    /// </summary>
 148    public override void Flush()
 149    {
 0150       if (baseStream != null) {
 0151        baseStream.Flush();
 152      }
 0153    }
 154
 155    /// <summary>
 156    /// Set the streams position.  This operation is not supported and will throw a NotSupportedException
 157    /// </summary>
 158    /// <param name="offset">A byte offset relative to the <paramref name="origin"/> parameter.</param>
 159    /// <param name="origin">A value of type <see cref="SeekOrigin"/> indicating the reference point used to obtain the 
 160    /// <returns>The new position of the stream.</returns>
 161    /// <exception cref="NotSupportedException">Any access</exception>
 162    public override long Seek(long offset, SeekOrigin origin)
 163    {
 0164      throw new NotSupportedException("BZip2InputStream Seek not supported");
 165    }
 166
 167    /// <summary>
 168    /// Sets the length of this stream to the given value.
 169    /// This operation is not supported and will throw a NotSupportedExceptionortedException
 170    /// </summary>
 171    /// <param name="value">The new length for the stream.</param>
 172    /// <exception cref="NotSupportedException">Any access</exception>
 173    public override void SetLength(long value)
 174    {
 0175      throw new NotSupportedException("BZip2InputStream SetLength not supported");
 176    }
 177
 178    /// <summary>
 179    /// Writes a block of bytes to this stream using data from a buffer.
 180    /// This operation is not supported and will throw a NotSupportedException
 181    /// </summary>
 182    /// <param name="buffer">The buffer to source data from.</param>
 183    /// <param name="offset">The offset to start obtaining data from.</param>
 184    /// <param name="count">The number of bytes of data to write.</param>
 185    /// <exception cref="NotSupportedException">Any access</exception>
 186    public override void Write(byte[] buffer, int offset, int count)
 187    {
 0188      throw new NotSupportedException("BZip2InputStream Write not supported");
 189    }
 190
 191    /// <summary>
 192    /// Writes a byte to the current position in the file stream.
 193    /// This operation is not supported and will throw a NotSupportedException
 194    /// </summary>
 195    /// <param name="value">The value to write.</param>
 196    /// <exception cref="NotSupportedException">Any access</exception>
 197    public override void WriteByte(byte value)
 198    {
 0199      throw new NotSupportedException("BZip2InputStream WriteByte not supported");
 200    }
 201
 202    /// <summary>
 203    /// Read a sequence of bytes and advances the read position by one byte.
 204    /// </summary>
 205    /// <param name="buffer">Array of bytes to store values in</param>
 206    /// <param name="offset">Offset in array to begin storing data</param>
 207    /// <param name="count">The maximum number of bytes to read</param>
 208    /// <returns>The total number of bytes read into the buffer. This might be less
 209    /// than the number of bytes requested if that number of bytes are not
 210    /// currently available or zero if the end of the stream is reached.
 211    /// </returns>
 212    public override int Read(byte[] buffer, int offset, int count)
 213    {
 5214       if ( buffer == null )
 215      {
 0216        throw new ArgumentNullException(nameof(buffer));
 217      }
 218
 20010219       for (int i = 0; i < count; ++i) {
 10003220        int rb = ReadByte();
 10003221         if (rb == -1) {
 3222          return i;
 223        }
 10000224        buffer[offset + i] = (byte)rb;
 225      }
 2226      return count;
 227    }
 228
 229    /// <summary>
 230    /// Closes the stream, releasing any associated resources.
 231    /// </summary>
 232    public override void Close()
 233    {
 2234       if ( IsStreamOwner && (baseStream != null) ) {
 2235        baseStream.Close();
 236      }
 2237    }
 238    /// <summary>
 239    /// Read a byte from stream advancing position
 240    /// </summary>
 241    /// <returns>byte read or -1 on end of stream</returns>
 242    public override int ReadByte()
 243    {
 10003244       if (streamEnd)
 245      {
 3246        return -1; // ok
 247      }
 248
 10000249      int retChar = currentChar;
 10000250       switch (currentState)
 251      {
 252        case RAND_PART_B_STATE:
 0253          SetupRandPartB();
 0254          break;
 255        case RAND_PART_C_STATE:
 0256          SetupRandPartC();
 0257          break;
 258        case NO_RAND_PART_B_STATE:
 10000259          SetupNoRandPartB();
 10000260          break;
 261        case NO_RAND_PART_C_STATE:
 0262          SetupNoRandPartC();
 263          break;
 264        case START_BLOCK_STATE:
 265        case NO_RAND_PART_A_STATE:
 266        case RAND_PART_A_STATE:
 267          break;
 268      }
 10000269      return retChar;
 270    }
 271
 272    #endregion
 273
 274    void MakeMaps()
 275    {
 1276      nInUse = 0;
 514277       for (int i = 0; i < 256; ++i) {
 256278         if (inUse[i]) {
 256279          seqToUnseq[nInUse] = (byte)i;
 256280          unseqToSeq[i] = (byte)nInUse;
 256281          nInUse++;
 282        }
 283      }
 1284    }
 285
 286    void Initialize()
 287    {
 2288      char magic1 = BsGetUChar();
 2289      char magic2 = BsGetUChar();
 290
 2291      char magic3 = BsGetUChar();
 2292      char magic4 = BsGetUChar();
 293
 2294       if (magic1 != 'B' || magic2 != 'Z' || magic3 != 'h' || magic4 < '1' || magic4 > '9') {
 0295        streamEnd = true;
 0296        return;
 297      }
 298
 2299      SetDecompressStructureSizes(magic4 - '0');
 2300      computedCombinedCRC = 0;
 2301    }
 302
 303    void InitBlock()
 304    {
 3305      char magic1 = BsGetUChar();
 3306      char magic2 = BsGetUChar();
 3307      char magic3 = BsGetUChar();
 3308      char magic4 = BsGetUChar();
 3309      char magic5 = BsGetUChar();
 3310      char magic6 = BsGetUChar();
 311
 3312       if (magic1 == 0x17 && magic2 == 0x72 && magic3 == 0x45 && magic4 == 0x38 && magic5 == 0x50 && magic6 == 0x90) {
 2313        Complete();
 2314        return;
 315      }
 316
 1317       if (magic1 != 0x31 || magic2 != 0x41 || magic3 != 0x59 || magic4 != 0x26 || magic5 != 0x53 || magic6 != 0x59) {
 0318        BadBlockHeader();
 0319        streamEnd = true;
 0320        return;
 321      }
 322
 1323      storedBlockCRC  = BsGetInt32();
 324
 1325      blockRandomised = (BsR(1) == 1);
 326
 1327      GetAndMoveToFrontDecode();
 328
 1329      mCrc.Reset();
 1330      currentState = START_BLOCK_STATE;
 1331    }
 332
 333    void EndBlock()
 334    {
 1335      computedBlockCRC = (int)mCrc.Value;
 336
 337      // -- A bad CRC is considered a fatal error. --
 1338       if (storedBlockCRC != computedBlockCRC) {
 0339        CrcError();
 340      }
 341
 342      // 1528150659
 1343      computedCombinedCRC = ((computedCombinedCRC << 1) & 0xFFFFFFFF) | (computedCombinedCRC >> 31);
 1344      computedCombinedCRC = computedCombinedCRC ^ (uint)computedBlockCRC;
 1345    }
 346
 347    void Complete()
 348    {
 2349      storedCombinedCRC = BsGetInt32();
 2350       if (storedCombinedCRC != (int)computedCombinedCRC) {
 0351        CrcError();
 352      }
 353
 2354      streamEnd = true;
 2355    }
 356
 357    void BsSetStream(Stream stream)
 358    {
 2359      baseStream = stream;
 2360      bsLive = 0;
 2361      bsBuff = 0;
 2362    }
 363
 364    void FillBuffer()
 365    {
 10531366      int thech = 0;
 367
 368      try {
 10531369        thech = baseStream.ReadByte();
 10531370      } catch (Exception) {
 0371        CompressedStreamEOF();
 0372      }
 373
 10531374       if (thech == -1) {
 0375        CompressedStreamEOF();
 376      }
 377
 10531378      bsBuff = (bsBuff << 8) | (thech & 0xFF);
 10531379      bsLive += 8;
 10531380    }
 381
 382    int BsR(int n)
 383    {
 24370384       while (bsLive < n) {
 9182385        FillBuffer();
 386      }
 387
 15188388      int v = (bsBuff >> (bsLive - n)) & ((1 << n) - 1);
 15188389      bsLive -= n;
 15188390      return v;
 391    }
 392
 393    char BsGetUChar()
 394    {
 26395      return (char)BsR(8);
 396    }
 397
 398    int BsGetIntVS(int numBits)
 399    {
 1400      return BsR(numBits);
 401    }
 402
 403    int BsGetInt32()
 404    {
 3405      int result = BsR(8);
 3406      result = (result << 8) | BsR(8);
 3407      result = (result << 8) | BsR(8);
 3408      result = (result << 8) | BsR(8);
 3409      return result;
 410    }
 411
 412    void RecvDecodingTables()
 413    {
 1414      char[][] len = new char[BZip2Constants.GroupCount][];
 14415       for (int i = 0; i < BZip2Constants.GroupCount; ++i) {
 6416        len[i] = new char[BZip2Constants.MaximumAlphaSize];
 417      }
 418
 1419      bool[] inUse16 = new bool[16];
 420
 421      //--- Receive the mapping table ---
 34422       for (int i = 0; i < 16; i++) {
 16423        inUse16[i] = (BsR(1) == 1);
 424      }
 425
 34426       for (int i = 0; i < 16; i++) {
 16427         if (inUse16[i]) {
 544428           for (int j = 0; j < 16; j++) {
 256429            inUse[i * 16 + j] = (BsR(1) == 1);
 430          }
 16431        } else {
 0432           for (int j = 0; j < 16; j++) {
 0433            inUse[i * 16 + j] = false;
 434          }
 435        }
 436      }
 437
 1438      MakeMaps();
 1439      int alphaSize = nInUse + 2;
 440
 441      //--- Now the selectors ---
 1442      int nGroups    = BsR(3);
 1443      int nSelectors = BsR(15);
 444
 404445       for (int i = 0; i < nSelectors; i++) {
 201446        int j = 0;
 729447         while (BsR(1) == 1) {
 528448          j++;
 449        }
 201450        selectorMtf[i] = (byte)j;
 451      }
 452
 453      //--- Undo the MTF values for the selectors. ---
 1454      byte[] pos = new byte[BZip2Constants.GroupCount];
 14455       for (int v = 0; v < nGroups; v++) {
 6456        pos[v] = (byte)v;
 457      }
 458
 404459       for (int i = 0; i < nSelectors; i++) {
 201460        int  v   = selectorMtf[i];
 201461        byte tmp = pos[v];
 729462         while (v > 0) {
 528463          pos[v] = pos[v - 1];
 528464          v--;
 465        }
 201466        pos[0]      = tmp;
 201467        selector[i] = tmp;
 468      }
 469
 470      //--- Now the coding tables ---
 14471       for (int t = 0; t < nGroups; t++) {
 6472        int curr = BsR(5);
 3108473         for (int i = 0; i < alphaSize; i++) {
 2843474           while (BsR(1) == 1) {
 1295475             if (BsR(1) == 0) {
 654476              curr++;
 654477            } else {
 641478              curr--;
 479            }
 480          }
 1548481          len[t][i] = (char)curr;
 482        }
 483      }
 484
 485      //--- Create the Huffman decoding tables ---
 14486       for (int t = 0; t < nGroups; t++) {
 6487        int minLen = 32;
 6488        int maxLen = 0;
 3108489         for (int i = 0; i < alphaSize; i++) {
 1548490          maxLen = Math.Max(maxLen, len[t][i]);
 1548491          minLen = Math.Min(minLen, len[t][i]);
 492        }
 6493        HbCreateDecodeTables(limit[t], baseArray[t], perm[t], len[t], minLen, maxLen, alphaSize);
 6494        minLens[t] = minLen;
 495      }
 1496    }
 497
 498    void GetAndMoveToFrontDecode()
 499    {
 1500      byte[] yy = new byte[256];
 501      int nextSym;
 502
 1503      int limitLast = BZip2Constants.BaseBlockSize * blockSize100k;
 1504      origPtr = BsGetIntVS(24);
 505
 1506      RecvDecodingTables();
 1507      int EOB = nInUse+1;
 1508      int groupNo = -1;
 1509      int groupPos = 0;
 510
 511      /*--
 512      Setting up the unzftab entries here is not strictly
 513      necessary, but it does save having to do it later
 514      in a separate pass, and so saves a block's worth of
 515      cache misses.
 516      --*/
 514517       for (int i = 0; i <= 255; i++) {
 256518        unzftab[i] = 0;
 519      }
 520
 514521       for (int i = 0; i <= 255; i++) {
 256522        yy[i] = (byte)i;
 523      }
 524
 1525      last = -1;
 526
 1527       if (groupPos == 0) {
 1528        groupNo++;
 1529        groupPos = BZip2Constants.GroupSize;
 530      }
 531
 1532      groupPos--;
 1533      int zt = selector[groupNo];
 1534      int zn = minLens[zt];
 1535      int zvec = BsR(zn);
 536      int zj;
 537
 2538       while (zvec > limit[zt][zn]) {
 1539         if (zn > 20) { // the longest code
 0540          throw new BZip2Exception("Bzip data error");
 541        }
 1542        zn++;
 1543         while (bsLive < 1) {
 0544          FillBuffer();
 545        }
 1546        zj = (bsBuff >> (bsLive-1)) & 1;
 1547        bsLive--;
 1548        zvec = (zvec << 1) | zj;
 549      }
 1550       if (zvec - baseArray[zt][zn] < 0 || zvec - baseArray[zt][zn] >= BZip2Constants.MaximumAlphaSize) {
 0551        throw new BZip2Exception("Bzip data error");
 552      }
 1553      nextSym = perm[zt][zvec - baseArray[zt][zn]];
 554
 555      while (true) {
 10001556         if (nextSym == EOB) {
 557          break;
 558        }
 559
 10000560         if (nextSym == BZip2Constants.RunA || nextSym == BZip2Constants.RunB) {
 39561          int s = -1;
 39562          int n = 1;
 563          do {
 39564             if (nextSym == BZip2Constants.RunA) {
 39565              s += (0 + 1) * n;
 39566             } else if (nextSym == BZip2Constants.RunB) {
 0567              s += (1 + 1) * n;
 568            }
 569
 39570            n <<= 1;
 571
 39572             if (groupPos == 0) {
 1573              groupNo++;
 1574              groupPos = BZip2Constants.GroupSize;
 575            }
 576
 39577            groupPos--;
 578
 39579            zt = selector[groupNo];
 39580            zn = minLens[zt];
 39581            zvec = BsR(zn);
 582
 86583             while (zvec > limit[zt][zn]) {
 47584              zn++;
 51585               while (bsLive < 1) {
 4586                FillBuffer();
 587              }
 47588              zj = (bsBuff >> (bsLive - 1)) & 1;
 47589              bsLive--;
 47590              zvec = (zvec << 1) | zj;
 591            }
 39592            nextSym = perm[zt][zvec - baseArray[zt][zn]];
 39593           } while (nextSym == BZip2Constants.RunA || nextSym == BZip2Constants.RunB);
 594
 39595          s++;
 39596          byte ch = seqToUnseq[yy[0]];
 39597          unzftab[ch] += s;
 598
 78599           while (s > 0) {
 39600            last++;
 39601            ll8[last] = ch;
 39602            s--;
 603          }
 604
 39605           if (last >= limitLast) {
 0606            BlockOverrun();
 607          }
 0608          continue;
 609        } else {
 9961610          last++;
 9961611           if (last >= limitLast) {
 0612            BlockOverrun();
 613          }
 614
 9961615          byte tmp = yy[nextSym - 1];
 9961616          unzftab[seqToUnseq[tmp]]++;
 9961617          ll8[last] = seqToUnseq[tmp];
 618
 2585304619           for (int j = nextSym-1; j > 0; --j) {
 1282691620            yy[j] = yy[j - 1];
 621          }
 9961622          yy[0] = tmp;
 623
 9961624           if (groupPos == 0) {
 199625            groupNo++;
 199626            groupPos = BZip2Constants.GroupSize;
 627          }
 628
 9961629          groupPos--;
 9961630          zt = selector[groupNo];
 9961631          zn = minLens[zt];
 9961632          zvec = BsR(zn);
 20183633           while (zvec > limit[zt][zn]) {
 10222634            zn++;
 11567635             while (bsLive < 1) {
 1345636              FillBuffer();
 637            }
 10222638            zj = (bsBuff >> (bsLive-1)) & 1;
 10222639            bsLive--;
 10222640            zvec = (zvec << 1) | zj;
 641          }
 9961642          nextSym = perm[zt][zvec - baseArray[zt][zn]];
 9961643          continue;
 644        }
 645      }
 1646    }
 647
 648    void SetupBlock()
 649    {
 3650      int[] cftab = new int[257];
 651
 3652      cftab[0] = 0;
 3653      Array.Copy(unzftab, 0, cftab, 1, 256);
 654
 1542655       for (int i = 1; i <= 256; i++) {
 768656        cftab[i] += cftab[i - 1];
 657      }
 658
 40008659       for (int i = 0; i <= last; i++) {
 20001660        byte ch = ll8[i];
 20001661        tt[cftab[ch]] = i;
 20001662        cftab[ch]++;
 663      }
 664
 3665      cftab = null;
 666
 3667      tPos = tt[origPtr];
 668
 3669      count = 0;
 3670      i2    = 0;
 3671      ch2   = 256;   /*-- not a char and not EOF --*/
 672
 3673       if (blockRandomised) {
 0674        rNToGo = 0;
 0675        rTPos = 0;
 0676        SetupRandPartA();
 0677      } else {
 3678        SetupNoRandPartA();
 679      }
 3680    }
 681
 682    void SetupRandPartA()
 683    {
 0684       if (i2 <= last) {
 0685        chPrev = ch2;
 0686        ch2  = ll8[tPos];
 0687        tPos = tt[tPos];
 0688         if (rNToGo == 0) {
 0689          rNToGo = BZip2Constants.RandomNumbers[rTPos];
 0690          rTPos++;
 0691           if (rTPos == 512) {
 0692            rTPos = 0;
 693          }
 694        }
 0695        rNToGo--;
 0696         ch2 ^= (int)((rNToGo == 1) ? 1 : 0);
 0697        i2++;
 698
 0699        currentChar  = ch2;
 0700        currentState = RAND_PART_B_STATE;
 0701        mCrc.Update(ch2);
 0702      } else {
 0703        EndBlock();
 0704        InitBlock();
 0705        SetupBlock();
 706      }
 0707    }
 708
 709    void SetupNoRandPartA()
 710    {
 10003711       if (i2 <= last) {
 10002712        chPrev = ch2;
 10002713        ch2  = ll8[tPos];
 10002714        tPos = tt[tPos];
 10002715        i2++;
 716
 10002717        currentChar = ch2;
 10002718        currentState = NO_RAND_PART_B_STATE;
 10002719        mCrc.Update(ch2);
 10002720      } else {
 1721        EndBlock();
 1722        InitBlock();
 1723        SetupBlock();
 724      }
 1725    }
 726
 727    void SetupRandPartB()
 728    {
 0729       if (ch2 != chPrev) {
 0730        currentState = RAND_PART_A_STATE;
 0731        count = 1;
 0732        SetupRandPartA();
 0733      } else {
 0734        count++;
 0735         if (count >= 4) {
 0736          z = ll8[tPos];
 0737          tPos = tt[tPos];
 0738           if (rNToGo == 0) {
 0739            rNToGo = BZip2Constants.RandomNumbers[rTPos];
 0740            rTPos++;
 0741             if (rTPos == 512) {
 0742              rTPos = 0;
 743            }
 744          }
 0745          rNToGo--;
 0746           z ^= (byte)((rNToGo == 1) ? 1 : 0);
 0747          j2 = 0;
 0748          currentState = RAND_PART_C_STATE;
 0749          SetupRandPartC();
 0750        } else {
 0751          currentState = RAND_PART_A_STATE;
 0752          SetupRandPartA();
 753        }
 754      }
 0755    }
 756
 757    void SetupRandPartC()
 758    {
 0759       if (j2 < (int)z) {
 0760        currentChar = ch2;
 0761        mCrc.Update(ch2);
 0762        j2++;
 0763      } else {
 0764        currentState = RAND_PART_A_STATE;
 0765        i2++;
 0766        count = 0;
 0767        SetupRandPartA();
 768      }
 0769    }
 770
 771    void SetupNoRandPartB()
 772    {
 10000773       if (ch2 != chPrev) {
 9962774        currentState = NO_RAND_PART_A_STATE;
 9962775        count = 1;
 9962776        SetupNoRandPartA();
 9962777      } else {
 38778        count++;
 38779         if (count >= 4) {
 0780          z = ll8[tPos];
 0781          tPos = tt[tPos];
 0782          currentState = NO_RAND_PART_C_STATE;
 0783          j2 = 0;
 0784          SetupNoRandPartC();
 0785        } else {
 38786          currentState = NO_RAND_PART_A_STATE;
 38787          SetupNoRandPartA();
 788        }
 789      }
 38790    }
 791
 792    void SetupNoRandPartC()
 793    {
 0794       if (j2 < (int)z) {
 0795        currentChar = ch2;
 0796        mCrc.Update(ch2);
 0797        j2++;
 0798      } else {
 0799        currentState = NO_RAND_PART_A_STATE;
 0800        i2++;
 0801        count = 0;
 0802        SetupNoRandPartA();
 803      }
 0804    }
 805
 806    void SetDecompressStructureSizes(int newSize100k)
 807    {
 2808       if (!(0 <= newSize100k && newSize100k <= 9 && 0 <= blockSize100k && blockSize100k <= 9)) {
 0809        throw new BZip2Exception("Invalid block size");
 810      }
 811
 2812      blockSize100k = newSize100k;
 813
 2814       if (newSize100k == 0) {
 0815        return;
 816      }
 817
 2818      int n = BZip2Constants.BaseBlockSize * newSize100k;
 2819      ll8 = new byte[n];
 2820      tt  = new int[n];
 2821    }
 822
 823    static void CompressedStreamEOF()
 824    {
 0825      throw new EndOfStreamException("BZip2 input stream end of compressed stream");
 826    }
 827
 828    static void BlockOverrun()
 829    {
 0830      throw new BZip2Exception("BZip2 input stream block overrun");
 831    }
 832
 833    static void BadBlockHeader()
 834    {
 0835      throw new BZip2Exception("BZip2 input stream bad block header");
 836    }
 837
 838    static void CrcError()
 839    {
 0840      throw new BZip2Exception("BZip2 input stream crc error");
 841    }
 842
 843    static void HbCreateDecodeTables(int[] limit, int[] baseArray, int[] perm, char[] length, int minLen, int maxLen, in
 844    {
 6845      int pp = 0;
 846
 72847       for (int i = minLen; i <= maxLen; ++i)
 848      {
 15540849         for (int j = 0; j < alphaSize; ++j)
 850        {
 7740851           if (length[j] == i)
 852          {
 1548853            perm[pp] = j;
 1548854            ++pp;
 855          }
 856        }
 857      }
 858
 288859       for (int i = 0; i < BZip2Constants.MaximumCodeLength; i++)
 860      {
 138861        baseArray[i] = 0;
 862      }
 863
 3108864       for (int i = 0; i < alphaSize; i++)
 865      {
 1548866        ++baseArray[length[i] + 1];
 867      }
 868
 276869       for (int i = 1; i < BZip2Constants.MaximumCodeLength; i++)
 870      {
 132871        baseArray[i] += baseArray[i - 1];
 872      }
 873
 288874       for (int i = 0; i < BZip2Constants.MaximumCodeLength; i++)
 875      {
 138876        limit[i] = 0;
 877      }
 878
 6879      int vec = 0;
 880
 72881       for (int i = minLen; i <= maxLen; i++)
 882      {
 30883        vec += (baseArray[i + 1] - baseArray[i]);
 30884        limit[i] = vec - 1;
 30885        vec <<= 1;
 886      }
 887
 60888       for (int i = minLen + 1; i <= maxLen; i++)
 889      {
 24890        baseArray[i] = ((limit[i - 1] + 1) << 1) - baseArray[i];
 891      }
 6892    }
 893
 894    #region Instance Fields
 895    /*--
 896    index of the last char in the block, so
 897    the block size == last + 1.
 898    --*/
 899    int last;
 900
 901    /*--
 902    index in zptr[] of original string after sorting.
 903    --*/
 904    int origPtr;
 905
 906    /*--
 907    always: in the range 0 .. 9.
 908    The current block size is 100000 * this number.
 909    --*/
 910    int blockSize100k;
 911
 912    bool blockRandomised;
 913
 914    int bsBuff;
 915    int bsLive;
 2916    IChecksum mCrc = new StrangeCRC();
 917
 2918    bool[] inUse = new bool[256];
 919    int    nInUse;
 920
 2921    byte[] seqToUnseq = new byte[256];
 2922    byte[] unseqToSeq = new byte[256];
 923
 2924    byte[] selector    = new byte[BZip2Constants.MaximumSelectors];
 2925    byte[] selectorMtf = new byte[BZip2Constants.MaximumSelectors];
 926
 927    int[] tt;
 928    byte[] ll8;
 929
 930    /*--
 931    freq table collected to save a pass over the data
 932    during decompression.
 933    --*/
 2934    int[] unzftab = new int[256];
 935
 2936    int[][] limit     = new int[BZip2Constants.GroupCount][];
 2937    int[][] baseArray = new int[BZip2Constants.GroupCount][];
 2938    int[][] perm      = new int[BZip2Constants.GroupCount][];
 2939    int[] minLens     = new int[BZip2Constants.GroupCount];
 940
 941    Stream baseStream;
 942    bool   streamEnd;
 943
 2944    int currentChar = -1;
 945
 2946    int currentState = START_BLOCK_STATE;
 947
 948    int storedBlockCRC, storedCombinedCRC;
 949    int computedBlockCRC;
 950    uint computedCombinedCRC;
 951
 952    int count, chPrev, ch2;
 953    int tPos;
 954    int rNToGo;
 955    int rTPos;
 956    int i2, j2;
 957    byte z;
 2958    bool isStreamOwner = true;
 959    #endregion
 960  }
 961}
 962/* This file was derived from a file containing this license:
 963 *
 964 * This file is a part of bzip2 and/or libbzip2, a program and
 965 * library for lossless, block-sorting data compression.
 966 *
 967 * Copyright (C) 1996-1998 Julian R Seward.  All rights reserved.
 968 *
 969 * Redistribution and use in source and binary forms, with or without
 970 * modification, are permitted provided that the following conditions
 971 * are met:
 972 *
 973 * 1. Redistributions of source code must retain the above copyright
 974 * notice, this list of conditions and the following disclaimer.
 975 *
 976 * 2. The origin of this software must not be misrepresented; you must
 977 * not claim that you wrote the original software.  If you use this
 978 * software in a product, an acknowledgment in the product
 979 * documentation would be appreciated but is not required.
 980 *
 981 * 3. Altered source versions must be plainly marked as such, and must
 982 * not be misrepresented as being the original software.
 983 *
 984 * 4. The name of the author may not be used to endorse or promote
 985 * products derived from this software without specific prior written
 986 * permission.
 987 *
 988 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
 989 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 990 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 991 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 992 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 993 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 994 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 995 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 996 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 997 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 998 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 999 *
 1000 * Java version ported by Keiron Liddle, Aftex Software <keiron@aftexsw.com> 1999-2001
 1001 */
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2OutputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2OutputStream.htm new file mode 100644 index 000000000..60c0f8e12 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2OutputStream.htm @@ -0,0 +1,1993 @@ + + + + +ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2OutputStream.cs
Covered lines:616
Uncovered lines:285
Coverable lines:901
Total lines:1913
Line coverage:68.3%
Branch coverage:66.2%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)390.9160
Finalize()100
Seek(...)100
SetLength(...)100
ReadByte()100
Read(...)100
Write(...)669.2363.64
WriteByte(...)47585.71
Close()1100100
MakeMaps()310080
WriteRun()757.8977.78
Dispose(...)510066.67
Flush()1100100
Initialize()1100100
InitBlock()2100100
EndBlock()38580
EndCompression()1100100
BsSetStream(...)1100100
BsFinishedWithStream()2100100
BsW(...)2100100
BsPutUChar(...)1100100
BsPutint(...)1100100
BsPutIntVS(...)1100100
SendMTFValues()6790.3684.21
MoveToFrontCodeAndSend()1100100
SimpleSort(...)1573.1758.62
Vswap(...)200
QSort3(...)1721.0527.59
MainSort()3290.9888.52
RandomiseBlock()700
DoReversibleTransformation()671.4363.64
FullGtU(...)1811.4911.43
AllocateCompressStructures()410057.14
GenerateMTFValues()1473.0259.26
Panic()100
HbMakeCodeLengths(...)2390.1187.18
HbAssignCodes(...)4100100
Med3(...)400
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2OutputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// BZip2OutputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38
 39using ICSharpCode.SharpZipLib.Checksums;
 40
 41namespace ICSharpCode.SharpZipLib.BZip2
 42{
 43
 44  // TODO: Update to BZip2 1.0.1, 1.0.2
 45
 46  /// <summary>
 47  /// An output stream that compresses into the BZip2 format
 48  /// including file header chars into another stream.
 49  /// </summary>
 50  public class BZip2OutputStream : Stream
 51  {
 52    #region Constants
 53    const int SETMASK       = (1 << 21);
 54    const int CLEARMASK     = (~SETMASK);
 55    const int GREATER_ICOST = 15;
 56    const int LESSER_ICOST = 0;
 57    const int SMALL_THRESH = 20;
 58    const int DEPTH_THRESH = 10;
 59
 60    /*--
 61    If you are ever unlucky/improbable enough
 62    to get a stack overflow whilst sorting,
 63    increase the following constant and try
 64    again.  In practice I have never seen the
 65    stack go above 27 elems, so the following
 66    limit seems very generous.
 67    --*/
 68    const int QSORT_STACK_SIZE = 1000;
 69
 70    /*--
 71    Knuth's increments seem to work better
 72    than Incerpi-Sedgewick here.  Possibly
 73    because the number of elems to sort is
 74    usually small, typically <= 20.
 75    --*/
 276    readonly int[] increments = {
 277                          1, 4, 13, 40, 121, 364, 1093, 3280,
 278                          9841, 29524, 88573, 265720,
 279                          797161, 2391484
 280                        };
 81    #endregion
 82
 83    #region Constructors
 84    /// <summary>
 85    /// Construct a default output stream with maximum block size
 86    /// </summary>
 87    /// <param name="stream">The stream to write BZip data onto.</param>
 288    public BZip2OutputStream(Stream stream) : this(stream, 9)
 89    {
 290    }
 91
 92    /// <summary>
 93    /// Initialise a new instance of the <see cref="BZip2OutputStream"></see>
 94    /// for the specified stream, using the given blocksize.
 95    /// </summary>
 96    /// <param name="stream">The stream to write compressed data to.</param>
 97    /// <param name="blockSize">The block size to use.</param>
 98    /// <remarks>
 99    /// Valid block sizes are in the range 1..9, with 1 giving
 100    /// the lowest compression and 9 the highest.
 101    /// </remarks>
 2102    public BZip2OutputStream(Stream stream, int blockSize)
 103    {
 2104      BsSetStream(stream);
 105
 2106      workFactor = 50;
 2107       if (blockSize > 9) {
 0108        blockSize = 9;
 109      }
 110
 2111       if (blockSize < 1) {
 0112        blockSize = 1;
 113      }
 2114      blockSize100k = blockSize;
 2115      AllocateCompressStructures();
 2116      Initialize();
 2117      InitBlock();
 2118    }
 119    #endregion
 120
 121    #region Destructor
 122    /// <summary>
 123    /// Ensures that resources are freed and other cleanup operations
 124    /// are performed when the garbage collector reclaims the BZip2OutputStream.
 125    /// </summary>
 126    ~BZip2OutputStream()
 127    {
 0128      Dispose(false);
 0129    }
 130    #endregion
 131
 132    /// <summary>
 133    /// Get/set flag indicating ownership of underlying stream.
 134    /// When the flag is true <see cref="Close"></see> will close the underlying stream also.
 135    /// </summary>
 136    public bool IsStreamOwner
 137    {
 2138      get { return isStreamOwner; }
 0139      set { isStreamOwner = value; }
 140    }
 141
 142
 143    #region Stream overrides
 144    /// <summary>
 145    /// Gets a value indicating whether the current stream supports reading
 146    /// </summary>
 147    public override bool CanRead
 148    {
 149      get {
 0150        return false;
 151      }
 152    }
 153
 154    /// <summary>
 155    /// Gets a value indicating whether the current stream supports seeking
 156    /// </summary>
 157    public override bool CanSeek {
 158      get {
 0159        return false;
 160      }
 161    }
 162
 163    /// <summary>
 164    /// Gets a value indicating whether the current stream supports writing
 165    /// </summary>
 166    public override bool CanWrite {
 167      get {
 0168        return baseStream.CanWrite;
 169      }
 170    }
 171
 172    /// <summary>
 173    /// Gets the length in bytes of the stream
 174    /// </summary>
 175    public override long Length {
 176      get {
 0177        return baseStream.Length;
 178      }
 179    }
 180
 181    /// <summary>
 182    /// Gets or sets the current position of this stream.
 183    /// </summary>
 184    public override long Position {
 185      get {
 0186        return baseStream.Position;
 187      }
 188      set {
 0189        throw new NotSupportedException("BZip2OutputStream position cannot be set");
 190      }
 191    }
 192
 193    /// <summary>
 194    /// Sets the current position of this stream to the given value.
 195    /// </summary>
 196    /// <param name="offset">The point relative to the offset from which to being seeking.</param>
 197    /// <param name="origin">The reference point from which to begin seeking.</param>
 198    /// <returns>The new position in the stream.</returns>
 199    public override long Seek(long offset, SeekOrigin origin)
 200    {
 0201      throw new NotSupportedException("BZip2OutputStream Seek not supported");
 202    }
 203
 204    /// <summary>
 205    /// Sets the length of this stream to the given value.
 206    /// </summary>
 207    /// <param name="value">The new stream length.</param>
 208    public override void SetLength(long value)
 209    {
 0210      throw new NotSupportedException("BZip2OutputStream SetLength not supported");
 211    }
 212
 213    /// <summary>
 214    /// Read a byte from the stream advancing the position.
 215    /// </summary>
 216    /// <returns>The byte read cast to an int; -1 if end of stream.</returns>
 217    public override int ReadByte()
 218    {
 0219      throw new NotSupportedException("BZip2OutputStream ReadByte not supported");
 220    }
 221
 222    /// <summary>
 223    /// Read a block of bytes
 224    /// </summary>
 225    /// <param name="buffer">The buffer to read into.</param>
 226    /// <param name="offset">The offset in the buffer to start storing data at.</param>
 227    /// <param name="count">The maximum number of bytes to read.</param>
 228    /// <returns>The total number of bytes read. This might be less than the number of bytes
 229    /// requested if that number of bytes are not currently available, or zero
 230    /// if the end of the stream is reached.</returns>
 231    public override int Read(byte[] buffer, int offset, int count)
 232    {
 0233      throw new NotSupportedException("BZip2OutputStream Read not supported");
 234    }
 235
 236    /// <summary>
 237    /// Write a block of bytes to the stream
 238    /// </summary>
 239    /// <param name="buffer">The buffer containing data to write.</param>
 240    /// <param name="offset">The offset of the first byte to write.</param>
 241    /// <param name="count">The number of bytes to write.</param>
 242    public override void Write(byte[] buffer, int offset, int count)
 243    {
 1244       if ( buffer == null ) {
 0245        throw new ArgumentNullException(nameof(buffer));
 246      }
 247
 1248       if ( offset < 0 )
 249      {
 0250        throw new ArgumentOutOfRangeException(nameof(offset));
 251      }
 252
 1253       if ( count < 0 )
 254      {
 0255        throw new ArgumentOutOfRangeException(nameof(count));
 256      }
 257
 1258       if ( buffer.Length - offset < count )
 259      {
 0260        throw new ArgumentException("Offset/count out of range");
 261      }
 262
 20002263       for (int i = 0; i < count; ++i) {
 10000264        WriteByte(buffer[offset + i]);
 265      }
 1266    }
 267
 268    /// <summary>
 269    /// Write a byte to the stream.
 270    /// </summary>
 271    /// <param name="value">The byte to write to the stream.</param>
 272    public override void WriteByte(byte value)
 273    {
 10000274      int b = (256 + value) % 256;
 10000275       if (currentChar != -1) {
 9999276         if (currentChar == b) {
 38277          runLength++;
 38278           if (runLength > 254) {
 0279            WriteRun();
 0280            currentChar = -1;
 0281            runLength = 0;
 282          }
 0283        } else {
 9961284          WriteRun();
 9961285          runLength = 1;
 9961286          currentChar = b;
 287        }
 9961288      } else {
 1289        currentChar = b;
 1290        runLength++;
 291      }
 39292    }
 293
 294    /// <summary>
 295    /// End the current block and end compression.
 296    /// Close the stream and free any resources
 297    /// </summary>
 298    public override void Close()
 299    {
 2300      Dispose(true);
 2301      GC.SuppressFinalize(this);
 2302    }
 303
 304    #endregion
 305    void MakeMaps()
 306    {
 1307      nInUse = 0;
 514308       for (int i = 0; i < 256; i++) {
 256309         if (inUse[i]) {
 256310          seqToUnseq[nInUse] = (char)i;
 256311          unseqToSeq[i] = (char)nInUse;
 256312          nInUse++;
 313        }
 314      }
 1315    }
 316
 317    /// <summary>
 318    /// Get the number of bytes written to output.
 319    /// </summary>
 320    void WriteRun()
 321    {
 9962322       if (last < allowableBlockSize) {
 9962323        inUse[currentChar] = true;
 39924324         for (int i = 0; i < runLength; i++) {
 10000325          mCrc.Update(currentChar);
 326        }
 327
 9962328         switch (runLength) {
 329          case 1:
 9925330            last++;
 9925331            block[last + 1] = (byte)currentChar;
 9925332            break;
 333          case 2:
 36334            last++;
 36335            block[last + 1] = (byte)currentChar;
 36336            last++;
 36337            block[last + 1] = (byte)currentChar;
 36338            break;
 339          case 3:
 1340            last++;
 1341            block[last + 1] = (byte)currentChar;
 1342            last++;
 1343            block[last + 1] = (byte)currentChar;
 1344            last++;
 1345            block[last + 1] = (byte)currentChar;
 1346            break;
 347          default:
 0348            inUse[runLength - 4] = true;
 0349            last++;
 0350            block[last + 1] = (byte)currentChar;
 0351            last++;
 0352            block[last + 1] = (byte)currentChar;
 0353            last++;
 0354            block[last + 1] = (byte)currentChar;
 0355            last++;
 0356            block[last + 1] = (byte)currentChar;
 0357            last++;
 0358            block[last + 1] = (byte)(runLength - 4);
 0359            break;
 360        }
 361      } else {
 0362        EndBlock();
 0363        InitBlock();
 0364        WriteRun();
 365      }
 0366    }
 367
 368    /// <summary>
 369    /// Get the number of bytes written to the output.
 370    /// </summary>
 371    public int BytesWritten
 372    {
 0373      get { return bytesOut; }
 374    }
 375
 376    /// <summary>
 377    /// Releases the unmanaged resources used by the <see cref="BZip2OutputStream"/> and optionally releases the managed
 378    /// </summary>
 379    /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged re
 380#if NET_1_0 || NET_1_1 || NETCF_1_0
 381    protected virtual void Dispose(bool disposing)
 382#else
 383    override protected void Dispose(bool disposing)
 384#endif
 385    {
 386      try {
 387#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 2388        base.Dispose(disposing);
 389#endif
 2390         if( !disposed_ ) {
 2391          disposed_=true;
 392
 2393           if( runLength>0 ) {
 1394            WriteRun();
 395          }
 396
 2397          currentChar=-1;
 2398          EndBlock();
 2399          EndCompression();
 2400          Flush();
 401        }
 2402      }
 403      finally {
 2404         if ( disposing ) {
 2405           if ( IsStreamOwner ) {
 2406            baseStream.Close();
 407          }
 408        }
 2409      }
 2410    }
 411
 412    /// <summary>
 413    /// Flush output buffers
 414    /// </summary>
 415    public override void Flush()
 416    {
 2417      baseStream.Flush();
 2418    }
 419
 420    void Initialize()
 421    {
 2422      bytesOut = 0;
 2423      nBlocksRandomised = 0;
 424
 425      /*--- Write header `magic' bytes indicating file-format == huffmanised,
 426      followed by a digit indicating blockSize100k.
 427      ---*/
 428
 2429      BsPutUChar('B');
 2430      BsPutUChar('Z');
 431
 2432      BsPutUChar('h');
 2433      BsPutUChar('0' + blockSize100k);
 434
 2435      combinedCRC = 0;
 2436    }
 437
 438    void InitBlock()
 439    {
 2440      mCrc.Reset();
 2441      last = -1;
 442
 1028443       for (int i = 0; i < 256; i++) {
 512444        inUse[i] = false;
 445      }
 446
 447      /*--- 20 is just a paranoia constant ---*/
 2448      allowableBlockSize = BZip2Constants.BaseBlockSize * blockSize100k - 20;
 2449    }
 450
 451    void EndBlock()
 452    {
 2453       if (last < 0) {       // dont do anything for empty files, (makes empty files compatible with original Bzip)
 1454        return;
 455      }
 456
 1457      blockCRC = unchecked((uint)mCrc.Value);
 1458      combinedCRC = (combinedCRC << 1) | (combinedCRC >> 31);
 1459      combinedCRC ^= blockCRC;
 460
 461      /*-- sort the block and establish position of original string --*/
 1462      DoReversibleTransformation();
 463
 464      /*--
 465      A 6-byte block header, the value chosen arbitrarily
 466      as 0x314159265359 :-).  A 32 bit value does not really
 467      give a strong enough guarantee that the value will not
 468      appear by chance in the compressed datastream.  Worst-case
 469      probability of this event, for a 900k block, is about
 470      2.0e-3 for 32 bits, 1.0e-5 for 40 bits and 4.0e-8 for 48 bits.
 471      For a compressed file of size 100Gb -- about 100000 blocks --
 472      only a 48-bit marker will do.  NB: normal compression/
 473      decompression do *not* rely on these statistical properties.
 474      They are only important when trying to recover blocks from
 475      damaged files.
 476      --*/
 1477      BsPutUChar(0x31);
 1478      BsPutUChar(0x41);
 1479      BsPutUChar(0x59);
 1480      BsPutUChar(0x26);
 1481      BsPutUChar(0x53);
 1482      BsPutUChar(0x59);
 483
 484      /*-- Now the block's CRC, so it is in a known place. --*/
 485      unchecked {
 1486        BsPutint((int)blockCRC);
 487      }
 488
 489      /*-- Now a single bit indicating randomisation. --*/
 1490       if (blockRandomised) {
 0491        BsW(1,1);
 0492        nBlocksRandomised++;
 0493      } else {
 1494        BsW(1,0);
 495      }
 496
 497      /*-- Finally, block's contents proper. --*/
 1498      MoveToFrontCodeAndSend();
 1499    }
 500
 501    void EndCompression()
 502    {
 503      /*--
 504      Now another magic 48-bit number, 0x177245385090, to
 505      indicate the end of the last block.  (sqrt(pi), if
 506      you want to know.  I did want to use e, but it contains
 507      too much repetition -- 27 18 28 18 28 46 -- for me
 508      to feel statistically comfortable.  Call me paranoid.)
 509      --*/
 2510      BsPutUChar(0x17);
 2511      BsPutUChar(0x72);
 2512      BsPutUChar(0x45);
 2513      BsPutUChar(0x38);
 2514      BsPutUChar(0x50);
 2515      BsPutUChar(0x90);
 516
 517      unchecked {
 2518        BsPutint((int)combinedCRC);
 519      }
 520
 2521      BsFinishedWithStream();
 2522    }
 523
 524    void BsSetStream(Stream stream)
 525    {
 2526      baseStream = stream;
 2527      bsLive = 0;
 2528      bsBuff = 0;
 2529      bytesOut = 0;
 2530    }
 531
 532    void BsFinishedWithStream()
 533    {
 5534       while (bsLive > 0)
 535      {
 3536        int ch = (bsBuff >> 24);
 3537        baseStream.WriteByte((byte)ch); // write 8-bit
 3538        bsBuff <<= 8;
 3539        bsLive -= 8;
 3540        bytesOut++;
 541      }
 2542    }
 543
 544    void BsW(int n, int v)
 545    {
 24421546       while (bsLive >= 8) {
 10528547        int ch = (bsBuff >> 24);
 10528548        unchecked{baseStream.WriteByte((byte)ch);} // write 8-bit
 10528549        bsBuff <<= 8;
 10528550        bsLive -= 8;
 10528551        ++bytesOut;
 552      }
 13893553      bsBuff |= (v << (32 - bsLive - n));
 13893554      bsLive += n;
 13893555    }
 556
 557    void BsPutUChar(int c)
 558    {
 26559      BsW(8, c);
 26560    }
 561
 562    void BsPutint(int u)
 563    {
 3564      BsW(8, (u >> 24) & 0xFF);
 3565      BsW(8, (u >> 16) & 0xFF);
 3566      BsW(8, (u >>  8) & 0xFF);
 3567      BsW(8,  u        & 0xFF);
 3568    }
 569
 570    void BsPutIntVS(int numBits, int c)
 571    {
 1572      BsW(numBits, c);
 1573    }
 574
 575    void SendMTFValues()
 576    {
 1577      char[][] len = new char[BZip2Constants.GroupCount][];
 14578       for (int i = 0; i < BZip2Constants.GroupCount; ++i) {
 6579        len[i] = new char[BZip2Constants.MaximumAlphaSize];
 580      }
 581
 582      int gs, ge, totc, bt, bc, iter;
 1583      int nSelectors = 0, alphaSize, minLen, maxLen, selCtr;
 584      int nGroups;
 585
 1586      alphaSize = nInUse + 2;
 14587       for (int t = 0; t < BZip2Constants.GroupCount; t++) {
 3108588         for (int v = 0; v < alphaSize; v++) {
 1548589          len[t][v] = (char)GREATER_ICOST;
 590        }
 591      }
 592
 593      /*--- Decide how many coding tables to use ---*/
 1594       if (nMTF <= 0) {
 0595        Panic();
 596      }
 597
 1598       if (nMTF < 200) {
 0599        nGroups = 2;
 1600       } else if (nMTF < 600) {
 0601        nGroups = 3;
 1602       } else if (nMTF < 1200) {
 0603        nGroups = 4;
 1604       } else if (nMTF < 2400) {
 0605        nGroups = 5;
 0606      } else {
 1607        nGroups = 6;
 608      }
 609
 610      /*--- Generate an initial set of coding tables ---*/
 1611      int nPart = nGroups;
 1612      int remF  = nMTF;
 1613      gs = 0;
 7614       while (nPart > 0) {
 6615        int tFreq = remF / nPart;
 6616        int aFreq = 0;
 6617        ge = gs - 1;
 266618         while (aFreq < tFreq && ge < alphaSize - 1) {
 260619          ge++;
 260620          aFreq += mtfFreq[ge];
 621        }
 622
 6623         if (ge > gs && nPart != nGroups && nPart != 1 && ((nGroups - nPart) % 2 == 1)) {
 2624          aFreq -= mtfFreq[ge];
 2625          ge--;
 626        }
 627
 3108628         for (int v = 0; v < alphaSize; v++) {
 1548629           if (v >= gs && v <= ge) {
 258630            len[nPart - 1][v] = (char)LESSER_ICOST;
 258631          } else {
 1290632            len[nPart - 1][v] = (char)GREATER_ICOST;
 633          }
 634        }
 635
 6636        nPart--;
 6637        gs = ge + 1;
 6638        remF -= aFreq;
 639      }
 640
 1641      int[][] rfreq = new int[BZip2Constants.GroupCount][];
 14642       for (int i = 0; i < BZip2Constants.GroupCount; ++i) {
 6643        rfreq[i] = new int[BZip2Constants.MaximumAlphaSize];
 644      }
 645
 1646      int[] fave = new int[BZip2Constants.GroupCount];
 1647      short[] cost = new short[BZip2Constants.GroupCount];
 648      /*---
 649      Iterate up to N_ITERS times to improve the tables.
 650      ---*/
 10651       for (iter = 0; iter < BZip2Constants.NumberOfIterations; ++iter) {
 56652         for (int t = 0; t < nGroups; ++t) {
 24653          fave[t] = 0;
 654        }
 655
 56656         for (int t = 0; t < nGroups; ++t) {
 12432657           for (int v = 0; v < alphaSize; ++v) {
 6192658            rfreq[t][v] = 0;
 659          }
 660        }
 661
 4662        nSelectors = 0;
 4663        totc = 0;
 4664        gs   = 0;
 804665        while (true) {
 666          /*--- Set group start & end marks. --*/
 808667           if (gs >= nMTF) {
 668            break;
 669          }
 804670          ge = gs + BZip2Constants.GroupSize - 1;
 804671           if (ge >= nMTF) {
 4672            ge = nMTF - 1;
 673          }
 674
 675          /*--
 676          Calculate the cost of this group as coded
 677          by each of the coding tables.
 678          --*/
 11256679           for (int t = 0; t < nGroups; t++) {
 4824680            cost[t] = 0;
 681          }
 682
 804683           if (nGroups == 6) {
 684            short cost0, cost1, cost2, cost3, cost4, cost5;
 804685            cost0 = cost1 = cost2 = cost3 = cost4 = cost5 = 0;
 81616686             for (int i = gs; i <= ge; ++i) {
 40004687              short icv = szptr[i];
 40004688              cost0 += (short)len[0][icv];
 40004689              cost1 += (short)len[1][icv];
 40004690              cost2 += (short)len[2][icv];
 40004691              cost3 += (short)len[3][icv];
 40004692              cost4 += (short)len[4][icv];
 40004693              cost5 += (short)len[5][icv];
 694            }
 804695            cost[0] = cost0;
 804696            cost[1] = cost1;
 804697            cost[2] = cost2;
 804698            cost[3] = cost3;
 804699            cost[4] = cost4;
 804700            cost[5] = cost5;
 804701          } else {
 0702             for (int i = gs; i <= ge; ++i) {
 0703              short icv = szptr[i];
 0704               for (int t = 0; t < nGroups; t++) {
 0705                cost[t] += (short)len[t][icv];
 706              }
 707            }
 708          }
 709
 710          /*--
 711          Find the coding table which is best for this group,
 712          and record its identity in the selector table.
 713          --*/
 804714          bc = 999999999;
 804715          bt = -1;
 11256716           for (int t = 0; t < nGroups; ++t) {
 4824717             if (cost[t] < bc) {
 1899718              bc = cost[t];
 1899719              bt = t;
 720            }
 721          }
 804722          totc += bc;
 804723          fave[bt]++;
 804724          selector[nSelectors] = (char)bt;
 804725          nSelectors++;
 726
 727          /*--
 728          Increment the symbol frequencies for the selected table.
 729          --*/
 81616730           for (int i = gs; i <= ge; ++i) {
 40004731            ++rfreq[bt][szptr[i]];
 732          }
 733
 804734          gs = ge+1;
 735        }
 736
 737        /*--
 738        Recompute the tables based on the accumulated frequencies.
 739        --*/
 56740         for (int t = 0; t < nGroups; ++t) {
 24741          HbMakeCodeLengths(len[t], rfreq[t], alphaSize, 20);
 742        }
 743      }
 744
 1745      rfreq = null;
 1746      fave = null;
 1747      cost = null;
 748
 1749       if (!(nGroups < 8)) {
 0750        Panic();
 751      }
 752
 1753       if (!(nSelectors < 32768 && nSelectors <= (2 + (900000 / BZip2Constants.GroupSize)))) {
 0754        Panic();
 755      }
 756
 757      /*--- Compute MTF values for the selectors. ---*/
 1758      char[] pos = new char[BZip2Constants.GroupCount];
 759      char ll_i, tmp2, tmp;
 760
 14761       for (int i = 0; i < nGroups; i++) {
 6762        pos[i] = (char)i;
 763      }
 764
 404765       for (int i = 0; i < nSelectors; i++) {
 201766        ll_i = selector[i];
 201767        int j = 0;
 201768        tmp = pos[j];
 729769         while (ll_i != tmp) {
 528770          j++;
 528771          tmp2 = tmp;
 528772          tmp = pos[j];
 528773          pos[j] = tmp2;
 774        }
 201775        pos[0] = tmp;
 201776        selectorMtf[i] = (char)j;
 777      }
 778
 1779      int[][] code = new int[BZip2Constants.GroupCount][];
 780
 14781       for (int i = 0; i < BZip2Constants.GroupCount; ++i) {
 6782        code[i] = new int[BZip2Constants.MaximumAlphaSize];
 783      }
 784
 785      /*--- Assign actual codes for the tables. --*/
 14786       for (int t = 0; t < nGroups; t++) {
 6787        minLen = 32;
 6788        maxLen = 0;
 3108789         for (int i = 0; i < alphaSize; i++) {
 1548790           if (len[t][i] > maxLen) {
 13791            maxLen = len[t][i];
 792          }
 1548793           if (len[t][i] < minLen) {
 14794            minLen = len[t][i];
 795          }
 796        }
 6797         if (maxLen > 20) {
 0798          Panic();
 799        }
 6800         if (minLen < 1) {
 0801          Panic();
 802        }
 6803        HbAssignCodes(code[t], len[t], minLen, maxLen, alphaSize);
 804      }
 805
 806      /*--- Transmit the mapping table. ---*/
 1807      bool[] inUse16 = new bool[16];
 34808       for (int i = 0; i < 16; ++i) {
 16809        inUse16[i] = false;
 544810         for (int j = 0; j < 16; ++j) {
 256811           if (inUse[i * 16 + j]) {
 256812            inUse16[i] = true;
 813          }
 814        }
 815      }
 816
 34817       for (int i = 0; i < 16; ++i) {
 16818         if (inUse16[i]) {
 16819          BsW(1,1);
 16820        } else {
 0821          BsW(1,0);
 822        }
 823      }
 824
 34825       for (int i = 0; i < 16; ++i) {
 16826         if (inUse16[i]) {
 544827           for (int j = 0; j < 16; ++j) {
 256828             if (inUse[i * 16 + j]) {
 256829              BsW(1,1);
 256830            } else {
 0831              BsW(1,0);
 832            }
 833          }
 834        }
 835      }
 836
 837      /*--- Now the selectors. ---*/
 1838      BsW(3, nGroups);
 1839      BsW(15, nSelectors);
 404840       for (int i = 0; i < nSelectors; ++i) {
 1458841         for (int j = 0; j < selectorMtf[i]; ++j) {
 528842          BsW(1,1);
 843        }
 201844        BsW(1,0);
 845      }
 846
 847      /*--- Now the coding tables. ---*/
 14848       for (int t = 0; t < nGroups; ++t) {
 6849        int curr = len[t][0];
 6850        BsW(5, curr);
 3108851         for (int i = 0; i < alphaSize; ++i) {
 2202852           while (curr < len[t][i]) {
 654853            BsW(2, 2);
 654854            curr++; /* 10 */
 855          }
 2189856           while (curr > len[t][i]) {
 641857            BsW(2, 3);
 641858            curr--; /* 11 */
 859          }
 1548860          BsW (1, 0);
 861        }
 862      }
 863
 864      /*--- And finally, the block data proper ---*/
 1865      selCtr = 0;
 1866      gs = 0;
 201867      while (true) {
 202868         if (gs >= nMTF) {
 869          break;
 870        }
 201871        ge = gs + BZip2Constants.GroupSize - 1;
 201872         if (ge >= nMTF) {
 1873          ge = nMTF - 1;
 874        }
 875
 20404876         for (int i = gs; i <= ge; i++) {
 10001877          BsW(len[selector[selCtr]][szptr[i]], code[selector[selCtr]][szptr[i]]);
 878        }
 879
 201880        gs = ge + 1;
 201881        ++selCtr;
 882      }
 1883       if (!(selCtr == nSelectors)) {
 0884        Panic();
 885      }
 1886    }
 887
 888    void MoveToFrontCodeAndSend ()
 889    {
 1890      BsPutIntVS(24, origPtr);
 1891      GenerateMTFValues();
 1892      SendMTFValues();
 1893    }
 894
 895    void SimpleSort(int lo, int hi, int d)
 896    {
 897      int i, j, h, bigN, hp;
 898      int v;
 899
 353900      bigN = hi - lo + 1;
 353901       if (bigN < 2) {
 0902        return;
 903      }
 904
 353905      hp = 0;
 706906       while (increments[hp] < bigN) {
 353907        hp++;
 908      }
 353909      hp--;
 910
 1059911       for (; hp >= 0; hp--) {
 353912        h = increments[hp];
 913
 353914        i = lo + h;
 915        while (true) {
 916          /*-- copy 1 --*/
 353917           if (i > hi)
 918            break;
 353919          v = zptr[i];
 353920          j = i;
 353921           while (FullGtU(zptr[j-h]+d, v+d)) {
 171922            zptr[j] = zptr[j-h];
 171923            j = j - h;
 171924             if (j <= (lo + h - 1))
 925              break;
 926          }
 353927          zptr[j] = v;
 353928          i++;
 929
 930          /*-- copy 2 --*/
 353931           if (i > hi) {
 932            break;
 933          }
 24934          v = zptr[i];
 24935          j = i;
 40936           while (FullGtU ( zptr[j-h]+d, v+d )) {
 22937            zptr[j] = zptr[j-h];
 22938            j = j - h;
 22939             if (j <= (lo + h - 1)) {
 940              break;
 941            }
 942          }
 24943          zptr[j] = v;
 24944          i++;
 945
 946          /*-- copy 3 --*/
 24947           if (i > hi) {
 948            break;
 949          }
 0950          v = zptr[i];
 0951          j = i;
 0952           while (FullGtU ( zptr[j-h]+d, v+d)) {
 0953            zptr[j] = zptr[j-h];
 0954            j = j - h;
 0955             if (j <= (lo + h - 1)) {
 956              break;
 957            }
 958          }
 0959          zptr[j] = v;
 0960          i++;
 961
 0962           if (workDone > workLimit && firstAttempt) {
 0963            return;
 964          }
 965        }
 966      }
 353967    }
 968
 969    void Vswap(int p1, int p2, int n )
 970    {
 0971      int temp = 0;
 0972       while (n > 0) {
 0973        temp = zptr[p1];
 0974        zptr[p1] = zptr[p2];
 0975        zptr[p2] = temp;
 0976        p1++;
 0977        p2++;
 0978        n--;
 979      }
 0980    }
 981
 982    void QSort3(int loSt, int hiSt, int dSt)
 983    {
 984      int unLo, unHi, ltLo, gtHi, med, n, m;
 985      int lo, hi, d;
 986
 353987      StackElement[] stack = new StackElement[QSORT_STACK_SIZE];
 988
 353989      int sp = 0;
 990
 353991      stack[sp].ll = loSt;
 353992      stack[sp].hh = hiSt;
 353993      stack[sp].dd = dSt;
 353994      sp++;
 995
 706996       while (sp > 0) {
 353997         if (sp >= QSORT_STACK_SIZE) {
 0998          Panic();
 999        }
 1000
 3531001        sp--;
 3531002        lo = stack[sp].ll;
 3531003        hi = stack[sp].hh;
 3531004        d = stack[sp].dd;
 1005
 3531006         if (hi - lo < SMALL_THRESH || d > DEPTH_THRESH) {
 3531007          SimpleSort(lo, hi, d);
 3531008           if (workDone > workLimit && firstAttempt) {
 01009            return;
 1010          }
 1011          continue;
 1012        }
 1013
 01014        med = Med3(block[zptr[lo] + d + 1],
 01015               block[zptr[hi            ] + d + 1],
 01016               block[zptr[(lo + hi) >> 1] + d + 1]);
 1017
 01018        unLo = ltLo = lo;
 01019        unHi = gtHi = hi;
 1020
 01021        while (true) {
 01022          while (true) {
 01023             if (unLo > unHi) {
 1024              break;
 1025            }
 01026            n = ((int)block[zptr[unLo]+d + 1]) - med;
 01027             if (n == 0) {
 01028              int temp = zptr[unLo];
 01029              zptr[unLo] = zptr[ltLo];
 01030              zptr[ltLo] = temp;
 01031              ltLo++;
 01032              unLo++;
 01033              continue;
 1034            }
 01035             if (n >  0) {
 1036              break;
 1037            }
 01038            unLo++;
 1039          }
 1040
 01041          while (true) {
 01042             if (unLo > unHi) {
 1043              break;
 1044            }
 01045            n = ((int)block[zptr[unHi]+d + 1]) - med;
 01046             if (n == 0) {
 01047              int temp = zptr[unHi];
 01048              zptr[unHi] = zptr[gtHi];
 01049              zptr[gtHi] = temp;
 01050              gtHi--;
 01051              unHi--;
 01052              continue;
 1053            }
 01054             if (n <  0) {
 1055              break;
 1056            }
 01057            unHi--;
 1058          }
 1059
 01060           if (unLo > unHi) {
 1061            break;
 1062          }
 1063
 1064          {
 01065            int temp = zptr[unLo];
 01066            zptr[unLo] = zptr[unHi];
 01067            zptr[unHi] = temp;
 01068            unLo++;
 01069            unHi--;
 1070          }
 1071        }
 1072
 01073         if (gtHi < ltLo) {
 01074          stack[sp].ll = lo;
 01075          stack[sp].hh = hi;
 01076          stack[sp].dd = d+1;
 01077          sp++;
 01078          continue;
 1079        }
 1080
 01081        n = ((ltLo-lo) < (unLo-ltLo)) ? (ltLo-lo) : (unLo-ltLo);
 01082        Vswap(lo, unLo-n, n);
 01083        m = ((hi-gtHi) < (gtHi-unHi)) ? (hi-gtHi) : (gtHi-unHi);
 01084        Vswap(unLo, hi-m+1, m);
 1085
 01086        n = lo + unLo - ltLo - 1;
 01087        m = hi - (gtHi - unHi) + 1;
 1088
 01089        stack[sp].ll = lo;
 01090        stack[sp].hh = n;
 01091        stack[sp].dd = d;
 01092        sp++;
 1093
 01094        stack[sp].ll = n + 1;
 01095        stack[sp].hh = m - 1;
 01096        stack[sp].dd = d+1;
 01097        sp++;
 1098
 01099        stack[sp].ll = m;
 01100        stack[sp].hh = hi;
 01101        stack[sp].dd = d;
 01102        sp++;
 1103      }
 3531104    }
 1105
 1106    void MainSort()
 1107    {
 1108      int i, j, ss, sb;
 11109      int[] runningOrder = new int[256];
 11110      int[] copy = new int[256];
 11111      bool[] bigDone = new bool[256];
 1112      int c1, c2;
 1113      int numQSorted;
 1114
 1115      /*--
 1116      In the various block-sized structures, live data runs
 1117      from 0 to last+NUM_OVERSHOOT_BYTES inclusive.  First,
 1118      set up the overshoot area for block.
 1119      --*/
 1120
 1121      //   if (verbosity >= 4) fprintf ( stderr, "        sort initialise ...\n" );
 421122       for (i = 0; i < BZip2Constants.OvershootBytes; i++) {
 201123        block[last + i + 2] = block[(i % (last + 1)) + 1];
 1124      }
 200421125       for (i = 0; i <= last + BZip2Constants.OvershootBytes; i++) {
 100201126        quadrant[i] = 0;
 1127      }
 1128
 11129      block[0] = (byte)(block[last + 1]);
 1130
 11131       if (last < 4000) {
 1132        /*--
 1133        Use simpleSort(), since the full sorting mechanism
 1134        has quite a large constant overhead.
 1135        --*/
 01136         for (i = 0; i <= last; i++) {
 01137          zptr[i] = i;
 1138        }
 01139        firstAttempt = false;
 01140        workDone = workLimit = 0;
 01141        SimpleSort(0, last, 0);
 01142      } else {
 11143        numQSorted = 0;
 5141144         for (i = 0; i <= 255; i++) {
 2561145          bigDone[i] = false;
 1146        }
 1310761147         for (i = 0; i <= 65536; i++) {
 655371148          ftab[i] = 0;
 1149        }
 1150
 11151        c1 = block[0];
 200021152         for (i = 0; i <= last; i++) {
 100001153          c2 = block[i + 1];
 100001154          ftab[(c1 << 8) + c2]++;
 100001155          c1 = c2;
 1156        }
 1157
 1310741158         for (i = 1; i <= 65536; i++) {
 655361159          ftab[i] += ftab[i - 1];
 1160        }
 1161
 11162        c1 = block[1];
 200001163         for (i = 0; i < last; i++) {
 99991164          c2 = block[i + 2];
 99991165          j = (c1 << 8) + c2;
 99991166          c1 = c2;
 99991167          ftab[j]--;
 99991168          zptr[ftab[j]] = i;
 1169        }
 1170
 11171        j = ((block[last + 1]) << 8) + (block[1]);
 11172        ftab[j]--;
 11173        zptr[ftab[j]] = last;
 1174
 1175        /*--
 1176        Now ftab contains the first loc of every small bucket.
 1177        Calculate the running order, from smallest to largest
 1178        big bucket.
 1179        --*/
 1180
 5141181         for (i = 0; i <= 255; i++) {
 2561182          runningOrder[i] = i;
 1183        }
 1184
 1185        int vv;
 11186        int h = 1;
 1187        do {
 51188          h = 3 * h + 1;
 51189         } while (h <= 256);
 1190        do {
 51191          h = h / 3;
 22121192           for (i = h; i <= 255; i++) {
 11011193            vv = runningOrder[i];
 11011194            j = i;
 20721195             while ((ftab[((runningOrder[j-h])+1) << 8] - ftab[(runningOrder[j-h]) << 8]) > (ftab[((vv)+1) << 8] - ftab[(
 10811196              runningOrder[j] = runningOrder[j-h];
 10811197              j = j - h;
 10811198               if (j <= (h - 1)) {
 1199                break;
 1200              }
 1201            }
 11011202            runningOrder[j] = vv;
 1203          }
 51204         } while (h != 1);
 1205
 1206        /*--
 1207        The main sorting loop.
 1208        --*/
 5141209         for (i = 0; i <= 255; i++) {
 1210
 1211          /*--
 1212          Process big buckets, starting with the least full.
 1213          --*/
 2561214          ss = runningOrder[i];
 1215
 1216          /*--
 1217          Complete the big bucket [ss] by quicksorting
 1218          any unsorted small buckets [ss, j].  Hopefully
 1219          previous pointer-scanning phases have already
 1220          completed many of the small buckets [ss, j], so
 1221          we don't have to sort them at all.
 1222          --*/
 1315841223           for (j = 0; j <= 255; j++) {
 655361224            sb = (ss << 8) + j;
 655361225             if(!((ftab[sb] & SETMASK) == SETMASK)) {
 328961226              int lo = ftab[sb] & CLEARMASK;
 328961227              int hi = (ftab[sb+1] & CLEARMASK) - 1;
 328961228               if (hi > lo) {
 3531229                QSort3(lo, hi, 2);
 3531230                numQSorted += (hi - lo + 1);
 3531231                 if (workDone > workLimit && firstAttempt) {
 01232                  return;
 1233                }
 1234              }
 328961235              ftab[sb] |= SETMASK;
 1236            }
 1237          }
 1238
 1239          /*--
 1240          The ss big bucket is now done.  Record this fact,
 1241          and update the quadrant descriptors.  Remember to
 1242          update quadrants in the overshoot area too, if
 1243          necessary.  The "if (i < 255)" test merely skips
 1244          this updating for the last bucket processed, since
 1245          updating for the last bucket is pointless.
 1246          --*/
 2561247          bigDone[ss] = true;
 1248
 2561249           if (i < 255) {
 2551250            int bbStart  = ftab[ss << 8] & CLEARMASK;
 2551251            int bbSize   = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
 2551252            int shifts   = 0;
 1253
 2551254             while ((bbSize >> shifts) > 65534) {
 01255              shifts++;
 1256            }
 1257
 203981258             for (j = 0; j < bbSize; j++) {
 99441259              int a2update = zptr[bbStart + j];
 99441260              int qVal = (j >> shifts);
 99441261              quadrant[a2update] = qVal;
 99441262               if (a2update < BZip2Constants.OvershootBytes) {
 201263                quadrant[a2update + last + 1] = qVal;
 1264              }
 1265            }
 1266
 2551267             if (!(((bbSize-1) >> shifts) <= 65535)) {
 01268              Panic();
 1269            }
 1270          }
 1271
 1272          /*--
 1273          Now scan this big bucket so as to synthesise the
 1274          sorted order for small buckets [t, ss] for all t != ss.
 1275          --*/
 1315841276           for (j = 0; j <= 255; j++) {
 655361277            copy[j] = ftab[(j << 8) + ss] & CLEARMASK;
 1278          }
 1279
 205121280           for (j = ftab[ss << 8] & CLEARMASK; j < (ftab[(ss+1) << 8] & CLEARMASK); j++) {
 100001281            c1 = block[zptr[j]];
 100001282             if (!bigDone[c1]) {
 49591283              zptr[copy[c1]] = zptr[j] == 0 ? last : zptr[j] - 1;
 49591284              copy[c1] ++;
 1285            }
 1286          }
 1287
 1315841288           for (j = 0; j <= 255; j++) {
 655361289            ftab[(j << 8) + ss] |= SETMASK;
 1290          }
 1291        }
 1292      }
 11293    }
 1294
 1295    void RandomiseBlock()
 1296    {
 1297      int i;
 01298      int rNToGo = 0;
 01299      int rTPos  = 0;
 01300       for (i = 0; i < 256; i++) {
 01301        inUse[i] = false;
 1302      }
 1303
 01304       for (i = 0; i <= last; i++) {
 01305         if (rNToGo == 0) {
 01306          rNToGo = (int)BZip2Constants.RandomNumbers[rTPos];
 01307          rTPos++;
 01308           if (rTPos == 512) {
 01309            rTPos = 0;
 1310          }
 1311        }
 01312        rNToGo--;
 01313         block[i + 1] ^= (byte)((rNToGo == 1) ? 1 : 0);
 1314        // handle 16 bit signed numbers
 01315        block[i + 1] &= 0xFF;
 1316
 01317        inUse[block[i + 1]] = true;
 1318      }
 01319    }
 1320
 1321    void DoReversibleTransformation()
 1322    {
 11323      workLimit = workFactor * last;
 11324      workDone = 0;
 11325      blockRandomised = false;
 11326      firstAttempt = true;
 1327
 11328      MainSort();
 1329
 11330       if (workDone > workLimit && firstAttempt) {
 01331        RandomiseBlock();
 01332        workLimit = workDone = 0;
 01333        blockRandomised = true;
 01334        firstAttempt = false;
 01335        MainSort();
 1336      }
 1337
 11338      origPtr = -1;
 134401339       for (int i = 0; i <= last; i++) {
 67201340         if (zptr[i] == 0) {
 11341          origPtr = i;
 11342          break;
 1343        }
 1344      }
 1345
 11346       if (origPtr == -1) {
 01347        Panic();
 1348      }
 11349    }
 1350
 1351    bool FullGtU(int i1, int i2)
 1352    {
 1353      int k;
 1354      byte c1, c2;
 1355      int s1, s2;
 1356
 3931357      c1 = block[i1 + 1];
 3931358      c2 = block[i2 + 1];
 3931359       if (c1 != c2) {
 3911360        return c1 > c2;
 1361      }
 21362      i1++;
 21363      i2++;
 1364
 21365      c1 = block[i1 + 1];
 21366      c2 = block[i2 + 1];
 21367       if (c1 != c2) {
 21368        return c1 > c2;
 1369      }
 01370      i1++;
 01371      i2++;
 1372
 01373      c1 = block[i1 + 1];
 01374      c2 = block[i2 + 1];
 01375       if (c1 != c2) {
 01376        return c1 > c2;
 1377      }
 01378      i1++;
 01379      i2++;
 1380
 01381      c1 = block[i1 + 1];
 01382      c2 = block[i2 + 1];
 01383       if (c1 != c2) {
 01384        return c1 > c2;
 1385      }
 01386      i1++;
 01387      i2++;
 1388
 01389      c1 = block[i1 + 1];
 01390      c2 = block[i2 + 1];
 01391       if (c1 != c2) {
 01392        return c1 > c2;
 1393      }
 01394      i1++;
 01395      i2++;
 1396
 01397      c1 = block[i1 + 1];
 01398      c2 = block[i2 + 1];
 01399       if (c1 != c2) {
 01400        return c1 > c2;
 1401      }
 01402      i1++;
 01403      i2++;
 1404
 01405      k = last + 1;
 1406
 1407      do {
 01408        c1 = block[i1 + 1];
 01409        c2 = block[i2 + 1];
 01410         if (c1 != c2) {
 01411          return c1 > c2;
 1412        }
 01413        s1 = quadrant[i1];
 01414        s2 = quadrant[i2];
 01415         if (s1 != s2) {
 01416          return s1 > s2;
 1417        }
 01418        i1++;
 01419        i2++;
 1420
 01421        c1 = block[i1 + 1];
 01422        c2 = block[i2 + 1];
 01423         if (c1 != c2) {
 01424          return c1 > c2;
 1425        }
 01426        s1 = quadrant[i1];
 01427        s2 = quadrant[i2];
 01428         if (s1 != s2) {
 01429          return s1 > s2;
 1430        }
 01431        i1++;
 01432        i2++;
 1433
 01434        c1 = block[i1 + 1];
 01435        c2 = block[i2 + 1];
 01436         if (c1 != c2) {
 01437          return c1 > c2;
 1438        }
 01439        s1 = quadrant[i1];
 01440        s2 = quadrant[i2];
 01441         if (s1 != s2) {
 01442          return s1 > s2;
 1443        }
 01444        i1++;
 01445        i2++;
 1446
 01447        c1 = block[i1 + 1];
 01448        c2 = block[i2 + 1];
 01449         if (c1 != c2) {
 01450          return c1 > c2;
 1451        }
 01452        s1 = quadrant[i1];
 01453        s2 = quadrant[i2];
 01454         if (s1 != s2) {
 01455          return s1 > s2;
 1456        }
 01457        i1++;
 01458        i2++;
 1459
 01460         if (i1 > last) {
 01461          i1 -= last;
 01462          i1--;
 1463        }
 01464         if (i2 > last) {
 01465          i2 -= last;
 01466          i2--;
 1467        }
 1468
 01469        k -= 4;
 01470        ++workDone;
 01471       } while (k >= 0);
 1472
 01473      return false;
 1474    }
 1475
 1476    void AllocateCompressStructures()
 1477    {
 21478      int n = BZip2Constants.BaseBlockSize * blockSize100k;
 21479      block = new byte[(n + 1 + BZip2Constants.OvershootBytes)];
 21480      quadrant = new int[(n + BZip2Constants.OvershootBytes)];
 21481      zptr = new int[n];
 21482      ftab = new int[65537];
 1483
 21484       if (block == null || quadrant == null || zptr == null  || ftab == null) {
 1485        //    int totalDraw = (n + 1 + NUM_OVERSHOOT_BYTES) + (n + NUM_OVERSHOOT_BYTES) + n + 65537;
 1486        //    compressOutOfMemory ( totalDraw, n );
 1487      }
 1488
 1489      /*
 1490      The back end needs a place to store the MTF values
 1491      whilst it calculates the coding tables.  We could
 1492      put them in the zptr array.  However, these values
 1493      will fit in a short, so we overlay szptr at the
 1494      start of zptr, in the hope of reducing the number
 1495      of cache misses induced by the multiple traversals
 1496      of the MTF values when calculating coding tables.
 1497      Seems to improve compression speed by about 1%.
 1498      */
 1499      //  szptr = zptr;
 1500
 1501
 21502      szptr = new short[2 * n];
 21503    }
 1504
 1505    void GenerateMTFValues()
 1506    {
 11507      char[] yy = new char[256];
 1508      int  i, j;
 1509      char tmp;
 1510      char tmp2;
 1511      int zPend;
 1512      int wr;
 1513      int EOB;
 1514
 11515      MakeMaps();
 11516      EOB = nInUse+1;
 1517
 5181518       for (i = 0; i <= EOB; i++) {
 2581519        mtfFreq[i] = 0;
 1520      }
 1521
 11522      wr = 0;
 11523      zPend = 0;
 5141524       for (i = 0; i < nInUse; i++) {
 2561525        yy[i] = (char) i;
 1526      }
 1527
 1528
 200021529       for (i = 0; i <= last; i++) {
 1530        char ll_i;
 1531
 100001532        ll_i = unseqToSeq[block[zptr[i]]];
 1533
 100001534        j = 0;
 100001535        tmp = yy[j];
 12926911536         while (ll_i != tmp) {
 12826911537          j++;
 12826911538          tmp2 = tmp;
 12826911539          tmp = yy[j];
 12826911540          yy[j] = tmp2;
 1541        }
 100001542        yy[0] = tmp;
 1543
 100001544         if (j == 0) {
 391545          zPend++;
 391546        } else {
 99611547           if (zPend > 0) {
 391548            zPend--;
 01549            while (true) {
 391550               switch (zPend % 2) {
 1551                case 0:
 391552                  szptr[wr] = (short)BZip2Constants.RunA;
 391553                  wr++;
 391554                  mtfFreq[BZip2Constants.RunA]++;
 391555                  break;
 1556                case 1:
 01557                  szptr[wr] = (short)BZip2Constants.RunB;
 01558                  wr++;
 01559                  mtfFreq[BZip2Constants.RunB]++;
 1560                  break;
 1561              }
 391562               if (zPend < 2) {
 1563                break;
 1564              }
 01565              zPend = (zPend - 2) / 2;
 1566            }
 391567            zPend = 0;
 1568          }
 99611569          szptr[wr] = (short)(j + 1);
 99611570          wr++;
 99611571          mtfFreq[j + 1]++;
 1572        }
 1573      }
 1574
 11575       if (zPend > 0) {
 01576        zPend--;
 01577        while (true) {
 01578           switch (zPend % 2) {
 1579            case 0:
 01580              szptr[wr] = (short)BZip2Constants.RunA;
 01581              wr++;
 01582              mtfFreq[BZip2Constants.RunA]++;
 01583              break;
 1584            case 1:
 01585              szptr[wr] = (short)BZip2Constants.RunB;
 01586              wr++;
 01587              mtfFreq[BZip2Constants.RunB]++;
 1588              break;
 1589          }
 01590           if (zPend < 2) {
 1591            break;
 1592          }
 01593          zPend = (zPend - 2) / 2;
 1594        }
 1595      }
 1596
 11597      szptr[wr] = (short)EOB;
 11598      wr++;
 11599      mtfFreq[EOB]++;
 1600
 11601      nMTF = wr;
 11602    }
 1603
 1604    static void Panic()
 1605    {
 01606      throw new BZip2Exception("BZip2 output stream panic");
 1607    }
 1608
 1609    static void HbMakeCodeLengths(char[] len, int[] freq, int alphaSize, int maxLen)
 1610    {
 1611      /*--
 1612      Nodes and heap entries run from 1.  Entry 0
 1613      for both the heap and nodes is a sentinel.
 1614      --*/
 1615      int nNodes, nHeap, n1, n2, j, k;
 1616      bool  tooLong;
 1617
 241618      int[] heap   = new int[BZip2Constants.MaximumAlphaSize + 2];
 241619      int[] weight = new int[BZip2Constants.MaximumAlphaSize * 2];
 241620      int[] parent = new int[BZip2Constants.MaximumAlphaSize * 2];
 1621
 124321622       for (int i = 0; i < alphaSize; ++i)
 1623      {
 61921624        weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
 1625      }
 1626
 01627      while (true)
 1628      {
 241629        nNodes = alphaSize;
 241630        nHeap = 0;
 1631
 241632        heap[0] = 0;
 241633        weight[0] = 0;
 241634        parent[0] = -2;
 1635
 124321636         for (int i = 1; i <= alphaSize; ++i)
 1637        {
 61921638          parent[i] = -1;
 61921639          nHeap++;
 61921640          heap[nHeap] = i;
 61921641          int zz = nHeap;
 61921642          int tmp = heap[zz];
 120581643           while (weight[tmp] < weight[heap[zz >> 1]])
 1644          {
 58661645            heap[zz] = heap[zz >> 1];
 58661646            zz >>= 1;
 1647          }
 61921648          heap[zz] = tmp;
 1649        }
 241650         if (!(nHeap < (BZip2Constants.MaximumAlphaSize+2)))
 1651        {
 01652          Panic();
 1653        }
 1654
 61921655         while (nHeap > 1)
 1656        {
 61681657          n1 = heap[1];
 61681658          heap[1] = heap[nHeap];
 61681659          nHeap--;
 61681660          int zz = 1;
 61681661          int yy = 0;
 61681662          int tmp = heap[zz];
 342431663          while (true)
 1664          {
 404111665            yy = zz << 1;
 404111666             if (yy > nHeap)
 1667            {
 1668              break;
 1669            }
 346031670             if (yy < nHeap &&  weight[heap[yy+1]] < weight[heap[yy]])
 1671            {
 156441672              yy++;
 1673            }
 346031674             if (weight[tmp] < weight[heap[yy]])
 1675            {
 1676              break;
 1677            }
 1678
 342431679            heap[zz] = heap[yy];
 342431680            zz = yy;
 1681          }
 61681682          heap[zz] = tmp;
 61681683          n2 = heap[1];
 61681684          heap[1] = heap[nHeap];
 61681685          nHeap--;
 1686
 61681687          zz = 1;
 61681688          yy = 0;
 61681689          tmp = heap[zz];
 329131690          while (true)
 1691          {
 390811692            yy = zz << 1;
 390811693             if (yy > nHeap)
 1694            {
 1695              break;
 1696            }
 341941697             if (yy < nHeap && weight[heap[yy+1]] < weight[heap[yy]])
 1698            {
 156711699              yy++;
 1700            }
 341941701             if (weight[tmp] < weight[heap[yy]])
 1702            {
 1703              break;
 1704            }
 329131705            heap[zz] = heap[yy];
 329131706            zz = yy;
 1707          }
 61681708          heap[zz] = tmp;
 61681709          nNodes++;
 61681710          parent[n1] = parent[n2] = nNodes;
 1711
 61681712          weight[nNodes] = (int)((weight[n1] & 0xffffff00) + (weight[n2] & 0xffffff00)) |
 61681713            (int)(1 + (((weight[n1] & 0x000000ff) > (weight[n2] & 0x000000ff)) ? (weight[n1] & 0x000000ff) : (weight[n2]
 1714
 61681715          parent[nNodes] = -1;
 61681716          nHeap++;
 61681717          heap[nHeap] = nNodes;
 1718
 61681719          zz  = nHeap;
 61681720          tmp = heap[zz];
 65991721           while (weight[tmp] < weight[heap[zz >> 1]])
 1722          {
 4311723            heap[zz] = heap[zz >> 1];
 4311724            zz >>= 1;
 1725          }
 61681726          heap[zz] = tmp;
 1727        }
 241728         if (!(nNodes < (BZip2Constants.MaximumAlphaSize * 2)))
 1729        {
 01730          Panic();
 1731        }
 1732
 241733        tooLong = false;
 124321734         for (int i = 1; i <= alphaSize; ++i)
 1735        {
 61921736          j = 0;
 61921737          k = i;
 571051738           while (parent[k] >= 0)
 1739          {
 509131740            k = parent[k];
 509131741            j++;
 1742          }
 61921743          len[i - 1] = (char)j;
 61921744          tooLong |= j > maxLen;
 1745        }
 1746
 241747         if (!tooLong)
 1748        {
 1749          break;
 1750        }
 1751
 01752         for (int i = 1; i < alphaSize; ++i)
 1753        {
 01754          j = weight[i] >> 8;
 01755          j = 1 + (j / 2);
 01756          weight[i] = j << 8;
 1757        }
 1758      }
 241759    }
 1760
 1761    static void HbAssignCodes (int[] code, char[] length, int minLen, int maxLen, int alphaSize)
 1762    {
 61763      int vec = 0;
 721764       for (int n = minLen; n <= maxLen; ++n)
 1765      {
 155401766         for (int i = 0; i < alphaSize; ++i)
 1767        {
 77401768           if (length[i] == n)
 1769          {
 15481770            code[i] = vec;
 15481771            ++vec;
 1772          }
 1773        }
 301774        vec <<= 1;
 1775      }
 61776    }
 1777
 1778    static byte Med3(byte a, byte b, byte c )
 1779    {
 1780      byte t;
 01781       if (a > b)
 1782      {
 01783        t = a;
 01784        a = b;
 01785        b = t;
 1786      }
 01787       if (b > c)
 1788      {
 01789        t = b;
 01790        b = c;
 01791        c = t;
 1792      }
 01793       if (a > b)
 1794      {
 01795        b = a;
 1796      }
 01797      return b;
 1798    }
 1799
 1800    struct StackElement
 1801    {
 1802      public int ll;
 1803      public int hh;
 1804      public int dd;
 1805    }
 1806
 1807    #region Instance Fields
 21808    bool isStreamOwner = true;
 1809
 1810    /*--
 1811    index of the last char in the block, so
 1812    the block size == last + 1.
 1813    --*/
 1814    int last;
 1815
 1816    /*--
 1817    index in zptr[] of original string after sorting.
 1818    --*/
 1819    int origPtr;
 1820
 1821    /*--
 1822    always: in the range 0 .. 9.
 1823    The current block size is 100000 * this number.
 1824    --*/
 1825    int blockSize100k;
 1826
 1827    bool blockRandomised;
 1828
 1829    int bytesOut;
 1830    int bsBuff;
 1831    int bsLive;
 21832    IChecksum mCrc = new StrangeCRC();
 1833
 21834    bool[] inUse = new bool[256];
 1835    int nInUse;
 1836
 21837    char[] seqToUnseq = new char[256];
 21838    char[] unseqToSeq = new char[256];
 1839
 21840    char[] selector = new char[BZip2Constants.MaximumSelectors];
 21841    char[] selectorMtf = new char[BZip2Constants.MaximumSelectors];
 1842
 1843    byte[]  block;
 1844    int[]   quadrant;
 1845    int[]   zptr;
 1846    short[] szptr;
 1847    int[]   ftab;
 1848
 1849    int nMTF;
 1850
 21851    int[] mtfFreq = new int[BZip2Constants.MaximumAlphaSize];
 1852
 1853    /*
 1854    * Used when sorting.  If too many long comparisons
 1855    * happen, we stop sorting, randomise the block
 1856    * slightly, and try again.
 1857    */
 1858    int workFactor;
 1859    int workDone;
 1860    int workLimit;
 1861    bool firstAttempt;
 1862    int nBlocksRandomised;
 1863
 21864    int currentChar = -1;
 1865    int runLength;
 1866    uint blockCRC, combinedCRC;
 1867    int allowableBlockSize;
 1868    Stream baseStream;
 1869    bool disposed_;
 1870    #endregion
 1871  }
 1872}
 1873
 1874/* This file was derived from a file containing this license:
 1875 *
 1876 * This file is a part of bzip2 and/or libbzip2, a program and
 1877 * library for lossless, block-sorting data compression.
 1878 *
 1879 * Copyright (C) 1996-1998 Julian R Seward.  All rights reserved.
 1880 *
 1881 * Redistribution and use in source and binary forms, with or without
 1882 * modification, are permitted provided that the following conditions
 1883 * are met:
 1884 *
 1885 * 1. Redistributions of source code must retain the above copyright
 1886 * notice, this list of conditions and the following disclaimer.
 1887 *
 1888 * 2. The origin of this software must not be misrepresented; you must
 1889 * not claim that you wrote the original software.  If you use this
 1890 * software in a product, an acknowledgment in the product
 1891 * documentation would be appreciated but is not required.
 1892 *
 1893 * 3. Altered source versions must be plainly marked as such, and must
 1894 * not be misrepresented as being the original software.
 1895 *
 1896 * 4. The name of the author may not be used to endorse or promote
 1897 * products derived from this software without specific prior written
 1898 * permission.
 1899 *
 1900 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
 1901 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 1902 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 1903 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 1904 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 1905 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 1906 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 1907 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 1908 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 1909 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 1910 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 1911 *
 1912 * Java version ported by Keiron Liddle, Aftex Software <keiron@aftexsw.com> 1999-2001
 1913 */
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_BaseArchiveStorage.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_BaseArchiveStorage.htm new file mode 100644 index 000000000..f6cbd6b93 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_BaseArchiveStorage.htm @@ -0,0 +1,4517 @@ + + + + +ICSharpCode.SharpZipLib.Zip.BaseArchiveStorage - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.BaseArchiveStorage
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs
Covered lines:4
Uncovered lines:0
Coverable lines:4
Total lines:4476
Line coverage:100%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipFile.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-03-02  Z-1650  Fixed updating ODT archives in memory. Exposed exceptions in updating.
 42//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 43//  2012-11-29  Z-1684  Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp
 44
 45using System;
 46using System.Collections;
 47using System.IO;
 48using System.Text;
 49using System.Globalization;
 50
 51#if !NETCF_1_0
 52using System.Security.Cryptography;
 53using ICSharpCode.SharpZipLib.Encryption;
 54#endif
 55
 56using ICSharpCode.SharpZipLib.Core;
 57using ICSharpCode.SharpZipLib.Checksums;
 58using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 59using ICSharpCode.SharpZipLib.Zip.Compression;
 60
 61namespace ICSharpCode.SharpZipLib.Zip
 62{
 63  #region Keys Required Event Args
 64  /// <summary>
 65  /// Arguments used with KeysRequiredEvent
 66  /// </summary>
 67  public class KeysRequiredEventArgs : EventArgs
 68  {
 69    #region Constructors
 70    /// <summary>
 71    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 72    /// </summary>
 73    /// <param name="name">The name of the file for which keys are required.</param>
 74    public KeysRequiredEventArgs(string name)
 75    {
 76      fileName = name;
 77    }
 78
 79    /// <summary>
 80    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 81    /// </summary>
 82    /// <param name="name">The name of the file for which keys are required.</param>
 83    /// <param name="keyValue">The current key value.</param>
 84    public KeysRequiredEventArgs(string name, byte[] keyValue)
 85    {
 86      fileName = name;
 87      key = keyValue;
 88    }
 89
 90    #endregion
 91    #region Properties
 92    /// <summary>
 93    /// Gets the name of the file for which keys are required.
 94    /// </summary>
 95    public string FileName
 96    {
 97      get { return fileName; }
 98    }
 99
 100    /// <summary>
 101    /// Gets or sets the key value
 102    /// </summary>
 103    public byte[] Key
 104    {
 105      get { return key; }
 106      set { key = value; }
 107    }
 108    #endregion
 109
 110    #region Instance Fields
 111    string fileName;
 112    byte[] key;
 113    #endregion
 114  }
 115  #endregion
 116
 117  #region Test Definitions
 118  /// <summary>
 119  /// The strategy to apply to testing.
 120  /// </summary>
 121  public enum TestStrategy
 122  {
 123    /// <summary>
 124    /// Find the first error only.
 125    /// </summary>
 126    FindFirstError,
 127    /// <summary>
 128    /// Find all possible errors.
 129    /// </summary>
 130    FindAllErrors,
 131  }
 132
 133  /// <summary>
 134  /// The operation in progress reported by a <see cref="ZipTestResultHandler"/> during testing.
 135  /// </summary>
 136  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 137  public enum TestOperation
 138  {
 139    /// <summary>
 140    /// Setting up testing.
 141    /// </summary>
 142    Initialising,
 143
 144    /// <summary>
 145    /// Testing an individual entries header
 146    /// </summary>
 147    EntryHeader,
 148
 149    /// <summary>
 150    /// Testing an individual entries data
 151    /// </summary>
 152    EntryData,
 153
 154    /// <summary>
 155    /// Testing an individual entry has completed.
 156    /// </summary>
 157    EntryComplete,
 158
 159    /// <summary>
 160    /// Running miscellaneous tests
 161    /// </summary>
 162    MiscellaneousTests,
 163
 164    /// <summary>
 165    /// Testing is complete
 166    /// </summary>
 167    Complete,
 168  }
 169
 170  /// <summary>
 171  /// Status returned returned by <see cref="ZipTestResultHandler"/> during testing.
 172  /// </summary>
 173  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 174  public class TestStatus
 175  {
 176    #region Constructors
 177    /// <summary>
 178    /// Initialise a new instance of <see cref="TestStatus"/>
 179    /// </summary>
 180    /// <param name="file">The <see cref="ZipFile"/> this status applies to.</param>
 181    public TestStatus(ZipFile file)
 182    {
 183      file_ = file;
 184    }
 185    #endregion
 186
 187    #region Properties
 188
 189    /// <summary>
 190    /// Get the current <see cref="TestOperation"/> in progress.
 191    /// </summary>
 192    public TestOperation Operation
 193    {
 194      get { return operation_; }
 195    }
 196
 197    /// <summary>
 198    /// Get the <see cref="ZipFile"/> this status is applicable to.
 199    /// </summary>
 200    public ZipFile File
 201    {
 202      get { return file_; }
 203    }
 204
 205    /// <summary>
 206    /// Get the current/last entry tested.
 207    /// </summary>
 208    public ZipEntry Entry
 209    {
 210      get { return entry_; }
 211    }
 212
 213    /// <summary>
 214    /// Get the number of errors detected so far.
 215    /// </summary>
 216    public int ErrorCount
 217    {
 218      get { return errorCount_; }
 219    }
 220
 221    /// <summary>
 222    /// Get the number of bytes tested so far for the current entry.
 223    /// </summary>
 224    public long BytesTested
 225    {
 226      get { return bytesTested_; }
 227    }
 228
 229    /// <summary>
 230    /// Get a value indicating wether the last entry test was valid.
 231    /// </summary>
 232    public bool EntryValid
 233    {
 234      get { return entryValid_; }
 235    }
 236    #endregion
 237
 238    #region Internal API
 239    internal void AddError()
 240    {
 241      errorCount_++;
 242      entryValid_ = false;
 243    }
 244
 245    internal void SetOperation(TestOperation operation)
 246    {
 247      operation_ = operation;
 248    }
 249
 250    internal void SetEntry(ZipEntry entry)
 251    {
 252      entry_ = entry;
 253      entryValid_ = true;
 254      bytesTested_ = 0;
 255    }
 256
 257    internal void SetBytesTested(long value)
 258    {
 259      bytesTested_ = value;
 260    }
 261    #endregion
 262
 263    #region Instance Fields
 264    ZipFile file_;
 265    ZipEntry entry_;
 266    bool entryValid_;
 267    int errorCount_;
 268    long bytesTested_;
 269    TestOperation operation_;
 270    #endregion
 271  }
 272
 273  /// <summary>
 274  /// Delegate invoked during <see cref="ZipFile.TestArchive(bool, TestStrategy, ZipTestResultHandler)">testing</see> if
 275  /// </summary>
 276  /// <remarks>If the message is non-null an error has occured.  If the message is null
 277  /// the operation as found in <see cref="TestStatus">status</see> has started.</remarks>
 278  public delegate void ZipTestResultHandler(TestStatus status, string message);
 279  #endregion
 280
 281  #region Update Definitions
 282  /// <summary>
 283  /// The possible ways of <see cref="ZipFile.CommitUpdate()">applying updates</see> to an archive.
 284  /// </summary>
 285  public enum FileUpdateMode
 286  {
 287    /// <summary>
 288    /// Perform all updates on temporary files ensuring that the original file is saved.
 289    /// </summary>
 290    Safe,
 291    /// <summary>
 292    /// Update the archive directly, which is faster but less safe.
 293    /// </summary>
 294    Direct,
 295  }
 296  #endregion
 297
 298  #region ZipFile Class
 299  /// <summary>
 300  /// This class represents a Zip archive.  You can ask for the contained
 301  /// entries, or get an input stream for a file entry.  The entry is
 302  /// automatically decompressed.
 303  ///
 304  /// You can also update the archive adding or deleting entries.
 305  ///
 306  /// This class is thread safe for input:  You can open input streams for arbitrary
 307  /// entries in different threads.
 308  /// <br/>
 309  /// <br/>Author of the original java version : Jochen Hoenicke
 310  /// </summary>
 311  /// <example>
 312  /// <code>
 313  /// using System;
 314  /// using System.Text;
 315  /// using System.Collections;
 316  /// using System.IO;
 317  ///
 318  /// using ICSharpCode.SharpZipLib.Zip;
 319  ///
 320  /// class MainClass
 321  /// {
 322  ///   static public void Main(string[] args)
 323  ///   {
 324  ///     using (ZipFile zFile = new ZipFile(args[0])) {
 325  ///       Console.WriteLine("Listing of : " + zFile.Name);
 326  ///       Console.WriteLine("");
 327  ///       Console.WriteLine("Raw Size    Size      Date     Time     Name");
 328  ///       Console.WriteLine("--------  --------  --------  ------  ---------");
 329  ///       foreach (ZipEntry e in zFile) {
 330  ///         if ( e.IsFile ) {
 331  ///           DateTime d = e.DateTime;
 332  ///           Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
 333  ///             d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
 334  ///             e.Name);
 335  ///         }
 336  ///       }
 337  ///     }
 338  ///   }
 339  /// }
 340  /// </code>
 341  /// </example>
 342  public class ZipFile : IEnumerable, IDisposable
 343  {
 344    #region KeyHandling
 345
 346    /// <summary>
 347    /// Delegate for handling keys/password setting during compresion/decompression.
 348    /// </summary>
 349    public delegate void KeysRequiredEventHandler(
 350      object sender,
 351      KeysRequiredEventArgs e
 352    );
 353
 354    /// <summary>
 355    /// Event handler for handling encryption keys.
 356    /// </summary>
 357    public KeysRequiredEventHandler KeysRequired;
 358
 359    /// <summary>
 360    /// Handles getting of encryption keys when required.
 361    /// </summary>
 362    /// <param name="fileName">The file for which encryption keys are required.</param>
 363    void OnKeysRequired(string fileName)
 364    {
 365      if (KeysRequired != null) {
 366        var krea = new KeysRequiredEventArgs(fileName, key);
 367        KeysRequired(this, krea);
 368        key = krea.Key;
 369      }
 370    }
 371
 372    /// <summary>
 373    /// Get/set the encryption key value.
 374    /// </summary>
 375    byte[] Key
 376    {
 377      get { return key; }
 378      set { key = value; }
 379    }
 380
 381#if !NETCF_1_0
 382    /// <summary>
 383    /// Password to be used for encrypting/decrypting files.
 384    /// </summary>
 385    /// <remarks>Set to null if no password is required.</remarks>
 386    public string Password
 387    {
 388      set
 389      {
 390        if ( string.IsNullOrEmpty(value)) {
 391          key = null;
 392        }
 393        else {
 394          rawPassword_ = value;
 395          key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value));
 396        }
 397      }
 398    }
 399#endif
 400
 401    /// <summary>
 402    /// Get a value indicating wether encryption keys are currently available.
 403    /// </summary>
 404    bool HaveKeys
 405    {
 406      get { return key != null; }
 407    }
 408    #endregion
 409
 410    #region Constructors
 411    /// <summary>
 412    /// Opens a Zip file with the given name for reading.
 413    /// </summary>
 414    /// <param name="name">The name of the file to open.</param>
 415    /// <exception cref="ArgumentNullException">The argument supplied is null.</exception>
 416    /// <exception cref="IOException">
 417    /// An i/o error occurs
 418    /// </exception>
 419    /// <exception cref="ZipException">
 420    /// The file doesn't contain a valid zip archive.
 421    /// </exception>
 422    public ZipFile(string name)
 423    {
 424      if ( name == null ) {
 425        throw new ArgumentNullException(nameof(name));
 426      }
 427
 428      name_ = name;
 429
 430      baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 431      isStreamOwner = true;
 432
 433      try {
 434        ReadEntries();
 435      }
 436      catch {
 437        DisposeInternal(true);
 438        throw;
 439      }
 440    }
 441
 442    /// <summary>
 443    /// Opens a Zip file reading the given <see cref="FileStream"/>.
 444    /// </summary>
 445    /// <param name="file">The <see cref="FileStream"/> to read archive data from.</param>
 446    /// <exception cref="ArgumentNullException">The supplied argument is null.</exception>
 447    /// <exception cref="IOException">
 448    /// An i/o error occurs.
 449    /// </exception>
 450    /// <exception cref="ZipException">
 451    /// The file doesn't contain a valid zip archive.
 452    /// </exception>
 453    public ZipFile(FileStream file)
 454    {
 455      if ( file == null ) {
 456        throw new ArgumentNullException(nameof(file));
 457      }
 458
 459      if ( !file.CanSeek ) {
 460        throw new ArgumentException("Stream is not seekable", nameof(file));
 461      }
 462
 463      baseStream_  = file;
 464      name_ = file.Name;
 465      isStreamOwner = true;
 466
 467      try {
 468        ReadEntries();
 469      }
 470      catch {
 471        DisposeInternal(true);
 472        throw;
 473      }
 474    }
 475
 476    /// <summary>
 477    /// Opens a Zip file reading the given <see cref="Stream"/>.
 478    /// </summary>
 479    /// <param name="stream">The <see cref="Stream"/> to read archive data from.</param>
 480    /// <exception cref="IOException">
 481    /// An i/o error occurs
 482    /// </exception>
 483    /// <exception cref="ZipException">
 484    /// The stream doesn't contain a valid zip archive.<br/>
 485    /// </exception>
 486    /// <exception cref="ArgumentException">
 487    /// The <see cref="Stream">stream</see> doesnt support seeking.
 488    /// </exception>
 489    /// <exception cref="ArgumentNullException">
 490    /// The <see cref="Stream">stream</see> argument is null.
 491    /// </exception>
 492    public ZipFile(Stream stream)
 493    {
 494      if ( stream == null ) {
 495        throw new ArgumentNullException(nameof(stream));
 496      }
 497
 498      if ( !stream.CanSeek ) {
 499        throw new ArgumentException("Stream is not seekable", nameof(stream));
 500      }
 501
 502      baseStream_  = stream;
 503      isStreamOwner = true;
 504
 505      if ( baseStream_.Length > 0 ) {
 506        try {
 507          ReadEntries();
 508        }
 509        catch {
 510          DisposeInternal(true);
 511          throw;
 512        }
 513      } else {
 514        entries_ = new ZipEntry[0];
 515        isNewArchive_ = true;
 516      }
 517    }
 518
 519    /// <summary>
 520    /// Initialises a default <see cref="ZipFile"/> instance with no entries and no file storage.
 521    /// </summary>
 522    internal ZipFile()
 523    {
 524      entries_ = new ZipEntry[0];
 525      isNewArchive_ = true;
 526    }
 527
 528    #endregion
 529
 530    #region Destructors and Closing
 531    /// <summary>
 532    /// Finalize this instance.
 533    /// </summary>
 534    ~ZipFile()
 535    {
 536      Dispose(false);
 537    }
 538
 539    /// <summary>
 540    /// Closes the ZipFile.  If the stream is <see cref="IsStreamOwner">owned</see> then this also closes the underlying
 541    /// Once closed, no further instance methods should be called.
 542    /// </summary>
 543    /// <exception cref="System.IO.IOException">
 544    /// An i/o error occurs.
 545    /// </exception>
 546    public void Close()
 547    {
 548      DisposeInternal(true);
 549      GC.SuppressFinalize(this);
 550    }
 551
 552    #endregion
 553
 554    #region Creators
 555    /// <summary>
 556    /// Create a new <see cref="ZipFile"/> whose data will be stored in a file.
 557    /// </summary>
 558    /// <param name="fileName">The name of the archive to create.</param>
 559    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 560    /// <exception cref="ArgumentNullException"><paramref name="fileName"></paramref> is null</exception>
 561    public static ZipFile Create(string fileName)
 562    {
 563      if ( fileName == null ) {
 564        throw new ArgumentNullException(nameof(fileName));
 565      }
 566
 567      FileStream fs = File.Create(fileName);
 568
 569      var result = new ZipFile();
 570      result.name_ = fileName;
 571      result.baseStream_ = fs;
 572      result.isStreamOwner = true;
 573      return result;
 574    }
 575
 576    /// <summary>
 577    /// Create a new <see cref="ZipFile"/> whose data will be stored on a stream.
 578    /// </summary>
 579    /// <param name="outStream">The stream providing data storage.</param>
 580    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 581    /// <exception cref="ArgumentNullException"><paramref name="outStream"> is null</paramref></exception>
 582    /// <exception cref="ArgumentException"><paramref name="outStream"> doesnt support writing.</paramref></exception>
 583    public static ZipFile Create(Stream outStream)
 584    {
 585      if ( outStream == null ) {
 586        throw new ArgumentNullException(nameof(outStream));
 587      }
 588
 589      if ( !outStream.CanWrite ) {
 590        throw new ArgumentException("Stream is not writeable", nameof(outStream));
 591      }
 592
 593      if ( !outStream.CanSeek ) {
 594        throw new ArgumentException("Stream is not seekable", nameof(outStream));
 595      }
 596
 597      var result = new ZipFile();
 598      result.baseStream_ = outStream;
 599      return result;
 600    }
 601
 602    #endregion
 603
 604    #region Properties
 605    /// <summary>
 606    /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance.
 607    /// If the flag is true then the stream will be closed when <see cref="Close">Close</see> is called.
 608    /// </summary>
 609    /// <remarks>
 610    /// The default value is true in all cases.
 611    /// </remarks>
 612    public bool IsStreamOwner
 613    {
 614      get { return isStreamOwner; }
 615      set { isStreamOwner = value; }
 616    }
 617
 618    /// <summary>
 619    /// Get a value indicating wether
 620    /// this archive is embedded in another file or not.
 621    /// </summary>
 622    public bool IsEmbeddedArchive
 623    {
 624      // Not strictly correct in all circumstances currently
 625      get { return offsetOfFirstEntry > 0; }
 626    }
 627
 628    /// <summary>
 629    /// Get a value indicating that this archive is a new one.
 630    /// </summary>
 631    public bool IsNewArchive
 632    {
 633      get { return isNewArchive_; }
 634    }
 635
 636    /// <summary>
 637    /// Gets the comment for the zip file.
 638    /// </summary>
 639    public string ZipFileComment
 640    {
 641      get { return comment_; }
 642    }
 643
 644    /// <summary>
 645    /// Gets the name of this zip file.
 646    /// </summary>
 647    public string Name
 648    {
 649      get { return name_; }
 650    }
 651
 652    /// <summary>
 653    /// Gets the number of entries in this zip file.
 654    /// </summary>
 655    /// <exception cref="InvalidOperationException">
 656    /// The Zip file has been closed.
 657    /// </exception>
 658    [Obsolete("Use the Count property instead")]
 659    public int Size
 660    {
 661      get
 662      {
 663        return entries_.Length;
 664      }
 665    }
 666
 667    /// <summary>
 668    /// Get the number of entries contained in this <see cref="ZipFile"/>.
 669    /// </summary>
 670    public long Count
 671    {
 672      get
 673      {
 674        return entries_.Length;
 675      }
 676    }
 677
 678    /// <summary>
 679    /// Indexer property for ZipEntries
 680    /// </summary>
 681    [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")]
 682    public ZipEntry this[int index]
 683    {
 684      get {
 685        return (ZipEntry) entries_[index].Clone();
 686      }
 687    }
 688
 689    #endregion
 690
 691    #region Input Handling
 692    /// <summary>
 693    /// Gets an enumerator for the Zip entries in this Zip file.
 694    /// </summary>
 695    /// <returns>Returns an <see cref="IEnumerator"/> for this archive.</returns>
 696    /// <exception cref="ObjectDisposedException">
 697    /// The Zip file has been closed.
 698    /// </exception>
 699    public IEnumerator GetEnumerator()
 700    {
 701      if (isDisposed_) {
 702        throw new ObjectDisposedException("ZipFile");
 703      }
 704
 705      return new ZipEntryEnumerator(entries_);
 706    }
 707
 708    /// <summary>
 709    /// Return the index of the entry with a matching name
 710    /// </summary>
 711    /// <param name="name">Entry name to find</param>
 712    /// <param name="ignoreCase">If true the comparison is case insensitive</param>
 713    /// <returns>The index position of the matching entry or -1 if not found</returns>
 714    /// <exception cref="ObjectDisposedException">
 715    /// The Zip file has been closed.
 716    /// </exception>
 717    public int FindEntry(string name, bool ignoreCase)
 718    {
 719      if (isDisposed_) {
 720        throw new ObjectDisposedException("ZipFile");
 721      }
 722
 723      // TODO: This will be slow as the next ice age for huge archives!
 724      for (int i = 0; i < entries_.Length; i++) {
 725        if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) {
 726          return i;
 727        }
 728      }
 729      return -1;
 730    }
 731
 732    /// <summary>
 733    /// Searches for a zip entry in this archive with the given name.
 734    /// String comparisons are case insensitive
 735    /// </summary>
 736    /// <param name="name">
 737    /// The name to find. May contain directory components separated by slashes ('/').
 738    /// </param>
 739    /// <returns>
 740    /// A clone of the zip entry, or null if no entry with that name exists.
 741    /// </returns>
 742    /// <exception cref="ObjectDisposedException">
 743    /// The Zip file has been closed.
 744    /// </exception>
 745    public ZipEntry GetEntry(string name)
 746    {
 747      if (isDisposed_) {
 748        throw new ObjectDisposedException("ZipFile");
 749      }
 750
 751      int index = FindEntry(name, true);
 752      return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null;
 753    }
 754
 755    /// <summary>
 756    /// Gets an input stream for reading the given zip entry data in an uncompressed form.
 757    /// Normally the <see cref="ZipEntry"/> should be an entry returned by GetEntry().
 758    /// </summary>
 759    /// <param name="entry">The <see cref="ZipEntry"/> to obtain a data <see cref="Stream"/> for</param>
 760    /// <returns>An input <see cref="Stream"/> containing data for this <see cref="ZipEntry"/></returns>
 761    /// <exception cref="ObjectDisposedException">
 762    /// The ZipFile has already been closed
 763    /// </exception>
 764    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 765    /// The compression method for the entry is unknown
 766    /// </exception>
 767    /// <exception cref="IndexOutOfRangeException">
 768    /// The entry is not found in the ZipFile
 769    /// </exception>
 770    public Stream GetInputStream(ZipEntry entry)
 771    {
 772      if ( entry == null ) {
 773        throw new ArgumentNullException(nameof(entry));
 774      }
 775
 776      if ( isDisposed_ ) {
 777        throw new ObjectDisposedException("ZipFile");
 778      }
 779
 780      long index = entry.ZipFileIndex;
 781      if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) {
 782        index = FindEntry(entry.Name, true);
 783        if (index < 0) {
 784          throw new ZipException("Entry cannot be found");
 785        }
 786      }
 787      return GetInputStream(index);
 788    }
 789
 790    /// <summary>
 791    /// Creates an input stream reading a zip entry
 792    /// </summary>
 793    /// <param name="entryIndex">The index of the entry to obtain an input stream for.</param>
 794    /// <returns>
 795    /// An input <see cref="Stream"/> containing data for this <paramref name="entryIndex"/>
 796    /// </returns>
 797    /// <exception cref="ObjectDisposedException">
 798    /// The ZipFile has already been closed
 799    /// </exception>
 800    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 801    /// The compression method for the entry is unknown
 802    /// </exception>
 803    /// <exception cref="IndexOutOfRangeException">
 804    /// The entry is not found in the ZipFile
 805    /// </exception>
 806    public Stream GetInputStream(long entryIndex)
 807    {
 808      if ( isDisposed_ ) {
 809        throw new ObjectDisposedException("ZipFile");
 810      }
 811
 812      long start = LocateEntry(entries_[entryIndex]);
 813      CompressionMethod method = entries_[entryIndex].CompressionMethod;
 814      Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize);
 815
 816      if (entries_[entryIndex].IsCrypted == true) {
 817#if NETCF_1_0
 818        throw new ZipException("decryption not supported for Compact Framework 1.0");
 819#else
 820        result = CreateAndInitDecryptionStream(result, entries_[entryIndex]);
 821        if (result == null) {
 822          throw new ZipException("Unable to decrypt this entry");
 823        }
 824#endif
 825      }
 826
 827      switch (method) {
 828        case CompressionMethod.Stored:
 829          // read as is.
 830          break;
 831
 832        case CompressionMethod.Deflated:
 833          // No need to worry about ownership and closing as underlying stream close does nothing.
 834          result = new InflaterInputStream(result, new Inflater(true));
 835          break;
 836
 837        default:
 838          throw new ZipException("Unsupported compression method " + method);
 839      }
 840
 841      return result;
 842    }
 843
 844    #endregion
 845
 846    #region Archive Testing
 847    /// <summary>
 848    /// Test an archive for integrity/validity
 849    /// </summary>
 850    /// <param name="testData">Perform low level data Crc check</param>
 851    /// <returns>true if all tests pass, false otherwise</returns>
 852    /// <remarks>Testing will terminate on the first error found.</remarks>
 853    public bool TestArchive(bool testData)
 854    {
 855      return TestArchive(testData, TestStrategy.FindFirstError, null);
 856    }
 857
 858    /// <summary>
 859    /// Test an archive for integrity/validity
 860    /// </summary>
 861    /// <param name="testData">Perform low level data Crc check</param>
 862    /// <param name="strategy">The <see cref="TestStrategy"></see> to apply.</param>
 863    /// <param name="resultHandler">The <see cref="ZipTestResultHandler"></see> handler to call during testing.</param>
 864    /// <returns>true if all tests pass, false otherwise</returns>
 865    /// <exception cref="ObjectDisposedException">The object has already been closed.</exception>
 866    public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
 867    {
 868      if (isDisposed_) {
 869        throw new ObjectDisposedException("ZipFile");
 870      }
 871
 872      var status = new TestStatus(this);
 873
 874      if ( resultHandler != null ) {
 875        resultHandler(status, null);
 876      }
 877
 878      HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header;
 879
 880      bool testing = true;
 881
 882      try {
 883        int entryIndex = 0;
 884
 885        while ( testing && (entryIndex < Count) ) {
 886          if ( resultHandler != null ) {
 887            status.SetEntry(this[entryIndex]);
 888            status.SetOperation(TestOperation.EntryHeader);
 889            resultHandler(status, null);
 890          }
 891
 892          try  {
 893            TestLocalHeader(this[entryIndex], test);
 894          }
 895          catch(ZipException ex) {
 896            status.AddError();
 897
 898            if ( resultHandler != null ) {
 899              resultHandler(status,
 900                string.Format("Exception during test - '{0}'", ex.Message));
 901            }
 902
 903            testing &= strategy != TestStrategy.FindFirstError;
 904          }
 905
 906          if ( testing && testData && this[entryIndex].IsFile ) {
 907            if ( resultHandler != null ) {
 908              status.SetOperation(TestOperation.EntryData);
 909              resultHandler(status, null);
 910            }
 911
 912                        var crc = new Crc32();
 913
 914                        using (Stream entryStream = this.GetInputStream(this[entryIndex]))
 915                        {
 916
 917                            byte[] buffer = new byte[4096];
 918                            long totalBytes = 0;
 919                            int bytesRead;
 920                            while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0)
 921                            {
 922                                crc.Update(buffer, 0, bytesRead);
 923
 924                                if (resultHandler != null)
 925                                {
 926                                    totalBytes += bytesRead;
 927                                    status.SetBytesTested(totalBytes);
 928                                    resultHandler(status, null);
 929                                }
 930                            }
 931                        }
 932
 933            if (this[entryIndex].Crc != crc.Value) {
 934              status.AddError();
 935
 936              if ( resultHandler != null ) {
 937                resultHandler(status, "CRC mismatch");
 938              }
 939
 940              testing &= strategy != TestStrategy.FindFirstError;
 941            }
 942
 943            if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) {
 944              var helper = new ZipHelperStream(baseStream_);
 945              var data = new DescriptorData();
 946              helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data);
 947              if (this[entryIndex].Crc != data.Crc) {
 948                status.AddError();
 949              }
 950
 951              if (this[entryIndex].CompressedSize != data.CompressedSize) {
 952                status.AddError();
 953              }
 954
 955              if (this[entryIndex].Size != data.Size) {
 956                status.AddError();
 957              }
 958            }
 959          }
 960
 961          if ( resultHandler != null ) {
 962            status.SetOperation(TestOperation.EntryComplete);
 963            resultHandler(status, null);
 964          }
 965
 966          entryIndex += 1;
 967        }
 968
 969        if ( resultHandler != null ) {
 970          status.SetOperation(TestOperation.MiscellaneousTests);
 971          resultHandler(status, null);
 972        }
 973
 974        // TODO: the 'Corrina Johns' test where local headers are missing from
 975        // the central directory.  They are therefore invisible to many archivers.
 976      }
 977      catch (Exception ex) {
 978        status.AddError();
 979
 980        if ( resultHandler != null ) {
 981          resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message));
 982        }
 983      }
 984
 985      if ( resultHandler != null ) {
 986        status.SetOperation(TestOperation.Complete);
 987        status.SetEntry(null);
 988        resultHandler(status, null);
 989      }
 990
 991      return (status.ErrorCount == 0);
 992    }
 993
 994    [Flags]
 995    enum HeaderTest
 996    {
 997      Extract = 0x01,     // Check that this header represents an entry whose data can be extracted
 998      Header  = 0x02,     // Check that this header contents are valid
 999    }
 1000
 1001    /// <summary>
 1002    /// Test a local header against that provided from the central directory
 1003    /// </summary>
 1004    /// <param name="entry">
 1005    /// The entry to test against
 1006    /// </param>
 1007    /// <param name="tests">The type of <see cref="HeaderTest">tests</see> to carry out.</param>
 1008    /// <returns>The offset of the entries data in the file</returns>
 1009    long TestLocalHeader(ZipEntry entry, HeaderTest tests)
 1010    {
 1011      lock(baseStream_)
 1012      {
 1013        bool testHeader = (tests & HeaderTest.Header) != 0;
 1014        bool testData = (tests & HeaderTest.Extract) != 0;
 1015
 1016        baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin);
 1017        if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) {
 1018          throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)
 1019        }
 1020
 1021        var extractVersion = ( short ) (ReadLEUshort() & 0x00ff);
 1022        var localFlags = ( short )ReadLEUshort();
 1023        var compressionMethod = ( short )ReadLEUshort();
 1024        var fileTime = ( short )ReadLEUshort();
 1025        var fileDate = ( short )ReadLEUshort();
 1026        uint crcValue = ReadLEUint();
 1027        long compressedSize = ReadLEUint();
 1028        long size = ReadLEUint();
 1029        int storedNameLength = ReadLEUshort();
 1030        int extraDataLength = ReadLEUshort();
 1031
 1032        byte[] nameData = new byte[storedNameLength];
 1033        StreamUtils.ReadFully(baseStream_, nameData);
 1034
 1035        byte[] extraData = new byte[extraDataLength];
 1036        StreamUtils.ReadFully(baseStream_, extraData);
 1037
 1038        var localExtraData = new ZipExtraData(extraData);
 1039
 1040        // Extra data / zip64 checks
 1041        if (localExtraData.Find(1))
 1042        {
 1043          // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64
 1044          // and size or compressedSize = MaxValue, due to rogue creators.
 1045
 1046          size = localExtraData.ReadLong();
 1047          compressedSize = localExtraData.ReadLong();
 1048
 1049                    if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0)
 1050                    {
 1051                        // These may be valid if patched later
 1052                        if ( (size != -1) && (size != entry.Size)) {
 1053                            throw new ZipException("Size invalid for descriptor");
 1054                        }
 1055
 1056                        if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) {
 1057                            throw new ZipException("Compressed size invalid for descriptor");
 1058                        }
 1059                    }
 1060                }
 1061        else
 1062        {
 1063          // No zip64 extra data but entry requires it.
 1064          if ((extractVersion >= ZipConstants.VersionZip64) &&
 1065            (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue)))
 1066          {
 1067            throw new ZipException("Required Zip64 extended information missing");
 1068          }
 1069        }
 1070
 1071        if ( testData ) {
 1072          if ( entry.IsFile ) {
 1073            if ( !entry.IsCompressionMethodSupported() ) {
 1074              throw new ZipException("Compression method not supported");
 1075            }
 1076
 1077            if ( (extractVersion > ZipConstants.VersionMadeBy)
 1078              || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) {
 1079              throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extract
 1080            }
 1081
 1082            if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.Enha
 1083              throw new ZipException("The library does not support the zip version required to extract this entry");
 1084            }
 1085          }
 1086        }
 1087
 1088                if (testHeader)
 1089                {
 1090                    if ((extractVersion <= 63) &&  // Ignore later versions as we dont know about them..
 1091                        (extractVersion != 10) &&
 1092                        (extractVersion != 11) &&
 1093                        (extractVersion != 20) &&
 1094                        (extractVersion != 21) &&
 1095                        (extractVersion != 25) &&
 1096                        (extractVersion != 27) &&
 1097                        (extractVersion != 45) &&
 1098                        (extractVersion != 46) &&
 1099                        (extractVersion != 50) &&
 1100                        (extractVersion != 51) &&
 1101                        (extractVersion != 52) &&
 1102                        (extractVersion != 61) &&
 1103                        (extractVersion != 62) &&
 1104                        (extractVersion != 63)
 1105                        )
 1106                    {
 1107                        throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", 
 1108                    }
 1109
 1110                    // Local entry flags dont have reserved bit set on.
 1111                    if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | General
 1112                    {
 1113                        throw new ZipException("Reserved bit flags cannot be set.");
 1114                    }
 1115
 1116                    // Encryption requires extract version >= 20
 1117                    if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20))
 1118                    {
 1119                        throw new ZipException(string.Format("Version required to extract this entry is too low for encr
 1120                    }
 1121
 1122                    // Strong encryption requires encryption flag to be set and extract version >= 50.
 1123                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1124                    {
 1125                        if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0)
 1126                        {
 1127                            throw new ZipException("Strong encryption flag set but encryption flag is not set");
 1128                        }
 1129
 1130                        if (extractVersion < 50)
 1131                        {
 1132                            throw new ZipException(string.Format("Version required to extract this entry is too low for 
 1133                        }
 1134                    }
 1135
 1136                    // Patched entries require extract version >= 27
 1137                    if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27))
 1138                    {
 1139                        throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractV
 1140                    }
 1141
 1142                    // Central header flags match local entry flags.
 1143                    if (localFlags != entry.Flags)
 1144                    {
 1145                        throw new ZipException("Central header/local header flags mismatch");
 1146                    }
 1147
 1148                    // Central header compression method matches local entry
 1149                    if (entry.CompressionMethod != (CompressionMethod)compressionMethod)
 1150                    {
 1151                        throw new ZipException("Central header/local header compression method mismatch");
 1152                    }
 1153
 1154                    if (entry.Version != extractVersion)
 1155                    {
 1156                        throw new ZipException("Extract version mismatch");
 1157                    }
 1158
 1159                    // Strong encryption and extract version match
 1160                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1161                    {
 1162                        if (extractVersion < 62)
 1163                        {
 1164                            throw new ZipException("Strong encryption flag set but version not high enough");
 1165                        }
 1166                    }
 1167
 1168                    if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0)
 1169                    {
 1170                        if ((fileTime != 0) || (fileDate != 0))
 1171                        {
 1172                            throw new ZipException("Header masked set but date/time values non-zero");
 1173                        }
 1174                    }
 1175
 1176                    if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0)
 1177                    {
 1178                        if (crcValue != (uint)entry.Crc)
 1179                        {
 1180                            throw new ZipException("Central header/local header crc mismatch");
 1181                        }
 1182                    }
 1183
 1184                    // Crc valid for empty entry.
 1185                    // This will also apply to streamed entries where size isnt known and the header cant be patched
 1186                    if ((size == 0) && (compressedSize == 0))
 1187                    {
 1188                        if (crcValue != 0)
 1189                        {
 1190                            throw new ZipException("Invalid CRC for empty entry");
 1191                        }
 1192                    }
 1193
 1194                    // TODO: make test more correct...  can't compare lengths as was done originally as this can fail fo
 1195                    // Assuming a code page at this point is not valid?  Best is to store the name length in the ZipEntr
 1196                    if (entry.Name.Length > storedNameLength)
 1197                    {
 1198                        throw new ZipException("File name length mismatch");
 1199                    }
 1200
 1201                    // Name data has already been read convert it and compare.
 1202                    string localName = ZipConstants.ConvertToStringExt(localFlags, nameData);
 1203
 1204                    // Central directory and local entry name match
 1205                    if (localName != entry.Name)
 1206                    {
 1207                        throw new ZipException("Central header and local header file name mismatch");
 1208                    }
 1209
 1210                    // Directories have zero actual size but can have compressed size
 1211                    if (entry.IsDirectory)
 1212                    {
 1213                        if (size > 0)
 1214                        {
 1215                            throw new ZipException("Directory cannot have size");
 1216                        }
 1217
 1218                        // There may be other cases where the compressed size can be greater than this?
 1219                        // If so until details are known we will be strict.
 1220                        if (entry.IsCrypted)
 1221                        {
 1222                            if (compressedSize > ZipConstants.CryptoHeaderSize + 2)
 1223                            {
 1224                                throw new ZipException("Directory compressed size invalid");
 1225                            }
 1226                        }
 1227                        else if (compressedSize > 2)
 1228                        {
 1229                            // When not compressed the directory size can validly be 2 bytes
 1230                            // if the true size wasnt known when data was originally being written.
 1231                            // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes
 1232                            throw new ZipException("Directory compressed size invalid");
 1233                        }
 1234                    }
 1235
 1236                    if (!ZipNameTransform.IsValidName(localName, true))
 1237                    {
 1238                        throw new ZipException("Name is invalid");
 1239                    }
 1240                }
 1241
 1242        // Tests that apply to both data and header.
 1243
 1244        // Size can be verified only if it is known in the local header.
 1245        // it will always be known in the central header.
 1246        if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) ||
 1247          ((size > 0) || (compressedSize > 0))) {
 1248
 1249          if (size != entry.Size) {
 1250            throw new ZipException(
 1251              string.Format("Size mismatch between central header({0}) and local header({1})",
 1252                entry.Size, size));
 1253          }
 1254
 1255          if (compressedSize != entry.CompressedSize &&
 1256            compressedSize != 0xFFFFFFFF && compressedSize != -1) {
 1257            throw new ZipException(
 1258              string.Format("Compressed size mismatch between central header({0}) and local header({1})",
 1259              entry.CompressedSize, compressedSize));
 1260          }
 1261        }
 1262
 1263        int extraLength = storedNameLength + extraDataLength;
 1264        return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength;
 1265      }
 1266    }
 1267
 1268    #endregion
 1269
 1270    #region Updating
 1271
 1272    const int DefaultBufferSize = 4096;
 1273
 1274    /// <summary>
 1275    /// The kind of update to apply.
 1276    /// </summary>
 1277    enum UpdateCommand
 1278    {
 1279      Copy,       // Copy original file contents.
 1280      Modify,     // Change encryption, compression, attributes, name, time etc, of an existing file.
 1281      Add,        // Add a new file to the archive.
 1282    }
 1283
 1284    #region Properties
 1285    /// <summary>
 1286    /// Get / set the <see cref="INameTransform"/> to apply to names when updating.
 1287    /// </summary>
 1288    public INameTransform NameTransform
 1289    {
 1290      get {
 1291        return updateEntryFactory_.NameTransform;
 1292      }
 1293
 1294      set {
 1295        updateEntryFactory_.NameTransform = value;
 1296      }
 1297    }
 1298
 1299    /// <summary>
 1300    /// Get/set the <see cref="IEntryFactory"/> used to generate <see cref="ZipEntry"/> values
 1301    /// during updates.
 1302    /// </summary>
 1303    public IEntryFactory EntryFactory
 1304    {
 1305      get {
 1306        return updateEntryFactory_;
 1307      }
 1308
 1309      set {
 1310        if (value == null) {
 1311          updateEntryFactory_ = new ZipEntryFactory();
 1312        }
 1313        else {
 1314          updateEntryFactory_ = value;
 1315        }
 1316      }
 1317    }
 1318
 1319    /// <summary>
 1320    /// Get /set the buffer size to be used when updating this zip file.
 1321    /// </summary>
 1322    public int BufferSize
 1323    {
 1324      get { return bufferSize_; }
 1325      set {
 1326        if ( value < 1024 ) {
 1327#if NETCF_1_0
 1328          throw new ArgumentOutOfRangeException("value");
 1329#else
 1330          throw new ArgumentOutOfRangeException(nameof(value), "cannot be below 1024");
 1331#endif
 1332        }
 1333
 1334        if ( bufferSize_ != value ) {
 1335          bufferSize_ = value;
 1336          copyBuffer_ = null;
 1337        }
 1338      }
 1339    }
 1340
 1341    /// <summary>
 1342    /// Get a value indicating an update has <see cref="BeginUpdate()">been started</see>.
 1343    /// </summary>
 1344    public bool IsUpdating
 1345    {
 1346      get { return updates_ != null; }
 1347    }
 1348
 1349    /// <summary>
 1350    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 1351    /// </summary>
 1352    public UseZip64 UseZip64
 1353    {
 1354      get { return useZip64_; }
 1355      set { useZip64_ = value; }
 1356    }
 1357
 1358    #endregion
 1359
 1360    #region Immediate updating
 1361//    TBD: Direct form of updating
 1362//
 1363//    public void Update(IEntryMatcher deleteMatcher)
 1364//    {
 1365//    }
 1366//
 1367//    public void Update(IScanner addScanner)
 1368//    {
 1369//    }
 1370    #endregion
 1371
 1372    #region Deferred Updating
 1373    /// <summary>
 1374    /// Begin updating this <see cref="ZipFile"/> archive.
 1375    /// </summary>
 1376    /// <param name="archiveStorage">The <see cref="IArchiveStorage">archive storage</see> for use during the update.</p
 1377    /// <param name="dataSource">The <see cref="IDynamicDataSource">data source</see> to utilise during updating.</param
 1378    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1379    /// <exception cref="ArgumentNullException">One of the arguments provided is null</exception>
 1380    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1381    public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
 1382    {
 1383      if ( archiveStorage == null ) {
 1384        throw new ArgumentNullException(nameof(archiveStorage));
 1385      }
 1386
 1387      if ( dataSource == null ) {
 1388        throw new ArgumentNullException(nameof(dataSource));
 1389      }
 1390
 1391      if ( isDisposed_ ) {
 1392        throw new ObjectDisposedException("ZipFile");
 1393      }
 1394
 1395      if ( IsEmbeddedArchive ) {
 1396        throw new ZipException ("Cannot update embedded/SFX archives");
 1397      }
 1398
 1399      archiveStorage_ = archiveStorage;
 1400      updateDataSource_ = dataSource;
 1401
 1402      // NOTE: the baseStream_ may not currently support writing or seeking.
 1403
 1404      updateIndex_ = new Hashtable();
 1405
 1406      updates_ = new ArrayList(entries_.Length);
 1407      foreach(ZipEntry entry in entries_) {
 1408        int index = updates_.Add(new ZipUpdate(entry));
 1409        updateIndex_.Add(entry.Name, index);
 1410      }
 1411
 1412      // We must sort by offset before using offset's calculated sizes
 1413      updates_.Sort(new UpdateComparer());
 1414
 1415      int idx = 0;
 1416      foreach (ZipUpdate update in updates_) {
 1417        //If last entry, there is no next entry offset to use
 1418        if (idx == updates_.Count - 1)
 1419          break;
 1420
 1421        update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset;
 1422        idx++;
 1423      }
 1424      updateCount_ = updates_.Count;
 1425
 1426      contentsEdited_ = false;
 1427      commentEdited_ = false;
 1428      newComment_ = null;
 1429    }
 1430
 1431    /// <summary>
 1432    /// Begin updating to this <see cref="ZipFile"/> archive.
 1433    /// </summary>
 1434    /// <param name="archiveStorage">The storage to use during the update.</param>
 1435    public void BeginUpdate(IArchiveStorage archiveStorage)
 1436    {
 1437      BeginUpdate(archiveStorage, new DynamicDiskDataSource());
 1438    }
 1439
 1440    /// <summary>
 1441    /// Begin updating this <see cref="ZipFile"/> archive.
 1442    /// </summary>
 1443    /// <seealso cref="BeginUpdate(IArchiveStorage)"/>
 1444    /// <seealso cref="CommitUpdate"></seealso>
 1445    /// <seealso cref="AbortUpdate"></seealso>
 1446    public void BeginUpdate()
 1447    {
 1448      if ( Name == null ) {
 1449        BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource());
 1450      }
 1451      else {
 1452        BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource());
 1453      }
 1454    }
 1455
 1456    /// <summary>
 1457    /// Commit current updates, updating this archive.
 1458    /// </summary>
 1459    /// <seealso cref="BeginUpdate()"></seealso>
 1460    /// <seealso cref="AbortUpdate"></seealso>
 1461    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1462    public void CommitUpdate()
 1463    {
 1464      if ( isDisposed_ ) {
 1465        throw new ObjectDisposedException("ZipFile");
 1466      }
 1467
 1468      CheckUpdating();
 1469
 1470      try {
 1471        updateIndex_.Clear();
 1472        updateIndex_=null;
 1473
 1474        if( contentsEdited_ ) {
 1475          RunUpdates();
 1476        }
 1477        else if( commentEdited_ ) {
 1478          UpdateCommentOnly();
 1479        }
 1480        else {
 1481          // Create an empty archive if none existed originally.
 1482          if( entries_.Length==0 ) {
 1483            byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_);
 1484            using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) {
 1485              zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment);
 1486            }
 1487          }
 1488        }
 1489
 1490      }
 1491      finally {
 1492        PostUpdateCleanup();
 1493      }
 1494    }
 1495
 1496    /// <summary>
 1497    /// Abort updating leaving the archive unchanged.
 1498    /// </summary>
 1499    /// <seealso cref="BeginUpdate()"></seealso>
 1500    /// <seealso cref="CommitUpdate"></seealso>
 1501    public void AbortUpdate()
 1502    {
 1503      PostUpdateCleanup();
 1504    }
 1505
 1506    /// <summary>
 1507    /// Set the file comment to be recorded when the current update is <see cref="CommitUpdate">commited</see>.
 1508    /// </summary>
 1509    /// <param name="comment">The comment to record.</param>
 1510    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1511    public void SetComment(string comment)
 1512    {
 1513      if ( isDisposed_ ) {
 1514        throw new ObjectDisposedException("ZipFile");
 1515      }
 1516
 1517      CheckUpdating();
 1518
 1519      newComment_ = new ZipString(comment);
 1520
 1521      if ( newComment_.RawLength  > 0xffff ) {
 1522        newComment_ = null;
 1523        throw new ZipException("Comment length exceeds maximum - 65535");
 1524      }
 1525
 1526      // We dont take account of the original and current comment appearing to be the same
 1527      // as encoding may be different.
 1528      commentEdited_ = true;
 1529    }
 1530
 1531    #endregion
 1532
 1533    #region Adding Entries
 1534
 1535    void AddUpdate(ZipUpdate update)
 1536    {
 1537      contentsEdited_ = true;
 1538
 1539      int index = FindExistingUpdate(update.Entry.Name);
 1540
 1541      if (index >= 0) {
 1542        if ( updates_[index] == null ) {
 1543          updateCount_ += 1;
 1544        }
 1545
 1546        // Direct replacement is faster than delete and add.
 1547        updates_[index] = update;
 1548      }
 1549      else {
 1550        index = updates_.Add(update);
 1551        updateCount_ += 1;
 1552        updateIndex_.Add(update.Entry.Name, index);
 1553      }
 1554    }
 1555
 1556    /// <summary>
 1557    /// Add a new entry to the archive.
 1558    /// </summary>
 1559    /// <param name="fileName">The name of the file to add.</param>
 1560    /// <param name="compressionMethod">The compression method to use.</param>
 1561    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comment for this entry.</param>
 1562    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1563    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1564    /// <exception cref="ArgumentOutOfRangeException">Compression method is not supported.</exception>
 1565    public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText )
 1566    {
 1567      if (fileName == null) {
 1568        throw new ArgumentNullException(nameof(fileName));
 1569      }
 1570
 1571      if ( isDisposed_ ) {
 1572        throw new ObjectDisposedException("ZipFile");
 1573      }
 1574
 1575      if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) {
 1576        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1577      }
 1578
 1579      CheckUpdating();
 1580      contentsEdited_ = true;
 1581
 1582      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1583      entry.IsUnicodeText = useUnicodeText;
 1584      entry.CompressionMethod = compressionMethod;
 1585
 1586      AddUpdate(new ZipUpdate(fileName, entry));
 1587    }
 1588
 1589    /// <summary>
 1590    /// Add a new entry to the archive.
 1591    /// </summary>
 1592    /// <param name="fileName">The name of the file to add.</param>
 1593    /// <param name="compressionMethod">The compression method to use.</param>
 1594    /// <exception cref="ArgumentNullException">ZipFile has been closed.</exception>
 1595    /// <exception cref="ArgumentOutOfRangeException">The compression method is not supported.</exception>
 1596    public void Add(string fileName, CompressionMethod compressionMethod)
 1597    {
 1598      if ( fileName == null ) {
 1599        throw new ArgumentNullException(nameof(fileName));
 1600      }
 1601
 1602      if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) {
 1603        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1604      }
 1605
 1606      CheckUpdating();
 1607      contentsEdited_ = true;
 1608
 1609      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1610      entry.CompressionMethod = compressionMethod;
 1611      AddUpdate(new ZipUpdate(fileName, entry));
 1612    }
 1613
 1614    /// <summary>
 1615    /// Add a file to the archive.
 1616    /// </summary>
 1617    /// <param name="fileName">The name of the file to add.</param>
 1618    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1619    public void Add(string fileName)
 1620    {
 1621      if ( fileName == null ) {
 1622        throw new ArgumentNullException(nameof(fileName));
 1623      }
 1624
 1625      CheckUpdating();
 1626      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName)));
 1627    }
 1628
 1629    /// <summary>
 1630    /// Add a file to the archive.
 1631    /// </summary>
 1632    /// <param name="fileName">The name of the file to add.</param>
 1633    /// <param name="entryName">The name to use for the <see cref="ZipEntry"/> on the Zip file created.</param>
 1634    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1635    public void Add(string fileName, string entryName)
 1636    {
 1637      if (fileName == null) {
 1638        throw new ArgumentNullException(nameof(fileName));
 1639      }
 1640
 1641      if ( entryName == null ) {
 1642        throw new ArgumentNullException(nameof(entryName));
 1643      }
 1644
 1645      CheckUpdating();
 1646      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true)));
 1647    }
 1648
 1649
 1650    /// <summary>
 1651    /// Add a file entry with data.
 1652    /// </summary>
 1653    /// <param name="dataSource">The source of the data for this entry.</param>
 1654    /// <param name="entryName">The name to give to the entry.</param>
 1655    public void Add(IStaticDataSource dataSource, string entryName)
 1656    {
 1657      if ( dataSource == null ) {
 1658        throw new ArgumentNullException(nameof(dataSource));
 1659      }
 1660
 1661      if ( entryName == null ) {
 1662        throw new ArgumentNullException(nameof(entryName));
 1663      }
 1664
 1665      CheckUpdating();
 1666      AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false)));
 1667    }
 1668
 1669    /// <summary>
 1670    /// Add a file entry with data.
 1671    /// </summary>
 1672    /// <param name="dataSource">The source of the data for this entry.</param>
 1673    /// <param name="entryName">The name to give to the entry.</param>
 1674    /// <param name="compressionMethod">The compression method to use.</param>
 1675    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 1676    {
 1677      if ( dataSource == null ) {
 1678        throw new ArgumentNullException(nameof(dataSource));
 1679      }
 1680
 1681      if ( entryName == null ) {
 1682        throw new ArgumentNullException(nameof(entryName));
 1683      }
 1684
 1685      CheckUpdating();
 1686
 1687      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1688      entry.CompressionMethod = compressionMethod;
 1689
 1690      AddUpdate(new ZipUpdate(dataSource, entry));
 1691    }
 1692
 1693    /// <summary>
 1694    /// Add a file entry with data.
 1695    /// </summary>
 1696    /// <param name="dataSource">The source of the data for this entry.</param>
 1697    /// <param name="entryName">The name to give to the entry.</param>
 1698    /// <param name="compressionMethod">The compression method to use.</param>
 1699    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comments for this entry.</param>
 1700    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicode
 1701    {
 1702      if (dataSource == null) {
 1703        throw new ArgumentNullException(nameof(dataSource));
 1704      }
 1705
 1706      if ( entryName == null ) {
 1707        throw new ArgumentNullException(nameof(entryName));
 1708      }
 1709
 1710      CheckUpdating();
 1711
 1712      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1713      entry.IsUnicodeText = useUnicodeText;
 1714      entry.CompressionMethod = compressionMethod;
 1715
 1716      AddUpdate(new ZipUpdate(dataSource, entry));
 1717    }
 1718
 1719    /// <summary>
 1720    /// Add a <see cref="ZipEntry"/> that contains no data.
 1721    /// </summary>
 1722    /// <param name="entry">The entry to add.</param>
 1723    /// <remarks>This can be used to add directories, volume labels, or empty file entries.</remarks>
 1724    public void Add(ZipEntry entry)
 1725    {
 1726      if ( entry == null ) {
 1727        throw new ArgumentNullException(nameof(entry));
 1728      }
 1729
 1730      CheckUpdating();
 1731
 1732      if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) {
 1733        throw new ZipException("Entry cannot have any data");
 1734      }
 1735
 1736      AddUpdate(new ZipUpdate(UpdateCommand.Add, entry));
 1737    }
 1738
 1739    /// <summary>
 1740    /// Add a directory entry to the archive.
 1741    /// </summary>
 1742    /// <param name="directoryName">The directory to add.</param>
 1743    public void AddDirectory(string directoryName)
 1744    {
 1745      if ( directoryName == null ) {
 1746        throw new ArgumentNullException(nameof(directoryName));
 1747      }
 1748
 1749      CheckUpdating();
 1750
 1751      ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName);
 1752      AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry));
 1753    }
 1754
 1755    #endregion
 1756
 1757    #region Modifying Entries
 1758/* Modify not yet ready for public consumption.
 1759   Direct modification of an entry should not overwrite original data before its read.
 1760   Safe mode is trivial in this sense.
 1761    public void Modify(ZipEntry original, ZipEntry updated)
 1762    {
 1763      if ( original == null ) {
 1764        throw new ArgumentNullException("original");
 1765      }
 1766
 1767      if ( updated == null ) {
 1768        throw new ArgumentNullException("updated");
 1769      }
 1770
 1771      CheckUpdating();
 1772      contentsEdited_ = true;
 1773      updates_.Add(new ZipUpdate(original, updated));
 1774    }
 1775*/
 1776    #endregion
 1777
 1778    #region Deleting Entries
 1779    /// <summary>
 1780    /// Delete an entry by name
 1781    /// </summary>
 1782    /// <param name="fileName">The filename to delete</param>
 1783    /// <returns>True if the entry was found and deleted; false otherwise.</returns>
 1784    public bool Delete(string fileName)
 1785    {
 1786      if ( fileName == null ) {
 1787        throw new ArgumentNullException(nameof(fileName));
 1788      }
 1789
 1790      CheckUpdating();
 1791
 1792      bool result = false;
 1793      int index = FindExistingUpdate(fileName);
 1794      if ( (index >= 0) && (updates_[index] != null) ) {
 1795        result = true;
 1796        contentsEdited_ = true;
 1797        updates_[index] = null;
 1798        updateCount_ -= 1;
 1799      }
 1800      else {
 1801        throw new ZipException("Cannot find entry to delete");
 1802      }
 1803      return result;
 1804    }
 1805
 1806    /// <summary>
 1807    /// Delete a <see cref="ZipEntry"/> from the archive.
 1808    /// </summary>
 1809    /// <param name="entry">The entry to delete.</param>
 1810    public void Delete(ZipEntry entry)
 1811    {
 1812      if ( entry == null ) {
 1813        throw new ArgumentNullException(nameof(entry));
 1814      }
 1815
 1816      CheckUpdating();
 1817
 1818      int index = FindExistingUpdate(entry);
 1819      if ( index >= 0 ) {
 1820        contentsEdited_ = true;
 1821        updates_[index] = null;
 1822        updateCount_ -= 1;
 1823      }
 1824      else {
 1825        throw new ZipException("Cannot find entry to delete");
 1826      }
 1827    }
 1828
 1829    #endregion
 1830
 1831    #region Update Support
 1832
 1833    #region Writing Values/Headers
 1834    void WriteLEShort(int value)
 1835    {
 1836      baseStream_.WriteByte(( byte )(value & 0xff));
 1837      baseStream_.WriteByte(( byte )((value >> 8) & 0xff));
 1838    }
 1839
 1840    /// <summary>
 1841    /// Write an unsigned short in little endian byte order.
 1842    /// </summary>
 1843    void WriteLEUshort(ushort value)
 1844    {
 1845      baseStream_.WriteByte(( byte )(value & 0xff));
 1846      baseStream_.WriteByte(( byte )(value >> 8));
 1847    }
 1848
 1849    /// <summary>
 1850    /// Write an int in little endian byte order.
 1851    /// </summary>
 1852    void WriteLEInt(int value)
 1853    {
 1854      WriteLEShort(value & 0xffff);
 1855      WriteLEShort(value >> 16);
 1856    }
 1857
 1858    /// <summary>
 1859    /// Write an unsigned int in little endian byte order.
 1860    /// </summary>
 1861    void WriteLEUint(uint value)
 1862    {
 1863      WriteLEUshort((ushort)(value & 0xffff));
 1864      WriteLEUshort((ushort)(value >> 16));
 1865    }
 1866
 1867    /// <summary>
 1868    /// Write a long in little endian byte order.
 1869    /// </summary>
 1870    void WriteLeLong(long value)
 1871    {
 1872      WriteLEInt(( int )(value & 0xffffffff));
 1873      WriteLEInt(( int )(value >> 32));
 1874    }
 1875
 1876    void WriteLEUlong(ulong value)
 1877    {
 1878      WriteLEUint(( uint )(value & 0xffffffff));
 1879      WriteLEUint(( uint )(value >> 32));
 1880    }
 1881
 1882    void WriteLocalEntryHeader(ZipUpdate update)
 1883    {
 1884      ZipEntry entry = update.OutEntry;
 1885
 1886      // TODO: Local offset will require adjusting for multi-disk zip files.
 1887      entry.Offset = baseStream_.Position;
 1888
 1889      // TODO: Need to clear any entry flags that dont make sense or throw an exception here.
 1890      if (update.Command != UpdateCommand.Copy) {
 1891        if (entry.CompressionMethod == CompressionMethod.Deflated) {
 1892          if (entry.Size == 0) {
 1893            // No need to compress - no data.
 1894            entry.CompressedSize = entry.Size;
 1895            entry.Crc = 0;
 1896            entry.CompressionMethod = CompressionMethod.Stored;
 1897          }
 1898        }
 1899        else if (entry.CompressionMethod == CompressionMethod.Stored) {
 1900          entry.Flags &= ~(int)GeneralBitFlags.Descriptor;
 1901        }
 1902
 1903        if (HaveKeys) {
 1904          entry.IsCrypted = true;
 1905          if (entry.Crc < 0) {
 1906            entry.Flags |= (int)GeneralBitFlags.Descriptor;
 1907          }
 1908        }
 1909        else {
 1910          entry.IsCrypted = false;
 1911        }
 1912
 1913        switch (useZip64_) {
 1914          case UseZip64.Dynamic:
 1915            if (entry.Size < 0) {
 1916              entry.ForceZip64();
 1917            }
 1918            break;
 1919
 1920          case UseZip64.On:
 1921            entry.ForceZip64();
 1922            break;
 1923
 1924          case UseZip64.Off:
 1925            // Do nothing.  The entry itself may be using Zip64 independantly.
 1926            break;
 1927        }
 1928      }
 1929
 1930      // Write the local file header
 1931      WriteLEInt(ZipConstants.LocalHeaderSignature);
 1932
 1933      WriteLEShort(entry.Version);
 1934      WriteLEShort(entry.Flags);
 1935
 1936      WriteLEShort((byte)entry.CompressionMethod);
 1937      WriteLEInt(( int )entry.DosTime);
 1938
 1939      if ( !entry.HasCrc ) {
 1940        // Note patch address for updating CRC later.
 1941        update.CrcPatchOffset = baseStream_.Position;
 1942        WriteLEInt(( int )0);
 1943      }
 1944      else {
 1945        WriteLEInt(unchecked(( int )entry.Crc));
 1946      }
 1947
 1948      if (entry.LocalHeaderRequiresZip64) {
 1949        WriteLEInt(-1);
 1950        WriteLEInt(-1);
 1951      }
 1952      else {
 1953        if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) {
 1954          update.SizePatchOffset = baseStream_.Position;
 1955        }
 1956
 1957        WriteLEInt(( int )entry.CompressedSize);
 1958        WriteLEInt(( int )entry.Size);
 1959      }
 1960
 1961      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 1962
 1963      if ( name.Length > 0xFFFF ) {
 1964        throw new ZipException("Entry name too long.");
 1965      }
 1966
 1967      var ed = new ZipExtraData(entry.ExtraData);
 1968
 1969      if ( entry.LocalHeaderRequiresZip64 ) {
 1970        ed.StartNewEntry();
 1971
 1972        // Local entry header always includes size and compressed size.
 1973        // NOTE the order of these fields is reversed when compared to the normal headers!
 1974        ed.AddLeLong(entry.Size);
 1975        ed.AddLeLong(entry.CompressedSize);
 1976        ed.AddNewEntry(1);
 1977      }
 1978      else {
 1979        ed.Delete(1);
 1980      }
 1981
 1982      entry.ExtraData = ed.GetEntryData();
 1983
 1984      WriteLEShort(name.Length);
 1985      WriteLEShort(entry.ExtraData.Length);
 1986
 1987      if ( name.Length > 0 ) {
 1988        baseStream_.Write(name, 0, name.Length);
 1989      }
 1990
 1991      if ( entry.LocalHeaderRequiresZip64 ) {
 1992        if ( !ed.Find(1) ) {
 1993          throw new ZipException("Internal error cannot find extra data");
 1994        }
 1995
 1996        update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex;
 1997      }
 1998
 1999      if ( entry.ExtraData.Length > 0 ) {
 2000        baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length);
 2001      }
 2002    }
 2003
 2004    int WriteCentralDirectoryHeader(ZipEntry entry)
 2005    {
 2006      if ( entry.CompressedSize < 0 ) {
 2007        throw new ZipException("Attempt to write central directory entry with unknown csize");
 2008      }
 2009
 2010      if ( entry.Size < 0 ) {
 2011        throw new ZipException("Attempt to write central directory entry with unknown size");
 2012      }
 2013
 2014      if ( entry.Crc < 0 ) {
 2015        throw new ZipException("Attempt to write central directory entry with unknown crc");
 2016      }
 2017
 2018      // Write the central file header
 2019      WriteLEInt(ZipConstants.CentralHeaderSignature);
 2020
 2021      // Version made by
 2022      WriteLEShort(ZipConstants.VersionMadeBy);
 2023
 2024      // Version required to extract
 2025      WriteLEShort(entry.Version);
 2026
 2027      WriteLEShort(entry.Flags);
 2028
 2029      unchecked {
 2030        WriteLEShort((byte)entry.CompressionMethod);
 2031        WriteLEInt((int)entry.DosTime);
 2032        WriteLEInt((int)entry.Crc);
 2033      }
 2034
 2035      if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) {
 2036        WriteLEInt(-1);
 2037      }
 2038      else {
 2039        WriteLEInt((int)(entry.CompressedSize & 0xffffffff));
 2040      }
 2041
 2042      if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) {
 2043        WriteLEInt(-1);
 2044      }
 2045      else {
 2046        WriteLEInt((int)entry.Size);
 2047      }
 2048
 2049      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 2050
 2051      if ( name.Length > 0xFFFF ) {
 2052        throw new ZipException("Entry name is too long.");
 2053      }
 2054
 2055      WriteLEShort(name.Length);
 2056
 2057      // Central header extra data is different to local header version so regenerate.
 2058      var ed = new ZipExtraData(entry.ExtraData);
 2059
 2060      if ( entry.CentralHeaderRequiresZip64 ) {
 2061        ed.StartNewEntry();
 2062
 2063        if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2064        {
 2065          ed.AddLeLong(entry.Size);
 2066        }
 2067
 2068        if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2069        {
 2070          ed.AddLeLong(entry.CompressedSize);
 2071        }
 2072
 2073        if ( entry.Offset >= 0xffffffff ) {
 2074          ed.AddLeLong(entry.Offset);
 2075        }
 2076
 2077        // Number of disk on which this file starts isnt supported and is never written here.
 2078        ed.AddNewEntry(1);
 2079      }
 2080      else {
 2081        // Should have already be done when local header was added.
 2082        ed.Delete(1);
 2083      }
 2084
 2085      byte[] centralExtraData = ed.GetEntryData();
 2086
 2087      WriteLEShort(centralExtraData.Length);
 2088      WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0);
 2089
 2090      WriteLEShort(0);  // disk number
 2091      WriteLEShort(0);  // internal file attributes
 2092
 2093      // External file attributes...
 2094      if ( entry.ExternalFileAttributes != -1 ) {
 2095        WriteLEInt(entry.ExternalFileAttributes);
 2096      }
 2097      else {
 2098        if ( entry.IsDirectory ) {
 2099          WriteLEUint(16);
 2100        }
 2101        else {
 2102          WriteLEUint(0);
 2103        }
 2104      }
 2105
 2106      if ( entry.Offset >= 0xffffffff ) {
 2107        WriteLEUint(0xffffffff);
 2108      }
 2109      else {
 2110        WriteLEUint((uint)(int)entry.Offset);
 2111      }
 2112
 2113      if ( name.Length > 0 ) {
 2114        baseStream_.Write(name, 0, name.Length);
 2115      }
 2116
 2117      if ( centralExtraData.Length > 0 ) {
 2118        baseStream_.Write(centralExtraData, 0, centralExtraData.Length);
 2119      }
 2120
 2121      byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0];
 2122
 2123      if ( rawComment.Length > 0 ) {
 2124        baseStream_.Write(rawComment, 0, rawComment.Length);
 2125      }
 2126
 2127      return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length;
 2128    }
 2129    #endregion
 2130
 2131    void PostUpdateCleanup()
 2132    {
 2133            updateDataSource_ = null;
 2134            updates_ = null;
 2135            updateIndex_ = null;
 2136
 2137            if (archiveStorage_ != null)
 2138            {
 2139        archiveStorage_.Dispose();
 2140        archiveStorage_=null;
 2141      }
 2142    }
 2143
 2144    string GetTransformedFileName(string name)
 2145    {
 2146            INameTransform transform = NameTransform;
 2147      return (transform != null) ?
 2148        transform.TransformFile(name) :
 2149        name;
 2150    }
 2151
 2152    string GetTransformedDirectoryName(string name)
 2153    {
 2154            INameTransform transform = NameTransform;
 2155            return (transform != null) ?
 2156        transform.TransformDirectory(name) :
 2157        name;
 2158    }
 2159
 2160    /// <summary>
 2161    /// Get a raw memory buffer.
 2162    /// </summary>
 2163    /// <returns>Returns a raw memory buffer.</returns>
 2164    byte[] GetBuffer()
 2165    {
 2166      if ( copyBuffer_ == null ) {
 2167        copyBuffer_ = new byte[bufferSize_];
 2168      }
 2169      return copyBuffer_;
 2170    }
 2171
 2172    void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
 2173    {
 2174      int bytesToCopy = GetDescriptorSize(update);
 2175
 2176      if ( bytesToCopy > 0 ) {
 2177        byte[] buffer = GetBuffer();
 2178
 2179        while ( bytesToCopy > 0 ) {
 2180          int readSize = Math.Min(buffer.Length, bytesToCopy);
 2181
 2182          int bytesRead = source.Read(buffer, 0, readSize);
 2183          if ( bytesRead > 0 ) {
 2184            dest.Write(buffer, 0, bytesRead);
 2185            bytesToCopy -= bytesRead;
 2186          }
 2187          else {
 2188            throw new ZipException("Unxpected end of stream");
 2189          }
 2190        }
 2191      }
 2192    }
 2193
 2194    void CopyBytes(ZipUpdate update, Stream destination, Stream source,
 2195      long bytesToCopy, bool updateCrc)
 2196    {
 2197      if ( destination == source ) {
 2198        throw new InvalidOperationException("Destination and source are the same");
 2199      }
 2200
 2201      // NOTE: Compressed size is updated elsewhere.
 2202      var crc = new Crc32();
 2203      byte[] buffer = GetBuffer();
 2204
 2205      long targetBytes = bytesToCopy;
 2206      long totalBytesRead = 0;
 2207
 2208      int bytesRead;
 2209      do {
 2210        int readSize = buffer.Length;
 2211
 2212        if ( bytesToCopy < readSize ) {
 2213          readSize = (int)bytesToCopy;
 2214        }
 2215
 2216        bytesRead = source.Read(buffer, 0, readSize);
 2217        if ( bytesRead > 0 ) {
 2218          if ( updateCrc ) {
 2219            crc.Update(buffer, 0, bytesRead);
 2220          }
 2221          destination.Write(buffer, 0, bytesRead);
 2222          bytesToCopy -= bytesRead;
 2223          totalBytesRead += bytesRead;
 2224        }
 2225      }
 2226      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2227
 2228      if ( totalBytesRead != targetBytes ) {
 2229        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2230      }
 2231
 2232      if ( updateCrc ) {
 2233        update.OutEntry.Crc = crc.Value;
 2234      }
 2235    }
 2236
 2237    /// <summary>
 2238    /// Get the size of the source descriptor for a <see cref="ZipUpdate"/>.
 2239    /// </summary>
 2240    /// <param name="update">The update to get the size for.</param>
 2241    /// <returns>The descriptor size, zero if there isnt one.</returns>
 2242    int GetDescriptorSize(ZipUpdate update)
 2243    {
 2244      int result = 0;
 2245      if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) {
 2246        result = ZipConstants.DataDescriptorSize - 4;
 2247        if ( update.Entry.LocalHeaderRequiresZip64 ) {
 2248          result = ZipConstants.Zip64DataDescriptorSize - 4;
 2249        }
 2250      }
 2251      return result;
 2252    }
 2253
 2254    void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition)
 2255    {
 2256      int bytesToCopy = GetDescriptorSize(update);
 2257
 2258      while ( bytesToCopy > 0 ) {
 2259        var readSize = (int)bytesToCopy;
 2260        byte[] buffer = GetBuffer();
 2261
 2262        stream.Position = sourcePosition;
 2263        int bytesRead = stream.Read(buffer, 0, readSize);
 2264        if ( bytesRead > 0 ) {
 2265          stream.Position = destinationPosition;
 2266          stream.Write(buffer, 0, bytesRead);
 2267          bytesToCopy -= bytesRead;
 2268          destinationPosition += bytesRead;
 2269          sourcePosition += bytesRead;
 2270        }
 2271        else {
 2272          throw new ZipException("Unxpected end of stream");
 2273        }
 2274      }
 2275    }
 2276
 2277    void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sou
 2278    {
 2279      long bytesToCopy = update.Entry.CompressedSize;
 2280
 2281      // NOTE: Compressed size is updated elsewhere.
 2282      var crc = new Crc32();
 2283      byte[] buffer = GetBuffer();
 2284
 2285      long targetBytes = bytesToCopy;
 2286      long totalBytesRead = 0;
 2287
 2288      int bytesRead;
 2289      do
 2290      {
 2291        int readSize = buffer.Length;
 2292
 2293        if ( bytesToCopy < readSize ) {
 2294          readSize = (int)bytesToCopy;
 2295        }
 2296
 2297        stream.Position = sourcePosition;
 2298        bytesRead = stream.Read(buffer, 0, readSize);
 2299        if ( bytesRead > 0 ) {
 2300          if ( updateCrc ) {
 2301            crc.Update(buffer, 0, bytesRead);
 2302          }
 2303          stream.Position = destinationPosition;
 2304          stream.Write(buffer, 0, bytesRead);
 2305
 2306          destinationPosition += bytesRead;
 2307          sourcePosition += bytesRead;
 2308          bytesToCopy -= bytesRead;
 2309          totalBytesRead += bytesRead;
 2310        }
 2311      }
 2312      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2313
 2314      if ( totalBytesRead != targetBytes ) {
 2315        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2316      }
 2317
 2318      if ( updateCrc ) {
 2319        update.OutEntry.Crc = crc.Value;
 2320      }
 2321    }
 2322
 2323    int FindExistingUpdate(ZipEntry entry)
 2324    {
 2325      int result = -1;
 2326      string convertedName = GetTransformedFileName(entry.Name);
 2327
 2328      if (updateIndex_.ContainsKey(convertedName)) {
 2329        result = (int)updateIndex_[convertedName];
 2330      }
 2331/*
 2332      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2333      // for CF?
 2334      for (int index = 0; index < updates_.Count; ++index)
 2335      {
 2336        ZipUpdate zu = ( ZipUpdate )updates_[index];
 2337        if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) &&
 2338          (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) {
 2339          result = index;
 2340          break;
 2341        }
 2342      }
 2343 */
 2344      return result;
 2345    }
 2346
 2347    int FindExistingUpdate(string fileName)
 2348    {
 2349      int result = -1;
 2350
 2351      string convertedName = GetTransformedFileName(fileName);
 2352
 2353      if (updateIndex_.ContainsKey(convertedName)) {
 2354        result = (int)updateIndex_[convertedName];
 2355      }
 2356
 2357/*
 2358      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2359      // for CF?
 2360      for ( int index = 0; index < updates_.Count; ++index ) {
 2361        if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name,
 2362          true, CultureInfo.InvariantCulture) == 0 ) {
 2363          result = index;
 2364          break;
 2365        }
 2366      }
 2367 */
 2368
 2369      return result;
 2370    }
 2371
 2372    /// <summary>
 2373    /// Get an output stream for the specified <see cref="ZipEntry"/>
 2374    /// </summary>
 2375    /// <param name="entry">The entry to get an output stream for.</param>
 2376    /// <returns>The output stream obtained for the entry.</returns>
 2377    Stream GetOutputStream(ZipEntry entry)
 2378    {
 2379      Stream result = baseStream_;
 2380
 2381      if ( entry.IsCrypted == true ) {
 2382#if NETCF_1_0
 2383        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 2384#else
 2385        result = CreateAndInitEncryptionStream(result, entry);
 2386#endif
 2387      }
 2388
 2389      switch ( entry.CompressionMethod ) {
 2390        case CompressionMethod.Stored:
 2391          result = new UncompressedStream(result);
 2392          break;
 2393
 2394        case CompressionMethod.Deflated:
 2395          var dos = new DeflaterOutputStream(result, new Deflater(9, true));
 2396          dos.IsStreamOwner = false;
 2397          result = dos;
 2398          break;
 2399
 2400        default:
 2401          throw new ZipException("Unknown compression method " + entry.CompressionMethod);
 2402      }
 2403      return result;
 2404    }
 2405
 2406    void AddEntry(ZipFile workFile, ZipUpdate update)
 2407    {
 2408      Stream source = null;
 2409
 2410      if ( update.Entry.IsFile ) {
 2411        source = update.GetSource();
 2412
 2413        if ( source == null ) {
 2414          source = updateDataSource_.GetSource(update.Entry, update.Filename);
 2415        }
 2416      }
 2417
 2418      if ( source != null ) {
 2419        using ( source ) {
 2420          long sourceStreamLength = source.Length;
 2421          if ( update.OutEntry.Size < 0 ) {
 2422            update.OutEntry.Size = sourceStreamLength;
 2423          }
 2424          else {
 2425            // Check for errant entries.
 2426            if ( update.OutEntry.Size != sourceStreamLength ) {
 2427              throw new ZipException("Entry size/stream size mismatch");
 2428            }
 2429          }
 2430
 2431          workFile.WriteLocalEntryHeader(update);
 2432
 2433          long dataStart = workFile.baseStream_.Position;
 2434
 2435          using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2436            CopyBytes(update, output, source, sourceStreamLength, true);
 2437          }
 2438
 2439          long dataEnd = workFile.baseStream_.Position;
 2440          update.OutEntry.CompressedSize = dataEnd - dataStart;
 2441
 2442          if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor)
 2443          {
 2444            var helper = new ZipHelperStream(workFile.baseStream_);
 2445            helper.WriteDataDescriptor(update.OutEntry);
 2446          }
 2447        }
 2448      }
 2449      else {
 2450        workFile.WriteLocalEntryHeader(update);
 2451        update.OutEntry.CompressedSize = 0;
 2452      }
 2453
 2454    }
 2455
 2456    void ModifyEntry(ZipFile workFile, ZipUpdate update)
 2457    {
 2458      workFile.WriteLocalEntryHeader(update);
 2459      long dataStart = workFile.baseStream_.Position;
 2460
 2461      // TODO: This is slow if the changes don't effect the data!!
 2462      if ( update.Entry.IsFile && (update.Filename != null) ) {
 2463        using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2464          using ( Stream source = this.GetInputStream(update.Entry) ) {
 2465            CopyBytes(update, output, source, source.Length, true);
 2466          }
 2467        }
 2468      }
 2469
 2470      long dataEnd = workFile.baseStream_.Position;
 2471      update.Entry.CompressedSize = dataEnd - dataStart;
 2472    }
 2473
 2474    void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition)
 2475    {
 2476      bool skipOver = false || update.Entry.Offset == destinationPosition;
 2477
 2478      if ( !skipOver ) {
 2479        baseStream_.Position = destinationPosition;
 2480        workFile.WriteLocalEntryHeader(update);
 2481        destinationPosition = baseStream_.Position;
 2482      }
 2483
 2484      long sourcePosition = 0;
 2485
 2486      const int NameLengthOffset = 26;
 2487
 2488      // TODO: Add base for SFX friendly handling
 2489      long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2490
 2491      baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2492
 2493      // Clumsy way of handling retrieving the original name and extra data length for now.
 2494      // TODO: Stop re-reading name and data length in CopyEntryDirect.
 2495      uint nameLength = ReadLEUshort();
 2496      uint extraLength = ReadLEUshort();
 2497
 2498      sourcePosition = baseStream_.Position + nameLength + extraLength;
 2499
 2500      if (skipOver) {
 2501        if (update.OffsetBasedSize != -1)
 2502          destinationPosition += update.OffsetBasedSize;
 2503        else
 2504          // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) ar
 2505          // WinZip produces a warning on these entries:
 2506          // "caution: value of lrec.csize (compressed size) changed from ..."
 2507          destinationPosition +=
 2508            (sourcePosition - entryDataOffset) + NameLengthOffset +  // Header size
 2509            update.Entry.CompressedSize + GetDescriptorSize(update);
 2510      }
 2511      else {
 2512        if ( update.Entry.CompressedSize > 0 ) {
 2513          CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition );
 2514        }
 2515        CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition);
 2516      }
 2517    }
 2518
 2519    void CopyEntry(ZipFile workFile, ZipUpdate update)
 2520    {
 2521      workFile.WriteLocalEntryHeader(update);
 2522
 2523      if ( update.Entry.CompressedSize > 0 ) {
 2524        const int NameLengthOffset = 26;
 2525
 2526        long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2527
 2528        // TODO: This wont work for SFX files!
 2529        baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2530
 2531        uint nameLength = ReadLEUshort();
 2532        uint extraLength = ReadLEUshort();
 2533
 2534        baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current);
 2535
 2536        CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false);
 2537      }
 2538      CopyDescriptorBytes(update, workFile.baseStream_, baseStream_);
 2539    }
 2540
 2541    void Reopen(Stream source)
 2542    {
 2543      if ( source == null ) {
 2544        throw new ZipException("Failed to reopen archive - no source");
 2545      }
 2546
 2547      isNewArchive_ = false;
 2548      baseStream_ = source;
 2549      ReadEntries();
 2550    }
 2551
 2552    void Reopen()
 2553    {
 2554      if (Name == null) {
 2555        throw new InvalidOperationException("Name is not known cannot Reopen");
 2556      }
 2557
 2558      Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read));
 2559    }
 2560
 2561    void UpdateCommentOnly()
 2562    {
 2563      long baseLength = baseStream_.Length;
 2564
 2565      ZipHelperStream updateFile = null;
 2566
 2567      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2568        Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_);
 2569        updateFile = new ZipHelperStream(copyStream);
 2570        updateFile.IsStreamOwner = true;
 2571
 2572        baseStream_.Close();
 2573        baseStream_ = null;
 2574      }
 2575      else {
 2576        if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) {
 2577          // TODO: archiveStorage wasnt originally intended for this use.
 2578          // Need to revisit this to tidy up handling as archive storage currently doesnt
 2579          // handle the original stream well.
 2580          // The problem is when using an existing zip archive with an in memory archive storage.
 2581          // The open stream wont support writing but the memory storage should open the same file not an in memory one.
 2582
 2583          // Need to tidy up the archive storage interface and contract basically.
 2584          baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_);
 2585          updateFile = new ZipHelperStream(baseStream_);
 2586        }
 2587        else {
 2588          baseStream_.Close();
 2589          baseStream_ = null;
 2590          updateFile = new ZipHelperStream(Name);
 2591        }
 2592      }
 2593
 2594      using ( updateFile ) {
 2595        long locatedCentralDirOffset =
 2596          updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 2597                            baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 2598        if ( locatedCentralDirOffset < 0 ) {
 2599          throw new ZipException("Cannot find central directory");
 2600        }
 2601
 2602        const int CentralHeaderCommentSizeOffset = 16;
 2603        updateFile.Position += CentralHeaderCommentSizeOffset;
 2604
 2605        byte[] rawComment = newComment_.RawComment;
 2606
 2607        updateFile.WriteLEShort(rawComment.Length);
 2608        updateFile.Write(rawComment, 0, rawComment.Length);
 2609        updateFile.SetLength(updateFile.Position);
 2610      }
 2611
 2612      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2613        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2614      }
 2615      else {
 2616        ReadEntries();
 2617      }
 2618    }
 2619
 2620    /// <summary>
 2621    /// Class used to sort updates.
 2622    /// </summary>
 2623    class UpdateComparer : IComparer
 2624    {
 2625      /// <summary>
 2626      /// Compares two objects and returns a value indicating whether one is
 2627      /// less than, equal to or greater than the other.
 2628      /// </summary>
 2629      /// <param name="x">First object to compare</param>
 2630      /// <param name="y">Second object to compare.</param>
 2631      /// <returns>Compare result.</returns>
 2632      public int Compare(
 2633        object x,
 2634        object y)
 2635      {
 2636        var zx = x as ZipUpdate;
 2637        var zy = y as ZipUpdate;
 2638
 2639        int result;
 2640
 2641        if (zx == null) {
 2642          if (zy == null) {
 2643            result = 0;
 2644          }
 2645          else {
 2646            result = -1;
 2647          }
 2648        }
 2649        else if (zy == null) {
 2650          result = 1;
 2651        }
 2652        else {
 2653          int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1;
 2654          int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1;
 2655
 2656          result = xCmdValue - yCmdValue;
 2657          if (result == 0) {
 2658            long offsetDiff = zx.Entry.Offset - zy.Entry.Offset;
 2659            if (offsetDiff < 0) {
 2660              result = -1;
 2661            }
 2662            else if (offsetDiff == 0) {
 2663              result = 0;
 2664            }
 2665            else {
 2666              result = 1;
 2667            }
 2668          }
 2669        }
 2670        return result;
 2671      }
 2672    }
 2673
 2674    void RunUpdates()
 2675    {
 2676      long sizeEntries = 0;
 2677      long endOfStream = 0;
 2678      bool directUpdate = false;
 2679      long destinationPosition = 0; // NOT SFX friendly
 2680
 2681      ZipFile workFile;
 2682
 2683      if ( IsNewArchive ) {
 2684        workFile = this;
 2685        workFile.baseStream_.Position = 0;
 2686        directUpdate = true;
 2687      }
 2688      else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) {
 2689        workFile = this;
 2690        workFile.baseStream_.Position = 0;
 2691        directUpdate = true;
 2692
 2693        // Sort the updates by offset within copies/modifies, then adds.
 2694        // This ensures that data required by copies will not be overwritten.
 2695        updates_.Sort(new UpdateComparer());
 2696      }
 2697      else {
 2698        workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput());
 2699        workFile.UseZip64 = UseZip64;
 2700
 2701        if (key != null) {
 2702          workFile.key = (byte[])key.Clone();
 2703        }
 2704      }
 2705
 2706      try {
 2707        foreach ( ZipUpdate update in updates_ ) {
 2708          if (update != null) {
 2709            switch (update.Command) {
 2710              case UpdateCommand.Copy:
 2711                if (directUpdate) {
 2712                  CopyEntryDirect(workFile, update, ref destinationPosition);
 2713                }
 2714                else {
 2715                  CopyEntry(workFile, update);
 2716                }
 2717                break;
 2718
 2719              case UpdateCommand.Modify:
 2720                // TODO: Direct modifying of an entry will take some legwork.
 2721                ModifyEntry(workFile, update);
 2722                break;
 2723
 2724              case UpdateCommand.Add:
 2725                if (!IsNewArchive && directUpdate) {
 2726                  workFile.baseStream_.Position = destinationPosition;
 2727                }
 2728
 2729                AddEntry(workFile, update);
 2730
 2731                if (directUpdate) {
 2732                  destinationPosition = workFile.baseStream_.Position;
 2733                }
 2734                break;
 2735            }
 2736          }
 2737        }
 2738
 2739        if ( !IsNewArchive && directUpdate ) {
 2740          workFile.baseStream_.Position = destinationPosition;
 2741        }
 2742
 2743        long centralDirOffset = workFile.baseStream_.Position;
 2744
 2745        foreach ( ZipUpdate update in updates_ ) {
 2746          if (update != null) {
 2747            sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry);
 2748          }
 2749        }
 2750
 2751        byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_);
 2752        using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) {
 2753          zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment);
 2754        }
 2755
 2756        endOfStream = workFile.baseStream_.Position;
 2757
 2758        // And now patch entries...
 2759        foreach ( ZipUpdate update in updates_ ) {
 2760          if (update != null)
 2761          {
 2762            // If the size of the entry is zero leave the crc as 0 as well.
 2763            // The calculated crc will be all bits on...
 2764            if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) {
 2765              workFile.baseStream_.Position = update.CrcPatchOffset;
 2766              workFile.WriteLEInt((int)update.OutEntry.Crc);
 2767            }
 2768
 2769            if (update.SizePatchOffset > 0) {
 2770              workFile.baseStream_.Position = update.SizePatchOffset;
 2771              if (update.OutEntry.LocalHeaderRequiresZip64) {
 2772                workFile.WriteLeLong(update.OutEntry.Size);
 2773                workFile.WriteLeLong(update.OutEntry.CompressedSize);
 2774              }
 2775              else {
 2776                workFile.WriteLEInt((int)update.OutEntry.CompressedSize);
 2777                workFile.WriteLEInt((int)update.OutEntry.Size);
 2778              }
 2779            }
 2780          }
 2781        }
 2782      }
 2783      catch {
 2784        workFile.Close();
 2785        if (!directUpdate && (workFile.Name != null)) {
 2786          File.Delete(workFile.Name);
 2787        }
 2788        throw;
 2789      }
 2790
 2791      if (directUpdate) {
 2792        workFile.baseStream_.SetLength(endOfStream);
 2793        workFile.baseStream_.Flush();
 2794        isNewArchive_ = false;
 2795        ReadEntries();
 2796      }
 2797      else {
 2798        baseStream_.Close();
 2799        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2800      }
 2801    }
 2802
 2803    void CheckUpdating()
 2804    {
 2805      if ( updates_ == null ) {
 2806        throw new InvalidOperationException("BeginUpdate has not been called");
 2807      }
 2808    }
 2809
 2810    #endregion
 2811
 2812    #region ZipUpdate class
 2813    /// <summary>
 2814    /// Represents a pending update to a Zip file.
 2815    /// </summary>
 2816    class ZipUpdate
 2817    {
 2818      #region Constructors
 2819      public ZipUpdate(string fileName, ZipEntry entry)
 2820      {
 2821        command_ = UpdateCommand.Add;
 2822        entry_ = entry;
 2823        filename_ = fileName;
 2824      }
 2825
 2826      [Obsolete]
 2827      public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod)
 2828      {
 2829        command_ = UpdateCommand.Add;
 2830        entry_ = new ZipEntry(entryName);
 2831        entry_.CompressionMethod = compressionMethod;
 2832        filename_ = fileName;
 2833      }
 2834
 2835      [Obsolete]
 2836      public ZipUpdate(string fileName, string entryName)
 2837        : this(fileName, entryName, CompressionMethod.Deflated)
 2838      {
 2839        // Do nothing.
 2840      }
 2841
 2842      [Obsolete]
 2843      public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 2844      {
 2845        command_ = UpdateCommand.Add;
 2846        entry_ = new ZipEntry(entryName);
 2847        entry_.CompressionMethod = compressionMethod;
 2848        dataSource_ = dataSource;
 2849      }
 2850
 2851      public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry)
 2852      {
 2853        command_ = UpdateCommand.Add;
 2854        entry_ = entry;
 2855        dataSource_ = dataSource;
 2856      }
 2857
 2858      public ZipUpdate(ZipEntry original, ZipEntry updated)
 2859      {
 2860        throw new ZipException("Modify not currently supported");
 2861      /*
 2862        command_ = UpdateCommand.Modify;
 2863        entry_ = ( ZipEntry )original.Clone();
 2864        outEntry_ = ( ZipEntry )updated.Clone();
 2865      */
 2866      }
 2867
 2868      public ZipUpdate(UpdateCommand command, ZipEntry entry)
 2869      {
 2870        command_ = command;
 2871        entry_ = ( ZipEntry )entry.Clone();
 2872      }
 2873
 2874
 2875      /// <summary>
 2876      /// Copy an existing entry.
 2877      /// </summary>
 2878      /// <param name="entry">The existing entry to copy.</param>
 2879      public ZipUpdate(ZipEntry entry)
 2880        : this(UpdateCommand.Copy, entry)
 2881      {
 2882        // Do nothing.
 2883      }
 2884      #endregion
 2885
 2886      /// <summary>
 2887      /// Get the <see cref="ZipEntry"/> for this update.
 2888      /// </summary>
 2889      /// <remarks>This is the source or original entry.</remarks>
 2890      public ZipEntry Entry
 2891      {
 2892        get { return entry_; }
 2893      }
 2894
 2895      /// <summary>
 2896      /// Get the <see cref="ZipEntry"/> that will be written to the updated/new file.
 2897      /// </summary>
 2898      public ZipEntry OutEntry
 2899      {
 2900        get {
 2901          if ( outEntry_ == null ) {
 2902            outEntry_ = (ZipEntry)entry_.Clone();
 2903          }
 2904
 2905          return outEntry_;
 2906        }
 2907      }
 2908
 2909      /// <summary>
 2910      /// Get the command for this update.
 2911      /// </summary>
 2912      public UpdateCommand Command
 2913      {
 2914        get { return command_; }
 2915      }
 2916
 2917      /// <summary>
 2918      /// Get the filename if any for this update.  Null if none exists.
 2919      /// </summary>
 2920      public string Filename
 2921      {
 2922        get { return filename_; }
 2923      }
 2924
 2925      /// <summary>
 2926      /// Get/set the location of the size patch for this update.
 2927      /// </summary>
 2928      public long SizePatchOffset
 2929      {
 2930        get { return sizePatchOffset_; }
 2931        set { sizePatchOffset_ = value; }
 2932      }
 2933
 2934      /// <summary>
 2935      /// Get /set the location of the crc patch for this update.
 2936      /// </summary>
 2937      public long CrcPatchOffset
 2938      {
 2939        get { return crcPatchOffset_; }
 2940        set { crcPatchOffset_ = value; }
 2941      }
 2942
 2943      /// <summary>
 2944      /// Get/set the size calculated by offset.
 2945      /// Specifically, the difference between this and next entry's starting offset.
 2946      /// </summary>
 2947      public long OffsetBasedSize
 2948      {
 2949        get { return _offsetBasedSize; }
 2950        set { _offsetBasedSize = value; }
 2951      }
 2952
 2953      public Stream GetSource()
 2954      {
 2955        Stream result = null;
 2956        if ( dataSource_ != null ) {
 2957          result = dataSource_.GetSource();
 2958        }
 2959
 2960        return result;
 2961      }
 2962
 2963      #region Instance Fields
 2964      ZipEntry entry_;
 2965      ZipEntry outEntry_;
 2966      UpdateCommand command_;
 2967      IStaticDataSource dataSource_;
 2968      string filename_;
 2969      long sizePatchOffset_ = -1;
 2970      long crcPatchOffset_ = -1;
 2971      long _offsetBasedSize = -1;
 2972      #endregion
 2973    }
 2974
 2975    #endregion
 2976    #endregion
 2977
 2978    #region Disposing
 2979
 2980    #region IDisposable Members
 2981    void IDisposable.Dispose()
 2982    {
 2983      Close();
 2984    }
 2985    #endregion
 2986
 2987    void DisposeInternal(bool disposing)
 2988    {
 2989      if ( !isDisposed_ ) {
 2990        isDisposed_ = true;
 2991        entries_ = new ZipEntry[0];
 2992
 2993        if ( IsStreamOwner && (baseStream_ != null) ) {
 2994          lock(baseStream_) {
 2995            baseStream_.Close();
 2996          }
 2997        }
 2998
 2999        PostUpdateCleanup();
 3000      }
 3001    }
 3002
 3003    /// <summary>
 3004    /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
 3005    /// </summary>
 3006    /// <param name="disposing">true to release both managed and unmanaged resources;
 3007    /// false to release only unmanaged resources.</param>
 3008    protected virtual void Dispose(bool disposing)
 3009    {
 3010      DisposeInternal(disposing);
 3011    }
 3012
 3013    #endregion
 3014
 3015    #region Internal routines
 3016    #region Reading
 3017    /// <summary>
 3018    /// Read an unsigned short in little endian byte order.
 3019    /// </summary>
 3020    /// <returns>Returns the value read.</returns>
 3021    /// <exception cref="EndOfStreamException">
 3022    /// The stream ends prematurely
 3023    /// </exception>
 3024    ushort ReadLEUshort()
 3025    {
 3026      int data1 = baseStream_.ReadByte();
 3027
 3028      if ( data1 < 0 ) {
 3029        throw new EndOfStreamException("End of stream");
 3030      }
 3031
 3032      int data2 = baseStream_.ReadByte();
 3033
 3034      if ( data2 < 0 ) {
 3035        throw new EndOfStreamException("End of stream");
 3036      }
 3037
 3038
 3039      return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8)));
 3040    }
 3041
 3042    /// <summary>
 3043    /// Read a uint in little endian byte order.
 3044    /// </summary>
 3045    /// <returns>Returns the value read.</returns>
 3046    /// <exception cref="IOException">
 3047    /// An i/o error occurs.
 3048    /// </exception>
 3049    /// <exception cref="System.IO.EndOfStreamException">
 3050    /// The file ends prematurely
 3051    /// </exception>
 3052    uint ReadLEUint()
 3053    {
 3054      return (uint)(ReadLEUshort() | (ReadLEUshort() << 16));
 3055    }
 3056
 3057    ulong ReadLEUlong()
 3058    {
 3059      return ReadLEUint() | ((ulong)ReadLEUint() << 32);
 3060    }
 3061
 3062    #endregion
 3063    // NOTE this returns the offset of the first byte after the signature.
 3064    long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 3065    {
 3066      using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) {
 3067        return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData);
 3068      }
 3069    }
 3070
 3071    /// <summary>
 3072    /// Search for and read the central directory of a zip file filling the entries array.
 3073    /// </summary>
 3074    /// <exception cref="System.IO.IOException">
 3075    /// An i/o error occurs.
 3076    /// </exception>
 3077    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3078    /// The central directory is malformed or cannot be found
 3079    /// </exception>
 3080    void ReadEntries()
 3081    {
 3082      // Search for the End Of Central Directory.  When a zip comment is
 3083      // present the directory will start earlier
 3084      //
 3085      // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed.
 3086      // This should be compatible with both SFX and ZIP files but has only been tested for Zip files
 3087      // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then
 3088      // this could be invalid.
 3089      // Could also speed this up by reading memory in larger blocks.
 3090
 3091      if (baseStream_.CanSeek == false) {
 3092        throw new ZipException("ZipFile stream must be seekable");
 3093      }
 3094
 3095      long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 3096        baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 3097
 3098      if (locatedEndOfCentralDir < 0) {
 3099        throw new ZipException("Cannot find central directory");
 3100      }
 3101
 3102      // Read end of central directory record
 3103      ushort thisDiskNumber           = ReadLEUshort();
 3104      ushort startCentralDirDisk      = ReadLEUshort();
 3105      ulong entriesForThisDisk        = ReadLEUshort();
 3106      ulong entriesForWholeCentralDir = ReadLEUshort();
 3107      ulong centralDirSize            = ReadLEUint();
 3108      long offsetOfCentralDir         = ReadLEUint();
 3109      uint commentSize                = ReadLEUshort();
 3110
 3111      if ( commentSize > 0 ) {
 3112        byte[] comment = new byte[commentSize];
 3113
 3114        StreamUtils.ReadFully(baseStream_, comment);
 3115        comment_ = ZipConstants.ConvertToString(comment);
 3116      }
 3117      else {
 3118        comment_ = string.Empty;
 3119      }
 3120
 3121      bool isZip64 = false;
 3122
 3123      // Check if zip64 header information is required.
 3124      if ( (thisDiskNumber == 0xffff) ||
 3125        (startCentralDirDisk == 0xffff) ||
 3126        (entriesForThisDisk == 0xffff) ||
 3127        (entriesForWholeCentralDir == 0xffff) ||
 3128        (centralDirSize == 0xffffffff) ||
 3129        (offsetOfCentralDir == 0xffffffff) ) {
 3130        isZip64 = true;
 3131
 3132        long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 
 3133        if ( offset < 0 ) {
 3134          throw new ZipException("Cannot find Zip64 locator");
 3135        }
 3136
 3137        // number of the disk with the start of the zip64 end of central directory 4 bytes
 3138        // relative offset of the zip64 end of central directory record 8 bytes
 3139        // total number of disks 4 bytes
 3140        ReadLEUint(); // startDisk64 is not currently used
 3141        ulong offset64 = ReadLEUlong();
 3142        uint totalDisks = ReadLEUint();
 3143
 3144        baseStream_.Position = (long)offset64;
 3145        long sig64 = ReadLEUint();
 3146
 3147        if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) {
 3148          throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64));
 3149        }
 3150
 3151        // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12.
 3152        ulong recordSize = ReadLEUlong();
 3153        int versionMadeBy = ReadLEUshort();
 3154        int versionToExtract = ReadLEUshort();
 3155        uint thisDisk = ReadLEUint();
 3156        uint centralDirDisk = ReadLEUint();
 3157        entriesForThisDisk = ReadLEUlong();
 3158        entriesForWholeCentralDir = ReadLEUlong();
 3159        centralDirSize = ReadLEUlong();
 3160        offsetOfCentralDir = (long)ReadLEUlong();
 3161
 3162        // NOTE: zip64 extensible data sector (variable size) is ignored.
 3163      }
 3164
 3165      entries_ = new ZipEntry[entriesForThisDisk];
 3166
 3167      // SFX/embedded support, find the offset of the first entry vis the start of the stream
 3168      // This applies to Zip files that are appended to the end of an SFX stub.
 3169      // Or are appended as a resource to an executable.
 3170      // Zip files created by some archivers have the offsets altered to reflect the true offsets
 3171      // and so dont require any adjustment here...
 3172      // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths?
 3173      if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) {
 3174        offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir);
 3175        if (offsetOfFirstEntry <= 0) {
 3176          throw new ZipException("Invalid embedded zip archive");
 3177        }
 3178      }
 3179
 3180      baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin);
 3181
 3182      for (ulong i = 0; i < entriesForThisDisk; i++) {
 3183        if (ReadLEUint() != ZipConstants.CentralHeaderSignature) {
 3184          throw new ZipException("Wrong Central Directory signature");
 3185        }
 3186
 3187        int versionMadeBy      = ReadLEUshort();
 3188        int versionToExtract   = ReadLEUshort();
 3189        int bitFlags           = ReadLEUshort();
 3190        int method             = ReadLEUshort();
 3191        uint dostime           = ReadLEUint();
 3192        uint crc               = ReadLEUint();
 3193        var csize             = (long)ReadLEUint();
 3194        var size              = (long)ReadLEUint();
 3195        int nameLen            = ReadLEUshort();
 3196        int extraLen           = ReadLEUshort();
 3197        int commentLen         = ReadLEUshort();
 3198
 3199        int diskStartNo        = ReadLEUshort();  // Not currently used
 3200        int internalAttributes = ReadLEUshort();  // Not currently used
 3201
 3202        uint externalAttributes = ReadLEUint();
 3203        long offset             = ReadLEUint();
 3204
 3205        byte[] buffer = new byte[Math.Max(nameLen, commentLen)];
 3206
 3207        StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen);
 3208        string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen);
 3209
 3210        var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method);
 3211        entry.Crc = crc & 0xffffffffL;
 3212        entry.Size = size & 0xffffffffL;
 3213        entry.CompressedSize = csize & 0xffffffffL;
 3214        entry.Flags = bitFlags;
 3215        entry.DosTime = (uint)dostime;
 3216        entry.ZipFileIndex = (long)i;
 3217        entry.Offset = offset;
 3218        entry.ExternalFileAttributes = (int)externalAttributes;
 3219
 3220        if ((bitFlags & 8) == 0) {
 3221          entry.CryptoCheckValue = (byte)(crc >> 24);
 3222        }
 3223        else {
 3224          entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 3225        }
 3226
 3227        if (extraLen > 0) {
 3228          byte[] extra = new byte[extraLen];
 3229          StreamUtils.ReadFully(baseStream_, extra);
 3230          entry.ExtraData = extra;
 3231        }
 3232
 3233        entry.ProcessExtraData(false);
 3234
 3235        if (commentLen > 0) {
 3236          StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen);
 3237          entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen);
 3238        }
 3239
 3240        entries_[i] = entry;
 3241      }
 3242    }
 3243
 3244    /// <summary>
 3245    /// Locate the data for a given entry.
 3246    /// </summary>
 3247    /// <returns>
 3248    /// The start offset of the data.
 3249    /// </returns>
 3250    /// <exception cref="System.IO.EndOfStreamException">
 3251    /// The stream ends prematurely
 3252    /// </exception>
 3253    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3254    /// The local header signature is invalid, the entry and central header file name lengths are different
 3255    /// or the local and entry compression methods dont match
 3256    /// </exception>
 3257    long LocateEntry(ZipEntry entry)
 3258    {
 3259      return TestLocalHeader(entry, HeaderTest.Extract);
 3260    }
 3261
 3262#if !NETCF_1_0
 3263    Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry)
 3264    {
 3265      CryptoStream result = null;
 3266
 3267      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3268        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3269        var classicManaged = new PkzipClassicManaged();
 3270
 3271        OnKeysRequired(entry.Name);
 3272        if (HaveKeys == false) {
 3273          throw new ZipException("No password available for encrypted stream");
 3274        }
 3275
 3276        result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read);
 3277        CheckClassicPassword(result, entry);
 3278      }
 3279      else {
 3280#if !NET_1_1 && !NETCF_2_0
 3281        if (entry.Version == ZipConstants.VERSION_AES) {
 3282          //
 3283          OnKeysRequired(entry.Name);
 3284          if (HaveKeys == false) {
 3285            throw new ZipException("No password available for AES encrypted stream");
 3286          }
 3287          int saltLen = entry.AESSaltLen;
 3288          byte[] saltBytes = new byte[saltLen];
 3289          int saltIn = baseStream.Read(saltBytes, 0, saltLen);
 3290          if (saltIn != saltLen)
 3291            throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn);
 3292          //
 3293          byte[] pwdVerifyRead = new byte[2];
 3294          baseStream.Read(pwdVerifyRead, 0, 2);
 3295          int blockSize = entry.AESKeySize / 8;  // bits to bytes
 3296
 3297          var decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false);
 3298          byte[] pwdVerifyCalc = decryptor.PwdVerifier;
 3299          if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1])
 3300            throw new Exception("Invalid password for AES");
 3301          result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read);
 3302        }
 3303        else
 3304#endif
 3305        {
 3306          throw new ZipException("Decryption method not supported");
 3307        }
 3308      }
 3309
 3310      return result;
 3311    }
 3312
 3313    Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry)
 3314    {
 3315      CryptoStream result = null;
 3316      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3317        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3318        var classicManaged = new PkzipClassicManaged();
 3319
 3320        OnKeysRequired(entry.Name);
 3321        if (HaveKeys == false) {
 3322          throw new ZipException("No password available for encrypted stream");
 3323        }
 3324
 3325        // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
 3326        // which doesnt do this.
 3327        result = new CryptoStream(new UncompressedStream(baseStream),
 3328          classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
 3329
 3330        if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) {
 3331          WriteEncryptionHeader(result, entry.DosTime << 16);
 3332        }
 3333        else {
 3334          WriteEncryptionHeader(result, entry.Crc);
 3335        }
 3336      }
 3337      return result;
 3338    }
 3339
 3340    static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry)
 3341    {
 3342      byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 3343      StreamUtils.ReadFully(classicCryptoStream, cryptbuffer);
 3344      if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 3345        throw new ZipException("Invalid password");
 3346      }
 3347    }
 3348#endif
 3349
 3350    static void WriteEncryptionHeader(Stream stream, long crcValue)
 3351    {
 3352      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 3353      var rnd = new Random();
 3354      rnd.NextBytes(cryptBuffer);
 3355      cryptBuffer[11] = (byte)(crcValue >> 24);
 3356      stream.Write(cryptBuffer, 0, cryptBuffer.Length);
 3357    }
 3358
 3359    #endregion
 3360
 3361    #region Instance Fields
 3362    bool       isDisposed_;
 3363    string     name_;
 3364    string     comment_;
 3365    string     rawPassword_;
 3366    Stream     baseStream_;
 3367    bool       isStreamOwner;
 3368    long       offsetOfFirstEntry;
 3369    ZipEntry[] entries_;
 3370    byte[] key;
 3371    bool isNewArchive_;
 3372
 3373    // Default is dynamic which is not backwards compatible and can cause problems
 3374    // with XP's built in compression which cant read Zip64 archives.
 3375    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 3376    // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed.
 3377    UseZip64 useZip64_ = UseZip64.Dynamic ;
 3378
 3379    #region Zip Update Instance Fields
 3380    ArrayList updates_;
 3381    long updateCount_; // Count is managed manually as updates_ can contain nulls!
 3382    Hashtable updateIndex_;
 3383    IArchiveStorage archiveStorage_;
 3384    IDynamicDataSource updateDataSource_;
 3385    bool contentsEdited_;
 3386    int bufferSize_ = DefaultBufferSize;
 3387    byte[] copyBuffer_;
 3388    ZipString newComment_;
 3389    bool commentEdited_;
 3390    IEntryFactory updateEntryFactory_ = new ZipEntryFactory();
 3391    #endregion
 3392    #endregion
 3393
 3394    #region Support Classes
 3395    /// <summary>
 3396    /// Represents a string from a <see cref="ZipFile"/> which is stored as an array of bytes.
 3397    /// </summary>
 3398    class ZipString
 3399    {
 3400      #region Constructors
 3401      /// <summary>
 3402      /// Initialise a <see cref="ZipString"/> with a string.
 3403      /// </summary>
 3404      /// <param name="comment">The textual string form.</param>
 3405      public ZipString(string comment)
 3406      {
 3407        comment_ = comment;
 3408        isSourceString_ = true;
 3409      }
 3410
 3411      /// <summary>
 3412      /// Initialise a <see cref="ZipString"/> using a string in its binary 'raw' form.
 3413      /// </summary>
 3414      /// <param name="rawString"></param>
 3415      public ZipString(byte[] rawString)
 3416      {
 3417        rawComment_ = rawString;
 3418      }
 3419      #endregion
 3420
 3421      /// <summary>
 3422      /// Get a value indicating the original source of data for this instance.
 3423      /// True if the source was a string; false if the source was binary data.
 3424      /// </summary>
 3425      public bool IsSourceString
 3426      {
 3427        get { return isSourceString_; }
 3428      }
 3429
 3430      /// <summary>
 3431      /// Get the length of the comment when represented as raw bytes.
 3432      /// </summary>
 3433      public int RawLength
 3434      {
 3435        get {
 3436          MakeBytesAvailable();
 3437          return rawComment_.Length;
 3438        }
 3439      }
 3440
 3441      /// <summary>
 3442      /// Get the comment in its 'raw' form as plain bytes.
 3443      /// </summary>
 3444      public byte[] RawComment
 3445      {
 3446        get {
 3447          MakeBytesAvailable();
 3448          return (byte[])rawComment_.Clone();
 3449        }
 3450      }
 3451
 3452      /// <summary>
 3453      /// Reset the comment to its initial state.
 3454      /// </summary>
 3455      public void Reset()
 3456      {
 3457        if ( isSourceString_ ) {
 3458          rawComment_ = null;
 3459        }
 3460        else {
 3461          comment_ = null;
 3462        }
 3463      }
 3464
 3465      void MakeTextAvailable()
 3466      {
 3467        if ( comment_ == null ) {
 3468          comment_ = ZipConstants.ConvertToString(rawComment_);
 3469        }
 3470      }
 3471
 3472      void MakeBytesAvailable()
 3473      {
 3474        if ( rawComment_ == null ) {
 3475          rawComment_ = ZipConstants.ConvertToArray(comment_);
 3476        }
 3477      }
 3478
 3479      /// <summary>
 3480      /// Implicit conversion of comment to a string.
 3481      /// </summary>
 3482      /// <param name="zipString">The <see cref="ZipString"/> to convert to a string.</param>
 3483      /// <returns>The textual equivalent for the input value.</returns>
 3484      static public implicit operator string(ZipString zipString)
 3485      {
 3486        zipString.MakeTextAvailable();
 3487        return zipString.comment_;
 3488      }
 3489
 3490      #region Instance Fields
 3491      string comment_;
 3492      byte[] rawComment_;
 3493      bool isSourceString_;
 3494      #endregion
 3495    }
 3496
 3497    /// <summary>
 3498    /// An <see cref="IEnumerator">enumerator</see> for <see cref="ZipEntry">Zip entries</see>
 3499    /// </summary>
 3500    class ZipEntryEnumerator : IEnumerator
 3501    {
 3502      #region Constructors
 3503      public ZipEntryEnumerator(ZipEntry[] entries)
 3504      {
 3505        array = entries;
 3506      }
 3507
 3508      #endregion
 3509      #region IEnumerator Members
 3510      public object Current
 3511      {
 3512        get {
 3513          return array[index];
 3514        }
 3515      }
 3516
 3517      public void Reset()
 3518      {
 3519        index = -1;
 3520      }
 3521
 3522      public bool MoveNext()
 3523      {
 3524        return (++index < array.Length);
 3525      }
 3526      #endregion
 3527      #region Instance Fields
 3528      ZipEntry[] array;
 3529      int index = -1;
 3530      #endregion
 3531    }
 3532
 3533    /// <summary>
 3534    /// An <see cref="UncompressedStream"/> is a stream that you can write uncompressed data
 3535    /// to and flush, but cannot read, seek or do anything else to.
 3536    /// </summary>
 3537    class UncompressedStream : Stream
 3538    {
 3539      #region Constructors
 3540      public UncompressedStream(Stream baseStream)
 3541      {
 3542        baseStream_ = baseStream;
 3543      }
 3544
 3545      #endregion
 3546
 3547      /// <summary>
 3548      /// Close this stream instance.
 3549      /// </summary>
 3550      public override void Close()
 3551      {
 3552        // Do nothing
 3553      }
 3554
 3555      /// <summary>
 3556      /// Gets a value indicating whether the current stream supports reading.
 3557      /// </summary>
 3558      public override bool CanRead
 3559      {
 3560        get {
 3561          return false;
 3562        }
 3563      }
 3564
 3565      /// <summary>
 3566      /// Write any buffered data to underlying storage.
 3567      /// </summary>
 3568      public override void Flush()
 3569      {
 3570        baseStream_.Flush();
 3571      }
 3572
 3573      /// <summary>
 3574      /// Gets a value indicating whether the current stream supports writing.
 3575      /// </summary>
 3576      public override bool CanWrite
 3577      {
 3578        get {
 3579          return baseStream_.CanWrite;
 3580        }
 3581      }
 3582
 3583      /// <summary>
 3584      /// Gets a value indicating whether the current stream supports seeking.
 3585      /// </summary>
 3586      public override bool CanSeek
 3587      {
 3588        get {
 3589          return false;
 3590        }
 3591      }
 3592
 3593      /// <summary>
 3594      /// Get the length in bytes of the stream.
 3595      /// </summary>
 3596      public override long Length
 3597      {
 3598        get {
 3599          return 0;
 3600        }
 3601      }
 3602
 3603      /// <summary>
 3604      /// Gets or sets the position within the current stream.
 3605      /// </summary>
 3606      public override long Position
 3607      {
 3608        get  {
 3609          return baseStream_.Position;
 3610        }
 3611                set {
 3612                    throw new NotImplementedException();
 3613                }
 3614            }
 3615
 3616            /// <summary>
 3617            /// Reads a sequence of bytes from the current stream and advances the position within the stream by the num
 3618            /// </summary>
 3619            /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte
 3620            /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from t
 3621            /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3622            /// <returns>
 3623            /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if t
 3624            /// </returns>
 3625            /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer lengt
 3626            /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </ex
 3627            /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3628            /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3629            /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3630            /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3631            public override int Read(byte[] buffer, int offset, int count)
 3632      {
 3633        return 0;
 3634      }
 3635
 3636      /// <summary>
 3637      /// Sets the position within the current stream.
 3638      /// </summary>
 3639      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3640      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3641      /// <returns>
 3642      /// The new position within the current stream.
 3643      /// </returns>
 3644      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3645      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3646      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3647      public override long Seek(long offset, SeekOrigin origin)
 3648      {
 3649        return 0;
 3650      }
 3651
 3652      /// <summary>
 3653      /// Sets the length of the current stream.
 3654      /// </summary>
 3655      /// <param name="value">The desired length of the current stream in bytes.</param>
 3656      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3657      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3658      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3659      public override void SetLength(long value)
 3660      {
 3661      }
 3662
 3663      /// <summary>
 3664      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3665      /// </summary>
 3666      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3667      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3668      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3669      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3670      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3671      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3672      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3673      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3674      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3675      public override void Write(byte[] buffer, int offset, int count)
 3676      {
 3677        baseStream_.Write(buffer, offset, count);
 3678      }
 3679
 3680      readonly
 3681
 3682      #region Instance Fields
 3683      Stream baseStream_;
 3684      #endregion
 3685    }
 3686
 3687    /// <summary>
 3688    /// A <see cref="PartialInputStream"/> is an <see cref="InflaterInputStream"/>
 3689    /// whose data is only a part or subsection of a file.
 3690    /// </summary>
 3691    class PartialInputStream : Stream
 3692    {
 3693      #region Constructors
 3694      /// <summary>
 3695      /// Initialise a new instance of the <see cref="PartialInputStream"/> class.
 3696      /// </summary>
 3697      /// <param name="zipFile">The <see cref="ZipFile"/> containing the underlying stream to use for IO.</param>
 3698      /// <param name="start">The start of the partial data.</param>
 3699      /// <param name="length">The length of the partial data.</param>
 3700      public PartialInputStream(ZipFile zipFile, long start, long length)
 3701      {
 3702        start_ = start;
 3703        length_ = length;
 3704
 3705        // Although this is the only time the zipfile is used
 3706        // keeping a reference here prevents premature closure of
 3707        // this zip file and thus the baseStream_.
 3708
 3709        // Code like this will cause apparently random failures depending
 3710        // on the size of the files and when garbage is collected.
 3711        //
 3712        // ZipFile z = new ZipFile (stream);
 3713        // Stream reader = z.GetInputStream(0);
 3714        // uses reader here....
 3715        zipFile_ = zipFile;
 3716        baseStream_ = zipFile_.baseStream_;
 3717        readPos_ = start;
 3718        end_ = start + length;
 3719      }
 3720      #endregion
 3721
 3722      /// <summary>
 3723      /// Read a byte from this stream.
 3724      /// </summary>
 3725      /// <returns>Returns the byte read or -1 on end of stream.</returns>
 3726      public override int ReadByte()
 3727      {
 3728        if (readPos_ >= end_) {
 3729           // -1 is the correct value at end of stream.
 3730          return -1;
 3731        }
 3732
 3733        lock( baseStream_ ) {
 3734          baseStream_.Seek(readPos_++, SeekOrigin.Begin);
 3735          return baseStream_.ReadByte();
 3736        }
 3737      }
 3738
 3739      /// <summary>
 3740      /// Close this <see cref="PartialInputStream">partial input stream</see>.
 3741      /// </summary>
 3742      /// <remarks>
 3743      /// The underlying stream is not closed.  Close the parent ZipFile class to do that.
 3744      /// </remarks>
 3745      public override void Close()
 3746      {
 3747        // Do nothing at all!
 3748      }
 3749
 3750      /// <summary>
 3751      /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of
 3752      /// </summary>
 3753      /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte array
 3754      /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the cur
 3755      /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3756      /// <returns>
 3757      /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that ma
 3758      /// </returns>
 3759      /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer length. </e
 3760      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3761      /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3762      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3763      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3764      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3765      public override int Read(byte[] buffer, int offset, int count)
 3766      {
 3767        lock(baseStream_) {
 3768          if (count > end_ - readPos_) {
 3769            count = (int) (end_ - readPos_);
 3770            if (count == 0) {
 3771              return 0;
 3772            }
 3773          }
 3774
 3775          baseStream_.Seek(readPos_, SeekOrigin.Begin);
 3776          int readCount = baseStream_.Read(buffer, offset, count);
 3777          if (readCount > 0) {
 3778            readPos_ += readCount;
 3779          }
 3780          return readCount;
 3781        }
 3782      }
 3783
 3784      /// <summary>
 3785      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3786      /// </summary>
 3787      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3788      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3789      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3790      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3791      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3792      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3793      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3794      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3795      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3796      public override void Write(byte[] buffer, int offset, int count)
 3797      {
 3798        throw new NotSupportedException();
 3799      }
 3800
 3801      /// <summary>
 3802      /// When overridden in a derived class, sets the length of the current stream.
 3803      /// </summary>
 3804      /// <param name="value">The desired length of the current stream in bytes.</param>
 3805      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3806      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3807      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3808      public override void SetLength(long value)
 3809      {
 3810        throw new NotSupportedException();
 3811      }
 3812
 3813      /// <summary>
 3814      /// When overridden in a derived class, sets the position within the current stream.
 3815      /// </summary>
 3816      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3817      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3818      /// <returns>
 3819      /// The new position within the current stream.
 3820      /// </returns>
 3821      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3822      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3823      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3824      public override long Seek(long offset, SeekOrigin origin)
 3825      {
 3826        long newPos = readPos_;
 3827
 3828        switch ( origin )
 3829        {
 3830          case SeekOrigin.Begin:
 3831            newPos = start_ + offset;
 3832            break;
 3833
 3834          case SeekOrigin.Current:
 3835            newPos = readPos_ + offset;
 3836            break;
 3837
 3838          case SeekOrigin.End:
 3839            newPos = end_ + offset;
 3840            break;
 3841        }
 3842
 3843        if ( newPos < start_ ) {
 3844          throw new ArgumentException("Negative position is invalid");
 3845        }
 3846
 3847        if ( newPos >= end_ ) {
 3848          throw new IOException("Cannot seek past end");
 3849        }
 3850        readPos_ = newPos;
 3851        return readPos_;
 3852      }
 3853
 3854      /// <summary>
 3855      /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device.
 3856      /// </summary>
 3857      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3858      public override void Flush()
 3859      {
 3860        // Nothing to do.
 3861      }
 3862
 3863      /// <summary>
 3864      /// Gets or sets the position within the current stream.
 3865      /// </summary>
 3866      /// <value></value>
 3867      /// <returns>The current position within the stream.</returns>
 3868      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3869      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking. </exception>
 3870      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3871      public override long Position {
 3872        get { return readPos_ - start_; }
 3873        set {
 3874          long newPos = start_ + value;
 3875
 3876          if ( newPos < start_ ) {
 3877            throw new ArgumentException("Negative position is invalid");
 3878          }
 3879
 3880          if ( newPos >= end_ ) {
 3881            throw new InvalidOperationException("Cannot seek past end");
 3882          }
 3883          readPos_ = newPos;
 3884        }
 3885      }
 3886
 3887      /// <summary>
 3888      /// Gets the length in bytes of the stream.
 3889      /// </summary>
 3890      /// <value></value>
 3891      /// <returns>A long value representing the length of the stream in bytes.</returns>
 3892      /// <exception cref="T:System.NotSupportedException">A class derived from Stream does not support seeking. </excep
 3893      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3894      public override long Length {
 3895        get { return length_; }
 3896      }
 3897
 3898      /// <summary>
 3899      /// Gets a value indicating whether the current stream supports writing.
 3900      /// </summary>
 3901      /// <value>false</value>
 3902      /// <returns>true if the stream supports writing; otherwise, false.</returns>
 3903      public override bool CanWrite {
 3904        get { return false; }
 3905      }
 3906
 3907      /// <summary>
 3908      /// Gets a value indicating whether the current stream supports seeking.
 3909      /// </summary>
 3910      /// <value>true</value>
 3911      /// <returns>true if the stream supports seeking; otherwise, false.</returns>
 3912      public override bool CanSeek {
 3913        get { return true; }
 3914      }
 3915
 3916      /// <summary>
 3917      /// Gets a value indicating whether the current stream supports reading.
 3918      /// </summary>
 3919      /// <value>true.</value>
 3920      /// <returns>true if the stream supports reading; otherwise, false.</returns>
 3921      public override bool CanRead {
 3922        get { return true; }
 3923      }
 3924
 3925#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 3926      /// <summary>
 3927      /// Gets a value that determines whether the current stream can time out.
 3928      /// </summary>
 3929      /// <value></value>
 3930      /// <returns>A value that determines whether the current stream can time out.</returns>
 3931      public override bool CanTimeout {
 3932        get { return baseStream_.CanTimeout; }
 3933      }
 3934#endif
 3935      #region Instance Fields
 3936      ZipFile zipFile_;
 3937      Stream baseStream_;
 3938      long start_;
 3939      long length_;
 3940      long readPos_;
 3941      long end_;
 3942      #endregion
 3943    }
 3944    #endregion
 3945  }
 3946
 3947  #endregion
 3948
 3949  #region DataSources
 3950  /// <summary>
 3951  /// Provides a static way to obtain a source of data for an entry.
 3952  /// </summary>
 3953  public interface IStaticDataSource
 3954  {
 3955    /// <summary>
 3956    /// Get a source of data by creating a new stream.
 3957    /// </summary>
 3958    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3959    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3960    Stream GetSource();
 3961  }
 3962
 3963  /// <summary>
 3964  /// Represents a source of data that can dynamically provide
 3965  /// multiple <see cref="Stream">data sources</see> based on the parameters passed.
 3966  /// </summary>
 3967  public interface IDynamicDataSource
 3968  {
 3969    /// <summary>
 3970    /// Get a data source.
 3971    /// </summary>
 3972    /// <param name="entry">The <see cref="ZipEntry"/> to get a source for.</param>
 3973    /// <param name="name">The name for data if known.</param>
 3974    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3975    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3976    Stream GetSource(ZipEntry entry, string name);
 3977  }
 3978
 3979  /// <summary>
 3980  /// Default implementation of a <see cref="IStaticDataSource"/> for use with files stored on disk.
 3981  /// </summary>
 3982  public class StaticDiskDataSource : IStaticDataSource
 3983  {
 3984    /// <summary>
 3985    /// Initialise a new instnace of <see cref="StaticDiskDataSource"/>
 3986    /// </summary>
 3987    /// <param name="fileName">The name of the file to obtain data from.</param>
 3988    public StaticDiskDataSource(string fileName)
 3989    {
 3990      fileName_ = fileName;
 3991    }
 3992
 3993    #region IDataSource Members
 3994
 3995    /// <summary>
 3996    /// Get a <see cref="Stream"/> providing data.
 3997    /// </summary>
 3998    /// <returns>Returns a <see cref="Stream"/> provising data.</returns>
 3999    public Stream GetSource()
 4000    {
 4001      return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4002    }
 4003
 4004    readonly
 4005
 4006    #endregion
 4007    #region Instance Fields
 4008    string fileName_;
 4009    #endregion
 4010  }
 4011
 4012
 4013  /// <summary>
 4014  /// Default implementation of <see cref="IDynamicDataSource"/> for files stored on disk.
 4015  /// </summary>
 4016  public class DynamicDiskDataSource : IDynamicDataSource
 4017  {
 4018
 4019    #region IDataSource Members
 4020    /// <summary>
 4021    /// Get a <see cref="Stream"/> providing data for an entry.
 4022    /// </summary>
 4023    /// <param name="entry">The entry to provide data for.</param>
 4024    /// <param name="name">The file name for data if known.</param>
 4025    /// <returns>Returns a stream providing data; or null if not available</returns>
 4026    public Stream GetSource(ZipEntry entry, string name)
 4027    {
 4028      Stream result = null;
 4029
 4030      if ( name != null ) {
 4031        result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 4032      }
 4033
 4034      return result;
 4035    }
 4036
 4037    #endregion
 4038  }
 4039
 4040  #endregion
 4041
 4042  #region Archive Storage
 4043  /// <summary>
 4044  /// Defines facilities for data storage when updating Zip Archives.
 4045  /// </summary>
 4046  public interface IArchiveStorage
 4047  {
 4048    /// <summary>
 4049    /// Get the <see cref="FileUpdateMode"/> to apply during updates.
 4050    /// </summary>
 4051    FileUpdateMode UpdateMode { get; }
 4052
 4053    /// <summary>
 4054    /// Get an empty <see cref="Stream"/> that can be used for temporary output.
 4055    /// </summary>
 4056    /// <returns>Returns a temporary output <see cref="Stream"/></returns>
 4057    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4058    Stream GetTemporaryOutput();
 4059
 4060    /// <summary>
 4061    /// Convert a temporary output stream to a final stream.
 4062    /// </summary>
 4063    /// <returns>The resulting final <see cref="Stream"/></returns>
 4064    /// <seealso cref="GetTemporaryOutput"/>
 4065    Stream ConvertTemporaryToFinal();
 4066
 4067    /// <summary>
 4068    /// Make a temporary copy of the original stream.
 4069    /// </summary>
 4070    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4071    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4072    Stream MakeTemporaryCopy(Stream stream);
 4073
 4074    /// <summary>
 4075    /// Return a stream suitable for performing direct updates on the original source.
 4076    /// </summary>
 4077    /// <param name="stream">The current stream.</param>
 4078    /// <returns>Returns a stream suitable for direct updating.</returns>
 4079    /// <remarks>This may be the current stream passed.</remarks>
 4080    Stream OpenForDirectUpdate(Stream stream);
 4081
 4082    /// <summary>
 4083    /// Dispose of this instance.
 4084    /// </summary>
 4085    void Dispose();
 4086  }
 4087
 4088  /// <summary>
 4089  /// An abstract <see cref="IArchiveStorage"/> suitable for extension by inheritance.
 4090  /// </summary>
 4091  abstract public class BaseArchiveStorage : IArchiveStorage
 4092  {
 4093    #region Constructors
 4094    /// <summary>
 4095    /// Initializes a new instance of the <see cref="BaseArchiveStorage"/> class.
 4096    /// </summary>
 4097    /// <param name="updateMode">The update mode.</param>
 484098    protected BaseArchiveStorage(FileUpdateMode updateMode)
 4099    {
 484100      updateMode_ = updateMode;
 484101    }
 4102    #endregion
 4103
 4104    #region IArchiveStorage Members
 4105
 4106    /// <summary>
 4107    /// Gets a temporary output <see cref="Stream"/>
 4108    /// </summary>
 4109    /// <returns>Returns the temporary output stream.</returns>
 4110    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4111    public abstract Stream GetTemporaryOutput();
 4112
 4113    /// <summary>
 4114    /// Converts the temporary <see cref="Stream"/> to its final form.
 4115    /// </summary>
 4116    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4117    /// the final storage for the archive.</returns>
 4118    /// <seealso cref="GetTemporaryOutput"/>
 4119    public abstract Stream ConvertTemporaryToFinal();
 4120
 4121    /// <summary>
 4122    /// Make a temporary copy of a <see cref="Stream"/>.
 4123    /// </summary>
 4124    /// <param name="stream">The <see cref="Stream"/> to make a copy of.</param>
 4125    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4126    public abstract Stream MakeTemporaryCopy(Stream stream);
 4127
 4128    /// <summary>
 4129    /// Return a stream suitable for performing direct updates on the original source.
 4130    /// </summary>
 4131    /// <param name="stream">The <see cref="Stream"/> to open for direct update.</param>
 4132    /// <returns>Returns a stream suitable for direct updating.</returns>
 4133    public abstract Stream OpenForDirectUpdate(Stream stream);
 4134
 4135    /// <summary>
 4136    /// Disposes this instance.
 4137    /// </summary>
 4138    public abstract void Dispose();
 4139
 4140    /// <summary>
 4141    /// Gets the update mode applicable.
 4142    /// </summary>
 4143    /// <value>The update mode.</value>
 4144    public FileUpdateMode UpdateMode
 4145    {
 4146      get {
 364147        return updateMode_;
 4148      }
 4149    }
 4150
 4151    #endregion
 4152
 4153    #region Instance Fields
 4154    FileUpdateMode updateMode_;
 4155    #endregion
 4156  }
 4157
 4158  /// <summary>
 4159  /// An <see cref="IArchiveStorage"/> implementation suitable for hard disks.
 4160  /// </summary>
 4161  public class DiskArchiveStorage : BaseArchiveStorage
 4162  {
 4163    #region Constructors
 4164    /// <summary>
 4165    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4166    /// </summary>
 4167    /// <param name="file">The file.</param>
 4168    /// <param name="updateMode">The update mode.</param>
 4169    public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode)
 4170      : base(updateMode)
 4171    {
 4172      if ( file.Name == null ) {
 4173        throw new ZipException("Cant handle non file archives");
 4174      }
 4175
 4176      fileName_ = file.Name;
 4177    }
 4178
 4179    /// <summary>
 4180    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4181    /// </summary>
 4182    /// <param name="file">The file.</param>
 4183    public DiskArchiveStorage(ZipFile file)
 4184      : this(file, FileUpdateMode.Safe)
 4185    {
 4186    }
 4187    #endregion
 4188
 4189    #region IArchiveStorage Members
 4190
 4191    /// <summary>
 4192    /// Gets a temporary output <see cref="Stream"/> for performing updates on.
 4193    /// </summary>
 4194    /// <returns>Returns the temporary output stream.</returns>
 4195    public override Stream GetTemporaryOutput()
 4196    {
 4197      if ( temporaryName_ != null ) {
 4198        temporaryName_ = GetTempFileName(temporaryName_, true);
 4199        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4200      }
 4201      else {
 4202        // Determine where to place files based on internal strategy.
 4203        // Currently this is always done in system temp directory.
 4204        temporaryName_ = Path.GetTempFileName();
 4205        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4206      }
 4207
 4208      return temporaryStream_;
 4209    }
 4210
 4211    /// <summary>
 4212    /// Converts a temporary <see cref="Stream"/> to its final form.
 4213    /// </summary>
 4214    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4215    /// the final storage for the archive.</returns>
 4216    public override Stream ConvertTemporaryToFinal()
 4217    {
 4218      if ( temporaryStream_ == null ) {
 4219        throw new ZipException("No temporary stream has been created");
 4220      }
 4221
 4222      Stream result = null;
 4223
 4224      string moveTempName = GetTempFileName(fileName_, false);
 4225      bool newFileCreated = false;
 4226
 4227      try  {
 4228        temporaryStream_.Close();
 4229        File.Move(fileName_, moveTempName);
 4230        File.Move(temporaryName_, fileName_);
 4231        newFileCreated = true;
 4232        File.Delete(moveTempName);
 4233
 4234        result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4235      }
 4236      catch(Exception) {
 4237        result  = null;
 4238
 4239        // Try to roll back changes...
 4240        if ( !newFileCreated ) {
 4241          File.Move(moveTempName, fileName_);
 4242          File.Delete(temporaryName_);
 4243        }
 4244
 4245        throw;
 4246      }
 4247
 4248      return result;
 4249    }
 4250
 4251    /// <summary>
 4252    /// Make a temporary copy of a stream.
 4253    /// </summary>
 4254    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4255    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4256    public override Stream MakeTemporaryCopy(Stream stream)
 4257    {
 4258      stream.Close();
 4259
 4260      temporaryName_ = GetTempFileName(fileName_, true);
 4261      File.Copy(fileName_, temporaryName_, true);
 4262
 4263      temporaryStream_ = new FileStream(temporaryName_,
 4264        FileMode.Open,
 4265        FileAccess.ReadWrite);
 4266      return temporaryStream_;
 4267    }
 4268
 4269    /// <summary>
 4270    /// Return a stream suitable for performing direct updates on the original source.
 4271    /// </summary>
 4272    /// <param name="stream">The current stream.</param>
 4273    /// <returns>Returns a stream suitable for direct updating.</returns>
 4274    /// <remarks>If the <paramref name="stream"/> is not null this is used as is.</remarks>
 4275    public override Stream OpenForDirectUpdate(Stream stream)
 4276    {
 4277      Stream result;
 4278      if ((stream == null) || !stream.CanWrite)
 4279      {
 4280        if (stream != null) {
 4281          stream.Close();
 4282        }
 4283
 4284        result = new FileStream(fileName_,
 4285            FileMode.Open,
 4286            FileAccess.ReadWrite);
 4287      }
 4288      else
 4289      {
 4290        result = stream;
 4291      }
 4292
 4293      return result;
 4294    }
 4295
 4296    /// <summary>
 4297    /// Disposes this instance.
 4298    /// </summary>
 4299    public override void Dispose()
 4300    {
 4301      if ( temporaryStream_ != null ) {
 4302        temporaryStream_.Close();
 4303      }
 4304    }
 4305
 4306    #endregion
 4307
 4308    #region Internal routines
 4309    static string GetTempFileName(string original, bool makeTempFile)
 4310    {
 4311      string result = null;
 4312
 4313      if ( original == null ) {
 4314        result = Path.GetTempFileName();
 4315      }
 4316      else {
 4317        int counter = 0;
 4318        int suffixSeed = DateTime.Now.Second;
 4319
 4320        while ( result == null ) {
 4321          counter += 1;
 4322          string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter);
 4323          if ( !File.Exists(newName) ) {
 4324            if ( makeTempFile) {
 4325              try  {
 4326                // Try and create the file.
 4327                using ( FileStream stream = File.Create(newName) ) {
 4328                }
 4329                result = newName;
 4330              }
 4331              catch {
 4332                suffixSeed = DateTime.Now.Second;
 4333              }
 4334            }
 4335            else {
 4336              result = newName;
 4337            }
 4338          }
 4339        }
 4340      }
 4341      return result;
 4342    }
 4343    #endregion
 4344
 4345    #region Instance Fields
 4346    Stream temporaryStream_;
 4347    string fileName_;
 4348    string temporaryName_;
 4349    #endregion
 4350  }
 4351
 4352  /// <summary>
 4353  /// An <see cref="IArchiveStorage"/> implementation suitable for in memory streams.
 4354  /// </summary>
 4355  public class MemoryArchiveStorage : BaseArchiveStorage
 4356  {
 4357    #region Constructors
 4358    /// <summary>
 4359    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4360    /// </summary>
 4361    public MemoryArchiveStorage()
 4362      : base(FileUpdateMode.Direct)
 4363    {
 4364    }
 4365
 4366    /// <summary>
 4367    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4368    /// </summary>
 4369    /// <param name="updateMode">The <see cref="FileUpdateMode"/> to use</param>
 4370    /// <remarks>This constructor is for testing as memory streams dont really require safe mode.</remarks>
 4371    public MemoryArchiveStorage(FileUpdateMode updateMode)
 4372      : base(updateMode)
 4373    {
 4374    }
 4375
 4376    #endregion
 4377
 4378    #region Properties
 4379    /// <summary>
 4380    /// Get the stream returned by <see cref="ConvertTemporaryToFinal"/> if this was in fact called.
 4381    /// </summary>
 4382    public MemoryStream FinalStream
 4383    {
 4384      get { return finalStream_; }
 4385    }
 4386
 4387    #endregion
 4388
 4389    #region IArchiveStorage Members
 4390
 4391    /// <summary>
 4392    /// Gets the temporary output <see cref="Stream"/>
 4393    /// </summary>
 4394    /// <returns>Returns the temporary output stream.</returns>
 4395    public override Stream GetTemporaryOutput()
 4396    {
 4397      temporaryStream_ = new MemoryStream();
 4398      return temporaryStream_;
 4399    }
 4400
 4401    /// <summary>
 4402    /// Converts the temporary <see cref="Stream"/> to its final form.
 4403    /// </summary>
 4404    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4405    /// the final storage for the archive.</returns>
 4406    public override Stream ConvertTemporaryToFinal()
 4407    {
 4408      if ( temporaryStream_ == null ) {
 4409        throw new ZipException("No temporary stream has been created");
 4410      }
 4411
 4412      finalStream_ = new MemoryStream(temporaryStream_.ToArray());
 4413      return finalStream_;
 4414    }
 4415
 4416    /// <summary>
 4417    /// Make a temporary copy of the original stream.
 4418    /// </summary>
 4419    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4420    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4421    public override Stream MakeTemporaryCopy(Stream stream)
 4422    {
 4423      temporaryStream_ = new MemoryStream();
 4424      stream.Position = 0;
 4425      StreamUtils.Copy(stream, temporaryStream_, new byte[4096]);
 4426      return temporaryStream_;
 4427    }
 4428
 4429    /// <summary>
 4430    /// Return a stream suitable for performing direct updates on the original source.
 4431    /// </summary>
 4432    /// <param name="stream">The original source stream</param>
 4433    /// <returns>Returns a stream suitable for direct updating.</returns>
 4434    /// <remarks>If the <paramref name="stream"/> passed is not null this is used;
 4435    /// otherwise a new <see cref="MemoryStream"/> is returned.</remarks>
 4436    public override Stream OpenForDirectUpdate(Stream stream)
 4437    {
 4438      Stream result;
 4439      if ((stream == null) || !stream.CanWrite) {
 4440
 4441        result = new MemoryStream();
 4442
 4443        if (stream != null) {
 4444          stream.Position = 0;
 4445          StreamUtils.Copy(stream, result, new byte[4096]);
 4446
 4447          stream.Close();
 4448        }
 4449      }
 4450      else {
 4451        result = stream;
 4452      }
 4453
 4454      return result;
 4455    }
 4456
 4457    /// <summary>
 4458    /// Disposes this instance.
 4459    /// </summary>
 4460    public override void Dispose()
 4461    {
 4462      if ( temporaryStream_ != null ) {
 4463        temporaryStream_.Close();
 4464      }
 4465    }
 4466
 4467    #endregion
 4468
 4469    #region Instance Fields
 4470    MemoryStream temporaryStream_;
 4471    MemoryStream finalStream_;
 4472    #endregion
 4473  }
 4474
 4475  #endregion
 4476}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_CompletedFileHandler.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_CompletedFileHandler.htm new file mode 100644 index 000000000..592864962 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_CompletedFileHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.CompletedFileHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.CompletedFileHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_Crc32.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_Crc32.htm new file mode 100644 index 000000000..fcb62a1eb --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_Crc32.htm @@ -0,0 +1,270 @@ + + + + +ICSharpCode.SharpZipLib.Checksums.Crc32 - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Checksums.Crc32
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksums\Crc32.cs
Covered lines:70
Uncovered lines:9
Coverable lines:79
Total lines:223
Line coverage:88.6%
Branch coverage:50%
+

Metrics

+ + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
ComputeCrc32(...)1100100
Reset()1100100
Update(...)1100100
Update(...)200
Update(...)672.7363.64
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksums\Crc32.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// CRC32.cs - Computes CRC32 data checksum of a data stream
 2// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 3//
 4// This file was translated from java, it was part of the GNU Classpath
 5// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
 6//
 7// This program is free software; you can redistribute it and/or
 8// modify it under the terms of the GNU General Public License
 9// as published by the Free Software Foundation; either version 2
 10// of the License, or (at your option) any later version.
 11//
 12// This program is distributed in the hope that it will be useful,
 13// but WITHOUT ANY WARRANTY; without even the implied warranty of
 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 15// GNU General Public License for more details.
 16//
 17// You should have received a copy of the GNU General Public License
 18// along with this program; if not, write to the Free Software
 19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 20//
 21// Linking this library statically or dynamically with other modules is
 22// making a combined work based on this library.  Thus, the terms and
 23// conditions of the GNU General Public License cover the whole
 24// combination.
 25//
 26// As a special exception, the copyright holders of this library give you
 27// permission to link this library with independent modules to produce an
 28// executable, regardless of the license terms of these independent
 29// modules, and to copy and distribute the resulting executable under
 30// terms of your choice, provided that you also meet, for each linked
 31// independent module, the terms and conditions of the license of that
 32// module.  An independent module is a module which is not derived from
 33// or based on this library.  If you modify this library, you may extend
 34// this exception to your version of the library, but you are not
 35// obligated to do so.  If you do not wish to do so, delete this
 36// exception statement from your version.
 37
 38using System;
 39
 40namespace ICSharpCode.SharpZipLib.Checksums
 41{
 42
 43  /// <summary>
 44  /// Generate a table for a byte-wise 32-bit CRC calculation on the polynomial:
 45  /// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
 46  ///
 47  /// Polynomials over GF(2) are represented in binary, one bit per coefficient,
 48  /// with the lowest powers in the most significant bit.  Then adding polynomials
 49  /// is just exclusive-or, and multiplying a polynomial by x is a right shift by
 50  /// one.  If we call the above polynomial p, and represent a byte as the
 51  /// polynomial q, also with the lowest power in the most significant bit (so the
 52  /// byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
 53  /// where a mod b means the remainder after dividing a by b.
 54  ///
 55  /// This calculation is done using the shift-register method of multiplying and
 56  /// taking the remainder.  The register is initialized to zero, and for each
 57  /// incoming bit, x^32 is added mod p to the register if the bit is a one (where
 58  /// x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
 59  /// x (which is shifting right by one and adding x^32 mod p if the bit shifted
 60  /// out is a one).  We start with the highest power (least significant bit) of
 61  /// q and repeat for all eight bits of q.
 62  ///
 63  /// The table is simply the CRC of all possible eight bit values.  This is all
 64  /// the information needed to generate CRC's on data a byte at a time for all
 65  /// combinations of CRC register values and incoming bytes.
 66  /// </summary>
 67  public sealed class Crc32 : IChecksum
 68  {
 69    const uint CrcSeed = 0xFFFFFFFF;
 70
 171    readonly static uint[] CrcTable = {
 172      0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,
 173      0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,
 174      0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,
 175      0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
 176      0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,
 177      0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
 178      0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,
 179      0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
 180      0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,
 181      0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,
 182      0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,
 183      0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
 184      0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,
 185      0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,
 186      0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,
 187      0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
 188      0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,
 189      0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
 190      0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,
 191      0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
 192      0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,
 193      0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,
 194      0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,
 195      0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
 196      0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,
 197      0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,
 198      0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,
 199      0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
 1100      0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,
 1101      0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
 1102      0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,
 1103      0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
 1104      0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,
 1105      0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,
 1106      0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,
 1107      0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
 1108      0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,
 1109      0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,
 1110      0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,
 1111      0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
 1112      0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,
 1113      0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
 1114      0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,
 1115      0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
 1116      0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,
 1117      0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,
 1118      0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,
 1119      0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
 1120      0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,
 1121      0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,
 1122      0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,
 1123      0x2D02EF8D
 1124    };
 125
 126    internal static uint ComputeCrc32(uint oldCrc, byte value)
 127    {
 4521654128      return (uint)(Crc32.CrcTable[(oldCrc ^ value) & 0xFF] ^ (oldCrc >> 8));
 129    }
 130
 131    /// <summary>
 132    /// The crc data checksum so far.
 133    /// </summary>
 134    uint crc;
 135
 136    /// <summary>
 137    /// Returns the CRC32 data checksum computed so far.
 138    /// </summary>
 139    public long Value {
 140      get {
 66254141        return (long)crc;
 142      }
 143      set {
 0144        crc = (uint)value;
 0145      }
 146    }
 147
 148    /// <summary>
 149    /// Resets the CRC32 data checksum as if no update was ever called.
 150    /// </summary>
 151    public void Reset()
 152    {
 164153      crc = 0;
 164154    }
 155
 156    /// <summary>
 157    /// Updates the checksum with the int bval.
 158    /// </summary>
 159    /// <param name = "value">
 160    /// the byte is taken as the lower 8 bits of value
 161    /// </param>
 162    public void Update(int value)
 163    {
 10164      crc ^= CrcSeed;
 10165      crc  = CrcTable[(crc ^ value) & 0xFF] ^ (crc >> 8);
 10166      crc ^= CrcSeed;
 10167    }
 168
 169    /// <summary>
 170    /// Updates the checksum with the bytes taken from the array.
 171    /// </summary>
 172    /// <param name="buffer">
 173    /// buffer an array of bytes
 174    /// </param>
 175    public void Update(byte[] buffer)
 176    {
 0177       if (buffer == null) {
 0178        throw new ArgumentNullException(nameof(buffer));
 179      }
 180
 0181      Update(buffer, 0, buffer.Length);
 0182    }
 183
 184    /// <summary>
 185    /// Adds the byte array to the data checksum.
 186    /// </summary>
 187    /// <param name = "buffer">
 188    /// The buffer which contains the data
 189    /// </param>
 190    /// <param name = "offset">
 191    /// The offset in the buffer where the data starts
 192    /// </param>
 193    /// <param name = "count">
 194    /// The number of data bytes to update the CRC with.
 195    /// </param>
 196    public void Update(byte[] buffer, int offset, int count)
 197    {
 5162198       if (buffer == null) {
 0199        throw new ArgumentNullException(nameof(buffer));
 200      }
 201
 5162202       if ( count < 0 ) {
 203#if NETCF_1_0
 204        throw new ArgumentOutOfRangeException("count");
 205#else
 0206        throw new ArgumentOutOfRangeException(nameof(count), "Count cannot be less than zero");
 207#endif
 208      }
 209
 5162210       if (offset < 0 || offset + count > buffer.Length) {
 0211        throw new ArgumentOutOfRangeException(nameof(offset));
 212      }
 213
 5162214      crc ^= CrcSeed;
 215
 4734443216       while (--count >= 0) {
 4729281217        crc = CrcTable[(crc ^ buffer[offset++]) & 0xFF] ^ (crc >> 8);
 218      }
 219
 5162220      crc ^= CrcSeed;
 5162221    }
 222  }
 223}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_Deflater.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_Deflater.htm new file mode 100644 index 000000000..59f2d8cf6 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_Deflater.htm @@ -0,0 +1,619 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Deflater - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Deflater
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Deflater.cs
Covered lines:69
Uncovered lines:29
Coverable lines:98
Total lines:563
Line coverage:70.4%
Branch coverage:68%
+

Metrics

+ + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)100
.ctor(...)492.3171.43
Reset()3100100
Flush()1100100
Finish()1100100
SetInput(...)100
SetInput(...)27566.67
SetLevel(...)588.8977.78
GetLevel()1100100
SetStrategy(...)1100100
Deflate(...)100
Deflate(...)1669.0570.97
SetDictionary(...)100
SetDictionary(...)200
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Deflater.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// Deflater.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41namespace ICSharpCode.SharpZipLib.Zip.Compression
 42{
 43
 44  /// <summary>
 45  /// This is the Deflater class.  The deflater class compresses input
 46  /// with the deflate algorithm described in RFC 1951.  It has several
 47  /// compression levels and three different strategies described below.
 48  ///
 49  /// This class is <i>not</i> thread safe.  This is inherent in the API, due
 50  /// to the split of deflate and setInput.
 51  ///
 52  /// author of the original java version : Jochen Hoenicke
 53  /// </summary>
 54  public class Deflater
 55  {
 56    #region Deflater Documentation
 57    /*
 58    * The Deflater can do the following state transitions:
 59    *
 60    * (1) -> INIT_STATE   ----> INIT_FINISHING_STATE ---.
 61    *        /  | (2)      (5)                          |
 62    *       /   v          (5)                          |
 63    *   (3)| SETDICT_STATE ---> SETDICT_FINISHING_STATE |(3)
 64    *       \   | (3)                 |        ,--------'
 65    *        |  |                     | (3)   /
 66    *        v  v          (5)        v      v
 67    * (1) -> BUSY_STATE   ----> FINISHING_STATE
 68    *                                | (6)
 69    *                                v
 70    *                           FINISHED_STATE
 71    *    \_____________________________________/
 72    *                    | (7)
 73    *                    v
 74    *               CLOSED_STATE
 75    *
 76    * (1) If we should produce a header we start in INIT_STATE, otherwise
 77    *     we start in BUSY_STATE.
 78    * (2) A dictionary may be set only when we are in INIT_STATE, then
 79    *     we change the state as indicated.
 80    * (3) Whether a dictionary is set or not, on the first call of deflate
 81    *     we change to BUSY_STATE.
 82    * (4) -- intentionally left blank -- :)
 83    * (5) FINISHING_STATE is entered, when flush() is called to indicate that
 84    *     there is no more INPUT.  There are also states indicating, that
 85    *     the header wasn't written yet.
 86    * (6) FINISHED_STATE is entered, when everything has been flushed to the
 87    *     internal pending output buffer.
 88    * (7) At any time (7)
 89    *
 90    */
 91    #endregion
 92    #region Public Constants
 93    /// <summary>
 94    /// The best and slowest compression level.  This tries to find very
 95    /// long and distant string repetitions.
 96    /// </summary>
 97    public const  int BEST_COMPRESSION = 9;
 98
 99    /// <summary>
 100    /// The worst but fastest compression level.
 101    /// </summary>
 102    public const  int BEST_SPEED = 1;
 103
 104    /// <summary>
 105    /// The default compression level.
 106    /// </summary>
 107    public const  int DEFAULT_COMPRESSION = -1;
 108
 109    /// <summary>
 110    /// This level won't compress at all but output uncompressed blocks.
 111    /// </summary>
 112    public const  int NO_COMPRESSION = 0;
 113
 114    /// <summary>
 115    /// The compression method.  This is the only method supported so far.
 116    /// There is no need to use this constant at all.
 117    /// </summary>
 118    public const  int DEFLATED = 8;
 119    #endregion
 120    #region Local Constants
 121    private const  int IS_SETDICT              = 0x01;
 122    private const  int IS_FLUSHING             = 0x04;
 123    private const  int IS_FINISHING            = 0x08;
 124
 125    private const  int INIT_STATE              = 0x00;
 126    private const  int SETDICT_STATE           = 0x01;
 127    //    private static  int INIT_FINISHING_STATE    = 0x08;
 128    //    private static  int SETDICT_FINISHING_STATE = 0x09;
 129    private const  int BUSY_STATE              = 0x10;
 130    private const  int FLUSHING_STATE          = 0x14;
 131    private const  int FINISHING_STATE         = 0x1c;
 132    private const  int FINISHED_STATE          = 0x1e;
 133    private const  int CLOSED_STATE            = 0x7f;
 134    #endregion
 135    #region Constructors
 136    /// <summary>
 137    /// Creates a new deflater with default compression level.
 138    /// </summary>
 4139    public Deflater() : this(DEFAULT_COMPRESSION, false)
 140    {
 141
 4142    }
 143
 144    /// <summary>
 145    /// Creates a new deflater with given compression level.
 146    /// </summary>
 147    /// <param name="level">
 148    /// the compression level, a value between NO_COMPRESSION
 149    /// and BEST_COMPRESSION, or DEFAULT_COMPRESSION.
 150    /// </param>
 151    /// <exception cref="System.ArgumentOutOfRangeException">if lvl is out of range.</exception>
 0152    public Deflater(int level) : this(level, false)
 153    {
 154
 0155    }
 156
 157    /// <summary>
 158    /// Creates a new deflater with given compression level.
 159    /// </summary>
 160    /// <param name="level">
 161    /// the compression level, a value between NO_COMPRESSION
 162    /// and BEST_COMPRESSION.
 163    /// </param>
 164    /// <param name="noZlibHeaderOrFooter">
 165    /// true, if we should suppress the Zlib/RFC1950 header at the
 166    /// beginning and the adler checksum at the end of the output.  This is
 167    /// useful for the GZIP/PKZIP formats.
 168    /// </param>
 169    /// <exception cref="System.ArgumentOutOfRangeException">if lvl is out of range.</exception>
 279170    public Deflater(int level, bool noZlibHeaderOrFooter)
 171    {
 279172       if (level == DEFAULT_COMPRESSION) {
 106173        level = 6;
 279174       } else if (level < NO_COMPRESSION || level > BEST_COMPRESSION) {
 0175        throw new ArgumentOutOfRangeException(nameof(level));
 176      }
 177
 279178      pending = new DeflaterPending();
 279179      engine = new DeflaterEngine(pending);
 279180      this.noZlibHeaderOrFooter = noZlibHeaderOrFooter;
 279181      SetStrategy(DeflateStrategy.Default);
 279182      SetLevel(level);
 279183      Reset();
 279184    }
 185    #endregion
 186
 187    /// <summary>
 188    /// Resets the deflater.  The deflater acts afterwards as if it was
 189    /// just created with the same compression level and strategy as it
 190    /// had before.
 191    /// </summary>
 192    public void Reset()
 193    {
 401194       state = (noZlibHeaderOrFooter ? BUSY_STATE : INIT_STATE);
 401195      totalOut = 0;
 401196      pending.Reset();
 401197      engine.Reset();
 401198    }
 199
 200    /// <summary>
 201    /// Gets the current adler checksum of the data that was processed so far.
 202    /// </summary>
 203    public int Adler {
 204      get {
 0205        return engine.Adler;
 206      }
 207    }
 208
 209    /// <summary>
 210    /// Gets the number of input bytes processed so far.
 211    /// </summary>
 212    public long TotalIn {
 213      get {
 10214        return engine.TotalIn;
 215      }
 216    }
 217
 218    /// <summary>
 219    /// Gets the number of output bytes so far.
 220    /// </summary>
 221    public long TotalOut {
 222      get {
 122223        return totalOut;
 224      }
 225    }
 226
 227    /// <summary>
 228    /// Flushes the current input block.  Further calls to deflate() will
 229    /// produce enough output to inflate everything in the current input
 230    /// block.  This is not part of Sun's JDK so I have made it package
 231    /// private.  It is used by DeflaterOutputStream to implement
 232    /// flush().
 233    /// </summary>
 234    public void Flush()
 235    {
 32236      state |= IS_FLUSHING;
 32237    }
 238
 239    /// <summary>
 240    /// Finishes the deflater with the current input block.  It is an error
 241    /// to give more input after this method was called.  This method must
 242    /// be called to force all bytes to be flushed.
 243    /// </summary>
 244    public void Finish()
 245    {
 329246      state |= (IS_FLUSHING | IS_FINISHING);
 329247    }
 248
 249    /// <summary>
 250    /// Returns true if the stream was finished and no more output bytes
 251    /// are available.
 252    /// </summary>
 253    public bool IsFinished {
 254      get {
 1913255        return (state == FINISHED_STATE) && pending.IsFlushed;
 256      }
 257    }
 258
 259    /// <summary>
 260    /// Returns true, if the input buffer is empty.
 261    /// You should then call setInput().
 262    /// NOTE: This method can also return true when the stream
 263    /// was finished.
 264    /// </summary>
 265    public bool IsNeedingInput {
 266      get {
 16295267        return engine.NeedsInput();
 268      }
 269    }
 270
 271    /// <summary>
 272    /// Sets the data which should be compressed next.  This should be only
 273    /// called when needsInput indicates that more input is needed.
 274    /// If you call setInput when needsInput() returns false, the
 275    /// previous input that is still pending will be thrown away.
 276    /// The given byte array should not be changed, before needsInput() returns
 277    /// true again.
 278    /// This call is equivalent to <code>setInput(input, 0, input.length)</code>.
 279    /// </summary>
 280    /// <param name="input">
 281    /// the buffer containing the input data.
 282    /// </param>
 283    /// <exception cref="System.InvalidOperationException">
 284    /// if the buffer was finished() or ended().
 285    /// </exception>
 286    public void SetInput(byte[] input)
 287    {
 0288      SetInput(input, 0, input.Length);
 0289    }
 290
 291    /// <summary>
 292    /// Sets the data which should be compressed next.  This should be
 293    /// only called when needsInput indicates that more input is needed.
 294    /// The given byte array should not be changed, before needsInput() returns
 295    /// true again.
 296    /// </summary>
 297    /// <param name="input">
 298    /// the buffer containing the input data.
 299    /// </param>
 300    /// <param name="offset">
 301    /// the start of the data.
 302    /// </param>
 303    /// <param name="count">
 304    /// the number of data bytes of input.
 305    /// </param>
 306    /// <exception cref="System.InvalidOperationException">
 307    /// if the buffer was Finish()ed or if previous input is still pending.
 308    /// </exception>
 309    public void SetInput(byte[] input, int offset, int count)
 310    {
 4485311       if ((state & IS_FINISHING) != 0) {
 0312        throw new InvalidOperationException("Finish() already called");
 313      }
 4485314      engine.SetInput(input, offset, count);
 4485315    }
 316
 317    /// <summary>
 318    /// Sets the compression level.  There is no guarantee of the exact
 319    /// position of the change, but if you call this when needsInput is
 320    /// true the change of compression level will occur somewhere near
 321    /// before the end of the so far given input.
 322    /// </summary>
 323    /// <param name="level">
 324    /// the new compression level.
 325    /// </param>
 326    public void SetLevel(int level)
 327    {
 458328       if (level == DEFAULT_COMPRESSION) {
 60329        level = 6;
 458330       } else if (level < NO_COMPRESSION || level > BEST_COMPRESSION) {
 0331        throw new ArgumentOutOfRangeException(nameof(level));
 332      }
 333
 458334       if (this.level != level) {
 335335        this.level = level;
 335336        engine.SetLevel(level);
 337      }
 458338    }
 339
 340    /// <summary>
 341    /// Get current compression level
 342    /// </summary>
 343    /// <returns>Returns the current compression level</returns>
 344    public int GetLevel() {
 3345      return level;
 346    }
 347
 348    /// <summary>
 349    /// Sets the compression strategy. Strategy is one of
 350    /// DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED.  For the exact
 351    /// position where the strategy is changed, the same as for
 352    /// SetLevel() applies.
 353    /// </summary>
 354    /// <param name="strategy">
 355    /// The new compression strategy.
 356    /// </param>
 357    public void SetStrategy(DeflateStrategy strategy)
 358    {
 279359      engine.Strategy = strategy;
 279360    }
 361
 362    /// <summary>
 363    /// Deflates the current input block with to the given array.
 364    /// </summary>
 365    /// <param name="output">
 366    /// The buffer where compressed data is stored
 367    /// </param>
 368    /// <returns>
 369    /// The number of compressed bytes added to the output, or 0 if either
 370    /// IsNeedingInput() or IsFinished returns true or length is zero.
 371    /// </returns>
 372    public int Deflate(byte[] output)
 373    {
 0374      return Deflate(output, 0, output.Length);
 375    }
 376
 377    /// <summary>
 378    /// Deflates the current input block to the given array.
 379    /// </summary>
 380    /// <param name="output">
 381    /// Buffer to store the compressed data.
 382    /// </param>
 383    /// <param name="offset">
 384    /// Offset into the output array.
 385    /// </param>
 386    /// <param name="length">
 387    /// The maximum number of bytes that may be stored.
 388    /// </param>
 389    /// <returns>
 390    /// The number of compressed bytes added to the output, or 0 if either
 391    /// needsInput() or finished() returns true or length is zero.
 392    /// </returns>
 393    /// <exception cref="System.InvalidOperationException">
 394    /// If Finish() was previously called.
 395    /// </exception>
 396    /// <exception cref="System.ArgumentOutOfRangeException">
 397    /// If offset or length don't match the array length.
 398    /// </exception>
 399    public int Deflate(byte[] output, int offset, int length)
 400    {
 12749401      int origLength = length;
 402
 12749403       if (state == CLOSED_STATE) {
 0404        throw new InvalidOperationException("Deflater closed");
 405      }
 406
 12749407       if (state < BUSY_STATE) {
 408        // output header
 14409        int header = (DEFLATED +
 14410          ((DeflaterConstants.MAX_WBITS - 8) << 4)) << 8;
 14411        int level_flags = (level - 1) >> 1;
 14412         if (level_flags < 0 || level_flags > 3) {
 2413          level_flags = 3;
 414        }
 14415        header |= level_flags << 6;
 14416         if ((state & IS_SETDICT) != 0) {
 417          // Dictionary was set
 0418          header |= DeflaterConstants.PRESET_DICT;
 419        }
 14420        header += 31 - (header % 31);
 421
 14422        pending.WriteShortMSB(header);
 14423         if ((state & IS_SETDICT) != 0) {
 0424          int chksum = engine.Adler;
 0425          engine.ResetAdler();
 0426          pending.WriteShortMSB(chksum >> 16);
 0427          pending.WriteShortMSB(chksum & 0xffff);
 428        }
 429
 14430        state = BUSY_STATE | (state & (IS_FLUSHING | IS_FINISHING));
 431      }
 432
 433      for (;;) {
 13290434        int count = pending.Flush(output, offset, length);
 13290435        offset   += count;
 13290436        totalOut += count;
 13290437        length   -= count;
 438
 13290439         if (length == 0 || state == FINISHED_STATE) {
 440          break;
 441        }
 442
 4892443         if (!engine.Deflate((state & IS_FLUSHING) != 0, (state & IS_FINISHING) != 0)) {
 4660444                     switch (state)
 445                    {
 446                        case BUSY_STATE:
 447                            // We need more input now
 4351448                            return origLength - length;
 449                        case FLUSHING_STATE:
 0450                             if (level != NO_COMPRESSION)
 451                            {
 452                                /* We have to supply some lookahead.  8 bit lookahead
 453                                 * is needed by the zlib inflater, and we must fill
 454                                 * the next byte, so that all bits are flushed.
 455                                 */
 0456                                int neededbits = 8 + ((-pending.BitCount) & 7);
 0457                                 while (neededbits > 0)
 458                                {
 459                                    /* write a static tree block consisting solely of
 460                                     * an EOF:
 461                                     */
 0462                                    pending.WriteBits(2, 10);
 0463                                    neededbits -= 10;
 464                                }
 465                            }
 0466                            state = BUSY_STATE;
 0467                            break;
 468                        case FINISHING_STATE:
 309469                            pending.AlignToByte();
 470
 471                            // Compressed data is complete.  Write footer information if required.
 309472                             if (!noZlibHeaderOrFooter)
 473                            {
 14474                                int adler = engine.Adler;
 14475                                pending.WriteShortMSB(adler >> 16);
 14476                                pending.WriteShortMSB(adler & 0xffff);
 477                            }
 309478                            state = FINISHED_STATE;
 309479                            break;
 480                    }
 481                }
 482      }
 8398483      return origLength - length;
 484    }
 485
 486    /// <summary>
 487    /// Sets the dictionary which should be used in the deflate process.
 488    /// This call is equivalent to <code>setDictionary(dict, 0, dict.Length)</code>.
 489    /// </summary>
 490    /// <param name="dictionary">
 491    /// the dictionary.
 492    /// </param>
 493    /// <exception cref="System.InvalidOperationException">
 494    /// if SetInput () or Deflate () were already called or another dictionary was already set.
 495    /// </exception>
 496    public void SetDictionary(byte[] dictionary)
 497    {
 0498      SetDictionary(dictionary, 0, dictionary.Length);
 0499    }
 500
 501    /// <summary>
 502    /// Sets the dictionary which should be used in the deflate process.
 503    /// The dictionary is a byte array containing strings that are
 504    /// likely to occur in the data which should be compressed.  The
 505    /// dictionary is not stored in the compressed output, only a
 506    /// checksum.  To decompress the output you need to supply the same
 507    /// dictionary again.
 508    /// </summary>
 509    /// <param name="dictionary">
 510    /// The dictionary data
 511    /// </param>
 512    /// <param name="index">
 513    /// The index where dictionary information commences.
 514    /// </param>
 515    /// <param name="count">
 516    /// The number of bytes in the dictionary.
 517    /// </param>
 518    /// <exception cref="System.InvalidOperationException">
 519    /// If SetInput () or Deflate() were already called or another dictionary was already set.
 520    /// </exception>
 521    public void SetDictionary(byte[] dictionary, int index, int count)
 522    {
 0523       if (state != INIT_STATE) {
 0524        throw new InvalidOperationException();
 525      }
 526
 0527      state = SETDICT_STATE;
 0528      engine.SetDictionary(dictionary, index, count);
 0529    }
 530
 531    #region Instance Fields
 532    /// <summary>
 533    /// Compression level.
 534    /// </summary>
 535    int level;
 536
 537    /// <summary>
 538    /// If true no Zlib/RFC1950 headers or footers are generated
 539    /// </summary>
 540    bool noZlibHeaderOrFooter;
 541
 542    /// <summary>
 543    /// The current state.
 544    /// </summary>
 545    int state;
 546
 547    /// <summary>
 548    /// The total bytes of output written.
 549    /// </summary>
 550    long totalOut;
 551
 552    /// <summary>
 553    /// The pending output.
 554    /// </summary>
 555    DeflaterPending pending;
 556
 557    /// <summary>
 558    /// The deflater engine.
 559    /// </summary>
 560    DeflaterEngine engine;
 561    #endregion
 562  }
 563}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterConstants.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterConstants.htm new file mode 100644 index 000000000..6c7236921 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterConstants.htm @@ -0,0 +1,226 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.DeflaterConstants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.DeflaterConstants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterConstants.cs
Covered lines:6
Uncovered lines:0
Coverable lines:6
Total lines:185
Line coverage:100%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterConstants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// DeflaterConstants.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41namespace ICSharpCode.SharpZipLib.Zip.Compression
 42{
 43
 44  /// <summary>
 45  /// This class contains constants used for deflation.
 46  /// </summary>
 47  public static class DeflaterConstants
 48  {
 49    /// <summary>
 50    /// Set to true to enable debugging
 51    /// </summary>
 52    public const bool DEBUGGING = false;
 53
 54    /// <summary>
 55    /// Written to Zip file to identify a stored block
 56    /// </summary>
 57    public const int STORED_BLOCK = 0;
 58
 59    /// <summary>
 60    /// Identifies static tree in Zip file
 61    /// </summary>
 62    public const int STATIC_TREES = 1;
 63
 64    /// <summary>
 65    /// Identifies dynamic tree in Zip file
 66    /// </summary>
 67    public const int DYN_TREES    = 2;
 68
 69    /// <summary>
 70    /// Header flag indicating a preset dictionary for deflation
 71    /// </summary>
 72    public const int PRESET_DICT  = 0x20;
 73
 74    /// <summary>
 75    /// Sets internal buffer sizes for Huffman encoding
 76    /// </summary>
 77    public const int DEFAULT_MEM_LEVEL = 8;
 78
 79    /// <summary>
 80    /// Internal compression engine constant
 81    /// </summary>
 82    public const int MAX_MATCH = 258;
 83
 84    /// <summary>
 85    /// Internal compression engine constant
 86    /// </summary>
 87    public const int MIN_MATCH = 3;
 88
 89    /// <summary>
 90    /// Internal compression engine constant
 91    /// </summary>
 92    public const int MAX_WBITS = 15;
 93
 94    /// <summary>
 95    /// Internal compression engine constant
 96    /// </summary>
 97    public const int WSIZE = 1 << MAX_WBITS;
 98
 99    /// <summary>
 100    /// Internal compression engine constant
 101    /// </summary>
 102    public const int WMASK = WSIZE - 1;
 103
 104    /// <summary>
 105    /// Internal compression engine constant
 106    /// </summary>
 107    public const int HASH_BITS = DEFAULT_MEM_LEVEL + 7;
 108
 109    /// <summary>
 110    /// Internal compression engine constant
 111    /// </summary>
 112    public const int HASH_SIZE = 1 << HASH_BITS;
 113
 114    /// <summary>
 115    /// Internal compression engine constant
 116    /// </summary>
 117    public const int HASH_MASK = HASH_SIZE - 1;
 118
 119    /// <summary>
 120    /// Internal compression engine constant
 121    /// </summary>
 122    public const int HASH_SHIFT = (HASH_BITS + MIN_MATCH - 1) / MIN_MATCH;
 123
 124    /// <summary>
 125    /// Internal compression engine constant
 126    /// </summary>
 127    public const int MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
 128
 129    /// <summary>
 130    /// Internal compression engine constant
 131    /// </summary>
 132    public const int MAX_DIST = WSIZE - MIN_LOOKAHEAD;
 133
 134    /// <summary>
 135    /// Internal compression engine constant
 136    /// </summary>
 137    public const int PENDING_BUF_SIZE = 1 << (DEFAULT_MEM_LEVEL + 8);
 138
 139    /// <summary>
 140    /// Internal compression engine constant
 141    /// </summary>
 1142    public static int MAX_BLOCK_SIZE = Math.Min(65535, PENDING_BUF_SIZE - 5);
 143
 144    /// <summary>
 145    /// Internal compression engine constant
 146    /// </summary>
 147    public const int DEFLATE_STORED = 0;
 148
 149    /// <summary>
 150    /// Internal compression engine constant
 151    /// </summary>
 152    public const int DEFLATE_FAST   = 1;
 153
 154    /// <summary>
 155    /// Internal compression engine constant
 156    /// </summary>
 157    public const int DEFLATE_SLOW   = 2;
 158
 159    /// <summary>
 160    /// Internal compression engine constant
 161    /// </summary>
 1162    public static int[] GOOD_LENGTH = { 0, 4,  4,  4,  4,  8,   8,   8,   32,   32 };
 163
 164    /// <summary>
 165    /// Internal compression engine constant
 166    /// </summary>
 1167    public static int[] MAX_LAZY    = { 0, 4,  5,  6,  4, 16,  16,  32,  128,  258 };
 168
 169    /// <summary>
 170    /// Internal compression engine constant
 171    /// </summary>
 1172    public static int[] NICE_LENGTH = { 0, 8, 16, 32, 16, 32, 128, 128,  258,  258 };
 173
 174    /// <summary>
 175    /// Internal compression engine constant
 176    /// </summary>
 1177    public static int[] MAX_CHAIN   = { 0, 4,  8, 32, 16, 32, 128, 256, 1024, 4096 };
 178
 179    /// <summary>
 180    /// Internal compression engine constant
 181    /// </summary>
 1182    public static int[] COMPR_FUNC  = { 0, 1,  1,  1,  1,  2,   2,   2,    2,    2 };
 183
 184  }
 185}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterEngine.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterEngine.htm new file mode 100644 index 000000000..4a83b9c9d --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterEngine.htm @@ -0,0 +1,925 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterEngine.cs
Covered lines:238
Uncovered lines:37
Coverable lines:275
Total lines:868
Line coverage:86.5%
Branch coverage:84.4%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
Deflate(...)691.6785.71
SetInput(...)766.6753.85
NeedsInput()1100100
SetDictionary(...)400
Reset()3100100
ResetAdler()100
SetLevel(...)1165.3863.16
FillWindow()6100100
UpdateHash()1100100
InsertString()1100100
SlideWindow()7100100
FindLongestMatch(...)2010094.87
DeflateStored(...)8100100
DeflateFast(...)1893.9487.88
DeflateSlow(...)2510093.33
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterEngine.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// DeflaterEngine.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41using ICSharpCode.SharpZipLib.Checksums;
 42
 43namespace ICSharpCode.SharpZipLib.Zip.Compression
 44{
 45
 46  /// <summary>
 47  /// Strategies for deflater
 48  /// </summary>
 49  public enum DeflateStrategy
 50  {
 51    /// <summary>
 52    /// The default strategy
 53    /// </summary>
 54    Default  = 0,
 55
 56    /// <summary>
 57    /// This strategy will only allow longer string repetitions.  It is
 58    /// useful for random data with a small character set.
 59    /// </summary>
 60    Filtered = 1,
 61
 62
 63    /// <summary>
 64    /// This strategy will not look for string repetitions at all.  It
 65    /// only encodes with Huffman trees (which means, that more common
 66    /// characters get a smaller encoding.
 67    /// </summary>
 68    HuffmanOnly = 2
 69  }
 70
 71  // DEFLATE ALGORITHM:
 72  //
 73  // The uncompressed stream is inserted into the window array.  When
 74  // the window array is full the first half is thrown away and the
 75  // second half is copied to the beginning.
 76  //
 77  // The head array is a hash table.  Three characters build a hash value
 78  // and they the value points to the corresponding index in window of
 79  // the last string with this hash.  The prev array implements a
 80  // linked list of matches with the same hash: prev[index & WMASK] points
 81  // to the previous index with the same hash.
 82  //
 83
 84
 85  /// <summary>
 86  /// Low level compression engine for deflate algorithm which uses a 32K sliding window
 87  /// with secondary compression from Huffman/Shannon-Fano codes.
 88  /// </summary>
 89  public class DeflaterEngine
 90  {
 91    #region Constants
 92    const int TooFar = 4096;
 93    #endregion
 94
 95    #region Constructors
 96    /// <summary>
 97    /// Construct instance with pending buffer
 98    /// </summary>
 99    /// <param name="pending">
 100    /// Pending buffer to use
 101    /// </param>>
 279102    public DeflaterEngine(DeflaterPending pending)
 103    {
 279104      this.pending = pending;
 279105      huffman = new DeflaterHuffman(pending);
 279106      adler = new Adler32();
 107
 279108      window = new byte[2 * DeflaterConstants.WSIZE];
 279109      head   = new short[DeflaterConstants.HASH_SIZE];
 279110      prev   = new short[DeflaterConstants.WSIZE];
 111
 112      // We start at index 1, to avoid an implementation deficiency, that
 113      // we cannot build a repeat pattern at index 0.
 279114      blockStart = strstart = 1;
 279115    }
 116
 117    #endregion
 118
 119    /// <summary>
 120    /// Deflate drives actual compression of data
 121    /// </summary>
 122    /// <param name="flush">True to flush input buffers</param>
 123    /// <param name="finish">Finish deflation with the current input.</param>
 124    /// <returns>Returns true if progress has been made.</returns>
 125    public bool Deflate(bool flush, bool finish)
 126    {
 127      bool progress;
 128      do
 129      {
 9158130        FillWindow();
 9158131        bool canFlush = flush && (inputOff == inputEnd);
 132
 133#if DebugDeflation
 134        if (DeflaterConstants.DEBUGGING) {
 135          Console.WriteLine("window: [" + blockStart + "," + strstart + ","
 136                + lookahead + "], " + compressionFunction + "," + canFlush);
 137        }
 138#endif
 9158139         switch (compressionFunction)
 140        {
 141          case DeflaterConstants.DEFLATE_STORED:
 1373142            progress = DeflateStored(canFlush, finish);
 1373143            break;
 144          case DeflaterConstants.DEFLATE_FAST:
 3242145            progress = DeflateFast(canFlush, finish);
 3242146            break;
 147          case DeflaterConstants.DEFLATE_SLOW:
 4543148            progress = DeflateSlow(canFlush, finish);
 4543149            break;
 150          default:
 0151            throw new InvalidOperationException("unknown compressionFunction");
 152        }
 9158153       } while (pending.IsFlushed && progress); // repeat while we have no pending output and progress was made
 4892154      return progress;
 155    }
 156
 157    /// <summary>
 158    /// Sets input data to be deflated.  Should only be called when <code>NeedsInput()</code>
 159    /// returns true
 160    /// </summary>
 161    /// <param name="buffer">The buffer containing input data.</param>
 162    /// <param name="offset">The offset of the first byte of data.</param>
 163    /// <param name="count">The number of bytes of data to use as input.</param>
 164    public void SetInput(byte[] buffer, int offset, int count)
 165    {
 4485166       if ( buffer == null )
 167      {
 0168        throw new ArgumentNullException(nameof(buffer));
 169      }
 170
 4485171       if ( offset < 0 )
 172      {
 0173        throw new ArgumentOutOfRangeException(nameof(offset));
 174      }
 175
 4485176       if ( count < 0 )
 177      {
 0178        throw new ArgumentOutOfRangeException(nameof(count));
 179      }
 180
 4485181       if (inputOff < inputEnd)
 182      {
 0183        throw new InvalidOperationException("Old input was not completely processed");
 184      }
 185
 4485186      int end = offset + count;
 187
 188      /* We want to throw an ArrayIndexOutOfBoundsException early.  The
 189      * check is very tricky: it also handles integer wrap around.
 190      */
 4485191       if ((offset > end) || (end > buffer.Length) )
 192      {
 0193        throw new ArgumentOutOfRangeException(nameof(count));
 194      }
 195
 4485196      inputBuf = buffer;
 4485197      inputOff = offset;
 4485198      inputEnd = end;
 4485199    }
 200
 201    /// <summary>
 202    /// Determines if more <see cref="SetInput">input</see> is needed.
 203    /// </summary>
 204    /// <returns>Return true if input is needed via <see cref="SetInput">SetInput</see></returns>
 205    public bool NeedsInput()
 206    {
 16295207      return (inputEnd == inputOff);
 208    }
 209
 210    /// <summary>
 211    /// Set compression dictionary
 212    /// </summary>
 213    /// <param name="buffer">The buffer containing the dictionary data</param>
 214    /// <param name="offset">The offset in the buffer for the first byte of data</param>
 215    /// <param name="length">The length of the dictionary data.</param>
 216    public void SetDictionary(byte[] buffer, int offset, int length)
 217    {
 218#if DebugDeflation
 219      if (DeflaterConstants.DEBUGGING && (strstart != 1) )
 220      {
 221        throw new InvalidOperationException("strstart not 1");
 222      }
 223#endif
 0224      adler.Update(buffer, offset, length);
 0225       if (length < DeflaterConstants.MIN_MATCH)
 226      {
 0227        return;
 228      }
 229
 0230       if (length > DeflaterConstants.MAX_DIST)
 231      {
 0232        offset += length - DeflaterConstants.MAX_DIST;
 0233        length = DeflaterConstants.MAX_DIST;
 234      }
 235
 0236      System.Array.Copy(buffer, offset, window, strstart, length);
 237
 0238      UpdateHash();
 0239      --length;
 0240       while (--length > 0)
 241      {
 0242        InsertString();
 0243        strstart++;
 244      }
 0245      strstart += 2;
 0246      blockStart = strstart;
 0247    }
 248
 249    /// <summary>
 250    /// Reset internal state
 251    /// </summary>
 252    public void Reset()
 253    {
 401254      huffman.Reset();
 401255      adler.Reset();
 401256      blockStart = strstart = 1;
 401257      lookahead = 0;
 401258      totalIn   = 0;
 401259      prevAvailable = false;
 401260      matchLen = DeflaterConstants.MIN_MATCH - 1;
 261
 26280738262       for (int i = 0; i < DeflaterConstants.HASH_SIZE; i++) {
 13139968263        head[i] = 0;
 264      }
 265
 26280738266       for (int i = 0; i < DeflaterConstants.WSIZE; i++) {
 13139968267        prev[i] = 0;
 268      }
 401269    }
 270
 271    /// <summary>
 272    /// Reset Adler checksum
 273    /// </summary>
 274    public void ResetAdler()
 275    {
 0276      adler.Reset();
 0277    }
 278
 279    /// <summary>
 280    /// Get current value of Adler checksum
 281    /// </summary>
 282    public int Adler {
 283      get {
 14284        return unchecked((int)adler.Value);
 285      }
 286    }
 287
 288    /// <summary>
 289    /// Total data processed
 290    /// </summary>
 291    public long TotalIn {
 292      get {
 10293        return totalIn;
 294      }
 295    }
 296
 297    /// <summary>
 298    /// Get/set the <see cref="DeflateStrategy">deflate strategy</see>
 299    /// </summary>
 300    public DeflateStrategy Strategy {
 301      get {
 0302        return strategy;
 303      }
 304      set {
 279305        strategy = value;
 279306      }
 307    }
 308
 309    /// <summary>
 310    /// Set the deflate level (0-9)
 311    /// </summary>
 312    /// <param name="level">The value to set the level to.</param>
 313    public void SetLevel(int level)
 314    {
 335315       if ( (level < 0) || (level > 9) )
 316      {
 0317        throw new ArgumentOutOfRangeException(nameof(level));
 318      }
 319
 335320      goodLength = DeflaterConstants.GOOD_LENGTH[level];
 335321      max_lazy   = DeflaterConstants.MAX_LAZY[level];
 335322      niceLength = DeflaterConstants.NICE_LENGTH[level];
 335323      max_chain  = DeflaterConstants.MAX_CHAIN[level];
 324
 335325       if (DeflaterConstants.COMPR_FUNC[level] != compressionFunction) {
 326
 327#if DebugDeflation
 328        if (DeflaterConstants.DEBUGGING) {
 329           Console.WriteLine("Change from " + compressionFunction + " to "
 330                      + DeflaterConstants.COMPR_FUNC[level]);
 331        }
 332#endif
 317333         switch (compressionFunction) {
 334          case DeflaterConstants.DEFLATE_STORED:
 278335             if (strstart > blockStart) {
 0336              huffman.FlushStoredBlock(window, blockStart,
 0337                strstart - blockStart, false);
 0338              blockStart = strstart;
 339            }
 278340            UpdateHash();
 278341            break;
 342
 343          case DeflaterConstants.DEFLATE_FAST:
 6344             if (strstart > blockStart) {
 0345              huffman.FlushBlock(window, blockStart, strstart - blockStart,
 0346                false);
 0347              blockStart = strstart;
 348            }
 0349            break;
 350
 351          case DeflaterConstants.DEFLATE_SLOW:
 33352             if (prevAvailable) {
 0353              huffman.TallyLit(window[strstart-1] & 0xff);
 354            }
 33355             if (strstart > blockStart) {
 0356              huffman.FlushBlock(window, blockStart, strstart - blockStart, false);
 0357              blockStart = strstart;
 358            }
 33359            prevAvailable = false;
 33360            matchLen = DeflaterConstants.MIN_MATCH - 1;
 361            break;
 362        }
 317363        compressionFunction = DeflaterConstants.COMPR_FUNC[level];
 364      }
 335365    }
 366
 367    /// <summary>
 368    /// Fill the window
 369    /// </summary>
 370    public void FillWindow()
 371    {
 372      /* If the window is almost full and there is insufficient lookahead,
 373       * move the upper half to the lower one to make room in the upper half.
 374       */
 9158375       if (strstart >= DeflaterConstants.WSIZE + DeflaterConstants.MAX_DIST)
 376      {
 20377        SlideWindow();
 378      }
 379
 380      /* If there is not enough lookahead, but still some input left,
 381       * read in the input
 382       */
 13684383       while (lookahead < DeflaterConstants.MIN_LOOKAHEAD && inputOff < inputEnd)
 384      {
 4526385        int more = 2 * DeflaterConstants.WSIZE - lookahead - strstart;
 386
 4526387         if (more > inputEnd - inputOff)
 388        {
 4484389          more = inputEnd - inputOff;
 390        }
 391
 4526392        System.Array.Copy(inputBuf, inputOff, window, strstart + lookahead, more);
 4526393        adler.Update(inputBuf, inputOff, more);
 394
 4526395        inputOff += more;
 4526396        totalIn  += more;
 4526397        lookahead += more;
 398      }
 399
 9158400       if (lookahead >= DeflaterConstants.MIN_MATCH)
 401      {
 8397402        UpdateHash();
 403      }
 9158404    }
 405
 406    void UpdateHash()
 407    {
 408/*
 409      if (DEBUGGING) {
 410        Console.WriteLine("updateHash: "+strstart);
 411      }
 412*/
 8675413      ins_h = (window[strstart] << DeflaterConstants.HASH_SHIFT) ^ window[strstart + 1];
 8675414    }
 415
 416    /// <summary>
 417    /// Inserts the current string in the head hash and returns the previous
 418    /// value for this hash.
 419    /// </summary>
 420    /// <returns>The previous hash value</returns>
 421    int InsertString()
 422    {
 423      short match;
 3726688424      int hash = ((ins_h << DeflaterConstants.HASH_SHIFT) ^ window[strstart + (DeflaterConstants.MIN_MATCH -1)]) & Defla
 425
 426#if DebugDeflation
 427      if (DeflaterConstants.DEBUGGING)
 428      {
 429        if (hash != (((window[strstart] << (2*HASH_SHIFT)) ^
 430                  (window[strstart + 1] << HASH_SHIFT) ^
 431                  (window[strstart + 2])) & HASH_MASK)) {
 432            throw new SharpZipBaseException("hash inconsistent: " + hash + "/"
 433                        +window[strstart] + ","
 434                        +window[strstart + 1] + ","
 435                        +window[strstart + 2] + "," + HASH_SHIFT);
 436          }
 437      }
 438#endif
 3726688439      prev[strstart & DeflaterConstants.WMASK] = match = head[hash];
 3726688440      head[hash] = unchecked((short)strstart);
 3726688441      ins_h = hash;
 3726688442      return match & 0xffff;
 443    }
 444
 445    void SlideWindow()
 446    {
 42447      Array.Copy(window, DeflaterConstants.WSIZE, window, 0, DeflaterConstants.WSIZE);
 42448      matchStart -= DeflaterConstants.WSIZE;
 42449      strstart   -= DeflaterConstants.WSIZE;
 42450      blockStart -= DeflaterConstants.WSIZE;
 451
 452      // Slide the hash table (could be avoided with 32 bit values
 453      // at the expense of memory usage).
 2752596454       for (int i = 0; i < DeflaterConstants.HASH_SIZE; ++i) {
 1376256455        int m = head[i] & 0xffff;
 1376256456         head[i] = (short)(m >= DeflaterConstants.WSIZE ? (m - DeflaterConstants.WSIZE) : 0);
 457      }
 458
 459      // Slide the prev table.
 2752596460       for (int i = 0; i < DeflaterConstants.WSIZE; i++) {
 1376256461        int m = prev[i] & 0xffff;
 1376256462         prev[i] = (short)(m >= DeflaterConstants.WSIZE ? (m - DeflaterConstants.WSIZE) : 0);
 463      }
 42464    }
 465
 466    /// <summary>
 467    /// Find the best (longest) string in the window matching the
 468    /// string starting at strstart.
 469    ///
 470    /// Preconditions:
 471    /// <code>
 472    /// strstart + DeflaterConstants.MAX_MATCH &lt;= window.length.</code>
 473    /// </summary>
 474    /// <param name="curMatch"></param>
 475    /// <returns>True if a match greater than the minimum length is found</returns>
 476    bool FindLongestMatch(int curMatch)
 477    {
 1855075478      int chainLength = this.max_chain;
 1855075479      int niceLength  = this.niceLength;
 1855075480      short[] prev    = this.prev;
 1855075481      int scan        = this.strstart;
 482      int match;
 1855075483      int best_end = this.strstart + matchLen;
 1855075484      int best_len = Math.Max(matchLen, DeflaterConstants.MIN_MATCH - 1);
 485
 1855075486      int limit = Math.Max(strstart - DeflaterConstants.MAX_DIST, 0);
 487
 1855075488      int strend = strstart + DeflaterConstants.MAX_MATCH - 1;
 1855075489      byte scan_end1 = window[best_end - 1];
 1855075490      byte scan_end  = window[best_end];
 491
 492      // Do not waste too much time if we already have a good match:
 1855075493       if (best_len >= this.goodLength) {
 66494        chainLength >>= 2;
 495      }
 496
 497      /* Do not look for matches beyond the end of the input. This is necessary
 498      * to make deflate deterministic.
 499      */
 1855075500       if (niceLength > lookahead) {
 3375501        niceLength = lookahead;
 502      }
 503
 504#if DebugDeflation
 505
 506      if (DeflaterConstants.DEBUGGING && (strstart > 2 * DeflaterConstants.WSIZE - DeflaterConstants.MIN_LOOKAHEAD))
 507      {
 508        throw new InvalidOperationException("need lookahead");
 509      }
 510#endif
 511
 512      do {
 513
 514#if DebugDeflation
 515
 516        if (DeflaterConstants.DEBUGGING && (curMatch >= strstart) )
 517        {
 518          throw new InvalidOperationException("no future");
 519        }
 520#endif
 2780567521         if (window[curMatch + best_len] != scan_end      ||
 2780567522          window[curMatch + best_len - 1] != scan_end1 ||
 2780567523          window[curMatch] != window[scan]             ||
 2780567524          window[curMatch + 1] != window[scan + 1]) {
 525          continue;
 526        }
 527
 5573528        match = curMatch + 2;
 5573529        scan += 2;
 530
 531        /* We check for insufficient lookahead only every 8th comparison;
 532        * the 256th check will be made at strstart + 258.
 533        */
 9473534         while (
 9473535          window[++scan] == window[++match] &&
 9473536          window[++scan] == window[++match] &&
 9473537          window[++scan] == window[++match] &&
 9473538          window[++scan] == window[++match] &&
 9473539          window[++scan] == window[++match] &&
 9473540          window[++scan] == window[++match] &&
 9473541          window[++scan] == window[++match] &&
 9473542          window[++scan] == window[++match] &&
 9473543          (scan < strend))
 544        {
 545          // Do nothing
 546        }
 547
 5573548         if (scan > best_end) {
 549#if DebugDeflation
 550          if (DeflaterConstants.DEBUGGING && (ins_h == 0) )
 551            Console.Error.WriteLine("Found match: " + curMatch + "-" + (scan - strstart));
 552#endif
 5511553          matchStart = curMatch;
 5511554          best_end = scan;
 5511555          best_len = scan - strstart;
 556
 5511557           if (best_len >= niceLength) {
 558            break;
 559          }
 560
 5435561          scan_end1  = window[best_end - 1];
 5435562          scan_end   = window[best_end];
 563        }
 5497564        scan = strstart;
 2780491565       } while ((curMatch = (prev[curMatch & DeflaterConstants.WMASK] & 0xffff)) > limit && --chainLength != 0);
 566
 1855075567      matchLen = Math.Min(best_len, lookahead);
 1855075568      return matchLen >= DeflaterConstants.MIN_MATCH;
 569    }
 570
 571    bool DeflateStored(bool flush, bool finish)
 572    {
 1373573       if (!flush && (lookahead == 0)) {
 676574        return false;
 575      }
 576
 697577      strstart += lookahead;
 697578      lookahead = 0;
 579
 697580      int storedLength = strstart - blockStart;
 581
 697582       if ((storedLength >= DeflaterConstants.MAX_BLOCK_SIZE) || // Block is full
 697583        (blockStart < DeflaterConstants.WSIZE && storedLength >= DeflaterConstants.MAX_DIST) ||   // Block may move out 
 697584        flush) {
 21585        bool lastBlock = finish;
 21586         if (storedLength > DeflaterConstants.MAX_BLOCK_SIZE) {
 2587          storedLength = DeflaterConstants.MAX_BLOCK_SIZE;
 2588          lastBlock = false;
 589        }
 590
 591#if DebugDeflation
 592        if (DeflaterConstants.DEBUGGING)
 593        {
 594           Console.WriteLine("storedBlock[" + storedLength + "," + lastBlock + "]");
 595        }
 596#endif
 597
 21598        huffman.FlushStoredBlock(window, blockStart, storedLength, lastBlock);
 21599        blockStart += storedLength;
 21600        return !lastBlock;
 601      }
 676602      return true;
 603    }
 604
 605    bool DeflateFast(bool flush, bool finish)
 606    {
 3242607       if (lookahead < DeflaterConstants.MIN_LOOKAHEAD && !flush) {
 1528608        return false;
 609      }
 610
 1598486611       while (lookahead >= DeflaterConstants.MIN_LOOKAHEAD || flush) {
 1596900612         if (lookahead == 0) {
 613          // We are flushing everything
 32614          huffman.FlushBlock(window, blockStart, strstart - blockStart, finish);
 32615          blockStart = strstart;
 32616          return false;
 617        }
 618
 1596868619         if (strstart > 2 * DeflaterConstants.WSIZE - DeflaterConstants.MIN_LOOKAHEAD) {
 620          /* slide window, as FindLongestMatch needs this.
 621           * This should only happen when flushing and the window
 622           * is almost full.
 623           */
 0624          SlideWindow();
 625        }
 626
 627        int hashHead;
 1596868628         if (lookahead >= DeflaterConstants.MIN_MATCH &&
 1596868629          (hashHead = InsertString()) != 0 &&
 1596868630          strategy != DeflateStrategy.HuffmanOnly &&
 1596868631          strstart - hashHead <= DeflaterConstants.MAX_DIST &&
 1596868632          FindLongestMatch(hashHead)) {
 633          // longestMatch sets matchStart and matchLen
 634#if DebugDeflation
 635          if (DeflaterConstants.DEBUGGING)
 636          {
 637            for (int i = 0 ; i < matchLen; i++) {
 638              if (window[strstart + i] != window[matchStart + i]) {
 639                throw new SharpZipBaseException("Match failure");
 640              }
 641            }
 642          }
 643#endif
 644
 2381645          bool full = huffman.TallyDist(strstart - matchStart, matchLen);
 646
 2381647          lookahead -= matchLen;
 2381648           if (matchLen <= max_lazy && lookahead >= DeflaterConstants.MIN_MATCH) {
 7147649             while (--matchLen > 0) {
 4769650              ++strstart;
 4769651              InsertString();
 652            }
 2378653            ++strstart;
 2378654          } else {
 3655            strstart += matchLen;
 3656             if (lookahead >= DeflaterConstants.MIN_MATCH - 1) {
 0657              UpdateHash();
 658            }
 659          }
 2381660          matchLen = DeflaterConstants.MIN_MATCH - 1;
 2381661           if (!full) {
 2381662            continue;
 663          }
 664        } else {
 665          // No match found
 1594487666          huffman.TallyLit(window[strstart] & 0xff);
 1594487667          ++strstart;
 1594487668          --lookahead;
 669        }
 670
 1594487671         if (huffman.IsFull()) {
 96672          bool lastBlock = finish && (lookahead == 0);
 96673          huffman.FlushBlock(window, blockStart, strstart - blockStart, lastBlock);
 96674          blockStart = strstart;
 96675          return !lastBlock;
 676        }
 677      }
 1586678      return true;
 679    }
 680
 681    bool DeflateSlow(bool flush, bool finish)
 682    {
 4543683       if (lookahead < DeflaterConstants.MIN_LOOKAHEAD && !flush) {
 2147684        return false;
 685      }
 686
 2111644687       while (lookahead >= DeflaterConstants.MIN_LOOKAHEAD || flush) {
 2109640688         if (lookahead == 0) {
 266689           if (prevAvailable) {
 207690            huffman.TallyLit(window[strstart-1] & 0xff);
 691          }
 266692          prevAvailable = false;
 693
 694          // We are flushing everything
 695#if DebugDeflation
 696          if (DeflaterConstants.DEBUGGING && !flush)
 697          {
 698            throw new SharpZipBaseException("Not flushing, but no lookahead");
 699          }
 700#endif
 266701          huffman.FlushBlock(window, blockStart, strstart - blockStart,
 266702            finish);
 266703          blockStart = strstart;
 266704          return false;
 705        }
 706
 2109374707         if (strstart >= 2 * DeflaterConstants.WSIZE - DeflaterConstants.MIN_LOOKAHEAD) {
 708          /* slide window, as FindLongestMatch needs this.
 709           * This should only happen when flushing and the window
 710           * is almost full.
 711           */
 22712          SlideWindow();
 713        }
 714
 2109374715        int prevMatch = matchStart;
 2109374716        int prevLen = matchLen;
 2109374717         if (lookahead >= DeflaterConstants.MIN_MATCH) {
 718
 2108976719          int hashHead = InsertString();
 720
 2108976721           if (strategy != DeflateStrategy.HuffmanOnly &&
 2108976722            hashHead != 0 &&
 2108976723            strstart - hashHead <= DeflaterConstants.MAX_DIST &&
 2108976724            FindLongestMatch(hashHead)) {
 725
 726            // longestMatch sets matchStart and matchLen
 727
 728            // Discard match if too small and too far away
 3497729             if (matchLen <= 5 && (strategy == DeflateStrategy.Filtered || (matchLen == DeflaterConstants.MIN_MATCH && st
 2509730              matchLen = DeflaterConstants.MIN_MATCH - 1;
 731            }
 732          }
 733        }
 734
 735        // previous match was better
 2109374736         if ((prevLen >= DeflaterConstants.MIN_MATCH) && (matchLen <= prevLen) ) {
 737#if DebugDeflation
 738          if (DeflaterConstants.DEBUGGING)
 739          {
 740             for (int i = 0 ; i < matchLen; i++) {
 741              if (window[strstart-1+i] != window[prevMatch + i])
 742               throw new SharpZipBaseException();
 743            }
 744          }
 745#endif
 621746          huffman.TallyDist(strstart - 1 - prevMatch, prevLen);
 621747          prevLen -= 2;
 748          do {
 16191749            strstart++;
 16191750            lookahead--;
 16191751             if (lookahead >= DeflaterConstants.MIN_MATCH) {
 16130752              InsertString();
 753            }
 16191754           } while (--prevLen > 0);
 755
 621756          strstart ++;
 621757          lookahead--;
 621758          prevAvailable = false;
 621759          matchLen = DeflaterConstants.MIN_MATCH - 1;
 621760        } else {
 2108753761           if (prevAvailable) {
 2107925762            huffman.TallyLit(window[strstart-1] & 0xff);
 763          }
 2108753764          prevAvailable = true;
 2108753765          strstart++;
 2108753766          lookahead--;
 767        }
 768
 2109374769         if (huffman.IsFull()) {
 126770          int len = strstart - blockStart;
 126771           if (prevAvailable) {
 126772            len--;
 773          }
 126774          bool lastBlock = (finish && (lookahead == 0) && !prevAvailable);
 126775          huffman.FlushBlock(window, blockStart, len, lastBlock);
 126776          blockStart += len;
 126777          return !lastBlock;
 778        }
 779      }
 2004780      return true;
 781    }
 782
 783    #region Instance Fields
 784
 785    // Hash index of string to be inserted
 786    int ins_h;
 787
 788    /// <summary>
 789    /// Hashtable, hashing three characters to an index for window, so
 790    /// that window[index]..window[index+2] have this hash code.
 791    /// Note that the array should really be unsigned short, so you need
 792    /// to and the values with 0xffff.
 793    /// </summary>
 794    short[] head;
 795
 796    /// <summary>
 797    /// <code>prev[index &amp; WMASK]</code> points to the previous index that has the
 798    /// same hash code as the string starting at index.  This way
 799    /// entries with the same hash code are in a linked list.
 800    /// Note that the array should really be unsigned short, so you need
 801    /// to and the values with 0xffff.
 802    /// </summary>
 803    short[] prev;
 804
 805    int    matchStart;
 806    // Length of best match
 807    int    matchLen;
 808    // Set if previous match exists
 809    bool   prevAvailable;
 810    int    blockStart;
 811
 812    /// <summary>
 813    /// Points to the current character in the window.
 814    /// </summary>
 815    int    strstart;
 816
 817    /// <summary>
 818    /// lookahead is the number of characters starting at strstart in
 819    /// window that are valid.
 820    /// So window[strstart] until window[strstart+lookahead-1] are valid
 821    /// characters.
 822    /// </summary>
 823    int    lookahead;
 824
 825    /// <summary>
 826    /// This array contains the part of the uncompressed stream that
 827    /// is of relevance.  The current character is indexed by strstart.
 828    /// </summary>
 829    byte[] window;
 830
 831    DeflateStrategy strategy;
 832    int max_chain, max_lazy, niceLength, goodLength;
 833
 834    /// <summary>
 835    /// The current compression function.
 836    /// </summary>
 837    int compressionFunction;
 838
 839    /// <summary>
 840    /// The input data for compression.
 841    /// </summary>
 842    byte[] inputBuf;
 843
 844    /// <summary>
 845    /// The total bytes of input read.
 846    /// </summary>
 847    long totalIn;
 848
 849    /// <summary>
 850    /// The offset into inputBuf, where input data starts.
 851    /// </summary>
 852    int inputOff;
 853
 854    /// <summary>
 855    /// The end offset of the input data.
 856    /// </summary>
 857    int inputEnd;
 858
 859    DeflaterPending pending;
 860    DeflaterHuffman huffman;
 861
 862    /// <summary>
 863    /// The adler checksum
 864    /// </summary>
 865    Adler32 adler;
 866    #endregion
 867  }
 868}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterHuffman.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterHuffman.htm new file mode 100644 index 000000000..e7fdd11bf --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterHuffman.htm @@ -0,0 +1,970 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterHuffman.cs
Covered lines:349
Uncovered lines:9
Coverable lines:358
Total lines:905
Line coverage:97.4%
Branch coverage:91.7%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.cctor()6100100
.ctor(...)1100100
Reset()1100100
SendAllTrees(...)2100100
CompressBlock()6100100
FlushStoredBlock(...)3100100
FlushBlock(...)1310085.71
IsFull()1100100
TallyLit(...)1100100
TallyDist(...)4100100
BitReverse(...)1100100
Lcode(...)3100100
Dcode(...)2100100
.ctor(...)1100100
Reset()2100100
WriteSymbol(...)1100100
CheckEmpty()300
SetStaticCodes(...)1100100
BuildCodes()4100100
BuildTree()2198.5197.44
GetEncodedLength()2100100
CalcBLFreq(...)10100100
WriteTree(...)1191.1885.71
BuildLength(...)1310088
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterHuffman.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// DeflaterHuffman.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41namespace ICSharpCode.SharpZipLib.Zip.Compression
 42{
 43
 44  /// <summary>
 45  /// This is the DeflaterHuffman class.
 46  ///
 47  /// This class is <i>not</i> thread safe.  This is inherent in the API, due
 48  /// to the split of Deflate and SetInput.
 49  ///
 50  /// author of the original java version : Jochen Hoenicke
 51  /// </summary>
 52  public class DeflaterHuffman
 53  {
 54    const  int BUFSIZE = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 6);
 55    const  int LITERAL_NUM = 286;
 56
 57    // Number of distance codes
 58    const  int DIST_NUM = 30;
 59    // Number of codes used to transfer bit lengths
 60    const  int BITLEN_NUM = 19;
 61
 62    // repeat previous bit length 3-6 times (2 bits of repeat count)
 63    const  int REP_3_6    = 16;
 64    // repeat a zero length 3-10 times  (3 bits of repeat count)
 65    const  int REP_3_10   = 17;
 66    // repeat a zero length 11-138 times  (7 bits of repeat count)
 67    const  int REP_11_138 = 18;
 68
 69    const  int EOF_SYMBOL = 256;
 70
 71    // The lengths of the bit length codes are sent in order of decreasing
 72     // probability, to avoid transmitting the lengths for unused bit length codes.
 173    static readonly int[] BL_ORDER = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
 74
 175    static readonly byte[] bit4Reverse = {
 176      0,
 177      8,
 178      4,
 179      12,
 180      2,
 181      10,
 182      6,
 183      14,
 184      1,
 185      9,
 186      5,
 187      13,
 188      3,
 189      11,
 190      7,
 191      15
 192    };
 93
 94    static short[] staticLCodes;
 95    static byte[]  staticLLength;
 96    static short[] staticDCodes;
 97    static byte[]  staticDLength;
 98
 99    class Tree
 100    {
 101      #region Instance Fields
 102      public short[] freqs;
 103
 104      public byte[]  length;
 105
 106      public int     minNumCodes;
 107
 108      public int     numCodes;
 109
 110      short[] codes;
 111      readonly int[] bl_counts;
 112      readonly int maxLength;
 113      DeflaterHuffman dh;
 114      #endregion
 115
 116      #region Constructors
 837117      public Tree(DeflaterHuffman dh, int elems, int minCodes, int maxLength)
 118      {
 837119        this.dh =  dh;
 837120        this.minNumCodes = minCodes;
 837121        this.maxLength  = maxLength;
 837122        freqs  = new short[elems];
 837123        bl_counts = new int[maxLength];
 837124      }
 125
 126      #endregion
 127
 128      /// <summary>
 129      /// Resets the internal state of the tree
 130      /// </summary>
 131      public void Reset()
 132      {
 636792133         for (int i = 0; i < freqs.Length; i++) {
 315570134          freqs[i] = 0;
 135        }
 2826136        codes = null;
 2826137        length = null;
 2826138      }
 139
 140      public void WriteSymbol(int code)
 141      {
 142        //        if (DeflaterConstants.DEBUGGING) {
 143        //          freqs[code]--;
 144        //          //      Console.Write("writeSymbol("+freqs.length+","+code+"): ");
 145        //        }
 8301146        dh.pending.WriteBits(codes[code] & 0xffff, length[code]);
 8301147      }
 148
 149      /// <summary>
 150      /// Check that all frequencies are zero
 151      /// </summary>
 152      /// <exception cref="SharpZipBaseException">
 153      /// At least one frequency is non-zero
 154      /// </exception>
 155      public void CheckEmpty()
 156      {
 0157        bool empty = true;
 0158         for (int i = 0; i < freqs.Length; i++) {
 0159          empty &= freqs[i] == 0;
 160        }
 161
 0162         if (!empty) {
 0163          throw new SharpZipBaseException("!Empty");
 164        }
 0165      }
 166
 167      /// <summary>
 168      /// Set static codes and length
 169      /// </summary>
 170      /// <param name="staticCodes">new codes</param>
 171      /// <param name="staticLengths">length for new codes</param>
 172      public void SetStaticCodes(short[] staticCodes, byte[] staticLengths)
 173      {
 476174        codes = staticCodes;
 476175        length = staticLengths;
 476176      }
 177
 178      /// <summary>
 179      /// Build dynamic codes and lengths
 180      /// </summary>
 181      public void BuildCodes()
 182      {
 3183        int numSymbols = freqs.Length;
 3184        int[] nextCode = new int[maxLength];
 3185        int code = 0;
 186
 3187        codes = new short[freqs.Length];
 188
 189        //        if (DeflaterConstants.DEBUGGING) {
 190        //          //Console.WriteLine("buildCodes: "+freqs.Length);
 191        //        }
 192
 80193         for (int bits = 0; bits < maxLength; bits++) {
 37194          nextCode[bits] = code;
 37195          code += bl_counts[bits] << (15 - bits);
 196
 197          //          if (DeflaterConstants.DEBUGGING) {
 198          //            //Console.WriteLine("bits: " + ( bits + 1) + " count: " + bl_counts[bits]
 199          //                              +" nextCode: "+code);
 200          //          }
 201        }
 202
 203#if DebugDeflation
 204        if ( DeflaterConstants.DEBUGGING && (code != 65536) )
 205        {
 206          throw new SharpZipBaseException("Inconsistent bl_counts!");
 207        }
 208#endif
 576209         for (int i=0; i < numCodes; i++) {
 285210          int bits = length[i];
 285211           if (bits > 0) {
 212
 213            //            if (DeflaterConstants.DEBUGGING) {
 214            //                //Console.WriteLine("codes["+i+"] = rev(" + nextCode[bits-1]+"),
 215            //                                  +bits);
 216            //            }
 217
 38218            codes[i] = BitReverse(nextCode[bits-1]);
 38219            nextCode[bits-1] += 1 << (16 - bits);
 220          }
 221        }
 3222      }
 223
 224      public void BuildTree()
 225      {
 1560226        int numSymbols = freqs.Length;
 227
 228        /* heap is a priority queue, sorted by frequency, least frequent
 229        * nodes first.  The heap is a binary tree, with the property, that
 230        * the parent node is smaller than both child nodes.  This assures
 231        * that the smallest node is the first parent.
 232        *
 233        * The binary tree is encoded in an array:  0 is root node and
 234        * the nodes 2*n+1, 2*n+2 are the child nodes of node n.
 235        */
 1560236        int[] heap = new int[numSymbols];
 1560237        int heapLen = 0;
 1560238        int maxCode = 0;
 351520239         for (int n = 0; n < numSymbols; n++) {
 174200240          int freq = freqs[n];
 174200241           if (freq != 0) {
 242            // Insert n into heap
 84176243            int pos = heapLen++;
 244            int ppos;
 166131245             while (pos > 0 && freqs[heap[ppos = (pos - 1) / 2]] > freq) {
 81955246              heap[pos] = heap[ppos];
 81955247              pos = ppos;
 248            }
 84176249            heap[pos] = n;
 250
 84176251            maxCode = n;
 252          }
 253        }
 254
 255        /* We could encode a single literal with 0 bits but then we
 256        * don't see the literals.  Therefore we force at least two
 257        * literals to avoid this case.  We don't care about order in
 258        * this case, both literals get a 1 bit code.
 259        */
 2116260         while (heapLen < 2) {
 556261           int node = maxCode < 2 ? ++maxCode : 0;
 556262          heap[heapLen++] = node;
 263        }
 264
 1560265        numCodes = Math.Max(maxCode + 1, minNumCodes);
 266
 1560267        int numLeafs = heapLen;
 1560268        int[] childs = new int[4 * heapLen - 2];
 1560269        int[] values = new int[2 * heapLen - 1];
 1560270        int numNodes = numLeafs;
 172584271         for (int i = 0; i < heapLen; i++) {
 84732272          int node = heap[i];
 84732273          childs[2 * i]   = node;
 84732274          childs[2 * i + 1] = -1;
 84732275          values[i] = freqs[node] << 8;
 84732276          heap[i] = i;
 277        }
 278
 279        /* Construct the Huffman tree by repeatedly combining the least two
 280        * frequent nodes.
 281        */
 282        do {
 83172283          int first = heap[0];
 83172284          int last  = heap[--heapLen];
 285
 286          // Propagate the hole to the leafs of the heap
 83172287          int ppos = 0;
 83172288          int path = 1;
 289
 522164290           while (path < heapLen) {
 438992291             if (path + 1 < heapLen && values[heap[path]] > values[heap[path+1]]) {
 197234292              path++;
 293            }
 294
 438992295            heap[ppos] = heap[path];
 438992296            ppos = path;
 438992297            path = path * 2 + 1;
 298          }
 299
 300          /* Now propagate the last element down along path.  Normally
 301          * it shouldn't go too deep.
 302          */
 83172303          int lastVal = values[last];
 106831304           while ((path = ppos) > 0 && values[heap[ppos = (path - 1)/2]] > lastVal) {
 23659305            heap[path] = heap[ppos];
 306          }
 83172307          heap[path] = last;
 308
 309
 83172310          int second = heap[0];
 311
 312          // Create a new node father of first and second
 83172313          last = numNodes++;
 83172314          childs[2 * last] = first;
 83172315          childs[2 * last + 1] = second;
 83172316          int mindepth = Math.Min(values[first] & 0xff, values[second] & 0xff);
 83172317          values[last] = lastVal = values[first] + values[second] - mindepth + 1;
 318
 319          // Again, propagate the hole to the leafs
 83172320          ppos = 0;
 83172321          path = 1;
 322
 522887323           while (path < heapLen) {
 439715324             if (path + 1 < heapLen && values[heap[path]] > values[heap[path+1]]) {
 198811325              path++;
 326            }
 327
 439715328            heap[ppos] = heap[path];
 439715329            ppos = path;
 439715330            path = ppos * 2 + 1;
 331          }
 332
 333          // Now propagate the new element down along path
 88613334           while ((path = ppos) > 0 && values[heap[ppos = (path - 1)/2]] > lastVal) {
 5441335            heap[path] = heap[ppos];
 336          }
 83172337          heap[path] = last;
 83172338         } while (heapLen > 1);
 339
 1560340         if (heap[0] != childs.Length / 2 - 1) {
 0341          throw new SharpZipBaseException("Heap invariant violated");
 342        }
 343
 1560344        BuildLength(childs);
 1560345      }
 346
 347      /// <summary>
 348      /// Get encoded length
 349      /// </summary>
 350      /// <returns>Encoded length, the sum of frequencies * lengths</returns>
 351      public int GetEncodedLength()
 352      {
 1560353        int len = 0;
 351520354         for (int i = 0; i < freqs.Length; i++) {
 174200355          len += freqs[i] * length[i];
 356        }
 1560357        return len;
 358      }
 359
 360      /// <summary>
 361      /// Scan a literal or distance tree to determine the frequencies of the codes
 362      /// in the bit length tree.
 363      /// </summary>
 364      public void CalcBLFreq(Tree blTree)
 365      {
 366        int max_count;               /* max repeat count */
 367        int min_count;               /* min repeat count */
 368        int count;                   /* repeat count of the current code */
 1040369        int curlen = -1;             /* length of current code */
 370
 1040371        int i = 0;
 27219372         while (i < numCodes) {
 26179373          count = 1;
 26179374          int nextlen = length[i];
 26179375           if (nextlen == 0) {
 3048376            max_count = 138;
 3048377            min_count = 3;
 3048378          } else {
 23131379            max_count = 6;
 23131380            min_count = 3;
 23131381             if (curlen != nextlen) {
 13307382              blTree.freqs[nextlen]++;
 13307383              count = 0;
 384            }
 385          }
 26179386          curlen = nextlen;
 26179387          i++;
 388
 132059389           while (i < numCodes && curlen == length[i]) {
 116053390            i++;
 116053391             if (++count >= max_count) {
 392              break;
 393            }
 394          }
 395
 26179396           if (count < min_count) {
 13826397            blTree.freqs[curlen] += (short)count;
 26179398           } else if (curlen != 0) {
 10965399            blTree.freqs[REP_3_6]++;
 12353400           } else if (count <= 10) {
 317401            blTree.freqs[REP_3_10]++;
 317402          } else {
 1071403            blTree.freqs[REP_11_138]++;
 404          }
 405        }
 1040406      }
 407
 408      /// <summary>
 409      /// Write tree values
 410      /// </summary>
 411      /// <param name="blTree">Tree to write</param>
 412      public void WriteTree(Tree blTree)
 413      {
 414        int max_count;               // max repeat count
 415        int min_count;               // min repeat count
 416        int count;                   // repeat count of the current code
 2417        int curlen = -1;             // length of current code
 418
 2419        int i = 0;
 42420         while (i < numCodes) {
 40421          count = 1;
 40422          int nextlen = length[i];
 40423           if (nextlen == 0) {
 14424            max_count = 138;
 14425            min_count = 3;
 14426          } else {
 26427            max_count = 6;
 26428            min_count = 3;
 26429             if (curlen != nextlen) {
 26430              blTree.WriteSymbol(nextlen);
 26431              count = 0;
 432            }
 433          }
 40434          curlen = nextlen;
 40435          i++;
 436
 266437           while (i < numCodes && curlen == length[i]) {
 226438            i++;
 226439             if (++count >= max_count) {
 440              break;
 441            }
 442          }
 443
 40444           if (count < min_count) {
 41445             while (count-- > 0) {
 10446              blTree.WriteSymbol(curlen);
 447            }
 40448           } else if (curlen != 0) {
 0449            blTree.WriteSymbol(REP_3_6);
 0450            dh.pending.WriteBits(count - 3, 2);
 9451           } else if (count <= 10) {
 4452            blTree.WriteSymbol(REP_3_10);
 4453            dh.pending.WriteBits(count - 3, 3);
 4454          } else {
 5455            blTree.WriteSymbol(REP_11_138);
 5456            dh.pending.WriteBits(count - 11, 7);
 457          }
 458        }
 2459      }
 460
 461      void BuildLength(int[] childs)
 462      {
 1560463        this.length = new byte [freqs.Length];
 1560464        int numNodes = childs.Length / 2;
 1560465        int numLeafs = (numNodes + 1) / 2;
 1560466        int overflow = 0;
 467
 41600468         for (int i = 0; i < maxLength; i++) {
 19240469          bl_counts[i] = 0;
 470        }
 471
 472        // First calculate optimal bit lengths
 1560473        int[] lengths = new int[numNodes];
 1560474        lengths[numNodes-1] = 0;
 475
 338928476         for (int i = numNodes - 1; i >= 0; i--) {
 167904477           if (childs[2 * i + 1] != -1) {
 83172478            int bitLength = lengths[i] + 1;
 83172479             if (bitLength > maxLength) {
 5480              bitLength = maxLength;
 5481              overflow++;
 482            }
 83172483            lengths[childs[2 * i]] = lengths[childs[2 * i + 1]] = bitLength;
 83172484          } else {
 485            // A leaf node
 84732486            int bitLength = lengths[i];
 84732487            bl_counts[bitLength - 1]++;
 84732488            this.length[childs[2*i]] = (byte) lengths[i];
 489          }
 490        }
 491
 492        //        if (DeflaterConstants.DEBUGGING) {
 493        //          //Console.WriteLine("Tree "+freqs.Length+" lengths:");
 494        //          for (int i=0; i < numLeafs; i++) {
 495        //            //Console.WriteLine("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]]
 496        //                              + " len: "+length[childs[2*i]]);
 497        //          }
 498        //        }
 499
 1560500         if (overflow == 0) {
 1555501          return;
 502        }
 503
 5504        int incrBitLen = maxLength - 1;
 505        do {
 506          // Find the first bit length which could increase:
 7507           while (bl_counts[--incrBitLen] == 0)
 508          {
 509          }
 510
 511          // Move this node one down and remove a corresponding
 512          // number of overflow nodes.
 513          do {
 5514            bl_counts[incrBitLen]--;
 5515            bl_counts[++incrBitLen]++;
 5516            overflow -= 1 << (maxLength - 1 - incrBitLen);
 5517           } while (overflow > 0 && incrBitLen < maxLength - 1);
 5518         } while (overflow > 0);
 519
 520        /* We may have overshot above.  Move some nodes from maxLength to
 521        * maxLength-1 in that case.
 522        */
 5523        bl_counts[maxLength-1] += overflow;
 5524        bl_counts[maxLength-2] -= overflow;
 525
 526        /* Now recompute all bit lengths, scanning in increasing
 527        * frequency.  It is simpler to reconstruct all lengths instead of
 528        * fixing only the wrong ones. This idea is taken from 'ar'
 529        * written by Haruhiko Okumura.
 530        *
 531        * The nodes were inserted with decreasing frequency into the childs
 532        * array.
 533        */
 5534        int nodePtr = 2 * numLeafs;
 80535         for (int bits = maxLength; bits != 0; bits--) {
 35536          int n = bl_counts[bits-1];
 114537           while (n > 0) {
 79538            int childPtr = 2*childs[nodePtr++];
 79539             if (childs[childPtr + 1] == -1) {
 540              // We found another leaf
 47541              length[childs[childPtr]] = (byte) bits;
 47542              n--;
 543            }
 544          }
 545        }
 546        //        if (DeflaterConstants.DEBUGGING) {
 547        //          //Console.WriteLine("*** After overflow elimination. ***");
 548        //          for (int i=0; i < numLeafs; i++) {
 549        //            //Console.WriteLine("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]]
 550        //                              + " len: "+length[childs[2*i]]);
 551        //          }
 552        //        }
 5553      }
 554
 555    }
 556
 557    #region Instance Fields
 558    /// <summary>
 559    /// Pending buffer to use
 560    /// </summary>
 561    public DeflaterPending pending;
 562
 563    Tree literalTree;
 564    Tree distTree;
 565    Tree blTree;
 566
 567    // Buffer for distances
 568    short[] d_buf;
 569    byte[]  l_buf;
 570    int last_lit;
 571    int extra_bits;
 572    #endregion
 573
 574    static DeflaterHuffman()
 575    {
 576      // See RFC 1951 3.2.6
 577      // Literal codes
 1578      staticLCodes = new short[LITERAL_NUM];
 1579      staticLLength = new byte[LITERAL_NUM];
 580
 1581      int i = 0;
 145582       while (i < 144) {
 144583        staticLCodes[i] = BitReverse((0x030 + i) << 8);
 144584        staticLLength[i++] = 8;
 585      }
 586
 113587       while (i < 256) {
 112588        staticLCodes[i] = BitReverse((0x190 - 144 + i) << 7);
 112589        staticLLength[i++] = 9;
 590      }
 591
 25592       while (i < 280) {
 24593        staticLCodes[i] = BitReverse((0x000 - 256 + i) << 9);
 24594        staticLLength[i++] = 7;
 595      }
 596
 7597       while (i < LITERAL_NUM) {
 6598        staticLCodes[i] = BitReverse((0x0c0 - 280 + i)  << 8);
 6599        staticLLength[i++] = 8;
 600      }
 601
 602      // Distance codes
 1603      staticDCodes = new short[DIST_NUM];
 1604      staticDLength = new byte[DIST_NUM];
 62605       for (i = 0; i < DIST_NUM; i++) {
 30606        staticDCodes[i] = BitReverse(i << 11);
 30607        staticDLength[i] = 5;
 608      }
 1609    }
 610
 611    /// <summary>
 612    /// Construct instance with pending buffer
 613    /// </summary>
 614    /// <param name="pending">Pending buffer to use</param>
 279615    public DeflaterHuffman(DeflaterPending pending)
 616    {
 279617      this.pending = pending;
 618
 279619      literalTree = new Tree(this, LITERAL_NUM, 257, 15);
 279620      distTree    = new Tree(this, DIST_NUM, 1, 15);
 279621      blTree      = new Tree(this, BITLEN_NUM, 4, 7);
 622
 279623      d_buf = new short[BUFSIZE];
 279624      l_buf = new byte [BUFSIZE];
 279625    }
 626
 627    /// <summary>
 628    /// Reset internal state
 629    /// </summary>
 630    public void Reset()
 631    {
 942632      last_lit = 0;
 942633      extra_bits = 0;
 942634      literalTree.Reset();
 942635      distTree.Reset();
 942636      blTree.Reset();
 942637    }
 638
 639    /// <summary>
 640    /// Write all trees to pending buffer
 641    /// </summary>
 642    /// <param name="blTreeCodes">The number/rank of treecodes to send.</param>
 643    public void SendAllTrees(int blTreeCodes)
 644    {
 1645      blTree.BuildCodes();
 1646      literalTree.BuildCodes();
 1647      distTree.BuildCodes();
 1648      pending.WriteBits(literalTree.numCodes - 257, 5);
 1649      pending.WriteBits(distTree.numCodes - 1, 5);
 1650      pending.WriteBits(blTreeCodes - 4, 4);
 38651       for (int rank = 0; rank < blTreeCodes; rank++) {
 18652        pending.WriteBits(blTree.length[BL_ORDER[rank]], 3);
 653      }
 1654      literalTree.WriteTree(blTree);
 1655      distTree.WriteTree(blTree);
 656
 657#if DebugDeflation
 658      if (DeflaterConstants.DEBUGGING) {
 659        blTree.CheckEmpty();
 660      }
 661#endif
 1662    }
 663
 664    /// <summary>
 665    /// Compress current buffer writing data to pending buffer
 666    /// </summary>
 667    public void CompressBlock()
 668    {
 16330669       for (int i = 0; i < last_lit; i++) {
 7926670        int litlen = l_buf[i] & 0xff;
 7926671        int dist = d_buf[i];
 7926672         if (dist-- != 0) {
 673          //          if (DeflaterConstants.DEBUGGING) {
 674          //            Console.Write("["+(dist+1)+","+(litlen+3)+"]: ");
 675          //          }
 676
 91677          int lc = Lcode(litlen);
 91678          literalTree.WriteSymbol(lc);
 679
 91680          int bits = (lc - 261) / 4;
 91681           if (bits > 0 && bits <= 5) {
 25682            pending.WriteBits(litlen & ((1 << bits) - 1), bits);
 683          }
 684
 91685          int dc = Dcode(dist);
 91686          distTree.WriteSymbol(dc);
 687
 91688          bits = dc / 2 - 1;
 91689           if (bits > 0) {
 70690            pending.WriteBits(dist & ((1 << bits) - 1), bits);
 691          }
 70692        } else {
 693          //          if (DeflaterConstants.DEBUGGING) {
 694          //            if (litlen > 32 && litlen < 127) {
 695          //              Console.Write("("+(char)litlen+"): ");
 696          //            } else {
 697          //              Console.Write("{"+litlen+"}: ");
 698          //            }
 699          //          }
 7835700          literalTree.WriteSymbol(litlen);
 701        }
 702      }
 703
 704#if DebugDeflation
 705      if (DeflaterConstants.DEBUGGING) {
 706        Console.Write("EOF: ");
 707      }
 708#endif
 239709      literalTree.WriteSymbol(EOF_SYMBOL);
 710
 711#if DebugDeflation
 712      if (DeflaterConstants.DEBUGGING) {
 713        literalTree.CheckEmpty();
 714        distTree.CheckEmpty();
 715      }
 716#endif
 239717    }
 718
 719    /// <summary>
 720    /// Flush block to output with no compression
 721    /// </summary>
 722    /// <param name="stored">Data to write</param>
 723    /// <param name="storedOffset">Index of first byte to write</param>
 724    /// <param name="storedLength">Count of bytes to write</param>
 725    /// <param name="lastBlock">True if this is the last block</param>
 726    public void FlushStoredBlock(byte[] stored, int storedOffset, int storedLength, bool lastBlock)
 727    {
 728#if DebugDeflation
 729      //      if (DeflaterConstants.DEBUGGING) {
 730      //        //Console.WriteLine("Flushing stored block "+ storedLength);
 731      //      }
 732#endif
 302733       pending.WriteBits((DeflaterConstants.STORED_BLOCK << 1) + (lastBlock ? 1 : 0), 3);
 302734      pending.AlignToByte();
 302735      pending.WriteShort(storedLength);
 302736      pending.WriteShort(~storedLength);
 302737      pending.WriteBlock(stored, storedOffset, storedLength);
 302738      Reset();
 302739    }
 740
 741    /// <summary>
 742    /// Flush block to output with compression
 743    /// </summary>
 744    /// <param name="stored">Data to flush</param>
 745    /// <param name="storedOffset">Index of first byte to flush</param>
 746    /// <param name="storedLength">Count of bytes to flush</param>
 747    /// <param name="lastBlock">True if this is the last block</param>
 748    public void FlushBlock(byte[] stored, int storedOffset, int storedLength, bool lastBlock)
 749    {
 520750      literalTree.freqs[EOF_SYMBOL]++;
 751
 752      // Build trees
 520753      literalTree.BuildTree();
 520754      distTree.BuildTree();
 755
 756      // Calculate bitlen frequency
 520757      literalTree.CalcBLFreq(blTree);
 520758      distTree.CalcBLFreq(blTree);
 759
 760      // Build bitlen tree
 520761      blTree.BuildTree();
 762
 520763      int blTreeCodes = 4;
 3632764       for (int i = 18; i > blTreeCodes; i--) {
 1296765         if (blTree.length[BL_ORDER[i]] > 0) {
 520766          blTreeCodes = i+1;
 767        }
 768      }
 520769      int opt_len = 14 + blTreeCodes * 3 + blTree.GetEncodedLength() +
 520770        literalTree.GetEncodedLength() + distTree.GetEncodedLength() +
 520771        extra_bits;
 772
 520773      int static_len = extra_bits;
 298480774       for (int i = 0; i < LITERAL_NUM; i++) {
 148720775        static_len += literalTree.freqs[i] * staticLLength[i];
 776      }
 32240777       for (int i = 0; i < DIST_NUM; i++) {
 15600778        static_len += distTree.freqs[i] * staticDLength[i];
 779      }
 520780       if (opt_len >= static_len) {
 781        // Force static trees
 274782        opt_len = static_len;
 783      }
 784
 520785       if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {
 786        // Store Block
 787
 788        //        if (DeflaterConstants.DEBUGGING) {
 789        //          //Console.WriteLine("Storing, since " + storedLength + " < " + opt_len
 790        //                            + " <= " + static_len);
 791        //        }
 281792        FlushStoredBlock(stored, storedOffset, storedLength, lastBlock);
 520793       } else if (opt_len == static_len) {
 794        // Encode with static tree
 238795         pending.WriteBits((DeflaterConstants.STATIC_TREES << 1) + (lastBlock ? 1 : 0), 3);
 238796        literalTree.SetStaticCodes(staticLCodes, staticLLength);
 238797        distTree.SetStaticCodes(staticDCodes, staticDLength);
 238798        CompressBlock();
 238799        Reset();
 238800      } else {
 801        // Encode with dynamic tree
 1802         pending.WriteBits((DeflaterConstants.DYN_TREES << 1) + (lastBlock ? 1 : 0), 3);
 1803        SendAllTrees(blTreeCodes);
 1804        CompressBlock();
 1805        Reset();
 806      }
 1807    }
 808
 809    /// <summary>
 810    /// Get value indicating if internal buffer is full
 811    /// </summary>
 812    /// <returns>true if buffer is full</returns>
 813    public bool IsFull()
 814    {
 7409482815      return last_lit >= BUFSIZE;
 816    }
 817
 818    /// <summary>
 819    /// Add literal to buffer
 820    /// </summary>
 821    /// <param name="literal">Literal value to add to buffer.</param>
 822    /// <returns>Value indicating internal buffer is full</returns>
 823    public bool TallyLit(int literal)
 824    {
 825      //      if (DeflaterConstants.DEBUGGING) {
 826      //        if (lit > 32 && lit < 127) {
 827      //          //Console.WriteLine("("+(char)lit+")");
 828      //        } else {
 829      //          //Console.WriteLine("{"+lit+"}");
 830      //        }
 831      //      }
 3702619832      d_buf[last_lit] = 0;
 3702619833      l_buf[last_lit++] = (byte)literal;
 3702619834      literalTree.freqs[literal]++;
 3702619835      return IsFull();
 836    }
 837
 838    /// <summary>
 839    /// Add distance code and length to literal and distance trees
 840    /// </summary>
 841    /// <param name="distance">Distance code</param>
 842    /// <param name="length">Length</param>
 843    /// <returns>Value indicating if internal buffer is full</returns>
 844    public bool TallyDist(int distance, int length)
 845    {
 846      //      if (DeflaterConstants.DEBUGGING) {
 847      //        //Console.WriteLine("[" + distance + "," + length + "]");
 848      //      }
 849
 3002850      d_buf[last_lit]   = (short)distance;
 3002851      l_buf[last_lit++] = (byte)(length - 3);
 852
 3002853      int lc = Lcode(length - 3);
 3002854      literalTree.freqs[lc]++;
 3002855       if (lc >= 265 && lc < 285) {
 25856        extra_bits += (lc - 261) / 4;
 857      }
 858
 3002859      int dc = Dcode(distance - 1);
 3002860      distTree.freqs[dc]++;
 3002861       if (dc >= 4) {
 2980862        extra_bits += dc / 2 - 1;
 863      }
 3002864      return IsFull();
 865    }
 866
 867
 868    /// <summary>
 869    /// Reverse the bits of a 16 bit value.
 870    /// </summary>
 871    /// <param name="toReverse">Value to reverse bits</param>
 872    /// <returns>Value with bits reversed</returns>
 873    public static short BitReverse(int toReverse)
 874    {
 712875      return (short) (bit4Reverse[toReverse & 0xF] << 12 |
 712876                      bit4Reverse[(toReverse >> 4) & 0xF] << 8 |
 712877                      bit4Reverse[(toReverse >> 8) & 0xF] << 4 |
 712878                      bit4Reverse[toReverse >> 12]);
 879    }
 880
 881    static int Lcode(int length)
 882    {
 3093883       if (length == 255) {
 82884        return 285;
 885      }
 886
 3011887      int code = 257;
 3241888       while (length >= 8) {
 230889        code += 4;
 230890        length >>= 1;
 891      }
 3011892      return code + length;
 893    }
 894
 895    static int Dcode(int distance)
 896    {
 3093897      int code = 0;
 36621898       while (distance >= 4) {
 33528899        code += 2;
 33528900        distance >>= 1;
 901      }
 3093902      return code + distance;
 903    }
 904  }
 905}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterOutputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterOutputStream.htm new file mode 100644 index 000000000..69128d45a --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterOutputStream.htm @@ -0,0 +1,662 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\DeflaterOutputStream.cs
Covered lines:76
Uncovered lines:28
Coverable lines:104
Total lines:602
Line coverage:73%
Branch coverage:71.4%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)1100100
.ctor(...)571.4355.56
Finish()787.576.92
EncryptBlock(...)1100100
InitializePassword(...)1100100
InitializeAESPassword(...)200
Deflate()588.8988.89
Seek(...)100
SetLength(...)100
ReadByte()100
Read(...)100
BeginRead(...)100
BeginWrite(...)100
Flush()1100100
Close()4100100
GetAuthCodeIfAES()266.6766.67
WriteByte(...)1100100
Write(...)1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\DeflaterOutputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// DeflaterOutputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  22-12-2009  DavidPierson  Added AES support
 41
 42using System;
 43using System.IO;
 44
 45#if !NETCF_1_0
 46using System.Security.Cryptography;
 47using ICSharpCode.SharpZipLib.Encryption;
 48#endif
 49
 50namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams
 51{
 52  /// <summary>
 53  /// A special stream deflating or compressing the bytes that are
 54  /// written to it.  It uses a Deflater to perform actual deflating.<br/>
 55  /// Authors of the original java version : Tom Tromey, Jochen Hoenicke
 56  /// </summary>
 57  public class DeflaterOutputStream : Stream
 58  {
 59    #region Constructors
 60    /// <summary>
 61    /// Creates a new DeflaterOutputStream with a default Deflater and default buffer size.
 62    /// </summary>
 63    /// <param name="baseOutputStream">
 64    /// the output stream where deflated output should be written.
 65    /// </param>
 66    public DeflaterOutputStream(Stream baseOutputStream)
 467      : this(baseOutputStream, new Deflater(), 512)
 68    {
 469    }
 70
 71    /// <summary>
 72    /// Creates a new DeflaterOutputStream with the given Deflater and
 73    /// default buffer size.
 74    /// </summary>
 75    /// <param name="baseOutputStream">
 76    /// the output stream where deflated output should be written.
 77    /// </param>
 78    /// <param name="deflater">
 79    /// the underlying deflater.
 80    /// </param>
 81    public DeflaterOutputStream(Stream baseOutputStream, Deflater deflater)
 26582      : this(baseOutputStream, deflater, 512)
 83    {
 26584    }
 85
 86    /// <summary>
 87    /// Creates a new DeflaterOutputStream with the given Deflater and
 88    /// buffer size.
 89    /// </summary>
 90    /// <param name="baseOutputStream">
 91    /// The output stream where deflated output is written.
 92    /// </param>
 93    /// <param name="deflater">
 94    /// The underlying deflater to use
 95    /// </param>
 96    /// <param name="bufferSize">
 97    /// The buffer size in bytes to use when deflating (minimum value 512)
 98    /// </param>
 99    /// <exception cref="ArgumentOutOfRangeException">
 100    /// bufsize is less than or equal to zero.
 101    /// </exception>
 102    /// <exception cref="ArgumentException">
 103    /// baseOutputStream does not support writing
 104    /// </exception>
 105    /// <exception cref="ArgumentNullException">
 106    /// deflater instance is null
 107    /// </exception>
 279108    public DeflaterOutputStream(Stream baseOutputStream, Deflater deflater, int bufferSize)
 109    {
 279110       if ( baseOutputStream == null ) {
 0111        throw new ArgumentNullException(nameof(baseOutputStream));
 112      }
 113
 279114       if (baseOutputStream.CanWrite == false) {
 0115        throw new ArgumentException("Must support writing", nameof(baseOutputStream));
 116      }
 117
 279118       if (deflater == null) {
 0119        throw new ArgumentNullException(nameof(deflater));
 120      }
 121
 279122       if (bufferSize < 512) {
 0123        throw new ArgumentOutOfRangeException(nameof(bufferSize));
 124      }
 125
 279126      baseOutputStream_ = baseOutputStream;
 279127      buffer_ = new byte[bufferSize];
 279128      deflater_ = deflater;
 279129    }
 130    #endregion
 131
 132    #region Public API
 133    /// <summary>
 134    /// Finishes the stream by calling finish() on the deflater.
 135    /// </summary>
 136    /// <exception cref="SharpZipBaseException">
 137    /// Not all input is deflated
 138    /// </exception>
 139    public virtual void Finish()
 140    {
 329141      deflater_.Finish();
 1584142       while (!deflater_.IsFinished)  {
 1255143        int len = deflater_.Deflate(buffer_, 0, buffer_.Length);
 1255144         if (len <= 0) {
 145          break;
 146        }
 147
 148#if NETCF_1_0
 149        if ( keys != null ) {
 150#else
 1255151         if (cryptoTransform_ != null) {
 152#endif
 199153          EncryptBlock(buffer_, 0, len);
 154        }
 155
 1255156        baseOutputStream_.Write(buffer_, 0, len);
 157      }
 158
 329159       if (!deflater_.IsFinished) {
 0160        throw new SharpZipBaseException("Can't deflate all input?");
 161      }
 162
 329163      baseOutputStream_.Flush();
 164
 165#if NETCF_1_0
 166      if ( keys != null ) {
 167        keys = null;
 168      }
 169#else
 329170       if (cryptoTransform_ != null) {
 171#if !NET_1_1 && !NETCF_2_0
 34172         if (cryptoTransform_ is ZipAESTransform) {
 0173          AESAuthCode = ((ZipAESTransform)cryptoTransform_).GetAuthCode();
 174        }
 175#endif
 34176        cryptoTransform_.Dispose();
 34177        cryptoTransform_ = null;
 178      }
 179#endif
 329180    }
 181
 182    /// <summary>
 183    /// Get/set flag indicating ownership of the underlying stream.
 184    /// When the flag is true <see cref="Close"></see> will close the underlying stream also.
 185    /// </summary>
 186    public bool IsStreamOwner
 187    {
 11188      get { return isStreamOwner_; }
 388189      set { isStreamOwner_ = value; }
 190    }
 191
 192    ///  <summary>
 193    /// Allows client to determine if an entry can be patched after its added
 194    /// </summary>
 195    public bool CanPatchEntries {
 196      get {
 144197        return baseOutputStream_.CanSeek;
 198      }
 199    }
 200
 201    #endregion
 202
 203    #region Encryption
 204
 205    string password;
 206
 207#if NETCF_1_0
 208    uint[] keys;
 209#else
 210    ICryptoTransform cryptoTransform_;
 211
 212    /// <summary>
 213    /// Returns the 10 byte AUTH CODE to be appended immediately following the AES data stream.
 214    /// </summary>
 215    protected byte[] AESAuthCode;
 216#endif
 217
 218    /// <summary>
 219    /// Get/set the password used for encryption.
 220    /// </summary>
 221    /// <remarks>When set to null or if the password is empty no encryption is performed</remarks>
 222    public string Password {
 223      get {
 367224        return password;
 225      }
 226      set {
 72227         if ( (value != null) && (value.Length == 0) ) {
 0228          password = null;
 0229        } else {
 72230          password = value;
 231        }
 72232      }
 233    }
 234
 235    /// <summary>
 236    /// Encrypt a block of data
 237    /// </summary>
 238    /// <param name="buffer">
 239    /// Data to encrypt.  NOTE the original contents of the buffer are lost
 240    /// </param>
 241    /// <param name="offset">
 242    /// Offset of first byte in buffer to encrypt
 243    /// </param>
 244    /// <param name="length">
 245    /// Number of bytes in buffer to encrypt
 246    /// </param>
 247    protected void EncryptBlock(byte[] buffer, int offset, int length)
 248    {
 249#if NETCF_1_0
 250      for (int i = offset; i < offset + length; ++i) {
 251        byte oldbyte = buffer[i];
 252        buffer[i] ^= EncryptByte();
 253        UpdateKeys(oldbyte);
 254      }
 255#else
 2311256      cryptoTransform_.TransformBlock(buffer, 0, length, buffer, 0);
 257#endif
 2311258    }
 259
 260    /// <summary>
 261    /// Initializes encryption keys based on given <paramref name="password"/>.
 262    /// </summary>
 263    /// <param name="password">The password.</param>
 264    protected void InitializePassword(string password)
 265    {
 266#if NETCF_1_0
 267      keys = new uint[] {
 268        0x12345678,
 269        0x23456789,
 270        0x34567890
 271      };
 272
 273      byte[] rawPassword = ZipConstants.ConvertToArray(password);
 274
 275      for (int i = 0; i < rawPassword.Length; ++i) {
 276        UpdateKeys((byte)rawPassword[i]);
 277      }
 278
 279#else
 36280      var pkManaged = new PkzipClassicManaged();
 36281      byte[] key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(password));
 36282      cryptoTransform_ = pkManaged.CreateEncryptor(key, null);
 283#endif
 36284    }
 285
 286#if !NET_1_1 && !NETCF_2_0
 287    /// <summary>
 288    /// Initializes encryption keys based on given password.
 289    /// </summary>
 290    protected void InitializeAESPassword(ZipEntry entry, string rawPassword,
 291                      out byte[] salt, out byte[] pwdVerifier) {
 0292      salt = new byte[entry.AESSaltLen];
 293      // Salt needs to be cryptographically random, and unique per file
 0294       if (_aesRnd == null)
 0295        _aesRnd = new RNGCryptoServiceProvider();
 0296      _aesRnd.GetBytes(salt);
 0297      int blockSize = entry.AESKeySize / 8;  // bits to bytes
 298
 0299      cryptoTransform_ = new ZipAESTransform(rawPassword, salt, blockSize, true);
 0300      pwdVerifier = ((ZipAESTransform)cryptoTransform_).PwdVerifier;
 0301    }
 302#endif
 303
 304#if NETCF_1_0
 305
 306    /// <summary>
 307    /// Encrypt a single byte
 308    /// </summary>
 309    /// <returns>
 310    /// The encrypted value
 311    /// </returns>
 312    protected byte EncryptByte()
 313    {
 314      uint temp = ((keys[2] & 0xFFFF) | 2);
 315      return (byte)((temp * (temp ^ 1)) >> 8);
 316    }
 317
 318    /// <summary>
 319    /// Update encryption keys
 320    /// </summary>
 321    protected void UpdateKeys(byte ch)
 322    {
 323      keys[0] = Crc32.ComputeCrc32(keys[0], ch);
 324      keys[1] = keys[1] + (byte)keys[0];
 325      keys[1] = keys[1] * 134775813 + 1;
 326      keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24));
 327    }
 328#endif
 329
 330    #endregion
 331
 332    #region Deflation Support
 333    /// <summary>
 334    /// Deflates everything in the input buffers.  This will call
 335    /// <code>def.deflate()</code> until all bytes from the input buffers
 336    /// are processed.
 337    /// </summary>
 338    protected void Deflate()
 339    {
 11778340       while (!deflater_.IsNeedingInput)
 341      {
 11494342        int deflateCount = deflater_.Deflate(buffer_, 0, buffer_.Length);
 343
 11494344         if (deflateCount <= 0) {
 345          break;
 346        }
 347#if NETCF_1_0
 348        if (keys != null)
 349#else
 7261350         if (cryptoTransform_ != null)
 351#endif
 352        {
 1977353          EncryptBlock(buffer_, 0, deflateCount);
 354        }
 355
 7261356        baseOutputStream_.Write(buffer_, 0, deflateCount);
 357      }
 358
 4517359       if (!deflater_.IsNeedingInput) {
 0360        throw new SharpZipBaseException("DeflaterOutputStream can't deflate all input?");
 361      }
 4517362    }
 363    #endregion
 364
 365    #region Stream Overrides
 366    /// <summary>
 367    /// Gets value indicating stream can be read from
 368    /// </summary>
 369    public override bool CanRead
 370    {
 371      get {
 0372        return false;
 373      }
 374    }
 375
 376    /// <summary>
 377    /// Gets a value indicating if seeking is supported for this stream
 378    /// This property always returns false
 379    /// </summary>
 380    public override bool CanSeek {
 381      get {
 2382        return false;
 383      }
 384    }
 385
 386    /// <summary>
 387    /// Get value indicating if this stream supports writing
 388    /// </summary>
 389    public override bool CanWrite {
 390      get {
 5391        return baseOutputStream_.CanWrite;
 392      }
 393    }
 394
 395    /// <summary>
 396    /// Get current length of stream
 397    /// </summary>
 398    public override long Length {
 399      get {
 0400        return baseOutputStream_.Length;
 401      }
 402    }
 403
 404    /// <summary>
 405    /// Gets the current position within the stream.
 406    /// </summary>
 407    /// <exception cref="NotSupportedException">Any attempt to set position</exception>
 408    public override long Position {
 409      get {
 0410        return baseOutputStream_.Position;
 411      }
 412      set {
 0413        throw new NotSupportedException("Position property not supported");
 414      }
 415    }
 416
 417    /// <summary>
 418    /// Sets the current position of this stream to the given value. Not supported by this class!
 419    /// </summary>
 420    /// <param name="offset">The offset relative to the <paramref name="origin"/> to seek.</param>
 421    /// <param name="origin">The <see cref="SeekOrigin"/> to seek from.</param>
 422    /// <returns>The new position in the stream.</returns>
 423    /// <exception cref="NotSupportedException">Any access</exception>
 424    public override long Seek(long offset, SeekOrigin origin)
 425    {
 0426      throw new NotSupportedException("DeflaterOutputStream Seek not supported");
 427    }
 428
 429    /// <summary>
 430    /// Sets the length of this stream to the given value. Not supported by this class!
 431    /// </summary>
 432    /// <param name="value">The new stream length.</param>
 433    /// <exception cref="NotSupportedException">Any access</exception>
 434    public override void SetLength(long value)
 435    {
 0436      throw new NotSupportedException("DeflaterOutputStream SetLength not supported");
 437    }
 438
 439    /// <summary>
 440    /// Read a byte from stream advancing position by one
 441    /// </summary>
 442    /// <returns>The byte read cast to an int.  THe value is -1 if at the end of the stream.</returns>
 443    /// <exception cref="NotSupportedException">Any access</exception>
 444    public override int ReadByte()
 445    {
 0446      throw new NotSupportedException("DeflaterOutputStream ReadByte not supported");
 447    }
 448
 449    /// <summary>
 450    /// Read a block of bytes from stream
 451    /// </summary>
 452    /// <param name="buffer">The buffer to store read data in.</param>
 453    /// <param name="offset">The offset to start storing at.</param>
 454    /// <param name="count">The maximum number of bytes to read.</param>
 455    /// <returns>The actual number of bytes read.  Zero if end of stream is detected.</returns>
 456    /// <exception cref="NotSupportedException">Any access</exception>
 457    public override int Read(byte[] buffer, int offset, int count)
 458    {
 0459      throw new NotSupportedException("DeflaterOutputStream Read not supported");
 460    }
 461
 462    /// <summary>
 463    /// Asynchronous reads are not supported a NotSupportedException is always thrown
 464    /// </summary>
 465    /// <param name="buffer">The buffer to read into.</param>
 466    /// <param name="offset">The offset to start storing data at.</param>
 467    /// <param name="count">The number of bytes to read</param>
 468    /// <param name="callback">The async callback to use.</param>
 469    /// <param name="state">The state to use.</param>
 470    /// <returns>Returns an <see cref="IAsyncResult"/></returns>
 471    /// <exception cref="NotSupportedException">Any access</exception>
 472    public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
 473    {
 0474      throw new NotSupportedException("DeflaterOutputStream BeginRead not currently supported");
 475    }
 476
 477    /// <summary>
 478    /// Asynchronous writes arent supported, a NotSupportedException is always thrown
 479    /// </summary>
 480    /// <param name="buffer">The buffer to write.</param>
 481    /// <param name="offset">The offset to begin writing at.</param>
 482    /// <param name="count">The number of bytes to write.</param>
 483    /// <param name="callback">The <see cref="AsyncCallback"/> to use.</param>
 484    /// <param name="state">The state object.</param>
 485    /// <returns>Returns an IAsyncResult.</returns>
 486    /// <exception cref="NotSupportedException">Any access</exception>
 487    public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
 488    {
 0489      throw new NotSupportedException("BeginWrite is not supported");
 490    }
 491
 492    /// <summary>
 493    /// Flushes the stream by calling <see cref="DeflaterOutputStream.Flush">Flush</see> on the deflater and then
 494    /// on the underlying stream.  This ensures that all bytes are flushed.
 495    /// </summary>
 496    public override void Flush()
 497    {
 32498      deflater_.Flush();
 32499      Deflate();
 32500      baseOutputStream_.Flush();
 32501    }
 502
 503    /// <summary>
 504    /// Calls <see cref="Finish"/> and closes the underlying
 505    /// stream when <see cref="IsStreamOwner"></see> is true.
 506    /// </summary>
 507    public override void Close()
 508    {
 273509       if ( !isClosed_ ) {
 264510        isClosed_ = true;
 511
 512        try {
 264513          Finish();
 514#if NETCF_1_0
 515          keys=null;
 516#else
 263517           if ( cryptoTransform_ != null ) {
 1518            GetAuthCodeIfAES();
 1519            cryptoTransform_.Dispose();
 1520            cryptoTransform_ = null;
 521          }
 522#endif
 263523        }
 524        finally {
 264525           if( isStreamOwner_ ) {
 72526            baseOutputStream_.Close();
 527          }
 264528        }
 529      }
 272530    }
 531
 532    private void GetAuthCodeIfAES() {
 533#if !NET_1_1 && !NETCF_2_0
 1534       if (cryptoTransform_ is ZipAESTransform) {
 0535        AESAuthCode = ((ZipAESTransform)cryptoTransform_).GetAuthCode();
 536      }
 537#endif
 1538    }
 539
 540    /// <summary>
 541    /// Writes a single byte to the compressed output stream.
 542    /// </summary>
 543    /// <param name="value">
 544    /// The byte value.
 545    /// </param>
 546    public override void WriteByte(byte value)
 547    {
 26548      byte[] b = new byte[1];
 26549      b[0] = value;
 26550      Write(b, 0, 1);
 24551    }
 552
 553    /// <summary>
 554    /// Writes bytes from an array to the compressed stream.
 555    /// </summary>
 556    /// <param name="buffer">
 557    /// The byte array
 558    /// </param>
 559    /// <param name="offset">
 560    /// The offset into the byte array where to start.
 561    /// </param>
 562    /// <param name="count">
 563    /// The number of bytes to write.
 564    /// </param>
 565    public override void Write(byte[] buffer, int offset, int count)
 566    {
 4485567      deflater_.SetInput(buffer, offset, count);
 4485568      Deflate();
 4485569    }
 570    #endregion
 571
 572    #region Instance Fields
 573    /// <summary>
 574    /// This buffer is used temporarily to retrieve the bytes from the
 575    /// deflater and write them to the underlying output stream.
 576    /// </summary>
 577    byte[] buffer_;
 578
 579    /// <summary>
 580    /// The deflater which is used to deflate the stream.
 581    /// </summary>
 582    protected Deflater deflater_;
 583
 584    /// <summary>
 585    /// Base stream the deflater depends on.
 586    /// </summary>
 587    protected Stream baseOutputStream_;
 588
 589    bool isClosed_;
 590
 279591    bool isStreamOwner_ = true;
 592    #endregion
 593
 594    #region Static Fields
 595
 596#if !NET_1_1 && !NETCF_2_0
 597    // Static to help ensure that multiple files within a zip will get different random salt
 598    private static RNGCryptoServiceProvider _aesRnd;
 599#endif
 600    #endregion
 601  }
 602}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterPending.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterPending.htm new file mode 100644 index 000000000..3be11609d --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterPending.htm @@ -0,0 +1,97 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterPending.cs
Covered lines:2
Uncovered lines:0
Coverable lines:2
Total lines:56
Line coverage:100%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterPending.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// DeflaterPending.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39namespace ICSharpCode.SharpZipLib.Zip.Compression
 40{
 41
 42  /// <summary>
 43  /// This class stores the pending output of the Deflater.
 44  ///
 45  /// author of the original java version : Jochen Hoenicke
 46  /// </summary>
 47  public class DeflaterPending : PendingBuffer
 48  {
 49    /// <summary>
 50    /// Construct instance with default buffer size
 51    /// </summary>
 27952    public DeflaterPending() : base(DeflaterConstants.PENDING_BUF_SIZE)
 53    {
 27954    }
 55  }
 56}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DescriptorData.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DescriptorData.htm new file mode 100644 index 000000000..ad48481d9 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DescriptorData.htm @@ -0,0 +1,657 @@ + + + + +ICSharpCode.SharpZipLib.Zip.DescriptorData - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.DescriptorData
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipHelperStream.cs
Covered lines:6
Uncovered lines:0
Coverable lines:6
Total lines:623
Line coverage:100%
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipHelperStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipHelperStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38using System.Text;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42
 43  /// <summary>
 44  /// Holds data pertinent to a data descriptor.
 45  /// </summary>
 46  public class DescriptorData
 47  {
 48    /// <summary>
 49    /// Get /set the compressed size of data.
 50    /// </summary>
 51    public long CompressedSize
 52    {
 1353      get { return compressedSize; }
 2654      set { compressedSize = value; }
 55    }
 56
 57    /// <summary>
 58    /// Get / set the uncompressed size of data
 59    /// </summary>
 60    public long Size
 61    {
 1362      get { return size; }
 2663      set { size = value; }
 64    }
 65
 66    /// <summary>
 67    /// Get /set the crc value.
 68    /// </summary>
 69    public long Crc
 70    {
 1371      get { return crc; }
 2672      set { crc = (value & 0xffffffff); }
 73    }
 74
 75    #region Instance Fields
 76    long size;
 77    long compressedSize;
 78    long crc;
 79    #endregion
 80  }
 81
 82  class EntryPatchData
 83  {
 84    public long SizePatchOffset
 85    {
 86      get { return sizePatchOffset_; }
 87      set { sizePatchOffset_ = value; }
 88    }
 89
 90    public long CrcPatchOffset
 91    {
 92      get { return crcPatchOffset_; }
 93      set { crcPatchOffset_ = value; }
 94    }
 95
 96    #region Instance Fields
 97    long sizePatchOffset_;
 98    long crcPatchOffset_;
 99    #endregion
 100  }
 101
 102  /// <summary>
 103  /// This class assists with writing/reading from Zip files.
 104  /// </summary>
 105  internal class ZipHelperStream : Stream
 106  {
 107    #region Constructors
 108    /// <summary>
 109    /// Initialise an instance of this class.
 110    /// </summary>
 111    /// <param name="name">The name of the file to open.</param>
 112    public ZipHelperStream(string name)
 113    {
 114      stream_ = new FileStream(name, FileMode.Open, FileAccess.ReadWrite);
 115      isOwner_ = true;
 116    }
 117
 118    /// <summary>
 119    /// Initialise a new instance of <see cref="ZipHelperStream"/>.
 120    /// </summary>
 121    /// <param name="stream">The stream to use.</param>
 122    public ZipHelperStream(Stream stream)
 123    {
 124      stream_ = stream;
 125    }
 126    #endregion
 127
 128    /// <summary>
 129    /// Get / set a value indicating wether the the underlying stream is owned or not.
 130    /// </summary>
 131    /// <remarks>If the stream is owned it is closed when this instance is closed.</remarks>
 132    public bool IsStreamOwner
 133    {
 134      get { return isOwner_; }
 135      set { isOwner_ = value; }
 136    }
 137
 138    #region Base Stream Methods
 139    public override bool CanRead
 140    {
 141      get { return stream_.CanRead; }
 142    }
 143
 144    public override bool CanSeek
 145    {
 146      get { return stream_.CanSeek; }
 147    }
 148
 149#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 150    public override bool CanTimeout
 151    {
 152      get { return stream_.CanTimeout; }
 153    }
 154#endif
 155
 156    public override long Length
 157    {
 158      get { return stream_.Length; }
 159    }
 160
 161    public override long Position
 162    {
 163      get { return stream_.Position; }
 164      set { stream_.Position = value;  }
 165    }
 166
 167    public override bool CanWrite
 168    {
 169      get { return stream_.CanWrite; }
 170    }
 171
 172    public override void Flush()
 173    {
 174      stream_.Flush();
 175    }
 176
 177    public override long Seek(long offset, SeekOrigin origin)
 178    {
 179      return stream_.Seek(offset, origin);
 180    }
 181
 182    public override void SetLength(long value)
 183    {
 184      stream_.SetLength(value);
 185    }
 186
 187    public override int Read(byte[] buffer, int offset, int count)
 188    {
 189      return stream_.Read(buffer, offset, count);
 190    }
 191
 192    public override void Write(byte[] buffer, int offset, int count)
 193    {
 194      stream_.Write(buffer, offset, count);
 195    }
 196
 197    /// <summary>
 198    /// Close the stream.
 199    /// </summary>
 200    /// <remarks>
 201    /// The underlying stream is closed only if <see cref="IsStreamOwner"/> is true.
 202    /// </remarks>
 203    override public void Close()
 204    {
 205      Stream toClose = stream_;
 206      stream_ = null;
 207      if (isOwner_ && (toClose != null))
 208      {
 209        isOwner_ = false;
 210        toClose.Close();
 211      }
 212    }
 213    #endregion
 214
 215    // Write the local file header
 216    // TODO: ZipHelperStream.WriteLocalHeader is not yet used and needs checking for ZipFile and ZipOuptutStream usage
 217    void WriteLocalHeader(ZipEntry entry, EntryPatchData patchData)
 218    {
 219      CompressionMethod method = entry.CompressionMethod;
 220      bool headerInfoAvailable = true; // How to get this?
 221      bool patchEntryHeader = false;
 222
 223      WriteLEInt(ZipConstants.LocalHeaderSignature);
 224
 225      WriteLEShort(entry.Version);
 226      WriteLEShort(entry.Flags);
 227      WriteLEShort((byte)method);
 228      WriteLEInt((int)entry.DosTime);
 229
 230      if (headerInfoAvailable == true) {
 231        WriteLEInt((int)entry.Crc);
 232        if ( entry.LocalHeaderRequiresZip64 ) {
 233          WriteLEInt(-1);
 234          WriteLEInt(-1);
 235        }
 236        else {
 237          WriteLEInt(entry.IsCrypted ? (int)entry.CompressedSize + ZipConstants.CryptoHeaderSize : (int)entry.Compressed
 238          WriteLEInt((int)entry.Size);
 239        }
 240      } else {
 241        if (patchData != null) {
 242          patchData.CrcPatchOffset = stream_.Position;
 243        }
 244        WriteLEInt(0);  // Crc
 245
 246        if ( patchData != null ) {
 247          patchData.SizePatchOffset = stream_.Position;
 248        }
 249
 250        // For local header both sizes appear in Zip64 Extended Information
 251        if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) {
 252          WriteLEInt(-1);
 253          WriteLEInt(-1);
 254        }
 255        else {
 256          WriteLEInt(0);  // Compressed size
 257          WriteLEInt(0);  // Uncompressed size
 258        }
 259      }
 260
 261      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 262
 263      if (name.Length > 0xFFFF) {
 264        throw new ZipException("Entry name too long.");
 265      }
 266
 267      var ed = new ZipExtraData(entry.ExtraData);
 268
 269      if (entry.LocalHeaderRequiresZip64 && (headerInfoAvailable || patchEntryHeader)) {
 270        ed.StartNewEntry();
 271        if (headerInfoAvailable) {
 272          ed.AddLeLong(entry.Size);
 273          ed.AddLeLong(entry.CompressedSize);
 274        }
 275        else {
 276          ed.AddLeLong(-1);
 277          ed.AddLeLong(-1);
 278        }
 279        ed.AddNewEntry(1);
 280
 281        if ( !ed.Find(1) ) {
 282          throw new ZipException("Internal error cant find extra data");
 283        }
 284
 285        if ( patchData != null ) {
 286          patchData.SizePatchOffset = ed.CurrentReadIndex;
 287        }
 288      }
 289      else {
 290        ed.Delete(1);
 291      }
 292
 293      byte[] extra = ed.GetEntryData();
 294
 295      WriteLEShort(name.Length);
 296      WriteLEShort(extra.Length);
 297
 298      if ( name.Length > 0 ) {
 299        stream_.Write(name, 0, name.Length);
 300      }
 301
 302      if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) {
 303        patchData.SizePatchOffset += stream_.Position;
 304      }
 305
 306      if ( extra.Length > 0 ) {
 307        stream_.Write(extra, 0, extra.Length);
 308      }
 309    }
 310
 311    /// <summary>
 312    /// Locates a block with the desired <paramref name="signature"/>.
 313    /// </summary>
 314    /// <param name="signature">The signature to find.</param>
 315    /// <param name="endLocation">Location, marking the end of block.</param>
 316    /// <param name="minimumBlockSize">Minimum size of the block.</param>
 317    /// <param name="maximumVariableData">The maximum variable data.</param>
 318    /// <returns>Eeturns the offset of the first byte after the signature; -1 if not found</returns>
 319    public long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 320    {
 321      long pos = endLocation - minimumBlockSize;
 322      if ( pos < 0 ) {
 323        return -1;
 324      }
 325
 326      long giveUpMarker = Math.Max(pos - maximumVariableData, 0);
 327
 328      // TODO: This loop could be optimised for speed.
 329      do {
 330        if ( pos < giveUpMarker ) {
 331          return -1;
 332        }
 333        Seek(pos--, SeekOrigin.Begin);
 334      } while ( ReadLEInt() != signature );
 335
 336      return Position;
 337    }
 338
 339    /// <summary>
 340    /// Write Zip64 end of central directory records (File header and locator).
 341    /// </summary>
 342    /// <param name="noOfEntries">The number of entries in the central directory.</param>
 343    /// <param name="sizeEntries">The size of entries in the central directory.</param>
 344    /// <param name="centralDirOffset">The offset of the dentral directory.</param>
 345    public void WriteZip64EndOfCentralDirectory(long noOfEntries, long sizeEntries, long centralDirOffset)
 346    {
 347      long centralSignatureOffset = stream_.Position;
 348      WriteLEInt(ZipConstants.Zip64CentralFileHeaderSignature);
 349      WriteLELong(44);    // Size of this record (total size of remaining fields in header or full size - 12)
 350      WriteLEShort(ZipConstants.VersionMadeBy);   // Version made by
 351      WriteLEShort(ZipConstants.VersionZip64);   // Version to extract
 352      WriteLEInt(0);      // Number of this disk
 353      WriteLEInt(0);      // number of the disk with the start of the central directory
 354      WriteLELong(noOfEntries);       // No of entries on this disk
 355      WriteLELong(noOfEntries);       // Total No of entries in central directory
 356      WriteLELong(sizeEntries);       // Size of the central directory
 357      WriteLELong(centralDirOffset);  // offset of start of central directory
 358      // zip64 extensible data sector not catered for here (variable size)
 359
 360      // Write the Zip64 end of central directory locator
 361      WriteLEInt(ZipConstants.Zip64CentralDirLocatorSignature);
 362
 363      // no of the disk with the start of the zip64 end of central directory
 364      WriteLEInt(0);
 365
 366      // relative offset of the zip64 end of central directory record
 367      WriteLELong(centralSignatureOffset);
 368
 369      // total number of disks
 370      WriteLEInt(1);
 371    }
 372
 373    /// <summary>
 374    /// Write the required records to end the central directory.
 375    /// </summary>
 376    /// <param name="noOfEntries">The number of entries in the directory.</param>
 377    /// <param name="sizeEntries">The size of the entries in the directory.</param>
 378    /// <param name="startOfCentralDirectory">The start of the central directory.</param>
 379    /// <param name="comment">The archive comment.  (This can be null).</param>
 380    public void WriteEndOfCentralDirectory(long noOfEntries, long sizeEntries,
 381      long startOfCentralDirectory, byte[] comment)
 382    {
 383
 384      if ( (noOfEntries >= 0xffff) ||
 385        (startOfCentralDirectory >= 0xffffffff) ||
 386        (sizeEntries >= 0xffffffff) ) {
 387        WriteZip64EndOfCentralDirectory(noOfEntries, sizeEntries, startOfCentralDirectory);
 388      }
 389
 390      WriteLEInt(ZipConstants.EndOfCentralDirectorySignature);
 391
 392      // TODO: ZipFile Multi disk handling not done
 393      WriteLEShort(0);                    // number of this disk
 394      WriteLEShort(0);                    // no of disk with start of central dir
 395
 396
 397      // Number of entries
 398      if ( noOfEntries >= 0xffff ) {
 399        WriteLEUshort(0xffff);  // Zip64 marker
 400        WriteLEUshort(0xffff);
 401      }
 402      else {
 403        WriteLEShort(( short )noOfEntries);          // entries in central dir for this disk
 404        WriteLEShort(( short )noOfEntries);          // total entries in central directory
 405      }
 406
 407      // Size of the central directory
 408      if ( sizeEntries >= 0xffffffff ) {
 409        WriteLEUint(0xffffffff);    // Zip64 marker
 410      }
 411      else {
 412        WriteLEInt(( int )sizeEntries);
 413      }
 414
 415
 416      // offset of start of central directory
 417      if ( startOfCentralDirectory >= 0xffffffff ) {
 418        WriteLEUint(0xffffffff);    // Zip64 marker
 419      }
 420      else {
 421        WriteLEInt(( int )startOfCentralDirectory);
 422      }
 423
 424      int commentLength = (comment != null) ? comment.Length : 0;
 425
 426      if ( commentLength > 0xffff ) {
 427        throw new ZipException(string.Format("Comment length({0}) is too long can only be 64K", commentLength));
 428      }
 429
 430      WriteLEShort(commentLength);
 431
 432      if ( commentLength > 0 ) {
 433        Write(comment, 0, comment.Length);
 434      }
 435    }
 436
 437    #region LE value reading/writing
 438    /// <summary>
 439    /// Read an unsigned short in little endian byte order.
 440    /// </summary>
 441    /// <returns>Returns the value read.</returns>
 442    /// <exception cref="IOException">
 443    /// An i/o error occurs.
 444    /// </exception>
 445    /// <exception cref="EndOfStreamException">
 446    /// The file ends prematurely
 447    /// </exception>
 448    public int ReadLEShort()
 449    {
 450      int byteValue1 = stream_.ReadByte();
 451
 452      if (byteValue1 < 0) {
 453        throw new EndOfStreamException();
 454      }
 455
 456      int byteValue2 = stream_.ReadByte();
 457      if (byteValue2 < 0) {
 458        throw new EndOfStreamException();
 459      }
 460
 461      return byteValue1 | (byteValue2 << 8);
 462    }
 463
 464    /// <summary>
 465    /// Read an int in little endian byte order.
 466    /// </summary>
 467    /// <returns>Returns the value read.</returns>
 468    /// <exception cref="IOException">
 469    /// An i/o error occurs.
 470    /// </exception>
 471    /// <exception cref="System.IO.EndOfStreamException">
 472    /// The file ends prematurely
 473    /// </exception>
 474    public int ReadLEInt()
 475    {
 476      return ReadLEShort() | (ReadLEShort() << 16);
 477    }
 478
 479    /// <summary>
 480    /// Read a long in little endian byte order.
 481    /// </summary>
 482    /// <returns>The value read.</returns>
 483    public long ReadLELong()
 484    {
 485      return (uint)ReadLEInt() | ((long)ReadLEInt() << 32);
 486    }
 487
 488    /// <summary>
 489    /// Write an unsigned short in little endian byte order.
 490    /// </summary>
 491    /// <param name="value">The value to write.</param>
 492    public void WriteLEShort(int value)
 493    {
 494      stream_.WriteByte(( byte )(value & 0xff));
 495      stream_.WriteByte(( byte )((value >> 8) & 0xff));
 496    }
 497
 498    /// <summary>
 499    /// Write a ushort in little endian byte order.
 500    /// </summary>
 501    /// <param name="value">The value to write.</param>
 502    public void WriteLEUshort(ushort value)
 503    {
 504      stream_.WriteByte(( byte )(value & 0xff));
 505      stream_.WriteByte(( byte )(value >> 8));
 506    }
 507
 508    /// <summary>
 509    /// Write an int in little endian byte order.
 510    /// </summary>
 511    /// <param name="value">The value to write.</param>
 512    public void WriteLEInt(int value)
 513    {
 514      WriteLEShort(value);
 515      WriteLEShort(value >> 16);
 516    }
 517
 518    /// <summary>
 519    /// Write a uint in little endian byte order.
 520    /// </summary>
 521    /// <param name="value">The value to write.</param>
 522    public void WriteLEUint(uint value)
 523    {
 524      WriteLEUshort(( ushort )(value & 0xffff));
 525      WriteLEUshort(( ushort )(value >> 16));
 526    }
 527
 528    /// <summary>
 529    /// Write a long in little endian byte order.
 530    /// </summary>
 531    /// <param name="value">The value to write.</param>
 532    public void WriteLELong(long value)
 533    {
 534      WriteLEInt(( int )value);
 535      WriteLEInt(( int )(value >> 32));
 536    }
 537
 538    /// <summary>
 539    /// Write a ulong in little endian byte order.
 540    /// </summary>
 541    /// <param name="value">The value to write.</param>
 542    public void WriteLEUlong(ulong value)
 543    {
 544      WriteLEUint(( uint )(value & 0xffffffff));
 545      WriteLEUint(( uint )(value >> 32));
 546    }
 547
 548    #endregion
 549
 550    /// <summary>
 551    /// Write a data descriptor.
 552    /// </summary>
 553    /// <param name="entry">The entry to write a descriptor for.</param>
 554    /// <returns>Returns the number of descriptor bytes written.</returns>
 555    public int WriteDataDescriptor(ZipEntry entry)
 556    {
 557      if (entry == null) {
 558        throw new ArgumentNullException(nameof(entry));
 559      }
 560
 561      int result=0;
 562
 563      // Add data descriptor if flagged as required
 564      if ((entry.Flags & (int)GeneralBitFlags.Descriptor) != 0)
 565      {
 566        // The signature is not PKZIP originally but is now described as optional
 567        // in the PKZIP Appnote documenting trhe format.
 568        WriteLEInt(ZipConstants.DataDescriptorSignature);
 569        WriteLEInt(unchecked((int)(entry.Crc)));
 570
 571        result+=8;
 572
 573        if (entry.LocalHeaderRequiresZip64)
 574        {
 575          WriteLELong(entry.CompressedSize);
 576          WriteLELong(entry.Size);
 577          result+=16;
 578        }
 579        else
 580        {
 581          WriteLEInt((int)entry.CompressedSize);
 582          WriteLEInt((int)entry.Size);
 583          result+=8;
 584        }
 585      }
 586
 587      return result;
 588    }
 589
 590    /// <summary>
 591    /// Read data descriptor at the end of compressed data.
 592    /// </summary>
 593    /// <param name="zip64">if set to <c>true</c> [zip64].</param>
 594    /// <param name="data">The data to fill in.</param>
 595    /// <returns>Returns the number of bytes read in the descriptor.</returns>
 596    public void ReadDataDescriptor(bool zip64, DescriptorData data)
 597    {
 598      int intValue = ReadLEInt();
 599
 600      // In theory this may not be a descriptor according to PKZIP appnote.
 601      // In practise its always there.
 602      if (intValue != ZipConstants.DataDescriptorSignature) {
 603        throw new ZipException("Data descriptor signature not found");
 604      }
 605
 606      data.Crc = ReadLEInt();
 607
 608      if (zip64) {
 609        data.CompressedSize = ReadLELong();
 610        data.Size = ReadLELong();
 611      }
 612      else {
 613        data.CompressedSize = ReadLEInt();
 614        data.Size = ReadLEInt();
 615      }
 616    }
 617
 618    #region Instance Fields
 619    bool isOwner_;
 620    Stream stream_;
 621    #endregion
 622  }
 623}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryEventArgs.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryEventArgs.htm new file mode 100644 index 000000000..39c433925 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryEventArgs.htm @@ -0,0 +1,571 @@ + + + + +ICSharpCode.SharpZipLib.Core.DirectoryEventArgs - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.DirectoryEventArgs
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs
Covered lines:0
Uncovered lines:4
Coverable lines:4
Total lines:530
Line coverage:0%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// FileSystemScanner.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36
 37using System;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  #region EventArgs
 42  /// <summary>
 43  /// Event arguments for scanning.
 44  /// </summary>
 45  public class ScanEventArgs : EventArgs
 46  {
 47    #region Constructors
 48    /// <summary>
 49    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 50    /// </summary>
 51    /// <param name="name">The file or directory name.</param>
 52    public ScanEventArgs(string name)
 53    {
 54      name_ = name;
 55    }
 56    #endregion
 57
 58    /// <summary>
 59    /// The file or directory name for this event.
 60    /// </summary>
 61    public string Name
 62    {
 63      get { return name_; }
 64    }
 65
 66    /// <summary>
 67    /// Get set a value indicating if scanning should continue or not.
 68    /// </summary>
 69    public bool ContinueRunning
 70    {
 71      get { return continueRunning_; }
 72      set { continueRunning_ = value; }
 73    }
 74
 75    #region Instance Fields
 76    string name_;
 77    bool continueRunning_ = true;
 78    #endregion
 79  }
 80
 81  /// <summary>
 82  /// Event arguments during processing of a single file or directory.
 83  /// </summary>
 84  public class ProgressEventArgs : EventArgs
 85  {
 86    #region Constructors
 87    /// <summary>
 88    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 89    /// </summary>
 90    /// <param name="name">The file or directory name if known.</param>
 91    /// <param name="processed">The number of bytes processed so far</param>
 92    /// <param name="target">The total number of bytes to process, 0 if not known</param>
 93    public ProgressEventArgs(string name, long processed, long target)
 94    {
 95      name_ = name;
 96      processed_ = processed;
 97      target_ = target;
 98    }
 99    #endregion
 100
 101    /// <summary>
 102    /// The name for this event if known.
 103    /// </summary>
 104    public string Name
 105    {
 106      get { return name_; }
 107    }
 108
 109    /// <summary>
 110    /// Get set a value indicating wether scanning should continue or not.
 111    /// </summary>
 112    public bool ContinueRunning
 113    {
 114      get { return continueRunning_; }
 115      set { continueRunning_ = value; }
 116    }
 117
 118    /// <summary>
 119    /// Get a percentage representing how much of the <see cref="Target"></see> has been processed
 120    /// </summary>
 121    /// <value>0.0 to 100.0 percent; 0 if target is not known.</value>
 122    public float PercentComplete
 123    {
 124      get
 125      {
 126          float result;
 127        if (target_ <= 0)
 128        {
 129          result = 0;
 130        }
 131        else
 132        {
 133          result = ((float)processed_ / (float)target_) * 100.0f;
 134        }
 135          return result;
 136      }
 137    }
 138
 139    /// <summary>
 140    /// The number of bytes processed so far
 141    /// </summary>
 142    public long Processed
 143    {
 144      get { return processed_; }
 145    }
 146
 147    /// <summary>
 148    /// The number of bytes to process.
 149    /// </summary>
 150    /// <remarks>Target may be 0 or negative if the value isnt known.</remarks>
 151    public long Target
 152    {
 153      get { return target_; }
 154    }
 155
 156    #region Instance Fields
 157    string name_;
 158    long processed_;
 159    long target_;
 160    bool continueRunning_ = true;
 161    #endregion
 162  }
 163
 164  /// <summary>
 165  /// Event arguments for directories.
 166  /// </summary>
 167  public class DirectoryEventArgs : ScanEventArgs
 168  {
 169    #region Constructors
 170    /// <summary>
 171    /// Initialize an instance of <see cref="DirectoryEventArgs"></see>.
 172    /// </summary>
 173    /// <param name="name">The name for this directory.</param>
 174    /// <param name="hasMatchingFiles">Flag value indicating if any matching files are contained in this directory.</par
 175    public DirectoryEventArgs(string name, bool hasMatchingFiles)
 0176      : base (name)
 177    {
 0178      hasMatchingFiles_ = hasMatchingFiles;
 0179    }
 180    #endregion
 181
 182    /// <summary>
 183    /// Get a value indicating if the directory contains any matching files or not.
 184    /// </summary>
 185    public bool HasMatchingFiles
 186    {
 0187      get { return hasMatchingFiles_; }
 188    }
 189
 190    readonly
 191
 192    #region Instance Fields
 193    bool hasMatchingFiles_;
 194    #endregion
 195  }
 196
 197  /// <summary>
 198  /// Arguments passed when scan failures are detected.
 199  /// </summary>
 200  public class ScanFailureEventArgs : EventArgs
 201  {
 202    #region Constructors
 203    /// <summary>
 204    /// Initialise a new instance of <see cref="ScanFailureEventArgs"></see>
 205    /// </summary>
 206    /// <param name="name">The name to apply.</param>
 207    /// <param name="e">The exception to use.</param>
 208    public ScanFailureEventArgs(string name, Exception e)
 209    {
 210      name_ = name;
 211      exception_ = e;
 212      continueRunning_ = true;
 213    }
 214    #endregion
 215
 216    /// <summary>
 217    /// The applicable name.
 218    /// </summary>
 219    public string Name
 220    {
 221      get { return name_; }
 222    }
 223
 224    /// <summary>
 225    /// The applicable exception.
 226    /// </summary>
 227    public Exception Exception
 228    {
 229      get { return exception_; }
 230    }
 231
 232    /// <summary>
 233    /// Get / set a value indicating wether scanning should continue.
 234    /// </summary>
 235    public bool ContinueRunning
 236    {
 237      get { return continueRunning_; }
 238      set { continueRunning_ = value; }
 239    }
 240
 241    #region Instance Fields
 242    string name_;
 243    Exception exception_;
 244    bool continueRunning_;
 245    #endregion
 246  }
 247
 248  #endregion
 249
 250  #region Delegates
 251  /// <summary>
 252  /// Delegate invoked before starting to process a file.
 253  /// </summary>
 254  /// <param name="sender">The source of the event</param>
 255  /// <param name="e">The event arguments.</param>
 256  public delegate void ProcessFileHandler(object sender, ScanEventArgs e);
 257
 258  /// <summary>
 259  /// Delegate invoked during processing of a file or directory
 260  /// </summary>
 261  /// <param name="sender">The source of the event</param>
 262  /// <param name="e">The event arguments.</param>
 263  public delegate void ProgressHandler(object sender, ProgressEventArgs e);
 264
 265  /// <summary>
 266  /// Delegate invoked when a file has been completely processed.
 267  /// </summary>
 268  /// <param name="sender">The source of the event</param>
 269  /// <param name="e">The event arguments.</param>
 270  public delegate void CompletedFileHandler(object sender, ScanEventArgs e);
 271
 272  /// <summary>
 273  /// Delegate invoked when a directory failure is detected.
 274  /// </summary>
 275  /// <param name="sender">The source of the event</param>
 276  /// <param name="e">The event arguments.</param>
 277  public delegate void DirectoryFailureHandler(object sender, ScanFailureEventArgs e);
 278
 279  /// <summary>
 280  /// Delegate invoked when a file failure is detected.
 281  /// </summary>
 282  /// <param name="sender">The source of the event</param>
 283  /// <param name="e">The event arguments.</param>
 284  public delegate void FileFailureHandler(object sender, ScanFailureEventArgs e);
 285  #endregion
 286
 287  /// <summary>
 288  /// FileSystemScanner provides facilities scanning of files and directories.
 289  /// </summary>
 290  public class FileSystemScanner
 291  {
 292    #region Constructors
 293    /// <summary>
 294    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 295    /// </summary>
 296    /// <param name="filter">The <see cref="PathFilter">file filter</see> to apply when scanning.</param>
 297    public FileSystemScanner(string filter)
 298    {
 299      fileFilter_ = new PathFilter(filter);
 300    }
 301
 302    /// <summary>
 303    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 304    /// </summary>
 305    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 306    /// <param name="directoryFilter">The <see cref="PathFilter"> directory filter</see> to apply.</param>
 307    public FileSystemScanner(string fileFilter, string directoryFilter)
 308    {
 309      fileFilter_ = new PathFilter(fileFilter);
 310      directoryFilter_ = new PathFilter(directoryFilter);
 311    }
 312
 313    /// <summary>
 314    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 315    /// </summary>
 316    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see> to apply.</param>
 317    public FileSystemScanner(IScanFilter fileFilter)
 318    {
 319      fileFilter_ = fileFilter;
 320    }
 321
 322    /// <summary>
 323    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 324    /// </summary>
 325    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see>  to apply.</param>
 326    /// <param name="directoryFilter">The directory <see cref="IScanFilter">filter</see>  to apply.</param>
 327    public FileSystemScanner(IScanFilter fileFilter, IScanFilter directoryFilter)
 328    {
 329      fileFilter_ = fileFilter;
 330      directoryFilter_ = directoryFilter;
 331    }
 332    #endregion
 333
 334    #region Delegates
 335    /// <summary>
 336    /// Delegate to invoke when a directory is processed.
 337    /// </summary>
 338    public event EventHandler<DirectoryEventArgs> ProcessDirectory;
 339
 340    /// <summary>
 341    /// Delegate to invoke when a file is processed.
 342    /// </summary>
 343    public ProcessFileHandler ProcessFile;
 344
 345    /// <summary>
 346    /// Delegate to invoke when processing for a file has finished.
 347    /// </summary>
 348    public CompletedFileHandler CompletedFile;
 349
 350    /// <summary>
 351    /// Delegate to invoke when a directory failure is detected.
 352    /// </summary>
 353    public DirectoryFailureHandler DirectoryFailure;
 354
 355    /// <summary>
 356    /// Delegate to invoke when a file failure is detected.
 357    /// </summary>
 358    public FileFailureHandler FileFailure;
 359    #endregion
 360
 361    /// <summary>
 362    /// Raise the DirectoryFailure event.
 363    /// </summary>
 364    /// <param name="directory">The directory name.</param>
 365    /// <param name="e">The exception detected.</param>
 366    bool OnDirectoryFailure(string directory, Exception e)
 367    {
 368            DirectoryFailureHandler handler = DirectoryFailure;
 369            bool result = (handler != null);
 370            if ( result ) {
 371        var args = new ScanFailureEventArgs(directory, e);
 372        handler(this, args);
 373        alive_ = args.ContinueRunning;
 374      }
 375            return result;
 376    }
 377
 378    /// <summary>
 379    /// Raise the FileFailure event.
 380    /// </summary>
 381    /// <param name="file">The file name.</param>
 382    /// <param name="e">The exception detected.</param>
 383    bool OnFileFailure(string file, Exception e)
 384    {
 385            FileFailureHandler handler = FileFailure;
 386
 387            bool result = (handler != null);
 388
 389      if ( result ){
 390        var args = new ScanFailureEventArgs(file, e);
 391        FileFailure(this, args);
 392        alive_ = args.ContinueRunning;
 393      }
 394            return result;
 395    }
 396
 397    /// <summary>
 398    /// Raise the ProcessFile event.
 399    /// </summary>
 400    /// <param name="file">The file name.</param>
 401    void OnProcessFile(string file)
 402    {
 403      ProcessFileHandler handler = ProcessFile;
 404
 405      if ( handler!= null ) {
 406        var args = new ScanEventArgs(file);
 407        handler(this, args);
 408        alive_ = args.ContinueRunning;
 409      }
 410    }
 411
 412    /// <summary>
 413    /// Raise the complete file event
 414    /// </summary>
 415    /// <param name="file">The file name</param>
 416    void OnCompleteFile(string file)
 417    {
 418      CompletedFileHandler handler = CompletedFile;
 419
 420      if (handler != null)
 421      {
 422        var args = new ScanEventArgs(file);
 423        handler(this, args);
 424        alive_ = args.ContinueRunning;
 425      }
 426    }
 427
 428    /// <summary>
 429    /// Raise the ProcessDirectory event.
 430    /// </summary>
 431    /// <param name="directory">The directory name.</param>
 432    /// <param name="hasMatchingFiles">Flag indicating if the directory has matching files.</param>
 433    void OnProcessDirectory(string directory, bool hasMatchingFiles)
 434    {
 435      EventHandler<DirectoryEventArgs> handler = ProcessDirectory;
 436
 437      if ( handler != null ) {
 438        var args = new DirectoryEventArgs(directory, hasMatchingFiles);
 439        handler(this, args);
 440        alive_ = args.ContinueRunning;
 441      }
 442    }
 443
 444    /// <summary>
 445    /// Scan a directory.
 446    /// </summary>
 447    /// <param name="directory">The base directory to scan.</param>
 448    /// <param name="recurse">True to recurse subdirectories, false to scan a single directory.</param>
 449    public void Scan(string directory, bool recurse)
 450    {
 451      alive_ = true;
 452      ScanDir(directory, recurse);
 453    }
 454
 455    void ScanDir(string directory, bool recurse)
 456    {
 457
 458      try {
 459        string[] names = System.IO.Directory.GetFiles(directory);
 460        bool hasMatch = false;
 461        for (int fileIndex = 0; fileIndex < names.Length; ++fileIndex) {
 462          if ( !fileFilter_.IsMatch(names[fileIndex]) ) {
 463            names[fileIndex] = null;
 464          } else {
 465            hasMatch = true;
 466          }
 467        }
 468
 469        OnProcessDirectory(directory, hasMatch);
 470
 471        if ( alive_ && hasMatch ) {
 472          foreach (string fileName in names) {
 473            try {
 474              if ( fileName != null ) {
 475                OnProcessFile(fileName);
 476                if ( !alive_ ) {
 477                  break;
 478                }
 479              }
 480            }
 481            catch (Exception e) {
 482                            if (!OnFileFailure(fileName, e)) {
 483                                throw;
 484                            }
 485            }
 486          }
 487        }
 488      }
 489      catch (Exception e) {
 490                if (!OnDirectoryFailure(directory, e)) {
 491                    throw;
 492                }
 493      }
 494
 495      if ( alive_ && recurse ) {
 496        try {
 497          string[] names = System.IO.Directory.GetDirectories(directory);
 498          foreach (string fulldir in names) {
 499            if ((directoryFilter_ == null) || (directoryFilter_.IsMatch(fulldir))) {
 500              ScanDir(fulldir, true);
 501              if ( !alive_ ) {
 502                break;
 503              }
 504            }
 505          }
 506        }
 507        catch (Exception e) {
 508                    if (!OnDirectoryFailure(directory, e)) {
 509                        throw;
 510                    }
 511        }
 512      }
 513    }
 514
 515    #region Instance Fields
 516    /// <summary>
 517    /// The file filter currently in use.
 518    /// </summary>
 519    IScanFilter fileFilter_;
 520    /// <summary>
 521    /// The directory filter currently in use.
 522    /// </summary>
 523    IScanFilter directoryFilter_;
 524    /// <summary>
 525    /// Flag indicating if scanning should continue running.
 526    /// </summary>
 527    bool alive_;
 528    #endregion
 529  }
 530}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryFailureHandler.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryFailureHandler.htm new file mode 100644 index 000000000..70add9e30 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryFailureHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DiskArchiveStorage.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DiskArchiveStorage.htm new file mode 100644 index 000000000..41bb2f47b --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DiskArchiveStorage.htm @@ -0,0 +1,4525 @@ + + + + +ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs
Covered lines:55
Uncovered lines:17
Coverable lines:72
Total lines:4476
Line coverage:76.3%
Branch coverage:62.5%
+

Metrics

+ + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)28066.67
.ctor(...)1100100
GetTemporaryOutput()257.1466.67
ConvertTemporaryToFinal()363.1640
MakeTemporaryCopy(...)1100100
OpenForDirectUpdate(...)485.7157.14
Dispose()2100100
GetTempFileName(...)67588.89
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipFile.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-03-02  Z-1650  Fixed updating ODT archives in memory. Exposed exceptions in updating.
 42//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 43//  2012-11-29  Z-1684  Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp
 44
 45using System;
 46using System.Collections;
 47using System.IO;
 48using System.Text;
 49using System.Globalization;
 50
 51#if !NETCF_1_0
 52using System.Security.Cryptography;
 53using ICSharpCode.SharpZipLib.Encryption;
 54#endif
 55
 56using ICSharpCode.SharpZipLib.Core;
 57using ICSharpCode.SharpZipLib.Checksums;
 58using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 59using ICSharpCode.SharpZipLib.Zip.Compression;
 60
 61namespace ICSharpCode.SharpZipLib.Zip
 62{
 63  #region Keys Required Event Args
 64  /// <summary>
 65  /// Arguments used with KeysRequiredEvent
 66  /// </summary>
 67  public class KeysRequiredEventArgs : EventArgs
 68  {
 69    #region Constructors
 70    /// <summary>
 71    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 72    /// </summary>
 73    /// <param name="name">The name of the file for which keys are required.</param>
 74    public KeysRequiredEventArgs(string name)
 75    {
 76      fileName = name;
 77    }
 78
 79    /// <summary>
 80    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 81    /// </summary>
 82    /// <param name="name">The name of the file for which keys are required.</param>
 83    /// <param name="keyValue">The current key value.</param>
 84    public KeysRequiredEventArgs(string name, byte[] keyValue)
 85    {
 86      fileName = name;
 87      key = keyValue;
 88    }
 89
 90    #endregion
 91    #region Properties
 92    /// <summary>
 93    /// Gets the name of the file for which keys are required.
 94    /// </summary>
 95    public string FileName
 96    {
 97      get { return fileName; }
 98    }
 99
 100    /// <summary>
 101    /// Gets or sets the key value
 102    /// </summary>
 103    public byte[] Key
 104    {
 105      get { return key; }
 106      set { key = value; }
 107    }
 108    #endregion
 109
 110    #region Instance Fields
 111    string fileName;
 112    byte[] key;
 113    #endregion
 114  }
 115  #endregion
 116
 117  #region Test Definitions
 118  /// <summary>
 119  /// The strategy to apply to testing.
 120  /// </summary>
 121  public enum TestStrategy
 122  {
 123    /// <summary>
 124    /// Find the first error only.
 125    /// </summary>
 126    FindFirstError,
 127    /// <summary>
 128    /// Find all possible errors.
 129    /// </summary>
 130    FindAllErrors,
 131  }
 132
 133  /// <summary>
 134  /// The operation in progress reported by a <see cref="ZipTestResultHandler"/> during testing.
 135  /// </summary>
 136  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 137  public enum TestOperation
 138  {
 139    /// <summary>
 140    /// Setting up testing.
 141    /// </summary>
 142    Initialising,
 143
 144    /// <summary>
 145    /// Testing an individual entries header
 146    /// </summary>
 147    EntryHeader,
 148
 149    /// <summary>
 150    /// Testing an individual entries data
 151    /// </summary>
 152    EntryData,
 153
 154    /// <summary>
 155    /// Testing an individual entry has completed.
 156    /// </summary>
 157    EntryComplete,
 158
 159    /// <summary>
 160    /// Running miscellaneous tests
 161    /// </summary>
 162    MiscellaneousTests,
 163
 164    /// <summary>
 165    /// Testing is complete
 166    /// </summary>
 167    Complete,
 168  }
 169
 170  /// <summary>
 171  /// Status returned returned by <see cref="ZipTestResultHandler"/> during testing.
 172  /// </summary>
 173  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 174  public class TestStatus
 175  {
 176    #region Constructors
 177    /// <summary>
 178    /// Initialise a new instance of <see cref="TestStatus"/>
 179    /// </summary>
 180    /// <param name="file">The <see cref="ZipFile"/> this status applies to.</param>
 181    public TestStatus(ZipFile file)
 182    {
 183      file_ = file;
 184    }
 185    #endregion
 186
 187    #region Properties
 188
 189    /// <summary>
 190    /// Get the current <see cref="TestOperation"/> in progress.
 191    /// </summary>
 192    public TestOperation Operation
 193    {
 194      get { return operation_; }
 195    }
 196
 197    /// <summary>
 198    /// Get the <see cref="ZipFile"/> this status is applicable to.
 199    /// </summary>
 200    public ZipFile File
 201    {
 202      get { return file_; }
 203    }
 204
 205    /// <summary>
 206    /// Get the current/last entry tested.
 207    /// </summary>
 208    public ZipEntry Entry
 209    {
 210      get { return entry_; }
 211    }
 212
 213    /// <summary>
 214    /// Get the number of errors detected so far.
 215    /// </summary>
 216    public int ErrorCount
 217    {
 218      get { return errorCount_; }
 219    }
 220
 221    /// <summary>
 222    /// Get the number of bytes tested so far for the current entry.
 223    /// </summary>
 224    public long BytesTested
 225    {
 226      get { return bytesTested_; }
 227    }
 228
 229    /// <summary>
 230    /// Get a value indicating wether the last entry test was valid.
 231    /// </summary>
 232    public bool EntryValid
 233    {
 234      get { return entryValid_; }
 235    }
 236    #endregion
 237
 238    #region Internal API
 239    internal void AddError()
 240    {
 241      errorCount_++;
 242      entryValid_ = false;
 243    }
 244
 245    internal void SetOperation(TestOperation operation)
 246    {
 247      operation_ = operation;
 248    }
 249
 250    internal void SetEntry(ZipEntry entry)
 251    {
 252      entry_ = entry;
 253      entryValid_ = true;
 254      bytesTested_ = 0;
 255    }
 256
 257    internal void SetBytesTested(long value)
 258    {
 259      bytesTested_ = value;
 260    }
 261    #endregion
 262
 263    #region Instance Fields
 264    ZipFile file_;
 265    ZipEntry entry_;
 266    bool entryValid_;
 267    int errorCount_;
 268    long bytesTested_;
 269    TestOperation operation_;
 270    #endregion
 271  }
 272
 273  /// <summary>
 274  /// Delegate invoked during <see cref="ZipFile.TestArchive(bool, TestStrategy, ZipTestResultHandler)">testing</see> if
 275  /// </summary>
 276  /// <remarks>If the message is non-null an error has occured.  If the message is null
 277  /// the operation as found in <see cref="TestStatus">status</see> has started.</remarks>
 278  public delegate void ZipTestResultHandler(TestStatus status, string message);
 279  #endregion
 280
 281  #region Update Definitions
 282  /// <summary>
 283  /// The possible ways of <see cref="ZipFile.CommitUpdate()">applying updates</see> to an archive.
 284  /// </summary>
 285  public enum FileUpdateMode
 286  {
 287    /// <summary>
 288    /// Perform all updates on temporary files ensuring that the original file is saved.
 289    /// </summary>
 290    Safe,
 291    /// <summary>
 292    /// Update the archive directly, which is faster but less safe.
 293    /// </summary>
 294    Direct,
 295  }
 296  #endregion
 297
 298  #region ZipFile Class
 299  /// <summary>
 300  /// This class represents a Zip archive.  You can ask for the contained
 301  /// entries, or get an input stream for a file entry.  The entry is
 302  /// automatically decompressed.
 303  ///
 304  /// You can also update the archive adding or deleting entries.
 305  ///
 306  /// This class is thread safe for input:  You can open input streams for arbitrary
 307  /// entries in different threads.
 308  /// <br/>
 309  /// <br/>Author of the original java version : Jochen Hoenicke
 310  /// </summary>
 311  /// <example>
 312  /// <code>
 313  /// using System;
 314  /// using System.Text;
 315  /// using System.Collections;
 316  /// using System.IO;
 317  ///
 318  /// using ICSharpCode.SharpZipLib.Zip;
 319  ///
 320  /// class MainClass
 321  /// {
 322  ///   static public void Main(string[] args)
 323  ///   {
 324  ///     using (ZipFile zFile = new ZipFile(args[0])) {
 325  ///       Console.WriteLine("Listing of : " + zFile.Name);
 326  ///       Console.WriteLine("");
 327  ///       Console.WriteLine("Raw Size    Size      Date     Time     Name");
 328  ///       Console.WriteLine("--------  --------  --------  ------  ---------");
 329  ///       foreach (ZipEntry e in zFile) {
 330  ///         if ( e.IsFile ) {
 331  ///           DateTime d = e.DateTime;
 332  ///           Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
 333  ///             d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
 334  ///             e.Name);
 335  ///         }
 336  ///       }
 337  ///     }
 338  ///   }
 339  /// }
 340  /// </code>
 341  /// </example>
 342  public class ZipFile : IEnumerable, IDisposable
 343  {
 344    #region KeyHandling
 345
 346    /// <summary>
 347    /// Delegate for handling keys/password setting during compresion/decompression.
 348    /// </summary>
 349    public delegate void KeysRequiredEventHandler(
 350      object sender,
 351      KeysRequiredEventArgs e
 352    );
 353
 354    /// <summary>
 355    /// Event handler for handling encryption keys.
 356    /// </summary>
 357    public KeysRequiredEventHandler KeysRequired;
 358
 359    /// <summary>
 360    /// Handles getting of encryption keys when required.
 361    /// </summary>
 362    /// <param name="fileName">The file for which encryption keys are required.</param>
 363    void OnKeysRequired(string fileName)
 364    {
 365      if (KeysRequired != null) {
 366        var krea = new KeysRequiredEventArgs(fileName, key);
 367        KeysRequired(this, krea);
 368        key = krea.Key;
 369      }
 370    }
 371
 372    /// <summary>
 373    /// Get/set the encryption key value.
 374    /// </summary>
 375    byte[] Key
 376    {
 377      get { return key; }
 378      set { key = value; }
 379    }
 380
 381#if !NETCF_1_0
 382    /// <summary>
 383    /// Password to be used for encrypting/decrypting files.
 384    /// </summary>
 385    /// <remarks>Set to null if no password is required.</remarks>
 386    public string Password
 387    {
 388      set
 389      {
 390        if ( string.IsNullOrEmpty(value)) {
 391          key = null;
 392        }
 393        else {
 394          rawPassword_ = value;
 395          key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value));
 396        }
 397      }
 398    }
 399#endif
 400
 401    /// <summary>
 402    /// Get a value indicating wether encryption keys are currently available.
 403    /// </summary>
 404    bool HaveKeys
 405    {
 406      get { return key != null; }
 407    }
 408    #endregion
 409
 410    #region Constructors
 411    /// <summary>
 412    /// Opens a Zip file with the given name for reading.
 413    /// </summary>
 414    /// <param name="name">The name of the file to open.</param>
 415    /// <exception cref="ArgumentNullException">The argument supplied is null.</exception>
 416    /// <exception cref="IOException">
 417    /// An i/o error occurs
 418    /// </exception>
 419    /// <exception cref="ZipException">
 420    /// The file doesn't contain a valid zip archive.
 421    /// </exception>
 422    public ZipFile(string name)
 423    {
 424      if ( name == null ) {
 425        throw new ArgumentNullException(nameof(name));
 426      }
 427
 428      name_ = name;
 429
 430      baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 431      isStreamOwner = true;
 432
 433      try {
 434        ReadEntries();
 435      }
 436      catch {
 437        DisposeInternal(true);
 438        throw;
 439      }
 440    }
 441
 442    /// <summary>
 443    /// Opens a Zip file reading the given <see cref="FileStream"/>.
 444    /// </summary>
 445    /// <param name="file">The <see cref="FileStream"/> to read archive data from.</param>
 446    /// <exception cref="ArgumentNullException">The supplied argument is null.</exception>
 447    /// <exception cref="IOException">
 448    /// An i/o error occurs.
 449    /// </exception>
 450    /// <exception cref="ZipException">
 451    /// The file doesn't contain a valid zip archive.
 452    /// </exception>
 453    public ZipFile(FileStream file)
 454    {
 455      if ( file == null ) {
 456        throw new ArgumentNullException(nameof(file));
 457      }
 458
 459      if ( !file.CanSeek ) {
 460        throw new ArgumentException("Stream is not seekable", nameof(file));
 461      }
 462
 463      baseStream_  = file;
 464      name_ = file.Name;
 465      isStreamOwner = true;
 466
 467      try {
 468        ReadEntries();
 469      }
 470      catch {
 471        DisposeInternal(true);
 472        throw;
 473      }
 474    }
 475
 476    /// <summary>
 477    /// Opens a Zip file reading the given <see cref="Stream"/>.
 478    /// </summary>
 479    /// <param name="stream">The <see cref="Stream"/> to read archive data from.</param>
 480    /// <exception cref="IOException">
 481    /// An i/o error occurs
 482    /// </exception>
 483    /// <exception cref="ZipException">
 484    /// The stream doesn't contain a valid zip archive.<br/>
 485    /// </exception>
 486    /// <exception cref="ArgumentException">
 487    /// The <see cref="Stream">stream</see> doesnt support seeking.
 488    /// </exception>
 489    /// <exception cref="ArgumentNullException">
 490    /// The <see cref="Stream">stream</see> argument is null.
 491    /// </exception>
 492    public ZipFile(Stream stream)
 493    {
 494      if ( stream == null ) {
 495        throw new ArgumentNullException(nameof(stream));
 496      }
 497
 498      if ( !stream.CanSeek ) {
 499        throw new ArgumentException("Stream is not seekable", nameof(stream));
 500      }
 501
 502      baseStream_  = stream;
 503      isStreamOwner = true;
 504
 505      if ( baseStream_.Length > 0 ) {
 506        try {
 507          ReadEntries();
 508        }
 509        catch {
 510          DisposeInternal(true);
 511          throw;
 512        }
 513      } else {
 514        entries_ = new ZipEntry[0];
 515        isNewArchive_ = true;
 516      }
 517    }
 518
 519    /// <summary>
 520    /// Initialises a default <see cref="ZipFile"/> instance with no entries and no file storage.
 521    /// </summary>
 522    internal ZipFile()
 523    {
 524      entries_ = new ZipEntry[0];
 525      isNewArchive_ = true;
 526    }
 527
 528    #endregion
 529
 530    #region Destructors and Closing
 531    /// <summary>
 532    /// Finalize this instance.
 533    /// </summary>
 534    ~ZipFile()
 535    {
 536      Dispose(false);
 537    }
 538
 539    /// <summary>
 540    /// Closes the ZipFile.  If the stream is <see cref="IsStreamOwner">owned</see> then this also closes the underlying
 541    /// Once closed, no further instance methods should be called.
 542    /// </summary>
 543    /// <exception cref="System.IO.IOException">
 544    /// An i/o error occurs.
 545    /// </exception>
 546    public void Close()
 547    {
 548      DisposeInternal(true);
 549      GC.SuppressFinalize(this);
 550    }
 551
 552    #endregion
 553
 554    #region Creators
 555    /// <summary>
 556    /// Create a new <see cref="ZipFile"/> whose data will be stored in a file.
 557    /// </summary>
 558    /// <param name="fileName">The name of the archive to create.</param>
 559    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 560    /// <exception cref="ArgumentNullException"><paramref name="fileName"></paramref> is null</exception>
 561    public static ZipFile Create(string fileName)
 562    {
 563      if ( fileName == null ) {
 564        throw new ArgumentNullException(nameof(fileName));
 565      }
 566
 567      FileStream fs = File.Create(fileName);
 568
 569      var result = new ZipFile();
 570      result.name_ = fileName;
 571      result.baseStream_ = fs;
 572      result.isStreamOwner = true;
 573      return result;
 574    }
 575
 576    /// <summary>
 577    /// Create a new <see cref="ZipFile"/> whose data will be stored on a stream.
 578    /// </summary>
 579    /// <param name="outStream">The stream providing data storage.</param>
 580    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 581    /// <exception cref="ArgumentNullException"><paramref name="outStream"> is null</paramref></exception>
 582    /// <exception cref="ArgumentException"><paramref name="outStream"> doesnt support writing.</paramref></exception>
 583    public static ZipFile Create(Stream outStream)
 584    {
 585      if ( outStream == null ) {
 586        throw new ArgumentNullException(nameof(outStream));
 587      }
 588
 589      if ( !outStream.CanWrite ) {
 590        throw new ArgumentException("Stream is not writeable", nameof(outStream));
 591      }
 592
 593      if ( !outStream.CanSeek ) {
 594        throw new ArgumentException("Stream is not seekable", nameof(outStream));
 595      }
 596
 597      var result = new ZipFile();
 598      result.baseStream_ = outStream;
 599      return result;
 600    }
 601
 602    #endregion
 603
 604    #region Properties
 605    /// <summary>
 606    /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance.
 607    /// If the flag is true then the stream will be closed when <see cref="Close">Close</see> is called.
 608    /// </summary>
 609    /// <remarks>
 610    /// The default value is true in all cases.
 611    /// </remarks>
 612    public bool IsStreamOwner
 613    {
 614      get { return isStreamOwner; }
 615      set { isStreamOwner = value; }
 616    }
 617
 618    /// <summary>
 619    /// Get a value indicating wether
 620    /// this archive is embedded in another file or not.
 621    /// </summary>
 622    public bool IsEmbeddedArchive
 623    {
 624      // Not strictly correct in all circumstances currently
 625      get { return offsetOfFirstEntry > 0; }
 626    }
 627
 628    /// <summary>
 629    /// Get a value indicating that this archive is a new one.
 630    /// </summary>
 631    public bool IsNewArchive
 632    {
 633      get { return isNewArchive_; }
 634    }
 635
 636    /// <summary>
 637    /// Gets the comment for the zip file.
 638    /// </summary>
 639    public string ZipFileComment
 640    {
 641      get { return comment_; }
 642    }
 643
 644    /// <summary>
 645    /// Gets the name of this zip file.
 646    /// </summary>
 647    public string Name
 648    {
 649      get { return name_; }
 650    }
 651
 652    /// <summary>
 653    /// Gets the number of entries in this zip file.
 654    /// </summary>
 655    /// <exception cref="InvalidOperationException">
 656    /// The Zip file has been closed.
 657    /// </exception>
 658    [Obsolete("Use the Count property instead")]
 659    public int Size
 660    {
 661      get
 662      {
 663        return entries_.Length;
 664      }
 665    }
 666
 667    /// <summary>
 668    /// Get the number of entries contained in this <see cref="ZipFile"/>.
 669    /// </summary>
 670    public long Count
 671    {
 672      get
 673      {
 674        return entries_.Length;
 675      }
 676    }
 677
 678    /// <summary>
 679    /// Indexer property for ZipEntries
 680    /// </summary>
 681    [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")]
 682    public ZipEntry this[int index]
 683    {
 684      get {
 685        return (ZipEntry) entries_[index].Clone();
 686      }
 687    }
 688
 689    #endregion
 690
 691    #region Input Handling
 692    /// <summary>
 693    /// Gets an enumerator for the Zip entries in this Zip file.
 694    /// </summary>
 695    /// <returns>Returns an <see cref="IEnumerator"/> for this archive.</returns>
 696    /// <exception cref="ObjectDisposedException">
 697    /// The Zip file has been closed.
 698    /// </exception>
 699    public IEnumerator GetEnumerator()
 700    {
 701      if (isDisposed_) {
 702        throw new ObjectDisposedException("ZipFile");
 703      }
 704
 705      return new ZipEntryEnumerator(entries_);
 706    }
 707
 708    /// <summary>
 709    /// Return the index of the entry with a matching name
 710    /// </summary>
 711    /// <param name="name">Entry name to find</param>
 712    /// <param name="ignoreCase">If true the comparison is case insensitive</param>
 713    /// <returns>The index position of the matching entry or -1 if not found</returns>
 714    /// <exception cref="ObjectDisposedException">
 715    /// The Zip file has been closed.
 716    /// </exception>
 717    public int FindEntry(string name, bool ignoreCase)
 718    {
 719      if (isDisposed_) {
 720        throw new ObjectDisposedException("ZipFile");
 721      }
 722
 723      // TODO: This will be slow as the next ice age for huge archives!
 724      for (int i = 0; i < entries_.Length; i++) {
 725        if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) {
 726          return i;
 727        }
 728      }
 729      return -1;
 730    }
 731
 732    /// <summary>
 733    /// Searches for a zip entry in this archive with the given name.
 734    /// String comparisons are case insensitive
 735    /// </summary>
 736    /// <param name="name">
 737    /// The name to find. May contain directory components separated by slashes ('/').
 738    /// </param>
 739    /// <returns>
 740    /// A clone of the zip entry, or null if no entry with that name exists.
 741    /// </returns>
 742    /// <exception cref="ObjectDisposedException">
 743    /// The Zip file has been closed.
 744    /// </exception>
 745    public ZipEntry GetEntry(string name)
 746    {
 747      if (isDisposed_) {
 748        throw new ObjectDisposedException("ZipFile");
 749      }
 750
 751      int index = FindEntry(name, true);
 752      return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null;
 753    }
 754
 755    /// <summary>
 756    /// Gets an input stream for reading the given zip entry data in an uncompressed form.
 757    /// Normally the <see cref="ZipEntry"/> should be an entry returned by GetEntry().
 758    /// </summary>
 759    /// <param name="entry">The <see cref="ZipEntry"/> to obtain a data <see cref="Stream"/> for</param>
 760    /// <returns>An input <see cref="Stream"/> containing data for this <see cref="ZipEntry"/></returns>
 761    /// <exception cref="ObjectDisposedException">
 762    /// The ZipFile has already been closed
 763    /// </exception>
 764    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 765    /// The compression method for the entry is unknown
 766    /// </exception>
 767    /// <exception cref="IndexOutOfRangeException">
 768    /// The entry is not found in the ZipFile
 769    /// </exception>
 770    public Stream GetInputStream(ZipEntry entry)
 771    {
 772      if ( entry == null ) {
 773        throw new ArgumentNullException(nameof(entry));
 774      }
 775
 776      if ( isDisposed_ ) {
 777        throw new ObjectDisposedException("ZipFile");
 778      }
 779
 780      long index = entry.ZipFileIndex;
 781      if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) {
 782        index = FindEntry(entry.Name, true);
 783        if (index < 0) {
 784          throw new ZipException("Entry cannot be found");
 785        }
 786      }
 787      return GetInputStream(index);
 788    }
 789
 790    /// <summary>
 791    /// Creates an input stream reading a zip entry
 792    /// </summary>
 793    /// <param name="entryIndex">The index of the entry to obtain an input stream for.</param>
 794    /// <returns>
 795    /// An input <see cref="Stream"/> containing data for this <paramref name="entryIndex"/>
 796    /// </returns>
 797    /// <exception cref="ObjectDisposedException">
 798    /// The ZipFile has already been closed
 799    /// </exception>
 800    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 801    /// The compression method for the entry is unknown
 802    /// </exception>
 803    /// <exception cref="IndexOutOfRangeException">
 804    /// The entry is not found in the ZipFile
 805    /// </exception>
 806    public Stream GetInputStream(long entryIndex)
 807    {
 808      if ( isDisposed_ ) {
 809        throw new ObjectDisposedException("ZipFile");
 810      }
 811
 812      long start = LocateEntry(entries_[entryIndex]);
 813      CompressionMethod method = entries_[entryIndex].CompressionMethod;
 814      Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize);
 815
 816      if (entries_[entryIndex].IsCrypted == true) {
 817#if NETCF_1_0
 818        throw new ZipException("decryption not supported for Compact Framework 1.0");
 819#else
 820        result = CreateAndInitDecryptionStream(result, entries_[entryIndex]);
 821        if (result == null) {
 822          throw new ZipException("Unable to decrypt this entry");
 823        }
 824#endif
 825      }
 826
 827      switch (method) {
 828        case CompressionMethod.Stored:
 829          // read as is.
 830          break;
 831
 832        case CompressionMethod.Deflated:
 833          // No need to worry about ownership and closing as underlying stream close does nothing.
 834          result = new InflaterInputStream(result, new Inflater(true));
 835          break;
 836
 837        default:
 838          throw new ZipException("Unsupported compression method " + method);
 839      }
 840
 841      return result;
 842    }
 843
 844    #endregion
 845
 846    #region Archive Testing
 847    /// <summary>
 848    /// Test an archive for integrity/validity
 849    /// </summary>
 850    /// <param name="testData">Perform low level data Crc check</param>
 851    /// <returns>true if all tests pass, false otherwise</returns>
 852    /// <remarks>Testing will terminate on the first error found.</remarks>
 853    public bool TestArchive(bool testData)
 854    {
 855      return TestArchive(testData, TestStrategy.FindFirstError, null);
 856    }
 857
 858    /// <summary>
 859    /// Test an archive for integrity/validity
 860    /// </summary>
 861    /// <param name="testData">Perform low level data Crc check</param>
 862    /// <param name="strategy">The <see cref="TestStrategy"></see> to apply.</param>
 863    /// <param name="resultHandler">The <see cref="ZipTestResultHandler"></see> handler to call during testing.</param>
 864    /// <returns>true if all tests pass, false otherwise</returns>
 865    /// <exception cref="ObjectDisposedException">The object has already been closed.</exception>
 866    public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
 867    {
 868      if (isDisposed_) {
 869        throw new ObjectDisposedException("ZipFile");
 870      }
 871
 872      var status = new TestStatus(this);
 873
 874      if ( resultHandler != null ) {
 875        resultHandler(status, null);
 876      }
 877
 878      HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header;
 879
 880      bool testing = true;
 881
 882      try {
 883        int entryIndex = 0;
 884
 885        while ( testing && (entryIndex < Count) ) {
 886          if ( resultHandler != null ) {
 887            status.SetEntry(this[entryIndex]);
 888            status.SetOperation(TestOperation.EntryHeader);
 889            resultHandler(status, null);
 890          }
 891
 892          try  {
 893            TestLocalHeader(this[entryIndex], test);
 894          }
 895          catch(ZipException ex) {
 896            status.AddError();
 897
 898            if ( resultHandler != null ) {
 899              resultHandler(status,
 900                string.Format("Exception during test - '{0}'", ex.Message));
 901            }
 902
 903            testing &= strategy != TestStrategy.FindFirstError;
 904          }
 905
 906          if ( testing && testData && this[entryIndex].IsFile ) {
 907            if ( resultHandler != null ) {
 908              status.SetOperation(TestOperation.EntryData);
 909              resultHandler(status, null);
 910            }
 911
 912                        var crc = new Crc32();
 913
 914                        using (Stream entryStream = this.GetInputStream(this[entryIndex]))
 915                        {
 916
 917                            byte[] buffer = new byte[4096];
 918                            long totalBytes = 0;
 919                            int bytesRead;
 920                            while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0)
 921                            {
 922                                crc.Update(buffer, 0, bytesRead);
 923
 924                                if (resultHandler != null)
 925                                {
 926                                    totalBytes += bytesRead;
 927                                    status.SetBytesTested(totalBytes);
 928                                    resultHandler(status, null);
 929                                }
 930                            }
 931                        }
 932
 933            if (this[entryIndex].Crc != crc.Value) {
 934              status.AddError();
 935
 936              if ( resultHandler != null ) {
 937                resultHandler(status, "CRC mismatch");
 938              }
 939
 940              testing &= strategy != TestStrategy.FindFirstError;
 941            }
 942
 943            if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) {
 944              var helper = new ZipHelperStream(baseStream_);
 945              var data = new DescriptorData();
 946              helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data);
 947              if (this[entryIndex].Crc != data.Crc) {
 948                status.AddError();
 949              }
 950
 951              if (this[entryIndex].CompressedSize != data.CompressedSize) {
 952                status.AddError();
 953              }
 954
 955              if (this[entryIndex].Size != data.Size) {
 956                status.AddError();
 957              }
 958            }
 959          }
 960
 961          if ( resultHandler != null ) {
 962            status.SetOperation(TestOperation.EntryComplete);
 963            resultHandler(status, null);
 964          }
 965
 966          entryIndex += 1;
 967        }
 968
 969        if ( resultHandler != null ) {
 970          status.SetOperation(TestOperation.MiscellaneousTests);
 971          resultHandler(status, null);
 972        }
 973
 974        // TODO: the 'Corrina Johns' test where local headers are missing from
 975        // the central directory.  They are therefore invisible to many archivers.
 976      }
 977      catch (Exception ex) {
 978        status.AddError();
 979
 980        if ( resultHandler != null ) {
 981          resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message));
 982        }
 983      }
 984
 985      if ( resultHandler != null ) {
 986        status.SetOperation(TestOperation.Complete);
 987        status.SetEntry(null);
 988        resultHandler(status, null);
 989      }
 990
 991      return (status.ErrorCount == 0);
 992    }
 993
 994    [Flags]
 995    enum HeaderTest
 996    {
 997      Extract = 0x01,     // Check that this header represents an entry whose data can be extracted
 998      Header  = 0x02,     // Check that this header contents are valid
 999    }
 1000
 1001    /// <summary>
 1002    /// Test a local header against that provided from the central directory
 1003    /// </summary>
 1004    /// <param name="entry">
 1005    /// The entry to test against
 1006    /// </param>
 1007    /// <param name="tests">The type of <see cref="HeaderTest">tests</see> to carry out.</param>
 1008    /// <returns>The offset of the entries data in the file</returns>
 1009    long TestLocalHeader(ZipEntry entry, HeaderTest tests)
 1010    {
 1011      lock(baseStream_)
 1012      {
 1013        bool testHeader = (tests & HeaderTest.Header) != 0;
 1014        bool testData = (tests & HeaderTest.Extract) != 0;
 1015
 1016        baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin);
 1017        if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) {
 1018          throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)
 1019        }
 1020
 1021        var extractVersion = ( short ) (ReadLEUshort() & 0x00ff);
 1022        var localFlags = ( short )ReadLEUshort();
 1023        var compressionMethod = ( short )ReadLEUshort();
 1024        var fileTime = ( short )ReadLEUshort();
 1025        var fileDate = ( short )ReadLEUshort();
 1026        uint crcValue = ReadLEUint();
 1027        long compressedSize = ReadLEUint();
 1028        long size = ReadLEUint();
 1029        int storedNameLength = ReadLEUshort();
 1030        int extraDataLength = ReadLEUshort();
 1031
 1032        byte[] nameData = new byte[storedNameLength];
 1033        StreamUtils.ReadFully(baseStream_, nameData);
 1034
 1035        byte[] extraData = new byte[extraDataLength];
 1036        StreamUtils.ReadFully(baseStream_, extraData);
 1037
 1038        var localExtraData = new ZipExtraData(extraData);
 1039
 1040        // Extra data / zip64 checks
 1041        if (localExtraData.Find(1))
 1042        {
 1043          // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64
 1044          // and size or compressedSize = MaxValue, due to rogue creators.
 1045
 1046          size = localExtraData.ReadLong();
 1047          compressedSize = localExtraData.ReadLong();
 1048
 1049                    if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0)
 1050                    {
 1051                        // These may be valid if patched later
 1052                        if ( (size != -1) && (size != entry.Size)) {
 1053                            throw new ZipException("Size invalid for descriptor");
 1054                        }
 1055
 1056                        if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) {
 1057                            throw new ZipException("Compressed size invalid for descriptor");
 1058                        }
 1059                    }
 1060                }
 1061        else
 1062        {
 1063          // No zip64 extra data but entry requires it.
 1064          if ((extractVersion >= ZipConstants.VersionZip64) &&
 1065            (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue)))
 1066          {
 1067            throw new ZipException("Required Zip64 extended information missing");
 1068          }
 1069        }
 1070
 1071        if ( testData ) {
 1072          if ( entry.IsFile ) {
 1073            if ( !entry.IsCompressionMethodSupported() ) {
 1074              throw new ZipException("Compression method not supported");
 1075            }
 1076
 1077            if ( (extractVersion > ZipConstants.VersionMadeBy)
 1078              || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) {
 1079              throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extract
 1080            }
 1081
 1082            if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.Enha
 1083              throw new ZipException("The library does not support the zip version required to extract this entry");
 1084            }
 1085          }
 1086        }
 1087
 1088                if (testHeader)
 1089                {
 1090                    if ((extractVersion <= 63) &&  // Ignore later versions as we dont know about them..
 1091                        (extractVersion != 10) &&
 1092                        (extractVersion != 11) &&
 1093                        (extractVersion != 20) &&
 1094                        (extractVersion != 21) &&
 1095                        (extractVersion != 25) &&
 1096                        (extractVersion != 27) &&
 1097                        (extractVersion != 45) &&
 1098                        (extractVersion != 46) &&
 1099                        (extractVersion != 50) &&
 1100                        (extractVersion != 51) &&
 1101                        (extractVersion != 52) &&
 1102                        (extractVersion != 61) &&
 1103                        (extractVersion != 62) &&
 1104                        (extractVersion != 63)
 1105                        )
 1106                    {
 1107                        throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", 
 1108                    }
 1109
 1110                    // Local entry flags dont have reserved bit set on.
 1111                    if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | General
 1112                    {
 1113                        throw new ZipException("Reserved bit flags cannot be set.");
 1114                    }
 1115
 1116                    // Encryption requires extract version >= 20
 1117                    if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20))
 1118                    {
 1119                        throw new ZipException(string.Format("Version required to extract this entry is too low for encr
 1120                    }
 1121
 1122                    // Strong encryption requires encryption flag to be set and extract version >= 50.
 1123                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1124                    {
 1125                        if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0)
 1126                        {
 1127                            throw new ZipException("Strong encryption flag set but encryption flag is not set");
 1128                        }
 1129
 1130                        if (extractVersion < 50)
 1131                        {
 1132                            throw new ZipException(string.Format("Version required to extract this entry is too low for 
 1133                        }
 1134                    }
 1135
 1136                    // Patched entries require extract version >= 27
 1137                    if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27))
 1138                    {
 1139                        throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractV
 1140                    }
 1141
 1142                    // Central header flags match local entry flags.
 1143                    if (localFlags != entry.Flags)
 1144                    {
 1145                        throw new ZipException("Central header/local header flags mismatch");
 1146                    }
 1147
 1148                    // Central header compression method matches local entry
 1149                    if (entry.CompressionMethod != (CompressionMethod)compressionMethod)
 1150                    {
 1151                        throw new ZipException("Central header/local header compression method mismatch");
 1152                    }
 1153
 1154                    if (entry.Version != extractVersion)
 1155                    {
 1156                        throw new ZipException("Extract version mismatch");
 1157                    }
 1158
 1159                    // Strong encryption and extract version match
 1160                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1161                    {
 1162                        if (extractVersion < 62)
 1163                        {
 1164                            throw new ZipException("Strong encryption flag set but version not high enough");
 1165                        }
 1166                    }
 1167
 1168                    if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0)
 1169                    {
 1170                        if ((fileTime != 0) || (fileDate != 0))
 1171                        {
 1172                            throw new ZipException("Header masked set but date/time values non-zero");
 1173                        }
 1174                    }
 1175
 1176                    if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0)
 1177                    {
 1178                        if (crcValue != (uint)entry.Crc)
 1179                        {
 1180                            throw new ZipException("Central header/local header crc mismatch");
 1181                        }
 1182                    }
 1183
 1184                    // Crc valid for empty entry.
 1185                    // This will also apply to streamed entries where size isnt known and the header cant be patched
 1186                    if ((size == 0) && (compressedSize == 0))
 1187                    {
 1188                        if (crcValue != 0)
 1189                        {
 1190                            throw new ZipException("Invalid CRC for empty entry");
 1191                        }
 1192                    }
 1193
 1194                    // TODO: make test more correct...  can't compare lengths as was done originally as this can fail fo
 1195                    // Assuming a code page at this point is not valid?  Best is to store the name length in the ZipEntr
 1196                    if (entry.Name.Length > storedNameLength)
 1197                    {
 1198                        throw new ZipException("File name length mismatch");
 1199                    }
 1200
 1201                    // Name data has already been read convert it and compare.
 1202                    string localName = ZipConstants.ConvertToStringExt(localFlags, nameData);
 1203
 1204                    // Central directory and local entry name match
 1205                    if (localName != entry.Name)
 1206                    {
 1207                        throw new ZipException("Central header and local header file name mismatch");
 1208                    }
 1209
 1210                    // Directories have zero actual size but can have compressed size
 1211                    if (entry.IsDirectory)
 1212                    {
 1213                        if (size > 0)
 1214                        {
 1215                            throw new ZipException("Directory cannot have size");
 1216                        }
 1217
 1218                        // There may be other cases where the compressed size can be greater than this?
 1219                        // If so until details are known we will be strict.
 1220                        if (entry.IsCrypted)
 1221                        {
 1222                            if (compressedSize > ZipConstants.CryptoHeaderSize + 2)
 1223                            {
 1224                                throw new ZipException("Directory compressed size invalid");
 1225                            }
 1226                        }
 1227                        else if (compressedSize > 2)
 1228                        {
 1229                            // When not compressed the directory size can validly be 2 bytes
 1230                            // if the true size wasnt known when data was originally being written.
 1231                            // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes
 1232                            throw new ZipException("Directory compressed size invalid");
 1233                        }
 1234                    }
 1235
 1236                    if (!ZipNameTransform.IsValidName(localName, true))
 1237                    {
 1238                        throw new ZipException("Name is invalid");
 1239                    }
 1240                }
 1241
 1242        // Tests that apply to both data and header.
 1243
 1244        // Size can be verified only if it is known in the local header.
 1245        // it will always be known in the central header.
 1246        if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) ||
 1247          ((size > 0) || (compressedSize > 0))) {
 1248
 1249          if (size != entry.Size) {
 1250            throw new ZipException(
 1251              string.Format("Size mismatch between central header({0}) and local header({1})",
 1252                entry.Size, size));
 1253          }
 1254
 1255          if (compressedSize != entry.CompressedSize &&
 1256            compressedSize != 0xFFFFFFFF && compressedSize != -1) {
 1257            throw new ZipException(
 1258              string.Format("Compressed size mismatch between central header({0}) and local header({1})",
 1259              entry.CompressedSize, compressedSize));
 1260          }
 1261        }
 1262
 1263        int extraLength = storedNameLength + extraDataLength;
 1264        return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength;
 1265      }
 1266    }
 1267
 1268    #endregion
 1269
 1270    #region Updating
 1271
 1272    const int DefaultBufferSize = 4096;
 1273
 1274    /// <summary>
 1275    /// The kind of update to apply.
 1276    /// </summary>
 1277    enum UpdateCommand
 1278    {
 1279      Copy,       // Copy original file contents.
 1280      Modify,     // Change encryption, compression, attributes, name, time etc, of an existing file.
 1281      Add,        // Add a new file to the archive.
 1282    }
 1283
 1284    #region Properties
 1285    /// <summary>
 1286    /// Get / set the <see cref="INameTransform"/> to apply to names when updating.
 1287    /// </summary>
 1288    public INameTransform NameTransform
 1289    {
 1290      get {
 1291        return updateEntryFactory_.NameTransform;
 1292      }
 1293
 1294      set {
 1295        updateEntryFactory_.NameTransform = value;
 1296      }
 1297    }
 1298
 1299    /// <summary>
 1300    /// Get/set the <see cref="IEntryFactory"/> used to generate <see cref="ZipEntry"/> values
 1301    /// during updates.
 1302    /// </summary>
 1303    public IEntryFactory EntryFactory
 1304    {
 1305      get {
 1306        return updateEntryFactory_;
 1307      }
 1308
 1309      set {
 1310        if (value == null) {
 1311          updateEntryFactory_ = new ZipEntryFactory();
 1312        }
 1313        else {
 1314          updateEntryFactory_ = value;
 1315        }
 1316      }
 1317    }
 1318
 1319    /// <summary>
 1320    /// Get /set the buffer size to be used when updating this zip file.
 1321    /// </summary>
 1322    public int BufferSize
 1323    {
 1324      get { return bufferSize_; }
 1325      set {
 1326        if ( value < 1024 ) {
 1327#if NETCF_1_0
 1328          throw new ArgumentOutOfRangeException("value");
 1329#else
 1330          throw new ArgumentOutOfRangeException(nameof(value), "cannot be below 1024");
 1331#endif
 1332        }
 1333
 1334        if ( bufferSize_ != value ) {
 1335          bufferSize_ = value;
 1336          copyBuffer_ = null;
 1337        }
 1338      }
 1339    }
 1340
 1341    /// <summary>
 1342    /// Get a value indicating an update has <see cref="BeginUpdate()">been started</see>.
 1343    /// </summary>
 1344    public bool IsUpdating
 1345    {
 1346      get { return updates_ != null; }
 1347    }
 1348
 1349    /// <summary>
 1350    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 1351    /// </summary>
 1352    public UseZip64 UseZip64
 1353    {
 1354      get { return useZip64_; }
 1355      set { useZip64_ = value; }
 1356    }
 1357
 1358    #endregion
 1359
 1360    #region Immediate updating
 1361//    TBD: Direct form of updating
 1362//
 1363//    public void Update(IEntryMatcher deleteMatcher)
 1364//    {
 1365//    }
 1366//
 1367//    public void Update(IScanner addScanner)
 1368//    {
 1369//    }
 1370    #endregion
 1371
 1372    #region Deferred Updating
 1373    /// <summary>
 1374    /// Begin updating this <see cref="ZipFile"/> archive.
 1375    /// </summary>
 1376    /// <param name="archiveStorage">The <see cref="IArchiveStorage">archive storage</see> for use during the update.</p
 1377    /// <param name="dataSource">The <see cref="IDynamicDataSource">data source</see> to utilise during updating.</param
 1378    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1379    /// <exception cref="ArgumentNullException">One of the arguments provided is null</exception>
 1380    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1381    public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
 1382    {
 1383      if ( archiveStorage == null ) {
 1384        throw new ArgumentNullException(nameof(archiveStorage));
 1385      }
 1386
 1387      if ( dataSource == null ) {
 1388        throw new ArgumentNullException(nameof(dataSource));
 1389      }
 1390
 1391      if ( isDisposed_ ) {
 1392        throw new ObjectDisposedException("ZipFile");
 1393      }
 1394
 1395      if ( IsEmbeddedArchive ) {
 1396        throw new ZipException ("Cannot update embedded/SFX archives");
 1397      }
 1398
 1399      archiveStorage_ = archiveStorage;
 1400      updateDataSource_ = dataSource;
 1401
 1402      // NOTE: the baseStream_ may not currently support writing or seeking.
 1403
 1404      updateIndex_ = new Hashtable();
 1405
 1406      updates_ = new ArrayList(entries_.Length);
 1407      foreach(ZipEntry entry in entries_) {
 1408        int index = updates_.Add(new ZipUpdate(entry));
 1409        updateIndex_.Add(entry.Name, index);
 1410      }
 1411
 1412      // We must sort by offset before using offset's calculated sizes
 1413      updates_.Sort(new UpdateComparer());
 1414
 1415      int idx = 0;
 1416      foreach (ZipUpdate update in updates_) {
 1417        //If last entry, there is no next entry offset to use
 1418        if (idx == updates_.Count - 1)
 1419          break;
 1420
 1421        update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset;
 1422        idx++;
 1423      }
 1424      updateCount_ = updates_.Count;
 1425
 1426      contentsEdited_ = false;
 1427      commentEdited_ = false;
 1428      newComment_ = null;
 1429    }
 1430
 1431    /// <summary>
 1432    /// Begin updating to this <see cref="ZipFile"/> archive.
 1433    /// </summary>
 1434    /// <param name="archiveStorage">The storage to use during the update.</param>
 1435    public void BeginUpdate(IArchiveStorage archiveStorage)
 1436    {
 1437      BeginUpdate(archiveStorage, new DynamicDiskDataSource());
 1438    }
 1439
 1440    /// <summary>
 1441    /// Begin updating this <see cref="ZipFile"/> archive.
 1442    /// </summary>
 1443    /// <seealso cref="BeginUpdate(IArchiveStorage)"/>
 1444    /// <seealso cref="CommitUpdate"></seealso>
 1445    /// <seealso cref="AbortUpdate"></seealso>
 1446    public void BeginUpdate()
 1447    {
 1448      if ( Name == null ) {
 1449        BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource());
 1450      }
 1451      else {
 1452        BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource());
 1453      }
 1454    }
 1455
 1456    /// <summary>
 1457    /// Commit current updates, updating this archive.
 1458    /// </summary>
 1459    /// <seealso cref="BeginUpdate()"></seealso>
 1460    /// <seealso cref="AbortUpdate"></seealso>
 1461    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1462    public void CommitUpdate()
 1463    {
 1464      if ( isDisposed_ ) {
 1465        throw new ObjectDisposedException("ZipFile");
 1466      }
 1467
 1468      CheckUpdating();
 1469
 1470      try {
 1471        updateIndex_.Clear();
 1472        updateIndex_=null;
 1473
 1474        if( contentsEdited_ ) {
 1475          RunUpdates();
 1476        }
 1477        else if( commentEdited_ ) {
 1478          UpdateCommentOnly();
 1479        }
 1480        else {
 1481          // Create an empty archive if none existed originally.
 1482          if( entries_.Length==0 ) {
 1483            byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_);
 1484            using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) {
 1485              zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment);
 1486            }
 1487          }
 1488        }
 1489
 1490      }
 1491      finally {
 1492        PostUpdateCleanup();
 1493      }
 1494    }
 1495
 1496    /// <summary>
 1497    /// Abort updating leaving the archive unchanged.
 1498    /// </summary>
 1499    /// <seealso cref="BeginUpdate()"></seealso>
 1500    /// <seealso cref="CommitUpdate"></seealso>
 1501    public void AbortUpdate()
 1502    {
 1503      PostUpdateCleanup();
 1504    }
 1505
 1506    /// <summary>
 1507    /// Set the file comment to be recorded when the current update is <see cref="CommitUpdate">commited</see>.
 1508    /// </summary>
 1509    /// <param name="comment">The comment to record.</param>
 1510    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1511    public void SetComment(string comment)
 1512    {
 1513      if ( isDisposed_ ) {
 1514        throw new ObjectDisposedException("ZipFile");
 1515      }
 1516
 1517      CheckUpdating();
 1518
 1519      newComment_ = new ZipString(comment);
 1520
 1521      if ( newComment_.RawLength  > 0xffff ) {
 1522        newComment_ = null;
 1523        throw new ZipException("Comment length exceeds maximum - 65535");
 1524      }
 1525
 1526      // We dont take account of the original and current comment appearing to be the same
 1527      // as encoding may be different.
 1528      commentEdited_ = true;
 1529    }
 1530
 1531    #endregion
 1532
 1533    #region Adding Entries
 1534
 1535    void AddUpdate(ZipUpdate update)
 1536    {
 1537      contentsEdited_ = true;
 1538
 1539      int index = FindExistingUpdate(update.Entry.Name);
 1540
 1541      if (index >= 0) {
 1542        if ( updates_[index] == null ) {
 1543          updateCount_ += 1;
 1544        }
 1545
 1546        // Direct replacement is faster than delete and add.
 1547        updates_[index] = update;
 1548      }
 1549      else {
 1550        index = updates_.Add(update);
 1551        updateCount_ += 1;
 1552        updateIndex_.Add(update.Entry.Name, index);
 1553      }
 1554    }
 1555
 1556    /// <summary>
 1557    /// Add a new entry to the archive.
 1558    /// </summary>
 1559    /// <param name="fileName">The name of the file to add.</param>
 1560    /// <param name="compressionMethod">The compression method to use.</param>
 1561    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comment for this entry.</param>
 1562    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1563    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1564    /// <exception cref="ArgumentOutOfRangeException">Compression method is not supported.</exception>
 1565    public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText )
 1566    {
 1567      if (fileName == null) {
 1568        throw new ArgumentNullException(nameof(fileName));
 1569      }
 1570
 1571      if ( isDisposed_ ) {
 1572        throw new ObjectDisposedException("ZipFile");
 1573      }
 1574
 1575      if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) {
 1576        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1577      }
 1578
 1579      CheckUpdating();
 1580      contentsEdited_ = true;
 1581
 1582      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1583      entry.IsUnicodeText = useUnicodeText;
 1584      entry.CompressionMethod = compressionMethod;
 1585
 1586      AddUpdate(new ZipUpdate(fileName, entry));
 1587    }
 1588
 1589    /// <summary>
 1590    /// Add a new entry to the archive.
 1591    /// </summary>
 1592    /// <param name="fileName">The name of the file to add.</param>
 1593    /// <param name="compressionMethod">The compression method to use.</param>
 1594    /// <exception cref="ArgumentNullException">ZipFile has been closed.</exception>
 1595    /// <exception cref="ArgumentOutOfRangeException">The compression method is not supported.</exception>
 1596    public void Add(string fileName, CompressionMethod compressionMethod)
 1597    {
 1598      if ( fileName == null ) {
 1599        throw new ArgumentNullException(nameof(fileName));
 1600      }
 1601
 1602      if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) {
 1603        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1604      }
 1605
 1606      CheckUpdating();
 1607      contentsEdited_ = true;
 1608
 1609      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1610      entry.CompressionMethod = compressionMethod;
 1611      AddUpdate(new ZipUpdate(fileName, entry));
 1612    }
 1613
 1614    /// <summary>
 1615    /// Add a file to the archive.
 1616    /// </summary>
 1617    /// <param name="fileName">The name of the file to add.</param>
 1618    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1619    public void Add(string fileName)
 1620    {
 1621      if ( fileName == null ) {
 1622        throw new ArgumentNullException(nameof(fileName));
 1623      }
 1624
 1625      CheckUpdating();
 1626      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName)));
 1627    }
 1628
 1629    /// <summary>
 1630    /// Add a file to the archive.
 1631    /// </summary>
 1632    /// <param name="fileName">The name of the file to add.</param>
 1633    /// <param name="entryName">The name to use for the <see cref="ZipEntry"/> on the Zip file created.</param>
 1634    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1635    public void Add(string fileName, string entryName)
 1636    {
 1637      if (fileName == null) {
 1638        throw new ArgumentNullException(nameof(fileName));
 1639      }
 1640
 1641      if ( entryName == null ) {
 1642        throw new ArgumentNullException(nameof(entryName));
 1643      }
 1644
 1645      CheckUpdating();
 1646      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true)));
 1647    }
 1648
 1649
 1650    /// <summary>
 1651    /// Add a file entry with data.
 1652    /// </summary>
 1653    /// <param name="dataSource">The source of the data for this entry.</param>
 1654    /// <param name="entryName">The name to give to the entry.</param>
 1655    public void Add(IStaticDataSource dataSource, string entryName)
 1656    {
 1657      if ( dataSource == null ) {
 1658        throw new ArgumentNullException(nameof(dataSource));
 1659      }
 1660
 1661      if ( entryName == null ) {
 1662        throw new ArgumentNullException(nameof(entryName));
 1663      }
 1664
 1665      CheckUpdating();
 1666      AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false)));
 1667    }
 1668
 1669    /// <summary>
 1670    /// Add a file entry with data.
 1671    /// </summary>
 1672    /// <param name="dataSource">The source of the data for this entry.</param>
 1673    /// <param name="entryName">The name to give to the entry.</param>
 1674    /// <param name="compressionMethod">The compression method to use.</param>
 1675    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 1676    {
 1677      if ( dataSource == null ) {
 1678        throw new ArgumentNullException(nameof(dataSource));
 1679      }
 1680
 1681      if ( entryName == null ) {
 1682        throw new ArgumentNullException(nameof(entryName));
 1683      }
 1684
 1685      CheckUpdating();
 1686
 1687      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1688      entry.CompressionMethod = compressionMethod;
 1689
 1690      AddUpdate(new ZipUpdate(dataSource, entry));
 1691    }
 1692
 1693    /// <summary>
 1694    /// Add a file entry with data.
 1695    /// </summary>
 1696    /// <param name="dataSource">The source of the data for this entry.</param>
 1697    /// <param name="entryName">The name to give to the entry.</param>
 1698    /// <param name="compressionMethod">The compression method to use.</param>
 1699    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comments for this entry.</param>
 1700    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicode
 1701    {
 1702      if (dataSource == null) {
 1703        throw new ArgumentNullException(nameof(dataSource));
 1704      }
 1705
 1706      if ( entryName == null ) {
 1707        throw new ArgumentNullException(nameof(entryName));
 1708      }
 1709
 1710      CheckUpdating();
 1711
 1712      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1713      entry.IsUnicodeText = useUnicodeText;
 1714      entry.CompressionMethod = compressionMethod;
 1715
 1716      AddUpdate(new ZipUpdate(dataSource, entry));
 1717    }
 1718
 1719    /// <summary>
 1720    /// Add a <see cref="ZipEntry"/> that contains no data.
 1721    /// </summary>
 1722    /// <param name="entry">The entry to add.</param>
 1723    /// <remarks>This can be used to add directories, volume labels, or empty file entries.</remarks>
 1724    public void Add(ZipEntry entry)
 1725    {
 1726      if ( entry == null ) {
 1727        throw new ArgumentNullException(nameof(entry));
 1728      }
 1729
 1730      CheckUpdating();
 1731
 1732      if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) {
 1733        throw new ZipException("Entry cannot have any data");
 1734      }
 1735
 1736      AddUpdate(new ZipUpdate(UpdateCommand.Add, entry));
 1737    }
 1738
 1739    /// <summary>
 1740    /// Add a directory entry to the archive.
 1741    /// </summary>
 1742    /// <param name="directoryName">The directory to add.</param>
 1743    public void AddDirectory(string directoryName)
 1744    {
 1745      if ( directoryName == null ) {
 1746        throw new ArgumentNullException(nameof(directoryName));
 1747      }
 1748
 1749      CheckUpdating();
 1750
 1751      ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName);
 1752      AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry));
 1753    }
 1754
 1755    #endregion
 1756
 1757    #region Modifying Entries
 1758/* Modify not yet ready for public consumption.
 1759   Direct modification of an entry should not overwrite original data before its read.
 1760   Safe mode is trivial in this sense.
 1761    public void Modify(ZipEntry original, ZipEntry updated)
 1762    {
 1763      if ( original == null ) {
 1764        throw new ArgumentNullException("original");
 1765      }
 1766
 1767      if ( updated == null ) {
 1768        throw new ArgumentNullException("updated");
 1769      }
 1770
 1771      CheckUpdating();
 1772      contentsEdited_ = true;
 1773      updates_.Add(new ZipUpdate(original, updated));
 1774    }
 1775*/
 1776    #endregion
 1777
 1778    #region Deleting Entries
 1779    /// <summary>
 1780    /// Delete an entry by name
 1781    /// </summary>
 1782    /// <param name="fileName">The filename to delete</param>
 1783    /// <returns>True if the entry was found and deleted; false otherwise.</returns>
 1784    public bool Delete(string fileName)
 1785    {
 1786      if ( fileName == null ) {
 1787        throw new ArgumentNullException(nameof(fileName));
 1788      }
 1789
 1790      CheckUpdating();
 1791
 1792      bool result = false;
 1793      int index = FindExistingUpdate(fileName);
 1794      if ( (index >= 0) && (updates_[index] != null) ) {
 1795        result = true;
 1796        contentsEdited_ = true;
 1797        updates_[index] = null;
 1798        updateCount_ -= 1;
 1799      }
 1800      else {
 1801        throw new ZipException("Cannot find entry to delete");
 1802      }
 1803      return result;
 1804    }
 1805
 1806    /// <summary>
 1807    /// Delete a <see cref="ZipEntry"/> from the archive.
 1808    /// </summary>
 1809    /// <param name="entry">The entry to delete.</param>
 1810    public void Delete(ZipEntry entry)
 1811    {
 1812      if ( entry == null ) {
 1813        throw new ArgumentNullException(nameof(entry));
 1814      }
 1815
 1816      CheckUpdating();
 1817
 1818      int index = FindExistingUpdate(entry);
 1819      if ( index >= 0 ) {
 1820        contentsEdited_ = true;
 1821        updates_[index] = null;
 1822        updateCount_ -= 1;
 1823      }
 1824      else {
 1825        throw new ZipException("Cannot find entry to delete");
 1826      }
 1827    }
 1828
 1829    #endregion
 1830
 1831    #region Update Support
 1832
 1833    #region Writing Values/Headers
 1834    void WriteLEShort(int value)
 1835    {
 1836      baseStream_.WriteByte(( byte )(value & 0xff));
 1837      baseStream_.WriteByte(( byte )((value >> 8) & 0xff));
 1838    }
 1839
 1840    /// <summary>
 1841    /// Write an unsigned short in little endian byte order.
 1842    /// </summary>
 1843    void WriteLEUshort(ushort value)
 1844    {
 1845      baseStream_.WriteByte(( byte )(value & 0xff));
 1846      baseStream_.WriteByte(( byte )(value >> 8));
 1847    }
 1848
 1849    /// <summary>
 1850    /// Write an int in little endian byte order.
 1851    /// </summary>
 1852    void WriteLEInt(int value)
 1853    {
 1854      WriteLEShort(value & 0xffff);
 1855      WriteLEShort(value >> 16);
 1856    }
 1857
 1858    /// <summary>
 1859    /// Write an unsigned int in little endian byte order.
 1860    /// </summary>
 1861    void WriteLEUint(uint value)
 1862    {
 1863      WriteLEUshort((ushort)(value & 0xffff));
 1864      WriteLEUshort((ushort)(value >> 16));
 1865    }
 1866
 1867    /// <summary>
 1868    /// Write a long in little endian byte order.
 1869    /// </summary>
 1870    void WriteLeLong(long value)
 1871    {
 1872      WriteLEInt(( int )(value & 0xffffffff));
 1873      WriteLEInt(( int )(value >> 32));
 1874    }
 1875
 1876    void WriteLEUlong(ulong value)
 1877    {
 1878      WriteLEUint(( uint )(value & 0xffffffff));
 1879      WriteLEUint(( uint )(value >> 32));
 1880    }
 1881
 1882    void WriteLocalEntryHeader(ZipUpdate update)
 1883    {
 1884      ZipEntry entry = update.OutEntry;
 1885
 1886      // TODO: Local offset will require adjusting for multi-disk zip files.
 1887      entry.Offset = baseStream_.Position;
 1888
 1889      // TODO: Need to clear any entry flags that dont make sense or throw an exception here.
 1890      if (update.Command != UpdateCommand.Copy) {
 1891        if (entry.CompressionMethod == CompressionMethod.Deflated) {
 1892          if (entry.Size == 0) {
 1893            // No need to compress - no data.
 1894            entry.CompressedSize = entry.Size;
 1895            entry.Crc = 0;
 1896            entry.CompressionMethod = CompressionMethod.Stored;
 1897          }
 1898        }
 1899        else if (entry.CompressionMethod == CompressionMethod.Stored) {
 1900          entry.Flags &= ~(int)GeneralBitFlags.Descriptor;
 1901        }
 1902
 1903        if (HaveKeys) {
 1904          entry.IsCrypted = true;
 1905          if (entry.Crc < 0) {
 1906            entry.Flags |= (int)GeneralBitFlags.Descriptor;
 1907          }
 1908        }
 1909        else {
 1910          entry.IsCrypted = false;
 1911        }
 1912
 1913        switch (useZip64_) {
 1914          case UseZip64.Dynamic:
 1915            if (entry.Size < 0) {
 1916              entry.ForceZip64();
 1917            }
 1918            break;
 1919
 1920          case UseZip64.On:
 1921            entry.ForceZip64();
 1922            break;
 1923
 1924          case UseZip64.Off:
 1925            // Do nothing.  The entry itself may be using Zip64 independantly.
 1926            break;
 1927        }
 1928      }
 1929
 1930      // Write the local file header
 1931      WriteLEInt(ZipConstants.LocalHeaderSignature);
 1932
 1933      WriteLEShort(entry.Version);
 1934      WriteLEShort(entry.Flags);
 1935
 1936      WriteLEShort((byte)entry.CompressionMethod);
 1937      WriteLEInt(( int )entry.DosTime);
 1938
 1939      if ( !entry.HasCrc ) {
 1940        // Note patch address for updating CRC later.
 1941        update.CrcPatchOffset = baseStream_.Position;
 1942        WriteLEInt(( int )0);
 1943      }
 1944      else {
 1945        WriteLEInt(unchecked(( int )entry.Crc));
 1946      }
 1947
 1948      if (entry.LocalHeaderRequiresZip64) {
 1949        WriteLEInt(-1);
 1950        WriteLEInt(-1);
 1951      }
 1952      else {
 1953        if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) {
 1954          update.SizePatchOffset = baseStream_.Position;
 1955        }
 1956
 1957        WriteLEInt(( int )entry.CompressedSize);
 1958        WriteLEInt(( int )entry.Size);
 1959      }
 1960
 1961      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 1962
 1963      if ( name.Length > 0xFFFF ) {
 1964        throw new ZipException("Entry name too long.");
 1965      }
 1966
 1967      var ed = new ZipExtraData(entry.ExtraData);
 1968
 1969      if ( entry.LocalHeaderRequiresZip64 ) {
 1970        ed.StartNewEntry();
 1971
 1972        // Local entry header always includes size and compressed size.
 1973        // NOTE the order of these fields is reversed when compared to the normal headers!
 1974        ed.AddLeLong(entry.Size);
 1975        ed.AddLeLong(entry.CompressedSize);
 1976        ed.AddNewEntry(1);
 1977      }
 1978      else {
 1979        ed.Delete(1);
 1980      }
 1981
 1982      entry.ExtraData = ed.GetEntryData();
 1983
 1984      WriteLEShort(name.Length);
 1985      WriteLEShort(entry.ExtraData.Length);
 1986
 1987      if ( name.Length > 0 ) {
 1988        baseStream_.Write(name, 0, name.Length);
 1989      }
 1990
 1991      if ( entry.LocalHeaderRequiresZip64 ) {
 1992        if ( !ed.Find(1) ) {
 1993          throw new ZipException("Internal error cannot find extra data");
 1994        }
 1995
 1996        update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex;
 1997      }
 1998
 1999      if ( entry.ExtraData.Length > 0 ) {
 2000        baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length);
 2001      }
 2002    }
 2003
 2004    int WriteCentralDirectoryHeader(ZipEntry entry)
 2005    {
 2006      if ( entry.CompressedSize < 0 ) {
 2007        throw new ZipException("Attempt to write central directory entry with unknown csize");
 2008      }
 2009
 2010      if ( entry.Size < 0 ) {
 2011        throw new ZipException("Attempt to write central directory entry with unknown size");
 2012      }
 2013
 2014      if ( entry.Crc < 0 ) {
 2015        throw new ZipException("Attempt to write central directory entry with unknown crc");
 2016      }
 2017
 2018      // Write the central file header
 2019      WriteLEInt(ZipConstants.CentralHeaderSignature);
 2020
 2021      // Version made by
 2022      WriteLEShort(ZipConstants.VersionMadeBy);
 2023
 2024      // Version required to extract
 2025      WriteLEShort(entry.Version);
 2026
 2027      WriteLEShort(entry.Flags);
 2028
 2029      unchecked {
 2030        WriteLEShort((byte)entry.CompressionMethod);
 2031        WriteLEInt((int)entry.DosTime);
 2032        WriteLEInt((int)entry.Crc);
 2033      }
 2034
 2035      if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) {
 2036        WriteLEInt(-1);
 2037      }
 2038      else {
 2039        WriteLEInt((int)(entry.CompressedSize & 0xffffffff));
 2040      }
 2041
 2042      if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) {
 2043        WriteLEInt(-1);
 2044      }
 2045      else {
 2046        WriteLEInt((int)entry.Size);
 2047      }
 2048
 2049      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 2050
 2051      if ( name.Length > 0xFFFF ) {
 2052        throw new ZipException("Entry name is too long.");
 2053      }
 2054
 2055      WriteLEShort(name.Length);
 2056
 2057      // Central header extra data is different to local header version so regenerate.
 2058      var ed = new ZipExtraData(entry.ExtraData);
 2059
 2060      if ( entry.CentralHeaderRequiresZip64 ) {
 2061        ed.StartNewEntry();
 2062
 2063        if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2064        {
 2065          ed.AddLeLong(entry.Size);
 2066        }
 2067
 2068        if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2069        {
 2070          ed.AddLeLong(entry.CompressedSize);
 2071        }
 2072
 2073        if ( entry.Offset >= 0xffffffff ) {
 2074          ed.AddLeLong(entry.Offset);
 2075        }
 2076
 2077        // Number of disk on which this file starts isnt supported and is never written here.
 2078        ed.AddNewEntry(1);
 2079      }
 2080      else {
 2081        // Should have already be done when local header was added.
 2082        ed.Delete(1);
 2083      }
 2084
 2085      byte[] centralExtraData = ed.GetEntryData();
 2086
 2087      WriteLEShort(centralExtraData.Length);
 2088      WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0);
 2089
 2090      WriteLEShort(0);  // disk number
 2091      WriteLEShort(0);  // internal file attributes
 2092
 2093      // External file attributes...
 2094      if ( entry.ExternalFileAttributes != -1 ) {
 2095        WriteLEInt(entry.ExternalFileAttributes);
 2096      }
 2097      else {
 2098        if ( entry.IsDirectory ) {
 2099          WriteLEUint(16);
 2100        }
 2101        else {
 2102          WriteLEUint(0);
 2103        }
 2104      }
 2105
 2106      if ( entry.Offset >= 0xffffffff ) {
 2107        WriteLEUint(0xffffffff);
 2108      }
 2109      else {
 2110        WriteLEUint((uint)(int)entry.Offset);
 2111      }
 2112
 2113      if ( name.Length > 0 ) {
 2114        baseStream_.Write(name, 0, name.Length);
 2115      }
 2116
 2117      if ( centralExtraData.Length > 0 ) {
 2118        baseStream_.Write(centralExtraData, 0, centralExtraData.Length);
 2119      }
 2120
 2121      byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0];
 2122
 2123      if ( rawComment.Length > 0 ) {
 2124        baseStream_.Write(rawComment, 0, rawComment.Length);
 2125      }
 2126
 2127      return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length;
 2128    }
 2129    #endregion
 2130
 2131    void PostUpdateCleanup()
 2132    {
 2133            updateDataSource_ = null;
 2134            updates_ = null;
 2135            updateIndex_ = null;
 2136
 2137            if (archiveStorage_ != null)
 2138            {
 2139        archiveStorage_.Dispose();
 2140        archiveStorage_=null;
 2141      }
 2142    }
 2143
 2144    string GetTransformedFileName(string name)
 2145    {
 2146            INameTransform transform = NameTransform;
 2147      return (transform != null) ?
 2148        transform.TransformFile(name) :
 2149        name;
 2150    }
 2151
 2152    string GetTransformedDirectoryName(string name)
 2153    {
 2154            INameTransform transform = NameTransform;
 2155            return (transform != null) ?
 2156        transform.TransformDirectory(name) :
 2157        name;
 2158    }
 2159
 2160    /// <summary>
 2161    /// Get a raw memory buffer.
 2162    /// </summary>
 2163    /// <returns>Returns a raw memory buffer.</returns>
 2164    byte[] GetBuffer()
 2165    {
 2166      if ( copyBuffer_ == null ) {
 2167        copyBuffer_ = new byte[bufferSize_];
 2168      }
 2169      return copyBuffer_;
 2170    }
 2171
 2172    void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
 2173    {
 2174      int bytesToCopy = GetDescriptorSize(update);
 2175
 2176      if ( bytesToCopy > 0 ) {
 2177        byte[] buffer = GetBuffer();
 2178
 2179        while ( bytesToCopy > 0 ) {
 2180          int readSize = Math.Min(buffer.Length, bytesToCopy);
 2181
 2182          int bytesRead = source.Read(buffer, 0, readSize);
 2183          if ( bytesRead > 0 ) {
 2184            dest.Write(buffer, 0, bytesRead);
 2185            bytesToCopy -= bytesRead;
 2186          }
 2187          else {
 2188            throw new ZipException("Unxpected end of stream");
 2189          }
 2190        }
 2191      }
 2192    }
 2193
 2194    void CopyBytes(ZipUpdate update, Stream destination, Stream source,
 2195      long bytesToCopy, bool updateCrc)
 2196    {
 2197      if ( destination == source ) {
 2198        throw new InvalidOperationException("Destination and source are the same");
 2199      }
 2200
 2201      // NOTE: Compressed size is updated elsewhere.
 2202      var crc = new Crc32();
 2203      byte[] buffer = GetBuffer();
 2204
 2205      long targetBytes = bytesToCopy;
 2206      long totalBytesRead = 0;
 2207
 2208      int bytesRead;
 2209      do {
 2210        int readSize = buffer.Length;
 2211
 2212        if ( bytesToCopy < readSize ) {
 2213          readSize = (int)bytesToCopy;
 2214        }
 2215
 2216        bytesRead = source.Read(buffer, 0, readSize);
 2217        if ( bytesRead > 0 ) {
 2218          if ( updateCrc ) {
 2219            crc.Update(buffer, 0, bytesRead);
 2220          }
 2221          destination.Write(buffer, 0, bytesRead);
 2222          bytesToCopy -= bytesRead;
 2223          totalBytesRead += bytesRead;
 2224        }
 2225      }
 2226      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2227
 2228      if ( totalBytesRead != targetBytes ) {
 2229        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2230      }
 2231
 2232      if ( updateCrc ) {
 2233        update.OutEntry.Crc = crc.Value;
 2234      }
 2235    }
 2236
 2237    /// <summary>
 2238    /// Get the size of the source descriptor for a <see cref="ZipUpdate"/>.
 2239    /// </summary>
 2240    /// <param name="update">The update to get the size for.</param>
 2241    /// <returns>The descriptor size, zero if there isnt one.</returns>
 2242    int GetDescriptorSize(ZipUpdate update)
 2243    {
 2244      int result = 0;
 2245      if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) {
 2246        result = ZipConstants.DataDescriptorSize - 4;
 2247        if ( update.Entry.LocalHeaderRequiresZip64 ) {
 2248          result = ZipConstants.Zip64DataDescriptorSize - 4;
 2249        }
 2250      }
 2251      return result;
 2252    }
 2253
 2254    void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition)
 2255    {
 2256      int bytesToCopy = GetDescriptorSize(update);
 2257
 2258      while ( bytesToCopy > 0 ) {
 2259        var readSize = (int)bytesToCopy;
 2260        byte[] buffer = GetBuffer();
 2261
 2262        stream.Position = sourcePosition;
 2263        int bytesRead = stream.Read(buffer, 0, readSize);
 2264        if ( bytesRead > 0 ) {
 2265          stream.Position = destinationPosition;
 2266          stream.Write(buffer, 0, bytesRead);
 2267          bytesToCopy -= bytesRead;
 2268          destinationPosition += bytesRead;
 2269          sourcePosition += bytesRead;
 2270        }
 2271        else {
 2272          throw new ZipException("Unxpected end of stream");
 2273        }
 2274      }
 2275    }
 2276
 2277    void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sou
 2278    {
 2279      long bytesToCopy = update.Entry.CompressedSize;
 2280
 2281      // NOTE: Compressed size is updated elsewhere.
 2282      var crc = new Crc32();
 2283      byte[] buffer = GetBuffer();
 2284
 2285      long targetBytes = bytesToCopy;
 2286      long totalBytesRead = 0;
 2287
 2288      int bytesRead;
 2289      do
 2290      {
 2291        int readSize = buffer.Length;
 2292
 2293        if ( bytesToCopy < readSize ) {
 2294          readSize = (int)bytesToCopy;
 2295        }
 2296
 2297        stream.Position = sourcePosition;
 2298        bytesRead = stream.Read(buffer, 0, readSize);
 2299        if ( bytesRead > 0 ) {
 2300          if ( updateCrc ) {
 2301            crc.Update(buffer, 0, bytesRead);
 2302          }
 2303          stream.Position = destinationPosition;
 2304          stream.Write(buffer, 0, bytesRead);
 2305
 2306          destinationPosition += bytesRead;
 2307          sourcePosition += bytesRead;
 2308          bytesToCopy -= bytesRead;
 2309          totalBytesRead += bytesRead;
 2310        }
 2311      }
 2312      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2313
 2314      if ( totalBytesRead != targetBytes ) {
 2315        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2316      }
 2317
 2318      if ( updateCrc ) {
 2319        update.OutEntry.Crc = crc.Value;
 2320      }
 2321    }
 2322
 2323    int FindExistingUpdate(ZipEntry entry)
 2324    {
 2325      int result = -1;
 2326      string convertedName = GetTransformedFileName(entry.Name);
 2327
 2328      if (updateIndex_.ContainsKey(convertedName)) {
 2329        result = (int)updateIndex_[convertedName];
 2330      }
 2331/*
 2332      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2333      // for CF?
 2334      for (int index = 0; index < updates_.Count; ++index)
 2335      {
 2336        ZipUpdate zu = ( ZipUpdate )updates_[index];
 2337        if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) &&
 2338          (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) {
 2339          result = index;
 2340          break;
 2341        }
 2342      }
 2343 */
 2344      return result;
 2345    }
 2346
 2347    int FindExistingUpdate(string fileName)
 2348    {
 2349      int result = -1;
 2350
 2351      string convertedName = GetTransformedFileName(fileName);
 2352
 2353      if (updateIndex_.ContainsKey(convertedName)) {
 2354        result = (int)updateIndex_[convertedName];
 2355      }
 2356
 2357/*
 2358      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2359      // for CF?
 2360      for ( int index = 0; index < updates_.Count; ++index ) {
 2361        if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name,
 2362          true, CultureInfo.InvariantCulture) == 0 ) {
 2363          result = index;
 2364          break;
 2365        }
 2366      }
 2367 */
 2368
 2369      return result;
 2370    }
 2371
 2372    /// <summary>
 2373    /// Get an output stream for the specified <see cref="ZipEntry"/>
 2374    /// </summary>
 2375    /// <param name="entry">The entry to get an output stream for.</param>
 2376    /// <returns>The output stream obtained for the entry.</returns>
 2377    Stream GetOutputStream(ZipEntry entry)
 2378    {
 2379      Stream result = baseStream_;
 2380
 2381      if ( entry.IsCrypted == true ) {
 2382#if NETCF_1_0
 2383        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 2384#else
 2385        result = CreateAndInitEncryptionStream(result, entry);
 2386#endif
 2387      }
 2388
 2389      switch ( entry.CompressionMethod ) {
 2390        case CompressionMethod.Stored:
 2391          result = new UncompressedStream(result);
 2392          break;
 2393
 2394        case CompressionMethod.Deflated:
 2395          var dos = new DeflaterOutputStream(result, new Deflater(9, true));
 2396          dos.IsStreamOwner = false;
 2397          result = dos;
 2398          break;
 2399
 2400        default:
 2401          throw new ZipException("Unknown compression method " + entry.CompressionMethod);
 2402      }
 2403      return result;
 2404    }
 2405
 2406    void AddEntry(ZipFile workFile, ZipUpdate update)
 2407    {
 2408      Stream source = null;
 2409
 2410      if ( update.Entry.IsFile ) {
 2411        source = update.GetSource();
 2412
 2413        if ( source == null ) {
 2414          source = updateDataSource_.GetSource(update.Entry, update.Filename);
 2415        }
 2416      }
 2417
 2418      if ( source != null ) {
 2419        using ( source ) {
 2420          long sourceStreamLength = source.Length;
 2421          if ( update.OutEntry.Size < 0 ) {
 2422            update.OutEntry.Size = sourceStreamLength;
 2423          }
 2424          else {
 2425            // Check for errant entries.
 2426            if ( update.OutEntry.Size != sourceStreamLength ) {
 2427              throw new ZipException("Entry size/stream size mismatch");
 2428            }
 2429          }
 2430
 2431          workFile.WriteLocalEntryHeader(update);
 2432
 2433          long dataStart = workFile.baseStream_.Position;
 2434
 2435          using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2436            CopyBytes(update, output, source, sourceStreamLength, true);
 2437          }
 2438
 2439          long dataEnd = workFile.baseStream_.Position;
 2440          update.OutEntry.CompressedSize = dataEnd - dataStart;
 2441
 2442          if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor)
 2443          {
 2444            var helper = new ZipHelperStream(workFile.baseStream_);
 2445            helper.WriteDataDescriptor(update.OutEntry);
 2446          }
 2447        }
 2448      }
 2449      else {
 2450        workFile.WriteLocalEntryHeader(update);
 2451        update.OutEntry.CompressedSize = 0;
 2452      }
 2453
 2454    }
 2455
 2456    void ModifyEntry(ZipFile workFile, ZipUpdate update)
 2457    {
 2458      workFile.WriteLocalEntryHeader(update);
 2459      long dataStart = workFile.baseStream_.Position;
 2460
 2461      // TODO: This is slow if the changes don't effect the data!!
 2462      if ( update.Entry.IsFile && (update.Filename != null) ) {
 2463        using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2464          using ( Stream source = this.GetInputStream(update.Entry) ) {
 2465            CopyBytes(update, output, source, source.Length, true);
 2466          }
 2467        }
 2468      }
 2469
 2470      long dataEnd = workFile.baseStream_.Position;
 2471      update.Entry.CompressedSize = dataEnd - dataStart;
 2472    }
 2473
 2474    void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition)
 2475    {
 2476      bool skipOver = false || update.Entry.Offset == destinationPosition;
 2477
 2478      if ( !skipOver ) {
 2479        baseStream_.Position = destinationPosition;
 2480        workFile.WriteLocalEntryHeader(update);
 2481        destinationPosition = baseStream_.Position;
 2482      }
 2483
 2484      long sourcePosition = 0;
 2485
 2486      const int NameLengthOffset = 26;
 2487
 2488      // TODO: Add base for SFX friendly handling
 2489      long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2490
 2491      baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2492
 2493      // Clumsy way of handling retrieving the original name and extra data length for now.
 2494      // TODO: Stop re-reading name and data length in CopyEntryDirect.
 2495      uint nameLength = ReadLEUshort();
 2496      uint extraLength = ReadLEUshort();
 2497
 2498      sourcePosition = baseStream_.Position + nameLength + extraLength;
 2499
 2500      if (skipOver) {
 2501        if (update.OffsetBasedSize != -1)
 2502          destinationPosition += update.OffsetBasedSize;
 2503        else
 2504          // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) ar
 2505          // WinZip produces a warning on these entries:
 2506          // "caution: value of lrec.csize (compressed size) changed from ..."
 2507          destinationPosition +=
 2508            (sourcePosition - entryDataOffset) + NameLengthOffset +  // Header size
 2509            update.Entry.CompressedSize + GetDescriptorSize(update);
 2510      }
 2511      else {
 2512        if ( update.Entry.CompressedSize > 0 ) {
 2513          CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition );
 2514        }
 2515        CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition);
 2516      }
 2517    }
 2518
 2519    void CopyEntry(ZipFile workFile, ZipUpdate update)
 2520    {
 2521      workFile.WriteLocalEntryHeader(update);
 2522
 2523      if ( update.Entry.CompressedSize > 0 ) {
 2524        const int NameLengthOffset = 26;
 2525
 2526        long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2527
 2528        // TODO: This wont work for SFX files!
 2529        baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2530
 2531        uint nameLength = ReadLEUshort();
 2532        uint extraLength = ReadLEUshort();
 2533
 2534        baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current);
 2535
 2536        CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false);
 2537      }
 2538      CopyDescriptorBytes(update, workFile.baseStream_, baseStream_);
 2539    }
 2540
 2541    void Reopen(Stream source)
 2542    {
 2543      if ( source == null ) {
 2544        throw new ZipException("Failed to reopen archive - no source");
 2545      }
 2546
 2547      isNewArchive_ = false;
 2548      baseStream_ = source;
 2549      ReadEntries();
 2550    }
 2551
 2552    void Reopen()
 2553    {
 2554      if (Name == null) {
 2555        throw new InvalidOperationException("Name is not known cannot Reopen");
 2556      }
 2557
 2558      Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read));
 2559    }
 2560
 2561    void UpdateCommentOnly()
 2562    {
 2563      long baseLength = baseStream_.Length;
 2564
 2565      ZipHelperStream updateFile = null;
 2566
 2567      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2568        Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_);
 2569        updateFile = new ZipHelperStream(copyStream);
 2570        updateFile.IsStreamOwner = true;
 2571
 2572        baseStream_.Close();
 2573        baseStream_ = null;
 2574      }
 2575      else {
 2576        if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) {
 2577          // TODO: archiveStorage wasnt originally intended for this use.
 2578          // Need to revisit this to tidy up handling as archive storage currently doesnt
 2579          // handle the original stream well.
 2580          // The problem is when using an existing zip archive with an in memory archive storage.
 2581          // The open stream wont support writing but the memory storage should open the same file not an in memory one.
 2582
 2583          // Need to tidy up the archive storage interface and contract basically.
 2584          baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_);
 2585          updateFile = new ZipHelperStream(baseStream_);
 2586        }
 2587        else {
 2588          baseStream_.Close();
 2589          baseStream_ = null;
 2590          updateFile = new ZipHelperStream(Name);
 2591        }
 2592      }
 2593
 2594      using ( updateFile ) {
 2595        long locatedCentralDirOffset =
 2596          updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 2597                            baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 2598        if ( locatedCentralDirOffset < 0 ) {
 2599          throw new ZipException("Cannot find central directory");
 2600        }
 2601
 2602        const int CentralHeaderCommentSizeOffset = 16;
 2603        updateFile.Position += CentralHeaderCommentSizeOffset;
 2604
 2605        byte[] rawComment = newComment_.RawComment;
 2606
 2607        updateFile.WriteLEShort(rawComment.Length);
 2608        updateFile.Write(rawComment, 0, rawComment.Length);
 2609        updateFile.SetLength(updateFile.Position);
 2610      }
 2611
 2612      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2613        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2614      }
 2615      else {
 2616        ReadEntries();
 2617      }
 2618    }
 2619
 2620    /// <summary>
 2621    /// Class used to sort updates.
 2622    /// </summary>
 2623    class UpdateComparer : IComparer
 2624    {
 2625      /// <summary>
 2626      /// Compares two objects and returns a value indicating whether one is
 2627      /// less than, equal to or greater than the other.
 2628      /// </summary>
 2629      /// <param name="x">First object to compare</param>
 2630      /// <param name="y">Second object to compare.</param>
 2631      /// <returns>Compare result.</returns>
 2632      public int Compare(
 2633        object x,
 2634        object y)
 2635      {
 2636        var zx = x as ZipUpdate;
 2637        var zy = y as ZipUpdate;
 2638
 2639        int result;
 2640
 2641        if (zx == null) {
 2642          if (zy == null) {
 2643            result = 0;
 2644          }
 2645          else {
 2646            result = -1;
 2647          }
 2648        }
 2649        else if (zy == null) {
 2650          result = 1;
 2651        }
 2652        else {
 2653          int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1;
 2654          int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1;
 2655
 2656          result = xCmdValue - yCmdValue;
 2657          if (result == 0) {
 2658            long offsetDiff = zx.Entry.Offset - zy.Entry.Offset;
 2659            if (offsetDiff < 0) {
 2660              result = -1;
 2661            }
 2662            else if (offsetDiff == 0) {
 2663              result = 0;
 2664            }
 2665            else {
 2666              result = 1;
 2667            }
 2668          }
 2669        }
 2670        return result;
 2671      }
 2672    }
 2673
 2674    void RunUpdates()
 2675    {
 2676      long sizeEntries = 0;
 2677      long endOfStream = 0;
 2678      bool directUpdate = false;
 2679      long destinationPosition = 0; // NOT SFX friendly
 2680
 2681      ZipFile workFile;
 2682
 2683      if ( IsNewArchive ) {
 2684        workFile = this;
 2685        workFile.baseStream_.Position = 0;
 2686        directUpdate = true;
 2687      }
 2688      else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) {
 2689        workFile = this;
 2690        workFile.baseStream_.Position = 0;
 2691        directUpdate = true;
 2692
 2693        // Sort the updates by offset within copies/modifies, then adds.
 2694        // This ensures that data required by copies will not be overwritten.
 2695        updates_.Sort(new UpdateComparer());
 2696      }
 2697      else {
 2698        workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput());
 2699        workFile.UseZip64 = UseZip64;
 2700
 2701        if (key != null) {
 2702          workFile.key = (byte[])key.Clone();
 2703        }
 2704      }
 2705
 2706      try {
 2707        foreach ( ZipUpdate update in updates_ ) {
 2708          if (update != null) {
 2709            switch (update.Command) {
 2710              case UpdateCommand.Copy:
 2711                if (directUpdate) {
 2712                  CopyEntryDirect(workFile, update, ref destinationPosition);
 2713                }
 2714                else {
 2715                  CopyEntry(workFile, update);
 2716                }
 2717                break;
 2718
 2719              case UpdateCommand.Modify:
 2720                // TODO: Direct modifying of an entry will take some legwork.
 2721                ModifyEntry(workFile, update);
 2722                break;
 2723
 2724              case UpdateCommand.Add:
 2725                if (!IsNewArchive && directUpdate) {
 2726                  workFile.baseStream_.Position = destinationPosition;
 2727                }
 2728
 2729                AddEntry(workFile, update);
 2730
 2731                if (directUpdate) {
 2732                  destinationPosition = workFile.baseStream_.Position;
 2733                }
 2734                break;
 2735            }
 2736          }
 2737        }
 2738
 2739        if ( !IsNewArchive && directUpdate ) {
 2740          workFile.baseStream_.Position = destinationPosition;
 2741        }
 2742
 2743        long centralDirOffset = workFile.baseStream_.Position;
 2744
 2745        foreach ( ZipUpdate update in updates_ ) {
 2746          if (update != null) {
 2747            sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry);
 2748          }
 2749        }
 2750
 2751        byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_);
 2752        using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) {
 2753          zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment);
 2754        }
 2755
 2756        endOfStream = workFile.baseStream_.Position;
 2757
 2758        // And now patch entries...
 2759        foreach ( ZipUpdate update in updates_ ) {
 2760          if (update != null)
 2761          {
 2762            // If the size of the entry is zero leave the crc as 0 as well.
 2763            // The calculated crc will be all bits on...
 2764            if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) {
 2765              workFile.baseStream_.Position = update.CrcPatchOffset;
 2766              workFile.WriteLEInt((int)update.OutEntry.Crc);
 2767            }
 2768
 2769            if (update.SizePatchOffset > 0) {
 2770              workFile.baseStream_.Position = update.SizePatchOffset;
 2771              if (update.OutEntry.LocalHeaderRequiresZip64) {
 2772                workFile.WriteLeLong(update.OutEntry.Size);
 2773                workFile.WriteLeLong(update.OutEntry.CompressedSize);
 2774              }
 2775              else {
 2776                workFile.WriteLEInt((int)update.OutEntry.CompressedSize);
 2777                workFile.WriteLEInt((int)update.OutEntry.Size);
 2778              }
 2779            }
 2780          }
 2781        }
 2782      }
 2783      catch {
 2784        workFile.Close();
 2785        if (!directUpdate && (workFile.Name != null)) {
 2786          File.Delete(workFile.Name);
 2787        }
 2788        throw;
 2789      }
 2790
 2791      if (directUpdate) {
 2792        workFile.baseStream_.SetLength(endOfStream);
 2793        workFile.baseStream_.Flush();
 2794        isNewArchive_ = false;
 2795        ReadEntries();
 2796      }
 2797      else {
 2798        baseStream_.Close();
 2799        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2800      }
 2801    }
 2802
 2803    void CheckUpdating()
 2804    {
 2805      if ( updates_ == null ) {
 2806        throw new InvalidOperationException("BeginUpdate has not been called");
 2807      }
 2808    }
 2809
 2810    #endregion
 2811
 2812    #region ZipUpdate class
 2813    /// <summary>
 2814    /// Represents a pending update to a Zip file.
 2815    /// </summary>
 2816    class ZipUpdate
 2817    {
 2818      #region Constructors
 2819      public ZipUpdate(string fileName, ZipEntry entry)
 2820      {
 2821        command_ = UpdateCommand.Add;
 2822        entry_ = entry;
 2823        filename_ = fileName;
 2824      }
 2825
 2826      [Obsolete]
 2827      public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod)
 2828      {
 2829        command_ = UpdateCommand.Add;
 2830        entry_ = new ZipEntry(entryName);
 2831        entry_.CompressionMethod = compressionMethod;
 2832        filename_ = fileName;
 2833      }
 2834
 2835      [Obsolete]
 2836      public ZipUpdate(string fileName, string entryName)
 2837        : this(fileName, entryName, CompressionMethod.Deflated)
 2838      {
 2839        // Do nothing.
 2840      }
 2841
 2842      [Obsolete]
 2843      public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 2844      {
 2845        command_ = UpdateCommand.Add;
 2846        entry_ = new ZipEntry(entryName);
 2847        entry_.CompressionMethod = compressionMethod;
 2848        dataSource_ = dataSource;
 2849      }
 2850
 2851      public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry)
 2852      {
 2853        command_ = UpdateCommand.Add;
 2854        entry_ = entry;
 2855        dataSource_ = dataSource;
 2856      }
 2857
 2858      public ZipUpdate(ZipEntry original, ZipEntry updated)
 2859      {
 2860        throw new ZipException("Modify not currently supported");
 2861      /*
 2862        command_ = UpdateCommand.Modify;
 2863        entry_ = ( ZipEntry )original.Clone();
 2864        outEntry_ = ( ZipEntry )updated.Clone();
 2865      */
 2866      }
 2867
 2868      public ZipUpdate(UpdateCommand command, ZipEntry entry)
 2869      {
 2870        command_ = command;
 2871        entry_ = ( ZipEntry )entry.Clone();
 2872      }
 2873
 2874
 2875      /// <summary>
 2876      /// Copy an existing entry.
 2877      /// </summary>
 2878      /// <param name="entry">The existing entry to copy.</param>
 2879      public ZipUpdate(ZipEntry entry)
 2880        : this(UpdateCommand.Copy, entry)
 2881      {
 2882        // Do nothing.
 2883      }
 2884      #endregion
 2885
 2886      /// <summary>
 2887      /// Get the <see cref="ZipEntry"/> for this update.
 2888      /// </summary>
 2889      /// <remarks>This is the source or original entry.</remarks>
 2890      public ZipEntry Entry
 2891      {
 2892        get { return entry_; }
 2893      }
 2894
 2895      /// <summary>
 2896      /// Get the <see cref="ZipEntry"/> that will be written to the updated/new file.
 2897      /// </summary>
 2898      public ZipEntry OutEntry
 2899      {
 2900        get {
 2901          if ( outEntry_ == null ) {
 2902            outEntry_ = (ZipEntry)entry_.Clone();
 2903          }
 2904
 2905          return outEntry_;
 2906        }
 2907      }
 2908
 2909      /// <summary>
 2910      /// Get the command for this update.
 2911      /// </summary>
 2912      public UpdateCommand Command
 2913      {
 2914        get { return command_; }
 2915      }
 2916
 2917      /// <summary>
 2918      /// Get the filename if any for this update.  Null if none exists.
 2919      /// </summary>
 2920      public string Filename
 2921      {
 2922        get { return filename_; }
 2923      }
 2924
 2925      /// <summary>
 2926      /// Get/set the location of the size patch for this update.
 2927      /// </summary>
 2928      public long SizePatchOffset
 2929      {
 2930        get { return sizePatchOffset_; }
 2931        set { sizePatchOffset_ = value; }
 2932      }
 2933
 2934      /// <summary>
 2935      /// Get /set the location of the crc patch for this update.
 2936      /// </summary>
 2937      public long CrcPatchOffset
 2938      {
 2939        get { return crcPatchOffset_; }
 2940        set { crcPatchOffset_ = value; }
 2941      }
 2942
 2943      /// <summary>
 2944      /// Get/set the size calculated by offset.
 2945      /// Specifically, the difference between this and next entry's starting offset.
 2946      /// </summary>
 2947      public long OffsetBasedSize
 2948      {
 2949        get { return _offsetBasedSize; }
 2950        set { _offsetBasedSize = value; }
 2951      }
 2952
 2953      public Stream GetSource()
 2954      {
 2955        Stream result = null;
 2956        if ( dataSource_ != null ) {
 2957          result = dataSource_.GetSource();
 2958        }
 2959
 2960        return result;
 2961      }
 2962
 2963      #region Instance Fields
 2964      ZipEntry entry_;
 2965      ZipEntry outEntry_;
 2966      UpdateCommand command_;
 2967      IStaticDataSource dataSource_;
 2968      string filename_;
 2969      long sizePatchOffset_ = -1;
 2970      long crcPatchOffset_ = -1;
 2971      long _offsetBasedSize = -1;
 2972      #endregion
 2973    }
 2974
 2975    #endregion
 2976    #endregion
 2977
 2978    #region Disposing
 2979
 2980    #region IDisposable Members
 2981    void IDisposable.Dispose()
 2982    {
 2983      Close();
 2984    }
 2985    #endregion
 2986
 2987    void DisposeInternal(bool disposing)
 2988    {
 2989      if ( !isDisposed_ ) {
 2990        isDisposed_ = true;
 2991        entries_ = new ZipEntry[0];
 2992
 2993        if ( IsStreamOwner && (baseStream_ != null) ) {
 2994          lock(baseStream_) {
 2995            baseStream_.Close();
 2996          }
 2997        }
 2998
 2999        PostUpdateCleanup();
 3000      }
 3001    }
 3002
 3003    /// <summary>
 3004    /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
 3005    /// </summary>
 3006    /// <param name="disposing">true to release both managed and unmanaged resources;
 3007    /// false to release only unmanaged resources.</param>
 3008    protected virtual void Dispose(bool disposing)
 3009    {
 3010      DisposeInternal(disposing);
 3011    }
 3012
 3013    #endregion
 3014
 3015    #region Internal routines
 3016    #region Reading
 3017    /// <summary>
 3018    /// Read an unsigned short in little endian byte order.
 3019    /// </summary>
 3020    /// <returns>Returns the value read.</returns>
 3021    /// <exception cref="EndOfStreamException">
 3022    /// The stream ends prematurely
 3023    /// </exception>
 3024    ushort ReadLEUshort()
 3025    {
 3026      int data1 = baseStream_.ReadByte();
 3027
 3028      if ( data1 < 0 ) {
 3029        throw new EndOfStreamException("End of stream");
 3030      }
 3031
 3032      int data2 = baseStream_.ReadByte();
 3033
 3034      if ( data2 < 0 ) {
 3035        throw new EndOfStreamException("End of stream");
 3036      }
 3037
 3038
 3039      return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8)));
 3040    }
 3041
 3042    /// <summary>
 3043    /// Read a uint in little endian byte order.
 3044    /// </summary>
 3045    /// <returns>Returns the value read.</returns>
 3046    /// <exception cref="IOException">
 3047    /// An i/o error occurs.
 3048    /// </exception>
 3049    /// <exception cref="System.IO.EndOfStreamException">
 3050    /// The file ends prematurely
 3051    /// </exception>
 3052    uint ReadLEUint()
 3053    {
 3054      return (uint)(ReadLEUshort() | (ReadLEUshort() << 16));
 3055    }
 3056
 3057    ulong ReadLEUlong()
 3058    {
 3059      return ReadLEUint() | ((ulong)ReadLEUint() << 32);
 3060    }
 3061
 3062    #endregion
 3063    // NOTE this returns the offset of the first byte after the signature.
 3064    long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 3065    {
 3066      using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) {
 3067        return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData);
 3068      }
 3069    }
 3070
 3071    /// <summary>
 3072    /// Search for and read the central directory of a zip file filling the entries array.
 3073    /// </summary>
 3074    /// <exception cref="System.IO.IOException">
 3075    /// An i/o error occurs.
 3076    /// </exception>
 3077    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3078    /// The central directory is malformed or cannot be found
 3079    /// </exception>
 3080    void ReadEntries()
 3081    {
 3082      // Search for the End Of Central Directory.  When a zip comment is
 3083      // present the directory will start earlier
 3084      //
 3085      // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed.
 3086      // This should be compatible with both SFX and ZIP files but has only been tested for Zip files
 3087      // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then
 3088      // this could be invalid.
 3089      // Could also speed this up by reading memory in larger blocks.
 3090
 3091      if (baseStream_.CanSeek == false) {
 3092        throw new ZipException("ZipFile stream must be seekable");
 3093      }
 3094
 3095      long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 3096        baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 3097
 3098      if (locatedEndOfCentralDir < 0) {
 3099        throw new ZipException("Cannot find central directory");
 3100      }
 3101
 3102      // Read end of central directory record
 3103      ushort thisDiskNumber           = ReadLEUshort();
 3104      ushort startCentralDirDisk      = ReadLEUshort();
 3105      ulong entriesForThisDisk        = ReadLEUshort();
 3106      ulong entriesForWholeCentralDir = ReadLEUshort();
 3107      ulong centralDirSize            = ReadLEUint();
 3108      long offsetOfCentralDir         = ReadLEUint();
 3109      uint commentSize                = ReadLEUshort();
 3110
 3111      if ( commentSize > 0 ) {
 3112        byte[] comment = new byte[commentSize];
 3113
 3114        StreamUtils.ReadFully(baseStream_, comment);
 3115        comment_ = ZipConstants.ConvertToString(comment);
 3116      }
 3117      else {
 3118        comment_ = string.Empty;
 3119      }
 3120
 3121      bool isZip64 = false;
 3122
 3123      // Check if zip64 header information is required.
 3124      if ( (thisDiskNumber == 0xffff) ||
 3125        (startCentralDirDisk == 0xffff) ||
 3126        (entriesForThisDisk == 0xffff) ||
 3127        (entriesForWholeCentralDir == 0xffff) ||
 3128        (centralDirSize == 0xffffffff) ||
 3129        (offsetOfCentralDir == 0xffffffff) ) {
 3130        isZip64 = true;
 3131
 3132        long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 
 3133        if ( offset < 0 ) {
 3134          throw new ZipException("Cannot find Zip64 locator");
 3135        }
 3136
 3137        // number of the disk with the start of the zip64 end of central directory 4 bytes
 3138        // relative offset of the zip64 end of central directory record 8 bytes
 3139        // total number of disks 4 bytes
 3140        ReadLEUint(); // startDisk64 is not currently used
 3141        ulong offset64 = ReadLEUlong();
 3142        uint totalDisks = ReadLEUint();
 3143
 3144        baseStream_.Position = (long)offset64;
 3145        long sig64 = ReadLEUint();
 3146
 3147        if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) {
 3148          throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64));
 3149        }
 3150
 3151        // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12.
 3152        ulong recordSize = ReadLEUlong();
 3153        int versionMadeBy = ReadLEUshort();
 3154        int versionToExtract = ReadLEUshort();
 3155        uint thisDisk = ReadLEUint();
 3156        uint centralDirDisk = ReadLEUint();
 3157        entriesForThisDisk = ReadLEUlong();
 3158        entriesForWholeCentralDir = ReadLEUlong();
 3159        centralDirSize = ReadLEUlong();
 3160        offsetOfCentralDir = (long)ReadLEUlong();
 3161
 3162        // NOTE: zip64 extensible data sector (variable size) is ignored.
 3163      }
 3164
 3165      entries_ = new ZipEntry[entriesForThisDisk];
 3166
 3167      // SFX/embedded support, find the offset of the first entry vis the start of the stream
 3168      // This applies to Zip files that are appended to the end of an SFX stub.
 3169      // Or are appended as a resource to an executable.
 3170      // Zip files created by some archivers have the offsets altered to reflect the true offsets
 3171      // and so dont require any adjustment here...
 3172      // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths?
 3173      if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) {
 3174        offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir);
 3175        if (offsetOfFirstEntry <= 0) {
 3176          throw new ZipException("Invalid embedded zip archive");
 3177        }
 3178      }
 3179
 3180      baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin);
 3181
 3182      for (ulong i = 0; i < entriesForThisDisk; i++) {
 3183        if (ReadLEUint() != ZipConstants.CentralHeaderSignature) {
 3184          throw new ZipException("Wrong Central Directory signature");
 3185        }
 3186
 3187        int versionMadeBy      = ReadLEUshort();
 3188        int versionToExtract   = ReadLEUshort();
 3189        int bitFlags           = ReadLEUshort();
 3190        int method             = ReadLEUshort();
 3191        uint dostime           = ReadLEUint();
 3192        uint crc               = ReadLEUint();
 3193        var csize             = (long)ReadLEUint();
 3194        var size              = (long)ReadLEUint();
 3195        int nameLen            = ReadLEUshort();
 3196        int extraLen           = ReadLEUshort();
 3197        int commentLen         = ReadLEUshort();
 3198
 3199        int diskStartNo        = ReadLEUshort();  // Not currently used
 3200        int internalAttributes = ReadLEUshort();  // Not currently used
 3201
 3202        uint externalAttributes = ReadLEUint();
 3203        long offset             = ReadLEUint();
 3204
 3205        byte[] buffer = new byte[Math.Max(nameLen, commentLen)];
 3206
 3207        StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen);
 3208        string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen);
 3209
 3210        var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method);
 3211        entry.Crc = crc & 0xffffffffL;
 3212        entry.Size = size & 0xffffffffL;
 3213        entry.CompressedSize = csize & 0xffffffffL;
 3214        entry.Flags = bitFlags;
 3215        entry.DosTime = (uint)dostime;
 3216        entry.ZipFileIndex = (long)i;
 3217        entry.Offset = offset;
 3218        entry.ExternalFileAttributes = (int)externalAttributes;
 3219
 3220        if ((bitFlags & 8) == 0) {
 3221          entry.CryptoCheckValue = (byte)(crc >> 24);
 3222        }
 3223        else {
 3224          entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 3225        }
 3226
 3227        if (extraLen > 0) {
 3228          byte[] extra = new byte[extraLen];
 3229          StreamUtils.ReadFully(baseStream_, extra);
 3230          entry.ExtraData = extra;
 3231        }
 3232
 3233        entry.ProcessExtraData(false);
 3234
 3235        if (commentLen > 0) {
 3236          StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen);
 3237          entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen);
 3238        }
 3239
 3240        entries_[i] = entry;
 3241      }
 3242    }
 3243
 3244    /// <summary>
 3245    /// Locate the data for a given entry.
 3246    /// </summary>
 3247    /// <returns>
 3248    /// The start offset of the data.
 3249    /// </returns>
 3250    /// <exception cref="System.IO.EndOfStreamException">
 3251    /// The stream ends prematurely
 3252    /// </exception>
 3253    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3254    /// The local header signature is invalid, the entry and central header file name lengths are different
 3255    /// or the local and entry compression methods dont match
 3256    /// </exception>
 3257    long LocateEntry(ZipEntry entry)
 3258    {
 3259      return TestLocalHeader(entry, HeaderTest.Extract);
 3260    }
 3261
 3262#if !NETCF_1_0
 3263    Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry)
 3264    {
 3265      CryptoStream result = null;
 3266
 3267      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3268        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3269        var classicManaged = new PkzipClassicManaged();
 3270
 3271        OnKeysRequired(entry.Name);
 3272        if (HaveKeys == false) {
 3273          throw new ZipException("No password available for encrypted stream");
 3274        }
 3275
 3276        result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read);
 3277        CheckClassicPassword(result, entry);
 3278      }
 3279      else {
 3280#if !NET_1_1 && !NETCF_2_0
 3281        if (entry.Version == ZipConstants.VERSION_AES) {
 3282          //
 3283          OnKeysRequired(entry.Name);
 3284          if (HaveKeys == false) {
 3285            throw new ZipException("No password available for AES encrypted stream");
 3286          }
 3287          int saltLen = entry.AESSaltLen;
 3288          byte[] saltBytes = new byte[saltLen];
 3289          int saltIn = baseStream.Read(saltBytes, 0, saltLen);
 3290          if (saltIn != saltLen)
 3291            throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn);
 3292          //
 3293          byte[] pwdVerifyRead = new byte[2];
 3294          baseStream.Read(pwdVerifyRead, 0, 2);
 3295          int blockSize = entry.AESKeySize / 8;  // bits to bytes
 3296
 3297          var decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false);
 3298          byte[] pwdVerifyCalc = decryptor.PwdVerifier;
 3299          if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1])
 3300            throw new Exception("Invalid password for AES");
 3301          result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read);
 3302        }
 3303        else
 3304#endif
 3305        {
 3306          throw new ZipException("Decryption method not supported");
 3307        }
 3308      }
 3309
 3310      return result;
 3311    }
 3312
 3313    Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry)
 3314    {
 3315      CryptoStream result = null;
 3316      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3317        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3318        var classicManaged = new PkzipClassicManaged();
 3319
 3320        OnKeysRequired(entry.Name);
 3321        if (HaveKeys == false) {
 3322          throw new ZipException("No password available for encrypted stream");
 3323        }
 3324
 3325        // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
 3326        // which doesnt do this.
 3327        result = new CryptoStream(new UncompressedStream(baseStream),
 3328          classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
 3329
 3330        if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) {
 3331          WriteEncryptionHeader(result, entry.DosTime << 16);
 3332        }
 3333        else {
 3334          WriteEncryptionHeader(result, entry.Crc);
 3335        }
 3336      }
 3337      return result;
 3338    }
 3339
 3340    static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry)
 3341    {
 3342      byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 3343      StreamUtils.ReadFully(classicCryptoStream, cryptbuffer);
 3344      if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 3345        throw new ZipException("Invalid password");
 3346      }
 3347    }
 3348#endif
 3349
 3350    static void WriteEncryptionHeader(Stream stream, long crcValue)
 3351    {
 3352      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 3353      var rnd = new Random();
 3354      rnd.NextBytes(cryptBuffer);
 3355      cryptBuffer[11] = (byte)(crcValue >> 24);
 3356      stream.Write(cryptBuffer, 0, cryptBuffer.Length);
 3357    }
 3358
 3359    #endregion
 3360
 3361    #region Instance Fields
 3362    bool       isDisposed_;
 3363    string     name_;
 3364    string     comment_;
 3365    string     rawPassword_;
 3366    Stream     baseStream_;
 3367    bool       isStreamOwner;
 3368    long       offsetOfFirstEntry;
 3369    ZipEntry[] entries_;
 3370    byte[] key;
 3371    bool isNewArchive_;
 3372
 3373    // Default is dynamic which is not backwards compatible and can cause problems
 3374    // with XP's built in compression which cant read Zip64 archives.
 3375    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 3376    // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed.
 3377    UseZip64 useZip64_ = UseZip64.Dynamic ;
 3378
 3379    #region Zip Update Instance Fields
 3380    ArrayList updates_;
 3381    long updateCount_; // Count is managed manually as updates_ can contain nulls!
 3382    Hashtable updateIndex_;
 3383    IArchiveStorage archiveStorage_;
 3384    IDynamicDataSource updateDataSource_;
 3385    bool contentsEdited_;
 3386    int bufferSize_ = DefaultBufferSize;
 3387    byte[] copyBuffer_;
 3388    ZipString newComment_;
 3389    bool commentEdited_;
 3390    IEntryFactory updateEntryFactory_ = new ZipEntryFactory();
 3391    #endregion
 3392    #endregion
 3393
 3394    #region Support Classes
 3395    /// <summary>
 3396    /// Represents a string from a <see cref="ZipFile"/> which is stored as an array of bytes.
 3397    /// </summary>
 3398    class ZipString
 3399    {
 3400      #region Constructors
 3401      /// <summary>
 3402      /// Initialise a <see cref="ZipString"/> with a string.
 3403      /// </summary>
 3404      /// <param name="comment">The textual string form.</param>
 3405      public ZipString(string comment)
 3406      {
 3407        comment_ = comment;
 3408        isSourceString_ = true;
 3409      }
 3410
 3411      /// <summary>
 3412      /// Initialise a <see cref="ZipString"/> using a string in its binary 'raw' form.
 3413      /// </summary>
 3414      /// <param name="rawString"></param>
 3415      public ZipString(byte[] rawString)
 3416      {
 3417        rawComment_ = rawString;
 3418      }
 3419      #endregion
 3420
 3421      /// <summary>
 3422      /// Get a value indicating the original source of data for this instance.
 3423      /// True if the source was a string; false if the source was binary data.
 3424      /// </summary>
 3425      public bool IsSourceString
 3426      {
 3427        get { return isSourceString_; }
 3428      }
 3429
 3430      /// <summary>
 3431      /// Get the length of the comment when represented as raw bytes.
 3432      /// </summary>
 3433      public int RawLength
 3434      {
 3435        get {
 3436          MakeBytesAvailable();
 3437          return rawComment_.Length;
 3438        }
 3439      }
 3440
 3441      /// <summary>
 3442      /// Get the comment in its 'raw' form as plain bytes.
 3443      /// </summary>
 3444      public byte[] RawComment
 3445      {
 3446        get {
 3447          MakeBytesAvailable();
 3448          return (byte[])rawComment_.Clone();
 3449        }
 3450      }
 3451
 3452      /// <summary>
 3453      /// Reset the comment to its initial state.
 3454      /// </summary>
 3455      public void Reset()
 3456      {
 3457        if ( isSourceString_ ) {
 3458          rawComment_ = null;
 3459        }
 3460        else {
 3461          comment_ = null;
 3462        }
 3463      }
 3464
 3465      void MakeTextAvailable()
 3466      {
 3467        if ( comment_ == null ) {
 3468          comment_ = ZipConstants.ConvertToString(rawComment_);
 3469        }
 3470      }
 3471
 3472      void MakeBytesAvailable()
 3473      {
 3474        if ( rawComment_ == null ) {
 3475          rawComment_ = ZipConstants.ConvertToArray(comment_);
 3476        }
 3477      }
 3478
 3479      /// <summary>
 3480      /// Implicit conversion of comment to a string.
 3481      /// </summary>
 3482      /// <param name="zipString">The <see cref="ZipString"/> to convert to a string.</param>
 3483      /// <returns>The textual equivalent for the input value.</returns>
 3484      static public implicit operator string(ZipString zipString)
 3485      {
 3486        zipString.MakeTextAvailable();
 3487        return zipString.comment_;
 3488      }
 3489
 3490      #region Instance Fields
 3491      string comment_;
 3492      byte[] rawComment_;
 3493      bool isSourceString_;
 3494      #endregion
 3495    }
 3496
 3497    /// <summary>
 3498    /// An <see cref="IEnumerator">enumerator</see> for <see cref="ZipEntry">Zip entries</see>
 3499    /// </summary>
 3500    class ZipEntryEnumerator : IEnumerator
 3501    {
 3502      #region Constructors
 3503      public ZipEntryEnumerator(ZipEntry[] entries)
 3504      {
 3505        array = entries;
 3506      }
 3507
 3508      #endregion
 3509      #region IEnumerator Members
 3510      public object Current
 3511      {
 3512        get {
 3513          return array[index];
 3514        }
 3515      }
 3516
 3517      public void Reset()
 3518      {
 3519        index = -1;
 3520      }
 3521
 3522      public bool MoveNext()
 3523      {
 3524        return (++index < array.Length);
 3525      }
 3526      #endregion
 3527      #region Instance Fields
 3528      ZipEntry[] array;
 3529      int index = -1;
 3530      #endregion
 3531    }
 3532
 3533    /// <summary>
 3534    /// An <see cref="UncompressedStream"/> is a stream that you can write uncompressed data
 3535    /// to and flush, but cannot read, seek or do anything else to.
 3536    /// </summary>
 3537    class UncompressedStream : Stream
 3538    {
 3539      #region Constructors
 3540      public UncompressedStream(Stream baseStream)
 3541      {
 3542        baseStream_ = baseStream;
 3543      }
 3544
 3545      #endregion
 3546
 3547      /// <summary>
 3548      /// Close this stream instance.
 3549      /// </summary>
 3550      public override void Close()
 3551      {
 3552        // Do nothing
 3553      }
 3554
 3555      /// <summary>
 3556      /// Gets a value indicating whether the current stream supports reading.
 3557      /// </summary>
 3558      public override bool CanRead
 3559      {
 3560        get {
 3561          return false;
 3562        }
 3563      }
 3564
 3565      /// <summary>
 3566      /// Write any buffered data to underlying storage.
 3567      /// </summary>
 3568      public override void Flush()
 3569      {
 3570        baseStream_.Flush();
 3571      }
 3572
 3573      /// <summary>
 3574      /// Gets a value indicating whether the current stream supports writing.
 3575      /// </summary>
 3576      public override bool CanWrite
 3577      {
 3578        get {
 3579          return baseStream_.CanWrite;
 3580        }
 3581      }
 3582
 3583      /// <summary>
 3584      /// Gets a value indicating whether the current stream supports seeking.
 3585      /// </summary>
 3586      public override bool CanSeek
 3587      {
 3588        get {
 3589          return false;
 3590        }
 3591      }
 3592
 3593      /// <summary>
 3594      /// Get the length in bytes of the stream.
 3595      /// </summary>
 3596      public override long Length
 3597      {
 3598        get {
 3599          return 0;
 3600        }
 3601      }
 3602
 3603      /// <summary>
 3604      /// Gets or sets the position within the current stream.
 3605      /// </summary>
 3606      public override long Position
 3607      {
 3608        get  {
 3609          return baseStream_.Position;
 3610        }
 3611                set {
 3612                    throw new NotImplementedException();
 3613                }
 3614            }
 3615
 3616            /// <summary>
 3617            /// Reads a sequence of bytes from the current stream and advances the position within the stream by the num
 3618            /// </summary>
 3619            /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte
 3620            /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from t
 3621            /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3622            /// <returns>
 3623            /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if t
 3624            /// </returns>
 3625            /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer lengt
 3626            /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </ex
 3627            /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3628            /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3629            /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3630            /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3631            public override int Read(byte[] buffer, int offset, int count)
 3632      {
 3633        return 0;
 3634      }
 3635
 3636      /// <summary>
 3637      /// Sets the position within the current stream.
 3638      /// </summary>
 3639      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3640      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3641      /// <returns>
 3642      /// The new position within the current stream.
 3643      /// </returns>
 3644      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3645      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3646      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3647      public override long Seek(long offset, SeekOrigin origin)
 3648      {
 3649        return 0;
 3650      }
 3651
 3652      /// <summary>
 3653      /// Sets the length of the current stream.
 3654      /// </summary>
 3655      /// <param name="value">The desired length of the current stream in bytes.</param>
 3656      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3657      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3658      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3659      public override void SetLength(long value)
 3660      {
 3661      }
 3662
 3663      /// <summary>
 3664      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3665      /// </summary>
 3666      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3667      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3668      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3669      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3670      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3671      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3672      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3673      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3674      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3675      public override void Write(byte[] buffer, int offset, int count)
 3676      {
 3677        baseStream_.Write(buffer, offset, count);
 3678      }
 3679
 3680      readonly
 3681
 3682      #region Instance Fields
 3683      Stream baseStream_;
 3684      #endregion
 3685    }
 3686
 3687    /// <summary>
 3688    /// A <see cref="PartialInputStream"/> is an <see cref="InflaterInputStream"/>
 3689    /// whose data is only a part or subsection of a file.
 3690    /// </summary>
 3691    class PartialInputStream : Stream
 3692    {
 3693      #region Constructors
 3694      /// <summary>
 3695      /// Initialise a new instance of the <see cref="PartialInputStream"/> class.
 3696      /// </summary>
 3697      /// <param name="zipFile">The <see cref="ZipFile"/> containing the underlying stream to use for IO.</param>
 3698      /// <param name="start">The start of the partial data.</param>
 3699      /// <param name="length">The length of the partial data.</param>
 3700      public PartialInputStream(ZipFile zipFile, long start, long length)
 3701      {
 3702        start_ = start;
 3703        length_ = length;
 3704
 3705        // Although this is the only time the zipfile is used
 3706        // keeping a reference here prevents premature closure of
 3707        // this zip file and thus the baseStream_.
 3708
 3709        // Code like this will cause apparently random failures depending
 3710        // on the size of the files and when garbage is collected.
 3711        //
 3712        // ZipFile z = new ZipFile (stream);
 3713        // Stream reader = z.GetInputStream(0);
 3714        // uses reader here....
 3715        zipFile_ = zipFile;
 3716        baseStream_ = zipFile_.baseStream_;
 3717        readPos_ = start;
 3718        end_ = start + length;
 3719      }
 3720      #endregion
 3721
 3722      /// <summary>
 3723      /// Read a byte from this stream.
 3724      /// </summary>
 3725      /// <returns>Returns the byte read or -1 on end of stream.</returns>
 3726      public override int ReadByte()
 3727      {
 3728        if (readPos_ >= end_) {
 3729           // -1 is the correct value at end of stream.
 3730          return -1;
 3731        }
 3732
 3733        lock( baseStream_ ) {
 3734          baseStream_.Seek(readPos_++, SeekOrigin.Begin);
 3735          return baseStream_.ReadByte();
 3736        }
 3737      }
 3738
 3739      /// <summary>
 3740      /// Close this <see cref="PartialInputStream">partial input stream</see>.
 3741      /// </summary>
 3742      /// <remarks>
 3743      /// The underlying stream is not closed.  Close the parent ZipFile class to do that.
 3744      /// </remarks>
 3745      public override void Close()
 3746      {
 3747        // Do nothing at all!
 3748      }
 3749
 3750      /// <summary>
 3751      /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of
 3752      /// </summary>
 3753      /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte array
 3754      /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the cur
 3755      /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3756      /// <returns>
 3757      /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that ma
 3758      /// </returns>
 3759      /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer length. </e
 3760      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3761      /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3762      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3763      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3764      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3765      public override int Read(byte[] buffer, int offset, int count)
 3766      {
 3767        lock(baseStream_) {
 3768          if (count > end_ - readPos_) {
 3769            count = (int) (end_ - readPos_);
 3770            if (count == 0) {
 3771              return 0;
 3772            }
 3773          }
 3774
 3775          baseStream_.Seek(readPos_, SeekOrigin.Begin);
 3776          int readCount = baseStream_.Read(buffer, offset, count);
 3777          if (readCount > 0) {
 3778            readPos_ += readCount;
 3779          }
 3780          return readCount;
 3781        }
 3782      }
 3783
 3784      /// <summary>
 3785      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3786      /// </summary>
 3787      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3788      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3789      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3790      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3791      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3792      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3793      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3794      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3795      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3796      public override void Write(byte[] buffer, int offset, int count)
 3797      {
 3798        throw new NotSupportedException();
 3799      }
 3800
 3801      /// <summary>
 3802      /// When overridden in a derived class, sets the length of the current stream.
 3803      /// </summary>
 3804      /// <param name="value">The desired length of the current stream in bytes.</param>
 3805      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3806      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3807      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3808      public override void SetLength(long value)
 3809      {
 3810        throw new NotSupportedException();
 3811      }
 3812
 3813      /// <summary>
 3814      /// When overridden in a derived class, sets the position within the current stream.
 3815      /// </summary>
 3816      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3817      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3818      /// <returns>
 3819      /// The new position within the current stream.
 3820      /// </returns>
 3821      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3822      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3823      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3824      public override long Seek(long offset, SeekOrigin origin)
 3825      {
 3826        long newPos = readPos_;
 3827
 3828        switch ( origin )
 3829        {
 3830          case SeekOrigin.Begin:
 3831            newPos = start_ + offset;
 3832            break;
 3833
 3834          case SeekOrigin.Current:
 3835            newPos = readPos_ + offset;
 3836            break;
 3837
 3838          case SeekOrigin.End:
 3839            newPos = end_ + offset;
 3840            break;
 3841        }
 3842
 3843        if ( newPos < start_ ) {
 3844          throw new ArgumentException("Negative position is invalid");
 3845        }
 3846
 3847        if ( newPos >= end_ ) {
 3848          throw new IOException("Cannot seek past end");
 3849        }
 3850        readPos_ = newPos;
 3851        return readPos_;
 3852      }
 3853
 3854      /// <summary>
 3855      /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device.
 3856      /// </summary>
 3857      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3858      public override void Flush()
 3859      {
 3860        // Nothing to do.
 3861      }
 3862
 3863      /// <summary>
 3864      /// Gets or sets the position within the current stream.
 3865      /// </summary>
 3866      /// <value></value>
 3867      /// <returns>The current position within the stream.</returns>
 3868      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3869      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking. </exception>
 3870      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3871      public override long Position {
 3872        get { return readPos_ - start_; }
 3873        set {
 3874          long newPos = start_ + value;
 3875
 3876          if ( newPos < start_ ) {
 3877            throw new ArgumentException("Negative position is invalid");
 3878          }
 3879
 3880          if ( newPos >= end_ ) {
 3881            throw new InvalidOperationException("Cannot seek past end");
 3882          }
 3883          readPos_ = newPos;
 3884        }
 3885      }
 3886
 3887      /// <summary>
 3888      /// Gets the length in bytes of the stream.
 3889      /// </summary>
 3890      /// <value></value>
 3891      /// <returns>A long value representing the length of the stream in bytes.</returns>
 3892      /// <exception cref="T:System.NotSupportedException">A class derived from Stream does not support seeking. </excep
 3893      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3894      public override long Length {
 3895        get { return length_; }
 3896      }
 3897
 3898      /// <summary>
 3899      /// Gets a value indicating whether the current stream supports writing.
 3900      /// </summary>
 3901      /// <value>false</value>
 3902      /// <returns>true if the stream supports writing; otherwise, false.</returns>
 3903      public override bool CanWrite {
 3904        get { return false; }
 3905      }
 3906
 3907      /// <summary>
 3908      /// Gets a value indicating whether the current stream supports seeking.
 3909      /// </summary>
 3910      /// <value>true</value>
 3911      /// <returns>true if the stream supports seeking; otherwise, false.</returns>
 3912      public override bool CanSeek {
 3913        get { return true; }
 3914      }
 3915
 3916      /// <summary>
 3917      /// Gets a value indicating whether the current stream supports reading.
 3918      /// </summary>
 3919      /// <value>true.</value>
 3920      /// <returns>true if the stream supports reading; otherwise, false.</returns>
 3921      public override bool CanRead {
 3922        get { return true; }
 3923      }
 3924
 3925#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 3926      /// <summary>
 3927      /// Gets a value that determines whether the current stream can time out.
 3928      /// </summary>
 3929      /// <value></value>
 3930      /// <returns>A value that determines whether the current stream can time out.</returns>
 3931      public override bool CanTimeout {
 3932        get { return baseStream_.CanTimeout; }
 3933      }
 3934#endif
 3935      #region Instance Fields
 3936      ZipFile zipFile_;
 3937      Stream baseStream_;
 3938      long start_;
 3939      long length_;
 3940      long readPos_;
 3941      long end_;
 3942      #endregion
 3943    }
 3944    #endregion
 3945  }
 3946
 3947  #endregion
 3948
 3949  #region DataSources
 3950  /// <summary>
 3951  /// Provides a static way to obtain a source of data for an entry.
 3952  /// </summary>
 3953  public interface IStaticDataSource
 3954  {
 3955    /// <summary>
 3956    /// Get a source of data by creating a new stream.
 3957    /// </summary>
 3958    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3959    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3960    Stream GetSource();
 3961  }
 3962
 3963  /// <summary>
 3964  /// Represents a source of data that can dynamically provide
 3965  /// multiple <see cref="Stream">data sources</see> based on the parameters passed.
 3966  /// </summary>
 3967  public interface IDynamicDataSource
 3968  {
 3969    /// <summary>
 3970    /// Get a data source.
 3971    /// </summary>
 3972    /// <param name="entry">The <see cref="ZipEntry"/> to get a source for.</param>
 3973    /// <param name="name">The name for data if known.</param>
 3974    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3975    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3976    Stream GetSource(ZipEntry entry, string name);
 3977  }
 3978
 3979  /// <summary>
 3980  /// Default implementation of a <see cref="IStaticDataSource"/> for use with files stored on disk.
 3981  /// </summary>
 3982  public class StaticDiskDataSource : IStaticDataSource
 3983  {
 3984    /// <summary>
 3985    /// Initialise a new instnace of <see cref="StaticDiskDataSource"/>
 3986    /// </summary>
 3987    /// <param name="fileName">The name of the file to obtain data from.</param>
 3988    public StaticDiskDataSource(string fileName)
 3989    {
 3990      fileName_ = fileName;
 3991    }
 3992
 3993    #region IDataSource Members
 3994
 3995    /// <summary>
 3996    /// Get a <see cref="Stream"/> providing data.
 3997    /// </summary>
 3998    /// <returns>Returns a <see cref="Stream"/> provising data.</returns>
 3999    public Stream GetSource()
 4000    {
 4001      return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4002    }
 4003
 4004    readonly
 4005
 4006    #endregion
 4007    #region Instance Fields
 4008    string fileName_;
 4009    #endregion
 4010  }
 4011
 4012
 4013  /// <summary>
 4014  /// Default implementation of <see cref="IDynamicDataSource"/> for files stored on disk.
 4015  /// </summary>
 4016  public class DynamicDiskDataSource : IDynamicDataSource
 4017  {
 4018
 4019    #region IDataSource Members
 4020    /// <summary>
 4021    /// Get a <see cref="Stream"/> providing data for an entry.
 4022    /// </summary>
 4023    /// <param name="entry">The entry to provide data for.</param>
 4024    /// <param name="name">The file name for data if known.</param>
 4025    /// <returns>Returns a stream providing data; or null if not available</returns>
 4026    public Stream GetSource(ZipEntry entry, string name)
 4027    {
 4028      Stream result = null;
 4029
 4030      if ( name != null ) {
 4031        result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 4032      }
 4033
 4034      return result;
 4035    }
 4036
 4037    #endregion
 4038  }
 4039
 4040  #endregion
 4041
 4042  #region Archive Storage
 4043  /// <summary>
 4044  /// Defines facilities for data storage when updating Zip Archives.
 4045  /// </summary>
 4046  public interface IArchiveStorage
 4047  {
 4048    /// <summary>
 4049    /// Get the <see cref="FileUpdateMode"/> to apply during updates.
 4050    /// </summary>
 4051    FileUpdateMode UpdateMode { get; }
 4052
 4053    /// <summary>
 4054    /// Get an empty <see cref="Stream"/> that can be used for temporary output.
 4055    /// </summary>
 4056    /// <returns>Returns a temporary output <see cref="Stream"/></returns>
 4057    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4058    Stream GetTemporaryOutput();
 4059
 4060    /// <summary>
 4061    /// Convert a temporary output stream to a final stream.
 4062    /// </summary>
 4063    /// <returns>The resulting final <see cref="Stream"/></returns>
 4064    /// <seealso cref="GetTemporaryOutput"/>
 4065    Stream ConvertTemporaryToFinal();
 4066
 4067    /// <summary>
 4068    /// Make a temporary copy of the original stream.
 4069    /// </summary>
 4070    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4071    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4072    Stream MakeTemporaryCopy(Stream stream);
 4073
 4074    /// <summary>
 4075    /// Return a stream suitable for performing direct updates on the original source.
 4076    /// </summary>
 4077    /// <param name="stream">The current stream.</param>
 4078    /// <returns>Returns a stream suitable for direct updating.</returns>
 4079    /// <remarks>This may be the current stream passed.</remarks>
 4080    Stream OpenForDirectUpdate(Stream stream);
 4081
 4082    /// <summary>
 4083    /// Dispose of this instance.
 4084    /// </summary>
 4085    void Dispose();
 4086  }
 4087
 4088  /// <summary>
 4089  /// An abstract <see cref="IArchiveStorage"/> suitable for extension by inheritance.
 4090  /// </summary>
 4091  abstract public class BaseArchiveStorage : IArchiveStorage
 4092  {
 4093    #region Constructors
 4094    /// <summary>
 4095    /// Initializes a new instance of the <see cref="BaseArchiveStorage"/> class.
 4096    /// </summary>
 4097    /// <param name="updateMode">The update mode.</param>
 4098    protected BaseArchiveStorage(FileUpdateMode updateMode)
 4099    {
 4100      updateMode_ = updateMode;
 4101    }
 4102    #endregion
 4103
 4104    #region IArchiveStorage Members
 4105
 4106    /// <summary>
 4107    /// Gets a temporary output <see cref="Stream"/>
 4108    /// </summary>
 4109    /// <returns>Returns the temporary output stream.</returns>
 4110    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4111    public abstract Stream GetTemporaryOutput();
 4112
 4113    /// <summary>
 4114    /// Converts the temporary <see cref="Stream"/> to its final form.
 4115    /// </summary>
 4116    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4117    /// the final storage for the archive.</returns>
 4118    /// <seealso cref="GetTemporaryOutput"/>
 4119    public abstract Stream ConvertTemporaryToFinal();
 4120
 4121    /// <summary>
 4122    /// Make a temporary copy of a <see cref="Stream"/>.
 4123    /// </summary>
 4124    /// <param name="stream">The <see cref="Stream"/> to make a copy of.</param>
 4125    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4126    public abstract Stream MakeTemporaryCopy(Stream stream);
 4127
 4128    /// <summary>
 4129    /// Return a stream suitable for performing direct updates on the original source.
 4130    /// </summary>
 4131    /// <param name="stream">The <see cref="Stream"/> to open for direct update.</param>
 4132    /// <returns>Returns a stream suitable for direct updating.</returns>
 4133    public abstract Stream OpenForDirectUpdate(Stream stream);
 4134
 4135    /// <summary>
 4136    /// Disposes this instance.
 4137    /// </summary>
 4138    public abstract void Dispose();
 4139
 4140    /// <summary>
 4141    /// Gets the update mode applicable.
 4142    /// </summary>
 4143    /// <value>The update mode.</value>
 4144    public FileUpdateMode UpdateMode
 4145    {
 4146      get {
 4147        return updateMode_;
 4148      }
 4149    }
 4150
 4151    #endregion
 4152
 4153    #region Instance Fields
 4154    FileUpdateMode updateMode_;
 4155    #endregion
 4156  }
 4157
 4158  /// <summary>
 4159  /// An <see cref="IArchiveStorage"/> implementation suitable for hard disks.
 4160  /// </summary>
 4161  public class DiskArchiveStorage : BaseArchiveStorage
 4162  {
 4163    #region Constructors
 4164    /// <summary>
 4165    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4166    /// </summary>
 4167    /// <param name="file">The file.</param>
 4168    /// <param name="updateMode">The update mode.</param>
 4169    public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode)
 114170      : base(updateMode)
 4171    {
 114172       if ( file.Name == null ) {
 04173        throw new ZipException("Cant handle non file archives");
 4174      }
 4175
 114176      fileName_ = file.Name;
 114177    }
 4178
 4179    /// <summary>
 4180    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4181    /// </summary>
 4182    /// <param name="file">The file.</param>
 4183    public DiskArchiveStorage(ZipFile file)
 104184      : this(file, FileUpdateMode.Safe)
 4185    {
 104186    }
 4187    #endregion
 4188
 4189    #region IArchiveStorage Members
 4190
 4191    /// <summary>
 4192    /// Gets a temporary output <see cref="Stream"/> for performing updates on.
 4193    /// </summary>
 4194    /// <returns>Returns the temporary output stream.</returns>
 4195    public override Stream GetTemporaryOutput()
 4196    {
 24197       if ( temporaryName_ != null ) {
 04198        temporaryName_ = GetTempFileName(temporaryName_, true);
 04199        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 04200      }
 4201      else {
 4202        // Determine where to place files based on internal strategy.
 4203        // Currently this is always done in system temp directory.
 24204        temporaryName_ = Path.GetTempFileName();
 24205        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4206      }
 4207
 24208      return temporaryStream_;
 4209    }
 4210
 4211    /// <summary>
 4212    /// Converts a temporary <see cref="Stream"/> to its final form.
 4213    /// </summary>
 4214    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4215    /// the final storage for the archive.</returns>
 4216    public override Stream ConvertTemporaryToFinal()
 4217    {
 34218       if ( temporaryStream_ == null ) {
 04219        throw new ZipException("No temporary stream has been created");
 4220      }
 4221
 34222      Stream result = null;
 4223
 34224      string moveTempName = GetTempFileName(fileName_, false);
 34225      bool newFileCreated = false;
 4226
 4227      try  {
 34228        temporaryStream_.Close();
 34229        File.Move(fileName_, moveTempName);
 34230        File.Move(temporaryName_, fileName_);
 34231        newFileCreated = true;
 34232        File.Delete(moveTempName);
 4233
 34234        result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 34235      }
 04236      catch(Exception) {
 04237        result  = null;
 4238
 4239        // Try to roll back changes...
 04240         if ( !newFileCreated ) {
 04241          File.Move(moveTempName, fileName_);
 04242          File.Delete(temporaryName_);
 4243        }
 4244
 04245        throw;
 4246      }
 4247
 34248      return result;
 4249    }
 4250
 4251    /// <summary>
 4252    /// Make a temporary copy of a stream.
 4253    /// </summary>
 4254    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4255    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4256    public override Stream MakeTemporaryCopy(Stream stream)
 4257    {
 14258      stream.Close();
 4259
 14260      temporaryName_ = GetTempFileName(fileName_, true);
 14261      File.Copy(fileName_, temporaryName_, true);
 4262
 14263      temporaryStream_ = new FileStream(temporaryName_,
 14264        FileMode.Open,
 14265        FileAccess.ReadWrite);
 14266      return temporaryStream_;
 4267    }
 4268
 4269    /// <summary>
 4270    /// Return a stream suitable for performing direct updates on the original source.
 4271    /// </summary>
 4272    /// <param name="stream">The current stream.</param>
 4273    /// <returns>Returns a stream suitable for direct updating.</returns>
 4274    /// <remarks>If the <paramref name="stream"/> is not null this is used as is.</remarks>
 4275    public override Stream OpenForDirectUpdate(Stream stream)
 4276    {
 4277      Stream result;
 14278       if ((stream == null) || !stream.CanWrite)
 4279      {
 14280         if (stream != null) {
 14281          stream.Close();
 4282        }
 4283
 14284        result = new FileStream(fileName_,
 14285            FileMode.Open,
 14286            FileAccess.ReadWrite);
 14287      }
 4288      else
 4289      {
 04290        result = stream;
 4291      }
 4292
 14293      return result;
 4294    }
 4295
 4296    /// <summary>
 4297    /// Disposes this instance.
 4298    /// </summary>
 4299    public override void Dispose()
 4300    {
 114301       if ( temporaryStream_ != null ) {
 34302        temporaryStream_.Close();
 4303      }
 114304    }
 4305
 4306    #endregion
 4307
 4308    #region Internal routines
 4309    static string GetTempFileName(string original, bool makeTempFile)
 4310    {
 44311      string result = null;
 4312
 44313       if ( original == null ) {
 04314        result = Path.GetTempFileName();
 04315      }
 4316      else {
 44317        int counter = 0;
 44318        int suffixSeed = DateTime.Now.Second;
 4319
 94320         while ( result == null ) {
 54321          counter += 1;
 54322          string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter);
 54323           if ( !File.Exists(newName) ) {
 44324             if ( makeTempFile) {
 4325              try  {
 4326                // Try and create the file.
 14327                using ( FileStream stream = File.Create(newName) ) {
 14328                }
 14329                result = newName;
 14330              }
 04331              catch {
 04332                suffixSeed = DateTime.Now.Second;
 04333              }
 4334            }
 4335            else {
 34336              result = newName;
 4337            }
 4338          }
 4339        }
 4340      }
 44341      return result;
 4342    }
 4343    #endregion
 4344
 4345    #region Instance Fields
 4346    Stream temporaryStream_;
 4347    string fileName_;
 4348    string temporaryName_;
 4349    #endregion
 4350  }
 4351
 4352  /// <summary>
 4353  /// An <see cref="IArchiveStorage"/> implementation suitable for in memory streams.
 4354  /// </summary>
 4355  public class MemoryArchiveStorage : BaseArchiveStorage
 4356  {
 4357    #region Constructors
 4358    /// <summary>
 4359    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4360    /// </summary>
 4361    public MemoryArchiveStorage()
 4362      : base(FileUpdateMode.Direct)
 4363    {
 4364    }
 4365
 4366    /// <summary>
 4367    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4368    /// </summary>
 4369    /// <param name="updateMode">The <see cref="FileUpdateMode"/> to use</param>
 4370    /// <remarks>This constructor is for testing as memory streams dont really require safe mode.</remarks>
 4371    public MemoryArchiveStorage(FileUpdateMode updateMode)
 4372      : base(updateMode)
 4373    {
 4374    }
 4375
 4376    #endregion
 4377
 4378    #region Properties
 4379    /// <summary>
 4380    /// Get the stream returned by <see cref="ConvertTemporaryToFinal"/> if this was in fact called.
 4381    /// </summary>
 4382    public MemoryStream FinalStream
 4383    {
 4384      get { return finalStream_; }
 4385    }
 4386
 4387    #endregion
 4388
 4389    #region IArchiveStorage Members
 4390
 4391    /// <summary>
 4392    /// Gets the temporary output <see cref="Stream"/>
 4393    /// </summary>
 4394    /// <returns>Returns the temporary output stream.</returns>
 4395    public override Stream GetTemporaryOutput()
 4396    {
 4397      temporaryStream_ = new MemoryStream();
 4398      return temporaryStream_;
 4399    }
 4400
 4401    /// <summary>
 4402    /// Converts the temporary <see cref="Stream"/> to its final form.
 4403    /// </summary>
 4404    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4405    /// the final storage for the archive.</returns>
 4406    public override Stream ConvertTemporaryToFinal()
 4407    {
 4408      if ( temporaryStream_ == null ) {
 4409        throw new ZipException("No temporary stream has been created");
 4410      }
 4411
 4412      finalStream_ = new MemoryStream(temporaryStream_.ToArray());
 4413      return finalStream_;
 4414    }
 4415
 4416    /// <summary>
 4417    /// Make a temporary copy of the original stream.
 4418    /// </summary>
 4419    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4420    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4421    public override Stream MakeTemporaryCopy(Stream stream)
 4422    {
 4423      temporaryStream_ = new MemoryStream();
 4424      stream.Position = 0;
 4425      StreamUtils.Copy(stream, temporaryStream_, new byte[4096]);
 4426      return temporaryStream_;
 4427    }
 4428
 4429    /// <summary>
 4430    /// Return a stream suitable for performing direct updates on the original source.
 4431    /// </summary>
 4432    /// <param name="stream">The original source stream</param>
 4433    /// <returns>Returns a stream suitable for direct updating.</returns>
 4434    /// <remarks>If the <paramref name="stream"/> passed is not null this is used;
 4435    /// otherwise a new <see cref="MemoryStream"/> is returned.</remarks>
 4436    public override Stream OpenForDirectUpdate(Stream stream)
 4437    {
 4438      Stream result;
 4439      if ((stream == null) || !stream.CanWrite) {
 4440
 4441        result = new MemoryStream();
 4442
 4443        if (stream != null) {
 4444          stream.Position = 0;
 4445          StreamUtils.Copy(stream, result, new byte[4096]);
 4446
 4447          stream.Close();
 4448        }
 4449      }
 4450      else {
 4451        result = stream;
 4452      }
 4453
 4454      return result;
 4455    }
 4456
 4457    /// <summary>
 4458    /// Disposes this instance.
 4459    /// </summary>
 4460    public override void Dispose()
 4461    {
 4462      if ( temporaryStream_ != null ) {
 4463        temporaryStream_.Close();
 4464      }
 4465    }
 4466
 4467    #endregion
 4468
 4469    #region Instance Fields
 4470    MemoryStream temporaryStream_;
 4471    MemoryStream finalStream_;
 4472    #endregion
 4473  }
 4474
 4475  #endregion
 4476}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_DynamicDiskDataSource.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_DynamicDiskDataSource.htm new file mode 100644 index 000000000..959ed4a04 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_DynamicDiskDataSource.htm @@ -0,0 +1,4518 @@ + + + + +ICSharpCode.SharpZipLib.Zip.DynamicDiskDataSource - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.DynamicDiskDataSource
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs
Covered lines:4
Uncovered lines:0
Coverable lines:4
Total lines:4476
Line coverage:100%
Branch coverage:100%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
GetSource(...)2100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipFile.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-03-02  Z-1650  Fixed updating ODT archives in memory. Exposed exceptions in updating.
 42//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 43//  2012-11-29  Z-1684  Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp
 44
 45using System;
 46using System.Collections;
 47using System.IO;
 48using System.Text;
 49using System.Globalization;
 50
 51#if !NETCF_1_0
 52using System.Security.Cryptography;
 53using ICSharpCode.SharpZipLib.Encryption;
 54#endif
 55
 56using ICSharpCode.SharpZipLib.Core;
 57using ICSharpCode.SharpZipLib.Checksums;
 58using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 59using ICSharpCode.SharpZipLib.Zip.Compression;
 60
 61namespace ICSharpCode.SharpZipLib.Zip
 62{
 63  #region Keys Required Event Args
 64  /// <summary>
 65  /// Arguments used with KeysRequiredEvent
 66  /// </summary>
 67  public class KeysRequiredEventArgs : EventArgs
 68  {
 69    #region Constructors
 70    /// <summary>
 71    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 72    /// </summary>
 73    /// <param name="name">The name of the file for which keys are required.</param>
 74    public KeysRequiredEventArgs(string name)
 75    {
 76      fileName = name;
 77    }
 78
 79    /// <summary>
 80    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 81    /// </summary>
 82    /// <param name="name">The name of the file for which keys are required.</param>
 83    /// <param name="keyValue">The current key value.</param>
 84    public KeysRequiredEventArgs(string name, byte[] keyValue)
 85    {
 86      fileName = name;
 87      key = keyValue;
 88    }
 89
 90    #endregion
 91    #region Properties
 92    /// <summary>
 93    /// Gets the name of the file for which keys are required.
 94    /// </summary>
 95    public string FileName
 96    {
 97      get { return fileName; }
 98    }
 99
 100    /// <summary>
 101    /// Gets or sets the key value
 102    /// </summary>
 103    public byte[] Key
 104    {
 105      get { return key; }
 106      set { key = value; }
 107    }
 108    #endregion
 109
 110    #region Instance Fields
 111    string fileName;
 112    byte[] key;
 113    #endregion
 114  }
 115  #endregion
 116
 117  #region Test Definitions
 118  /// <summary>
 119  /// The strategy to apply to testing.
 120  /// </summary>
 121  public enum TestStrategy
 122  {
 123    /// <summary>
 124    /// Find the first error only.
 125    /// </summary>
 126    FindFirstError,
 127    /// <summary>
 128    /// Find all possible errors.
 129    /// </summary>
 130    FindAllErrors,
 131  }
 132
 133  /// <summary>
 134  /// The operation in progress reported by a <see cref="ZipTestResultHandler"/> during testing.
 135  /// </summary>
 136  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 137  public enum TestOperation
 138  {
 139    /// <summary>
 140    /// Setting up testing.
 141    /// </summary>
 142    Initialising,
 143
 144    /// <summary>
 145    /// Testing an individual entries header
 146    /// </summary>
 147    EntryHeader,
 148
 149    /// <summary>
 150    /// Testing an individual entries data
 151    /// </summary>
 152    EntryData,
 153
 154    /// <summary>
 155    /// Testing an individual entry has completed.
 156    /// </summary>
 157    EntryComplete,
 158
 159    /// <summary>
 160    /// Running miscellaneous tests
 161    /// </summary>
 162    MiscellaneousTests,
 163
 164    /// <summary>
 165    /// Testing is complete
 166    /// </summary>
 167    Complete,
 168  }
 169
 170  /// <summary>
 171  /// Status returned returned by <see cref="ZipTestResultHandler"/> during testing.
 172  /// </summary>
 173  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 174  public class TestStatus
 175  {
 176    #region Constructors
 177    /// <summary>
 178    /// Initialise a new instance of <see cref="TestStatus"/>
 179    /// </summary>
 180    /// <param name="file">The <see cref="ZipFile"/> this status applies to.</param>
 181    public TestStatus(ZipFile file)
 182    {
 183      file_ = file;
 184    }
 185    #endregion
 186
 187    #region Properties
 188
 189    /// <summary>
 190    /// Get the current <see cref="TestOperation"/> in progress.
 191    /// </summary>
 192    public TestOperation Operation
 193    {
 194      get { return operation_; }
 195    }
 196
 197    /// <summary>
 198    /// Get the <see cref="ZipFile"/> this status is applicable to.
 199    /// </summary>
 200    public ZipFile File
 201    {
 202      get { return file_; }
 203    }
 204
 205    /// <summary>
 206    /// Get the current/last entry tested.
 207    /// </summary>
 208    public ZipEntry Entry
 209    {
 210      get { return entry_; }
 211    }
 212
 213    /// <summary>
 214    /// Get the number of errors detected so far.
 215    /// </summary>
 216    public int ErrorCount
 217    {
 218      get { return errorCount_; }
 219    }
 220
 221    /// <summary>
 222    /// Get the number of bytes tested so far for the current entry.
 223    /// </summary>
 224    public long BytesTested
 225    {
 226      get { return bytesTested_; }
 227    }
 228
 229    /// <summary>
 230    /// Get a value indicating wether the last entry test was valid.
 231    /// </summary>
 232    public bool EntryValid
 233    {
 234      get { return entryValid_; }
 235    }
 236    #endregion
 237
 238    #region Internal API
 239    internal void AddError()
 240    {
 241      errorCount_++;
 242      entryValid_ = false;
 243    }
 244
 245    internal void SetOperation(TestOperation operation)
 246    {
 247      operation_ = operation;
 248    }
 249
 250    internal void SetEntry(ZipEntry entry)
 251    {
 252      entry_ = entry;
 253      entryValid_ = true;
 254      bytesTested_ = 0;
 255    }
 256
 257    internal void SetBytesTested(long value)
 258    {
 259      bytesTested_ = value;
 260    }
 261    #endregion
 262
 263    #region Instance Fields
 264    ZipFile file_;
 265    ZipEntry entry_;
 266    bool entryValid_;
 267    int errorCount_;
 268    long bytesTested_;
 269    TestOperation operation_;
 270    #endregion
 271  }
 272
 273  /// <summary>
 274  /// Delegate invoked during <see cref="ZipFile.TestArchive(bool, TestStrategy, ZipTestResultHandler)">testing</see> if
 275  /// </summary>
 276  /// <remarks>If the message is non-null an error has occured.  If the message is null
 277  /// the operation as found in <see cref="TestStatus">status</see> has started.</remarks>
 278  public delegate void ZipTestResultHandler(TestStatus status, string message);
 279  #endregion
 280
 281  #region Update Definitions
 282  /// <summary>
 283  /// The possible ways of <see cref="ZipFile.CommitUpdate()">applying updates</see> to an archive.
 284  /// </summary>
 285  public enum FileUpdateMode
 286  {
 287    /// <summary>
 288    /// Perform all updates on temporary files ensuring that the original file is saved.
 289    /// </summary>
 290    Safe,
 291    /// <summary>
 292    /// Update the archive directly, which is faster but less safe.
 293    /// </summary>
 294    Direct,
 295  }
 296  #endregion
 297
 298  #region ZipFile Class
 299  /// <summary>
 300  /// This class represents a Zip archive.  You can ask for the contained
 301  /// entries, or get an input stream for a file entry.  The entry is
 302  /// automatically decompressed.
 303  ///
 304  /// You can also update the archive adding or deleting entries.
 305  ///
 306  /// This class is thread safe for input:  You can open input streams for arbitrary
 307  /// entries in different threads.
 308  /// <br/>
 309  /// <br/>Author of the original java version : Jochen Hoenicke
 310  /// </summary>
 311  /// <example>
 312  /// <code>
 313  /// using System;
 314  /// using System.Text;
 315  /// using System.Collections;
 316  /// using System.IO;
 317  ///
 318  /// using ICSharpCode.SharpZipLib.Zip;
 319  ///
 320  /// class MainClass
 321  /// {
 322  ///   static public void Main(string[] args)
 323  ///   {
 324  ///     using (ZipFile zFile = new ZipFile(args[0])) {
 325  ///       Console.WriteLine("Listing of : " + zFile.Name);
 326  ///       Console.WriteLine("");
 327  ///       Console.WriteLine("Raw Size    Size      Date     Time     Name");
 328  ///       Console.WriteLine("--------  --------  --------  ------  ---------");
 329  ///       foreach (ZipEntry e in zFile) {
 330  ///         if ( e.IsFile ) {
 331  ///           DateTime d = e.DateTime;
 332  ///           Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
 333  ///             d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
 334  ///             e.Name);
 335  ///         }
 336  ///       }
 337  ///     }
 338  ///   }
 339  /// }
 340  /// </code>
 341  /// </example>
 342  public class ZipFile : IEnumerable, IDisposable
 343  {
 344    #region KeyHandling
 345
 346    /// <summary>
 347    /// Delegate for handling keys/password setting during compresion/decompression.
 348    /// </summary>
 349    public delegate void KeysRequiredEventHandler(
 350      object sender,
 351      KeysRequiredEventArgs e
 352    );
 353
 354    /// <summary>
 355    /// Event handler for handling encryption keys.
 356    /// </summary>
 357    public KeysRequiredEventHandler KeysRequired;
 358
 359    /// <summary>
 360    /// Handles getting of encryption keys when required.
 361    /// </summary>
 362    /// <param name="fileName">The file for which encryption keys are required.</param>
 363    void OnKeysRequired(string fileName)
 364    {
 365      if (KeysRequired != null) {
 366        var krea = new KeysRequiredEventArgs(fileName, key);
 367        KeysRequired(this, krea);
 368        key = krea.Key;
 369      }
 370    }
 371
 372    /// <summary>
 373    /// Get/set the encryption key value.
 374    /// </summary>
 375    byte[] Key
 376    {
 377      get { return key; }
 378      set { key = value; }
 379    }
 380
 381#if !NETCF_1_0
 382    /// <summary>
 383    /// Password to be used for encrypting/decrypting files.
 384    /// </summary>
 385    /// <remarks>Set to null if no password is required.</remarks>
 386    public string Password
 387    {
 388      set
 389      {
 390        if ( string.IsNullOrEmpty(value)) {
 391          key = null;
 392        }
 393        else {
 394          rawPassword_ = value;
 395          key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value));
 396        }
 397      }
 398    }
 399#endif
 400
 401    /// <summary>
 402    /// Get a value indicating wether encryption keys are currently available.
 403    /// </summary>
 404    bool HaveKeys
 405    {
 406      get { return key != null; }
 407    }
 408    #endregion
 409
 410    #region Constructors
 411    /// <summary>
 412    /// Opens a Zip file with the given name for reading.
 413    /// </summary>
 414    /// <param name="name">The name of the file to open.</param>
 415    /// <exception cref="ArgumentNullException">The argument supplied is null.</exception>
 416    /// <exception cref="IOException">
 417    /// An i/o error occurs
 418    /// </exception>
 419    /// <exception cref="ZipException">
 420    /// The file doesn't contain a valid zip archive.
 421    /// </exception>
 422    public ZipFile(string name)
 423    {
 424      if ( name == null ) {
 425        throw new ArgumentNullException(nameof(name));
 426      }
 427
 428      name_ = name;
 429
 430      baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 431      isStreamOwner = true;
 432
 433      try {
 434        ReadEntries();
 435      }
 436      catch {
 437        DisposeInternal(true);
 438        throw;
 439      }
 440    }
 441
 442    /// <summary>
 443    /// Opens a Zip file reading the given <see cref="FileStream"/>.
 444    /// </summary>
 445    /// <param name="file">The <see cref="FileStream"/> to read archive data from.</param>
 446    /// <exception cref="ArgumentNullException">The supplied argument is null.</exception>
 447    /// <exception cref="IOException">
 448    /// An i/o error occurs.
 449    /// </exception>
 450    /// <exception cref="ZipException">
 451    /// The file doesn't contain a valid zip archive.
 452    /// </exception>
 453    public ZipFile(FileStream file)
 454    {
 455      if ( file == null ) {
 456        throw new ArgumentNullException(nameof(file));
 457      }
 458
 459      if ( !file.CanSeek ) {
 460        throw new ArgumentException("Stream is not seekable", nameof(file));
 461      }
 462
 463      baseStream_  = file;
 464      name_ = file.Name;
 465      isStreamOwner = true;
 466
 467      try {
 468        ReadEntries();
 469      }
 470      catch {
 471        DisposeInternal(true);
 472        throw;
 473      }
 474    }
 475
 476    /// <summary>
 477    /// Opens a Zip file reading the given <see cref="Stream"/>.
 478    /// </summary>
 479    /// <param name="stream">The <see cref="Stream"/> to read archive data from.</param>
 480    /// <exception cref="IOException">
 481    /// An i/o error occurs
 482    /// </exception>
 483    /// <exception cref="ZipException">
 484    /// The stream doesn't contain a valid zip archive.<br/>
 485    /// </exception>
 486    /// <exception cref="ArgumentException">
 487    /// The <see cref="Stream">stream</see> doesnt support seeking.
 488    /// </exception>
 489    /// <exception cref="ArgumentNullException">
 490    /// The <see cref="Stream">stream</see> argument is null.
 491    /// </exception>
 492    public ZipFile(Stream stream)
 493    {
 494      if ( stream == null ) {
 495        throw new ArgumentNullException(nameof(stream));
 496      }
 497
 498      if ( !stream.CanSeek ) {
 499        throw new ArgumentException("Stream is not seekable", nameof(stream));
 500      }
 501
 502      baseStream_  = stream;
 503      isStreamOwner = true;
 504
 505      if ( baseStream_.Length > 0 ) {
 506        try {
 507          ReadEntries();
 508        }
 509        catch {
 510          DisposeInternal(true);
 511          throw;
 512        }
 513      } else {
 514        entries_ = new ZipEntry[0];
 515        isNewArchive_ = true;
 516      }
 517    }
 518
 519    /// <summary>
 520    /// Initialises a default <see cref="ZipFile"/> instance with no entries and no file storage.
 521    /// </summary>
 522    internal ZipFile()
 523    {
 524      entries_ = new ZipEntry[0];
 525      isNewArchive_ = true;
 526    }
 527
 528    #endregion
 529
 530    #region Destructors and Closing
 531    /// <summary>
 532    /// Finalize this instance.
 533    /// </summary>
 534    ~ZipFile()
 535    {
 536      Dispose(false);
 537    }
 538
 539    /// <summary>
 540    /// Closes the ZipFile.  If the stream is <see cref="IsStreamOwner">owned</see> then this also closes the underlying
 541    /// Once closed, no further instance methods should be called.
 542    /// </summary>
 543    /// <exception cref="System.IO.IOException">
 544    /// An i/o error occurs.
 545    /// </exception>
 546    public void Close()
 547    {
 548      DisposeInternal(true);
 549      GC.SuppressFinalize(this);
 550    }
 551
 552    #endregion
 553
 554    #region Creators
 555    /// <summary>
 556    /// Create a new <see cref="ZipFile"/> whose data will be stored in a file.
 557    /// </summary>
 558    /// <param name="fileName">The name of the archive to create.</param>
 559    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 560    /// <exception cref="ArgumentNullException"><paramref name="fileName"></paramref> is null</exception>
 561    public static ZipFile Create(string fileName)
 562    {
 563      if ( fileName == null ) {
 564        throw new ArgumentNullException(nameof(fileName));
 565      }
 566
 567      FileStream fs = File.Create(fileName);
 568
 569      var result = new ZipFile();
 570      result.name_ = fileName;
 571      result.baseStream_ = fs;
 572      result.isStreamOwner = true;
 573      return result;
 574    }
 575
 576    /// <summary>
 577    /// Create a new <see cref="ZipFile"/> whose data will be stored on a stream.
 578    /// </summary>
 579    /// <param name="outStream">The stream providing data storage.</param>
 580    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 581    /// <exception cref="ArgumentNullException"><paramref name="outStream"> is null</paramref></exception>
 582    /// <exception cref="ArgumentException"><paramref name="outStream"> doesnt support writing.</paramref></exception>
 583    public static ZipFile Create(Stream outStream)
 584    {
 585      if ( outStream == null ) {
 586        throw new ArgumentNullException(nameof(outStream));
 587      }
 588
 589      if ( !outStream.CanWrite ) {
 590        throw new ArgumentException("Stream is not writeable", nameof(outStream));
 591      }
 592
 593      if ( !outStream.CanSeek ) {
 594        throw new ArgumentException("Stream is not seekable", nameof(outStream));
 595      }
 596
 597      var result = new ZipFile();
 598      result.baseStream_ = outStream;
 599      return result;
 600    }
 601
 602    #endregion
 603
 604    #region Properties
 605    /// <summary>
 606    /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance.
 607    /// If the flag is true then the stream will be closed when <see cref="Close">Close</see> is called.
 608    /// </summary>
 609    /// <remarks>
 610    /// The default value is true in all cases.
 611    /// </remarks>
 612    public bool IsStreamOwner
 613    {
 614      get { return isStreamOwner; }
 615      set { isStreamOwner = value; }
 616    }
 617
 618    /// <summary>
 619    /// Get a value indicating wether
 620    /// this archive is embedded in another file or not.
 621    /// </summary>
 622    public bool IsEmbeddedArchive
 623    {
 624      // Not strictly correct in all circumstances currently
 625      get { return offsetOfFirstEntry > 0; }
 626    }
 627
 628    /// <summary>
 629    /// Get a value indicating that this archive is a new one.
 630    /// </summary>
 631    public bool IsNewArchive
 632    {
 633      get { return isNewArchive_; }
 634    }
 635
 636    /// <summary>
 637    /// Gets the comment for the zip file.
 638    /// </summary>
 639    public string ZipFileComment
 640    {
 641      get { return comment_; }
 642    }
 643
 644    /// <summary>
 645    /// Gets the name of this zip file.
 646    /// </summary>
 647    public string Name
 648    {
 649      get { return name_; }
 650    }
 651
 652    /// <summary>
 653    /// Gets the number of entries in this zip file.
 654    /// </summary>
 655    /// <exception cref="InvalidOperationException">
 656    /// The Zip file has been closed.
 657    /// </exception>
 658    [Obsolete("Use the Count property instead")]
 659    public int Size
 660    {
 661      get
 662      {
 663        return entries_.Length;
 664      }
 665    }
 666
 667    /// <summary>
 668    /// Get the number of entries contained in this <see cref="ZipFile"/>.
 669    /// </summary>
 670    public long Count
 671    {
 672      get
 673      {
 674        return entries_.Length;
 675      }
 676    }
 677
 678    /// <summary>
 679    /// Indexer property for ZipEntries
 680    /// </summary>
 681    [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")]
 682    public ZipEntry this[int index]
 683    {
 684      get {
 685        return (ZipEntry) entries_[index].Clone();
 686      }
 687    }
 688
 689    #endregion
 690
 691    #region Input Handling
 692    /// <summary>
 693    /// Gets an enumerator for the Zip entries in this Zip file.
 694    /// </summary>
 695    /// <returns>Returns an <see cref="IEnumerator"/> for this archive.</returns>
 696    /// <exception cref="ObjectDisposedException">
 697    /// The Zip file has been closed.
 698    /// </exception>
 699    public IEnumerator GetEnumerator()
 700    {
 701      if (isDisposed_) {
 702        throw new ObjectDisposedException("ZipFile");
 703      }
 704
 705      return new ZipEntryEnumerator(entries_);
 706    }
 707
 708    /// <summary>
 709    /// Return the index of the entry with a matching name
 710    /// </summary>
 711    /// <param name="name">Entry name to find</param>
 712    /// <param name="ignoreCase">If true the comparison is case insensitive</param>
 713    /// <returns>The index position of the matching entry or -1 if not found</returns>
 714    /// <exception cref="ObjectDisposedException">
 715    /// The Zip file has been closed.
 716    /// </exception>
 717    public int FindEntry(string name, bool ignoreCase)
 718    {
 719      if (isDisposed_) {
 720        throw new ObjectDisposedException("ZipFile");
 721      }
 722
 723      // TODO: This will be slow as the next ice age for huge archives!
 724      for (int i = 0; i < entries_.Length; i++) {
 725        if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) {
 726          return i;
 727        }
 728      }
 729      return -1;
 730    }
 731
 732    /// <summary>
 733    /// Searches for a zip entry in this archive with the given name.
 734    /// String comparisons are case insensitive
 735    /// </summary>
 736    /// <param name="name">
 737    /// The name to find. May contain directory components separated by slashes ('/').
 738    /// </param>
 739    /// <returns>
 740    /// A clone of the zip entry, or null if no entry with that name exists.
 741    /// </returns>
 742    /// <exception cref="ObjectDisposedException">
 743    /// The Zip file has been closed.
 744    /// </exception>
 745    public ZipEntry GetEntry(string name)
 746    {
 747      if (isDisposed_) {
 748        throw new ObjectDisposedException("ZipFile");
 749      }
 750
 751      int index = FindEntry(name, true);
 752      return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null;
 753    }
 754
 755    /// <summary>
 756    /// Gets an input stream for reading the given zip entry data in an uncompressed form.
 757    /// Normally the <see cref="ZipEntry"/> should be an entry returned by GetEntry().
 758    /// </summary>
 759    /// <param name="entry">The <see cref="ZipEntry"/> to obtain a data <see cref="Stream"/> for</param>
 760    /// <returns>An input <see cref="Stream"/> containing data for this <see cref="ZipEntry"/></returns>
 761    /// <exception cref="ObjectDisposedException">
 762    /// The ZipFile has already been closed
 763    /// </exception>
 764    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 765    /// The compression method for the entry is unknown
 766    /// </exception>
 767    /// <exception cref="IndexOutOfRangeException">
 768    /// The entry is not found in the ZipFile
 769    /// </exception>
 770    public Stream GetInputStream(ZipEntry entry)
 771    {
 772      if ( entry == null ) {
 773        throw new ArgumentNullException(nameof(entry));
 774      }
 775
 776      if ( isDisposed_ ) {
 777        throw new ObjectDisposedException("ZipFile");
 778      }
 779
 780      long index = entry.ZipFileIndex;
 781      if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) {
 782        index = FindEntry(entry.Name, true);
 783        if (index < 0) {
 784          throw new ZipException("Entry cannot be found");
 785        }
 786      }
 787      return GetInputStream(index);
 788    }
 789
 790    /// <summary>
 791    /// Creates an input stream reading a zip entry
 792    /// </summary>
 793    /// <param name="entryIndex">The index of the entry to obtain an input stream for.</param>
 794    /// <returns>
 795    /// An input <see cref="Stream"/> containing data for this <paramref name="entryIndex"/>
 796    /// </returns>
 797    /// <exception cref="ObjectDisposedException">
 798    /// The ZipFile has already been closed
 799    /// </exception>
 800    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 801    /// The compression method for the entry is unknown
 802    /// </exception>
 803    /// <exception cref="IndexOutOfRangeException">
 804    /// The entry is not found in the ZipFile
 805    /// </exception>
 806    public Stream GetInputStream(long entryIndex)
 807    {
 808      if ( isDisposed_ ) {
 809        throw new ObjectDisposedException("ZipFile");
 810      }
 811
 812      long start = LocateEntry(entries_[entryIndex]);
 813      CompressionMethod method = entries_[entryIndex].CompressionMethod;
 814      Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize);
 815
 816      if (entries_[entryIndex].IsCrypted == true) {
 817#if NETCF_1_0
 818        throw new ZipException("decryption not supported for Compact Framework 1.0");
 819#else
 820        result = CreateAndInitDecryptionStream(result, entries_[entryIndex]);
 821        if (result == null) {
 822          throw new ZipException("Unable to decrypt this entry");
 823        }
 824#endif
 825      }
 826
 827      switch (method) {
 828        case CompressionMethod.Stored:
 829          // read as is.
 830          break;
 831
 832        case CompressionMethod.Deflated:
 833          // No need to worry about ownership and closing as underlying stream close does nothing.
 834          result = new InflaterInputStream(result, new Inflater(true));
 835          break;
 836
 837        default:
 838          throw new ZipException("Unsupported compression method " + method);
 839      }
 840
 841      return result;
 842    }
 843
 844    #endregion
 845
 846    #region Archive Testing
 847    /// <summary>
 848    /// Test an archive for integrity/validity
 849    /// </summary>
 850    /// <param name="testData">Perform low level data Crc check</param>
 851    /// <returns>true if all tests pass, false otherwise</returns>
 852    /// <remarks>Testing will terminate on the first error found.</remarks>
 853    public bool TestArchive(bool testData)
 854    {
 855      return TestArchive(testData, TestStrategy.FindFirstError, null);
 856    }
 857
 858    /// <summary>
 859    /// Test an archive for integrity/validity
 860    /// </summary>
 861    /// <param name="testData">Perform low level data Crc check</param>
 862    /// <param name="strategy">The <see cref="TestStrategy"></see> to apply.</param>
 863    /// <param name="resultHandler">The <see cref="ZipTestResultHandler"></see> handler to call during testing.</param>
 864    /// <returns>true if all tests pass, false otherwise</returns>
 865    /// <exception cref="ObjectDisposedException">The object has already been closed.</exception>
 866    public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
 867    {
 868      if (isDisposed_) {
 869        throw new ObjectDisposedException("ZipFile");
 870      }
 871
 872      var status = new TestStatus(this);
 873
 874      if ( resultHandler != null ) {
 875        resultHandler(status, null);
 876      }
 877
 878      HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header;
 879
 880      bool testing = true;
 881
 882      try {
 883        int entryIndex = 0;
 884
 885        while ( testing && (entryIndex < Count) ) {
 886          if ( resultHandler != null ) {
 887            status.SetEntry(this[entryIndex]);
 888            status.SetOperation(TestOperation.EntryHeader);
 889            resultHandler(status, null);
 890          }
 891
 892          try  {
 893            TestLocalHeader(this[entryIndex], test);
 894          }
 895          catch(ZipException ex) {
 896            status.AddError();
 897
 898            if ( resultHandler != null ) {
 899              resultHandler(status,
 900                string.Format("Exception during test - '{0}'", ex.Message));
 901            }
 902
 903            testing &= strategy != TestStrategy.FindFirstError;
 904          }
 905
 906          if ( testing && testData && this[entryIndex].IsFile ) {
 907            if ( resultHandler != null ) {
 908              status.SetOperation(TestOperation.EntryData);
 909              resultHandler(status, null);
 910            }
 911
 912                        var crc = new Crc32();
 913
 914                        using (Stream entryStream = this.GetInputStream(this[entryIndex]))
 915                        {
 916
 917                            byte[] buffer = new byte[4096];
 918                            long totalBytes = 0;
 919                            int bytesRead;
 920                            while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0)
 921                            {
 922                                crc.Update(buffer, 0, bytesRead);
 923
 924                                if (resultHandler != null)
 925                                {
 926                                    totalBytes += bytesRead;
 927                                    status.SetBytesTested(totalBytes);
 928                                    resultHandler(status, null);
 929                                }
 930                            }
 931                        }
 932
 933            if (this[entryIndex].Crc != crc.Value) {
 934              status.AddError();
 935
 936              if ( resultHandler != null ) {
 937                resultHandler(status, "CRC mismatch");
 938              }
 939
 940              testing &= strategy != TestStrategy.FindFirstError;
 941            }
 942
 943            if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) {
 944              var helper = new ZipHelperStream(baseStream_);
 945              var data = new DescriptorData();
 946              helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data);
 947              if (this[entryIndex].Crc != data.Crc) {
 948                status.AddError();
 949              }
 950
 951              if (this[entryIndex].CompressedSize != data.CompressedSize) {
 952                status.AddError();
 953              }
 954
 955              if (this[entryIndex].Size != data.Size) {
 956                status.AddError();
 957              }
 958            }
 959          }
 960
 961          if ( resultHandler != null ) {
 962            status.SetOperation(TestOperation.EntryComplete);
 963            resultHandler(status, null);
 964          }
 965
 966          entryIndex += 1;
 967        }
 968
 969        if ( resultHandler != null ) {
 970          status.SetOperation(TestOperation.MiscellaneousTests);
 971          resultHandler(status, null);
 972        }
 973
 974        // TODO: the 'Corrina Johns' test where local headers are missing from
 975        // the central directory.  They are therefore invisible to many archivers.
 976      }
 977      catch (Exception ex) {
 978        status.AddError();
 979
 980        if ( resultHandler != null ) {
 981          resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message));
 982        }
 983      }
 984
 985      if ( resultHandler != null ) {
 986        status.SetOperation(TestOperation.Complete);
 987        status.SetEntry(null);
 988        resultHandler(status, null);
 989      }
 990
 991      return (status.ErrorCount == 0);
 992    }
 993
 994    [Flags]
 995    enum HeaderTest
 996    {
 997      Extract = 0x01,     // Check that this header represents an entry whose data can be extracted
 998      Header  = 0x02,     // Check that this header contents are valid
 999    }
 1000
 1001    /// <summary>
 1002    /// Test a local header against that provided from the central directory
 1003    /// </summary>
 1004    /// <param name="entry">
 1005    /// The entry to test against
 1006    /// </param>
 1007    /// <param name="tests">The type of <see cref="HeaderTest">tests</see> to carry out.</param>
 1008    /// <returns>The offset of the entries data in the file</returns>
 1009    long TestLocalHeader(ZipEntry entry, HeaderTest tests)
 1010    {
 1011      lock(baseStream_)
 1012      {
 1013        bool testHeader = (tests & HeaderTest.Header) != 0;
 1014        bool testData = (tests & HeaderTest.Extract) != 0;
 1015
 1016        baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin);
 1017        if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) {
 1018          throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)
 1019        }
 1020
 1021        var extractVersion = ( short ) (ReadLEUshort() & 0x00ff);
 1022        var localFlags = ( short )ReadLEUshort();
 1023        var compressionMethod = ( short )ReadLEUshort();
 1024        var fileTime = ( short )ReadLEUshort();
 1025        var fileDate = ( short )ReadLEUshort();
 1026        uint crcValue = ReadLEUint();
 1027        long compressedSize = ReadLEUint();
 1028        long size = ReadLEUint();
 1029        int storedNameLength = ReadLEUshort();
 1030        int extraDataLength = ReadLEUshort();
 1031
 1032        byte[] nameData = new byte[storedNameLength];
 1033        StreamUtils.ReadFully(baseStream_, nameData);
 1034
 1035        byte[] extraData = new byte[extraDataLength];
 1036        StreamUtils.ReadFully(baseStream_, extraData);
 1037
 1038        var localExtraData = new ZipExtraData(extraData);
 1039
 1040        // Extra data / zip64 checks
 1041        if (localExtraData.Find(1))
 1042        {
 1043          // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64
 1044          // and size or compressedSize = MaxValue, due to rogue creators.
 1045
 1046          size = localExtraData.ReadLong();
 1047          compressedSize = localExtraData.ReadLong();
 1048
 1049                    if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0)
 1050                    {
 1051                        // These may be valid if patched later
 1052                        if ( (size != -1) && (size != entry.Size)) {
 1053                            throw new ZipException("Size invalid for descriptor");
 1054                        }
 1055
 1056                        if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) {
 1057                            throw new ZipException("Compressed size invalid for descriptor");
 1058                        }
 1059                    }
 1060                }
 1061        else
 1062        {
 1063          // No zip64 extra data but entry requires it.
 1064          if ((extractVersion >= ZipConstants.VersionZip64) &&
 1065            (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue)))
 1066          {
 1067            throw new ZipException("Required Zip64 extended information missing");
 1068          }
 1069        }
 1070
 1071        if ( testData ) {
 1072          if ( entry.IsFile ) {
 1073            if ( !entry.IsCompressionMethodSupported() ) {
 1074              throw new ZipException("Compression method not supported");
 1075            }
 1076
 1077            if ( (extractVersion > ZipConstants.VersionMadeBy)
 1078              || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) {
 1079              throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extract
 1080            }
 1081
 1082            if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.Enha
 1083              throw new ZipException("The library does not support the zip version required to extract this entry");
 1084            }
 1085          }
 1086        }
 1087
 1088                if (testHeader)
 1089                {
 1090                    if ((extractVersion <= 63) &&  // Ignore later versions as we dont know about them..
 1091                        (extractVersion != 10) &&
 1092                        (extractVersion != 11) &&
 1093                        (extractVersion != 20) &&
 1094                        (extractVersion != 21) &&
 1095                        (extractVersion != 25) &&
 1096                        (extractVersion != 27) &&
 1097                        (extractVersion != 45) &&
 1098                        (extractVersion != 46) &&
 1099                        (extractVersion != 50) &&
 1100                        (extractVersion != 51) &&
 1101                        (extractVersion != 52) &&
 1102                        (extractVersion != 61) &&
 1103                        (extractVersion != 62) &&
 1104                        (extractVersion != 63)
 1105                        )
 1106                    {
 1107                        throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", 
 1108                    }
 1109
 1110                    // Local entry flags dont have reserved bit set on.
 1111                    if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | General
 1112                    {
 1113                        throw new ZipException("Reserved bit flags cannot be set.");
 1114                    }
 1115
 1116                    // Encryption requires extract version >= 20
 1117                    if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20))
 1118                    {
 1119                        throw new ZipException(string.Format("Version required to extract this entry is too low for encr
 1120                    }
 1121
 1122                    // Strong encryption requires encryption flag to be set and extract version >= 50.
 1123                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1124                    {
 1125                        if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0)
 1126                        {
 1127                            throw new ZipException("Strong encryption flag set but encryption flag is not set");
 1128                        }
 1129
 1130                        if (extractVersion < 50)
 1131                        {
 1132                            throw new ZipException(string.Format("Version required to extract this entry is too low for 
 1133                        }
 1134                    }
 1135
 1136                    // Patched entries require extract version >= 27
 1137                    if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27))
 1138                    {
 1139                        throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractV
 1140                    }
 1141
 1142                    // Central header flags match local entry flags.
 1143                    if (localFlags != entry.Flags)
 1144                    {
 1145                        throw new ZipException("Central header/local header flags mismatch");
 1146                    }
 1147
 1148                    // Central header compression method matches local entry
 1149                    if (entry.CompressionMethod != (CompressionMethod)compressionMethod)
 1150                    {
 1151                        throw new ZipException("Central header/local header compression method mismatch");
 1152                    }
 1153
 1154                    if (entry.Version != extractVersion)
 1155                    {
 1156                        throw new ZipException("Extract version mismatch");
 1157                    }
 1158
 1159                    // Strong encryption and extract version match
 1160                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1161                    {
 1162                        if (extractVersion < 62)
 1163                        {
 1164                            throw new ZipException("Strong encryption flag set but version not high enough");
 1165                        }
 1166                    }
 1167
 1168                    if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0)
 1169                    {
 1170                        if ((fileTime != 0) || (fileDate != 0))
 1171                        {
 1172                            throw new ZipException("Header masked set but date/time values non-zero");
 1173                        }
 1174                    }
 1175
 1176                    if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0)
 1177                    {
 1178                        if (crcValue != (uint)entry.Crc)
 1179                        {
 1180                            throw new ZipException("Central header/local header crc mismatch");
 1181                        }
 1182                    }
 1183
 1184                    // Crc valid for empty entry.
 1185                    // This will also apply to streamed entries where size isnt known and the header cant be patched
 1186                    if ((size == 0) && (compressedSize == 0))
 1187                    {
 1188                        if (crcValue != 0)
 1189                        {
 1190                            throw new ZipException("Invalid CRC for empty entry");
 1191                        }
 1192                    }
 1193
 1194                    // TODO: make test more correct...  can't compare lengths as was done originally as this can fail fo
 1195                    // Assuming a code page at this point is not valid?  Best is to store the name length in the ZipEntr
 1196                    if (entry.Name.Length > storedNameLength)
 1197                    {
 1198                        throw new ZipException("File name length mismatch");
 1199                    }
 1200
 1201                    // Name data has already been read convert it and compare.
 1202                    string localName = ZipConstants.ConvertToStringExt(localFlags, nameData);
 1203
 1204                    // Central directory and local entry name match
 1205                    if (localName != entry.Name)
 1206                    {
 1207                        throw new ZipException("Central header and local header file name mismatch");
 1208                    }
 1209
 1210                    // Directories have zero actual size but can have compressed size
 1211                    if (entry.IsDirectory)
 1212                    {
 1213                        if (size > 0)
 1214                        {
 1215                            throw new ZipException("Directory cannot have size");
 1216                        }
 1217
 1218                        // There may be other cases where the compressed size can be greater than this?
 1219                        // If so until details are known we will be strict.
 1220                        if (entry.IsCrypted)
 1221                        {
 1222                            if (compressedSize > ZipConstants.CryptoHeaderSize + 2)
 1223                            {
 1224                                throw new ZipException("Directory compressed size invalid");
 1225                            }
 1226                        }
 1227                        else if (compressedSize > 2)
 1228                        {
 1229                            // When not compressed the directory size can validly be 2 bytes
 1230                            // if the true size wasnt known when data was originally being written.
 1231                            // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes
 1232                            throw new ZipException("Directory compressed size invalid");
 1233                        }
 1234                    }
 1235
 1236                    if (!ZipNameTransform.IsValidName(localName, true))
 1237                    {
 1238                        throw new ZipException("Name is invalid");
 1239                    }
 1240                }
 1241
 1242        // Tests that apply to both data and header.
 1243
 1244        // Size can be verified only if it is known in the local header.
 1245        // it will always be known in the central header.
 1246        if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) ||
 1247          ((size > 0) || (compressedSize > 0))) {
 1248
 1249          if (size != entry.Size) {
 1250            throw new ZipException(
 1251              string.Format("Size mismatch between central header({0}) and local header({1})",
 1252                entry.Size, size));
 1253          }
 1254
 1255          if (compressedSize != entry.CompressedSize &&
 1256            compressedSize != 0xFFFFFFFF && compressedSize != -1) {
 1257            throw new ZipException(
 1258              string.Format("Compressed size mismatch between central header({0}) and local header({1})",
 1259              entry.CompressedSize, compressedSize));
 1260          }
 1261        }
 1262
 1263        int extraLength = storedNameLength + extraDataLength;
 1264        return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength;
 1265      }
 1266    }
 1267
 1268    #endregion
 1269
 1270    #region Updating
 1271
 1272    const int DefaultBufferSize = 4096;
 1273
 1274    /// <summary>
 1275    /// The kind of update to apply.
 1276    /// </summary>
 1277    enum UpdateCommand
 1278    {
 1279      Copy,       // Copy original file contents.
 1280      Modify,     // Change encryption, compression, attributes, name, time etc, of an existing file.
 1281      Add,        // Add a new file to the archive.
 1282    }
 1283
 1284    #region Properties
 1285    /// <summary>
 1286    /// Get / set the <see cref="INameTransform"/> to apply to names when updating.
 1287    /// </summary>
 1288    public INameTransform NameTransform
 1289    {
 1290      get {
 1291        return updateEntryFactory_.NameTransform;
 1292      }
 1293
 1294      set {
 1295        updateEntryFactory_.NameTransform = value;
 1296      }
 1297    }
 1298
 1299    /// <summary>
 1300    /// Get/set the <see cref="IEntryFactory"/> used to generate <see cref="ZipEntry"/> values
 1301    /// during updates.
 1302    /// </summary>
 1303    public IEntryFactory EntryFactory
 1304    {
 1305      get {
 1306        return updateEntryFactory_;
 1307      }
 1308
 1309      set {
 1310        if (value == null) {
 1311          updateEntryFactory_ = new ZipEntryFactory();
 1312        }
 1313        else {
 1314          updateEntryFactory_ = value;
 1315        }
 1316      }
 1317    }
 1318
 1319    /// <summary>
 1320    /// Get /set the buffer size to be used when updating this zip file.
 1321    /// </summary>
 1322    public int BufferSize
 1323    {
 1324      get { return bufferSize_; }
 1325      set {
 1326        if ( value < 1024 ) {
 1327#if NETCF_1_0
 1328          throw new ArgumentOutOfRangeException("value");
 1329#else
 1330          throw new ArgumentOutOfRangeException(nameof(value), "cannot be below 1024");
 1331#endif
 1332        }
 1333
 1334        if ( bufferSize_ != value ) {
 1335          bufferSize_ = value;
 1336          copyBuffer_ = null;
 1337        }
 1338      }
 1339    }
 1340
 1341    /// <summary>
 1342    /// Get a value indicating an update has <see cref="BeginUpdate()">been started</see>.
 1343    /// </summary>
 1344    public bool IsUpdating
 1345    {
 1346      get { return updates_ != null; }
 1347    }
 1348
 1349    /// <summary>
 1350    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 1351    /// </summary>
 1352    public UseZip64 UseZip64
 1353    {
 1354      get { return useZip64_; }
 1355      set { useZip64_ = value; }
 1356    }
 1357
 1358    #endregion
 1359
 1360    #region Immediate updating
 1361//    TBD: Direct form of updating
 1362//
 1363//    public void Update(IEntryMatcher deleteMatcher)
 1364//    {
 1365//    }
 1366//
 1367//    public void Update(IScanner addScanner)
 1368//    {
 1369//    }
 1370    #endregion
 1371
 1372    #region Deferred Updating
 1373    /// <summary>
 1374    /// Begin updating this <see cref="ZipFile"/> archive.
 1375    /// </summary>
 1376    /// <param name="archiveStorage">The <see cref="IArchiveStorage">archive storage</see> for use during the update.</p
 1377    /// <param name="dataSource">The <see cref="IDynamicDataSource">data source</see> to utilise during updating.</param
 1378    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1379    /// <exception cref="ArgumentNullException">One of the arguments provided is null</exception>
 1380    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1381    public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
 1382    {
 1383      if ( archiveStorage == null ) {
 1384        throw new ArgumentNullException(nameof(archiveStorage));
 1385      }
 1386
 1387      if ( dataSource == null ) {
 1388        throw new ArgumentNullException(nameof(dataSource));
 1389      }
 1390
 1391      if ( isDisposed_ ) {
 1392        throw new ObjectDisposedException("ZipFile");
 1393      }
 1394
 1395      if ( IsEmbeddedArchive ) {
 1396        throw new ZipException ("Cannot update embedded/SFX archives");
 1397      }
 1398
 1399      archiveStorage_ = archiveStorage;
 1400      updateDataSource_ = dataSource;
 1401
 1402      // NOTE: the baseStream_ may not currently support writing or seeking.
 1403
 1404      updateIndex_ = new Hashtable();
 1405
 1406      updates_ = new ArrayList(entries_.Length);
 1407      foreach(ZipEntry entry in entries_) {
 1408        int index = updates_.Add(new ZipUpdate(entry));
 1409        updateIndex_.Add(entry.Name, index);
 1410      }
 1411
 1412      // We must sort by offset before using offset's calculated sizes
 1413      updates_.Sort(new UpdateComparer());
 1414
 1415      int idx = 0;
 1416      foreach (ZipUpdate update in updates_) {
 1417        //If last entry, there is no next entry offset to use
 1418        if (idx == updates_.Count - 1)
 1419          break;
 1420
 1421        update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset;
 1422        idx++;
 1423      }
 1424      updateCount_ = updates_.Count;
 1425
 1426      contentsEdited_ = false;
 1427      commentEdited_ = false;
 1428      newComment_ = null;
 1429    }
 1430
 1431    /// <summary>
 1432    /// Begin updating to this <see cref="ZipFile"/> archive.
 1433    /// </summary>
 1434    /// <param name="archiveStorage">The storage to use during the update.</param>
 1435    public void BeginUpdate(IArchiveStorage archiveStorage)
 1436    {
 1437      BeginUpdate(archiveStorage, new DynamicDiskDataSource());
 1438    }
 1439
 1440    /// <summary>
 1441    /// Begin updating this <see cref="ZipFile"/> archive.
 1442    /// </summary>
 1443    /// <seealso cref="BeginUpdate(IArchiveStorage)"/>
 1444    /// <seealso cref="CommitUpdate"></seealso>
 1445    /// <seealso cref="AbortUpdate"></seealso>
 1446    public void BeginUpdate()
 1447    {
 1448      if ( Name == null ) {
 1449        BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource());
 1450      }
 1451      else {
 1452        BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource());
 1453      }
 1454    }
 1455
 1456    /// <summary>
 1457    /// Commit current updates, updating this archive.
 1458    /// </summary>
 1459    /// <seealso cref="BeginUpdate()"></seealso>
 1460    /// <seealso cref="AbortUpdate"></seealso>
 1461    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1462    public void CommitUpdate()
 1463    {
 1464      if ( isDisposed_ ) {
 1465        throw new ObjectDisposedException("ZipFile");
 1466      }
 1467
 1468      CheckUpdating();
 1469
 1470      try {
 1471        updateIndex_.Clear();
 1472        updateIndex_=null;
 1473
 1474        if( contentsEdited_ ) {
 1475          RunUpdates();
 1476        }
 1477        else if( commentEdited_ ) {
 1478          UpdateCommentOnly();
 1479        }
 1480        else {
 1481          // Create an empty archive if none existed originally.
 1482          if( entries_.Length==0 ) {
 1483            byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_);
 1484            using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) {
 1485              zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment);
 1486            }
 1487          }
 1488        }
 1489
 1490      }
 1491      finally {
 1492        PostUpdateCleanup();
 1493      }
 1494    }
 1495
 1496    /// <summary>
 1497    /// Abort updating leaving the archive unchanged.
 1498    /// </summary>
 1499    /// <seealso cref="BeginUpdate()"></seealso>
 1500    /// <seealso cref="CommitUpdate"></seealso>
 1501    public void AbortUpdate()
 1502    {
 1503      PostUpdateCleanup();
 1504    }
 1505
 1506    /// <summary>
 1507    /// Set the file comment to be recorded when the current update is <see cref="CommitUpdate">commited</see>.
 1508    /// </summary>
 1509    /// <param name="comment">The comment to record.</param>
 1510    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1511    public void SetComment(string comment)
 1512    {
 1513      if ( isDisposed_ ) {
 1514        throw new ObjectDisposedException("ZipFile");
 1515      }
 1516
 1517      CheckUpdating();
 1518
 1519      newComment_ = new ZipString(comment);
 1520
 1521      if ( newComment_.RawLength  > 0xffff ) {
 1522        newComment_ = null;
 1523        throw new ZipException("Comment length exceeds maximum - 65535");
 1524      }
 1525
 1526      // We dont take account of the original and current comment appearing to be the same
 1527      // as encoding may be different.
 1528      commentEdited_ = true;
 1529    }
 1530
 1531    #endregion
 1532
 1533    #region Adding Entries
 1534
 1535    void AddUpdate(ZipUpdate update)
 1536    {
 1537      contentsEdited_ = true;
 1538
 1539      int index = FindExistingUpdate(update.Entry.Name);
 1540
 1541      if (index >= 0) {
 1542        if ( updates_[index] == null ) {
 1543          updateCount_ += 1;
 1544        }
 1545
 1546        // Direct replacement is faster than delete and add.
 1547        updates_[index] = update;
 1548      }
 1549      else {
 1550        index = updates_.Add(update);
 1551        updateCount_ += 1;
 1552        updateIndex_.Add(update.Entry.Name, index);
 1553      }
 1554    }
 1555
 1556    /// <summary>
 1557    /// Add a new entry to the archive.
 1558    /// </summary>
 1559    /// <param name="fileName">The name of the file to add.</param>
 1560    /// <param name="compressionMethod">The compression method to use.</param>
 1561    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comment for this entry.</param>
 1562    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1563    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1564    /// <exception cref="ArgumentOutOfRangeException">Compression method is not supported.</exception>
 1565    public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText )
 1566    {
 1567      if (fileName == null) {
 1568        throw new ArgumentNullException(nameof(fileName));
 1569      }
 1570
 1571      if ( isDisposed_ ) {
 1572        throw new ObjectDisposedException("ZipFile");
 1573      }
 1574
 1575      if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) {
 1576        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1577      }
 1578
 1579      CheckUpdating();
 1580      contentsEdited_ = true;
 1581
 1582      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1583      entry.IsUnicodeText = useUnicodeText;
 1584      entry.CompressionMethod = compressionMethod;
 1585
 1586      AddUpdate(new ZipUpdate(fileName, entry));
 1587    }
 1588
 1589    /// <summary>
 1590    /// Add a new entry to the archive.
 1591    /// </summary>
 1592    /// <param name="fileName">The name of the file to add.</param>
 1593    /// <param name="compressionMethod">The compression method to use.</param>
 1594    /// <exception cref="ArgumentNullException">ZipFile has been closed.</exception>
 1595    /// <exception cref="ArgumentOutOfRangeException">The compression method is not supported.</exception>
 1596    public void Add(string fileName, CompressionMethod compressionMethod)
 1597    {
 1598      if ( fileName == null ) {
 1599        throw new ArgumentNullException(nameof(fileName));
 1600      }
 1601
 1602      if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) {
 1603        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1604      }
 1605
 1606      CheckUpdating();
 1607      contentsEdited_ = true;
 1608
 1609      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1610      entry.CompressionMethod = compressionMethod;
 1611      AddUpdate(new ZipUpdate(fileName, entry));
 1612    }
 1613
 1614    /// <summary>
 1615    /// Add a file to the archive.
 1616    /// </summary>
 1617    /// <param name="fileName">The name of the file to add.</param>
 1618    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1619    public void Add(string fileName)
 1620    {
 1621      if ( fileName == null ) {
 1622        throw new ArgumentNullException(nameof(fileName));
 1623      }
 1624
 1625      CheckUpdating();
 1626      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName)));
 1627    }
 1628
 1629    /// <summary>
 1630    /// Add a file to the archive.
 1631    /// </summary>
 1632    /// <param name="fileName">The name of the file to add.</param>
 1633    /// <param name="entryName">The name to use for the <see cref="ZipEntry"/> on the Zip file created.</param>
 1634    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1635    public void Add(string fileName, string entryName)
 1636    {
 1637      if (fileName == null) {
 1638        throw new ArgumentNullException(nameof(fileName));
 1639      }
 1640
 1641      if ( entryName == null ) {
 1642        throw new ArgumentNullException(nameof(entryName));
 1643      }
 1644
 1645      CheckUpdating();
 1646      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true)));
 1647    }
 1648
 1649
 1650    /// <summary>
 1651    /// Add a file entry with data.
 1652    /// </summary>
 1653    /// <param name="dataSource">The source of the data for this entry.</param>
 1654    /// <param name="entryName">The name to give to the entry.</param>
 1655    public void Add(IStaticDataSource dataSource, string entryName)
 1656    {
 1657      if ( dataSource == null ) {
 1658        throw new ArgumentNullException(nameof(dataSource));
 1659      }
 1660
 1661      if ( entryName == null ) {
 1662        throw new ArgumentNullException(nameof(entryName));
 1663      }
 1664
 1665      CheckUpdating();
 1666      AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false)));
 1667    }
 1668
 1669    /// <summary>
 1670    /// Add a file entry with data.
 1671    /// </summary>
 1672    /// <param name="dataSource">The source of the data for this entry.</param>
 1673    /// <param name="entryName">The name to give to the entry.</param>
 1674    /// <param name="compressionMethod">The compression method to use.</param>
 1675    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 1676    {
 1677      if ( dataSource == null ) {
 1678        throw new ArgumentNullException(nameof(dataSource));
 1679      }
 1680
 1681      if ( entryName == null ) {
 1682        throw new ArgumentNullException(nameof(entryName));
 1683      }
 1684
 1685      CheckUpdating();
 1686
 1687      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1688      entry.CompressionMethod = compressionMethod;
 1689
 1690      AddUpdate(new ZipUpdate(dataSource, entry));
 1691    }
 1692
 1693    /// <summary>
 1694    /// Add a file entry with data.
 1695    /// </summary>
 1696    /// <param name="dataSource">The source of the data for this entry.</param>
 1697    /// <param name="entryName">The name to give to the entry.</param>
 1698    /// <param name="compressionMethod">The compression method to use.</param>
 1699    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comments for this entry.</param>
 1700    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicode
 1701    {
 1702      if (dataSource == null) {
 1703        throw new ArgumentNullException(nameof(dataSource));
 1704      }
 1705
 1706      if ( entryName == null ) {
 1707        throw new ArgumentNullException(nameof(entryName));
 1708      }
 1709
 1710      CheckUpdating();
 1711
 1712      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1713      entry.IsUnicodeText = useUnicodeText;
 1714      entry.CompressionMethod = compressionMethod;
 1715
 1716      AddUpdate(new ZipUpdate(dataSource, entry));
 1717    }
 1718
 1719    /// <summary>
 1720    /// Add a <see cref="ZipEntry"/> that contains no data.
 1721    /// </summary>
 1722    /// <param name="entry">The entry to add.</param>
 1723    /// <remarks>This can be used to add directories, volume labels, or empty file entries.</remarks>
 1724    public void Add(ZipEntry entry)
 1725    {
 1726      if ( entry == null ) {
 1727        throw new ArgumentNullException(nameof(entry));
 1728      }
 1729
 1730      CheckUpdating();
 1731
 1732      if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) {
 1733        throw new ZipException("Entry cannot have any data");
 1734      }
 1735
 1736      AddUpdate(new ZipUpdate(UpdateCommand.Add, entry));
 1737    }
 1738
 1739    /// <summary>
 1740    /// Add a directory entry to the archive.
 1741    /// </summary>
 1742    /// <param name="directoryName">The directory to add.</param>
 1743    public void AddDirectory(string directoryName)
 1744    {
 1745      if ( directoryName == null ) {
 1746        throw new ArgumentNullException(nameof(directoryName));
 1747      }
 1748
 1749      CheckUpdating();
 1750
 1751      ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName);
 1752      AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry));
 1753    }
 1754
 1755    #endregion
 1756
 1757    #region Modifying Entries
 1758/* Modify not yet ready for public consumption.
 1759   Direct modification of an entry should not overwrite original data before its read.
 1760   Safe mode is trivial in this sense.
 1761    public void Modify(ZipEntry original, ZipEntry updated)
 1762    {
 1763      if ( original == null ) {
 1764        throw new ArgumentNullException("original");
 1765      }
 1766
 1767      if ( updated == null ) {
 1768        throw new ArgumentNullException("updated");
 1769      }
 1770
 1771      CheckUpdating();
 1772      contentsEdited_ = true;
 1773      updates_.Add(new ZipUpdate(original, updated));
 1774    }
 1775*/
 1776    #endregion
 1777
 1778    #region Deleting Entries
 1779    /// <summary>
 1780    /// Delete an entry by name
 1781    /// </summary>
 1782    /// <param name="fileName">The filename to delete</param>
 1783    /// <returns>True if the entry was found and deleted; false otherwise.</returns>
 1784    public bool Delete(string fileName)
 1785    {
 1786      if ( fileName == null ) {
 1787        throw new ArgumentNullException(nameof(fileName));
 1788      }
 1789
 1790      CheckUpdating();
 1791
 1792      bool result = false;
 1793      int index = FindExistingUpdate(fileName);
 1794      if ( (index >= 0) && (updates_[index] != null) ) {
 1795        result = true;
 1796        contentsEdited_ = true;
 1797        updates_[index] = null;
 1798        updateCount_ -= 1;
 1799      }
 1800      else {
 1801        throw new ZipException("Cannot find entry to delete");
 1802      }
 1803      return result;
 1804    }
 1805
 1806    /// <summary>
 1807    /// Delete a <see cref="ZipEntry"/> from the archive.
 1808    /// </summary>
 1809    /// <param name="entry">The entry to delete.</param>
 1810    public void Delete(ZipEntry entry)
 1811    {
 1812      if ( entry == null ) {
 1813        throw new ArgumentNullException(nameof(entry));
 1814      }
 1815
 1816      CheckUpdating();
 1817
 1818      int index = FindExistingUpdate(entry);
 1819      if ( index >= 0 ) {
 1820        contentsEdited_ = true;
 1821        updates_[index] = null;
 1822        updateCount_ -= 1;
 1823      }
 1824      else {
 1825        throw new ZipException("Cannot find entry to delete");
 1826      }
 1827    }
 1828
 1829    #endregion
 1830
 1831    #region Update Support
 1832
 1833    #region Writing Values/Headers
 1834    void WriteLEShort(int value)
 1835    {
 1836      baseStream_.WriteByte(( byte )(value & 0xff));
 1837      baseStream_.WriteByte(( byte )((value >> 8) & 0xff));
 1838    }
 1839
 1840    /// <summary>
 1841    /// Write an unsigned short in little endian byte order.
 1842    /// </summary>
 1843    void WriteLEUshort(ushort value)
 1844    {
 1845      baseStream_.WriteByte(( byte )(value & 0xff));
 1846      baseStream_.WriteByte(( byte )(value >> 8));
 1847    }
 1848
 1849    /// <summary>
 1850    /// Write an int in little endian byte order.
 1851    /// </summary>
 1852    void WriteLEInt(int value)
 1853    {
 1854      WriteLEShort(value & 0xffff);
 1855      WriteLEShort(value >> 16);
 1856    }
 1857
 1858    /// <summary>
 1859    /// Write an unsigned int in little endian byte order.
 1860    /// </summary>
 1861    void WriteLEUint(uint value)
 1862    {
 1863      WriteLEUshort((ushort)(value & 0xffff));
 1864      WriteLEUshort((ushort)(value >> 16));
 1865    }
 1866
 1867    /// <summary>
 1868    /// Write a long in little endian byte order.
 1869    /// </summary>
 1870    void WriteLeLong(long value)
 1871    {
 1872      WriteLEInt(( int )(value & 0xffffffff));
 1873      WriteLEInt(( int )(value >> 32));
 1874    }
 1875
 1876    void WriteLEUlong(ulong value)
 1877    {
 1878      WriteLEUint(( uint )(value & 0xffffffff));
 1879      WriteLEUint(( uint )(value >> 32));
 1880    }
 1881
 1882    void WriteLocalEntryHeader(ZipUpdate update)
 1883    {
 1884      ZipEntry entry = update.OutEntry;
 1885
 1886      // TODO: Local offset will require adjusting for multi-disk zip files.
 1887      entry.Offset = baseStream_.Position;
 1888
 1889      // TODO: Need to clear any entry flags that dont make sense or throw an exception here.
 1890      if (update.Command != UpdateCommand.Copy) {
 1891        if (entry.CompressionMethod == CompressionMethod.Deflated) {
 1892          if (entry.Size == 0) {
 1893            // No need to compress - no data.
 1894            entry.CompressedSize = entry.Size;
 1895            entry.Crc = 0;
 1896            entry.CompressionMethod = CompressionMethod.Stored;
 1897          }
 1898        }
 1899        else if (entry.CompressionMethod == CompressionMethod.Stored) {
 1900          entry.Flags &= ~(int)GeneralBitFlags.Descriptor;
 1901        }
 1902
 1903        if (HaveKeys) {
 1904          entry.IsCrypted = true;
 1905          if (entry.Crc < 0) {
 1906            entry.Flags |= (int)GeneralBitFlags.Descriptor;
 1907          }
 1908        }
 1909        else {
 1910          entry.IsCrypted = false;
 1911        }
 1912
 1913        switch (useZip64_) {
 1914          case UseZip64.Dynamic:
 1915            if (entry.Size < 0) {
 1916              entry.ForceZip64();
 1917            }
 1918            break;
 1919
 1920          case UseZip64.On:
 1921            entry.ForceZip64();
 1922            break;
 1923
 1924          case UseZip64.Off:
 1925            // Do nothing.  The entry itself may be using Zip64 independantly.
 1926            break;
 1927        }
 1928      }
 1929
 1930      // Write the local file header
 1931      WriteLEInt(ZipConstants.LocalHeaderSignature);
 1932
 1933      WriteLEShort(entry.Version);
 1934      WriteLEShort(entry.Flags);
 1935
 1936      WriteLEShort((byte)entry.CompressionMethod);
 1937      WriteLEInt(( int )entry.DosTime);
 1938
 1939      if ( !entry.HasCrc ) {
 1940        // Note patch address for updating CRC later.
 1941        update.CrcPatchOffset = baseStream_.Position;
 1942        WriteLEInt(( int )0);
 1943      }
 1944      else {
 1945        WriteLEInt(unchecked(( int )entry.Crc));
 1946      }
 1947
 1948      if (entry.LocalHeaderRequiresZip64) {
 1949        WriteLEInt(-1);
 1950        WriteLEInt(-1);
 1951      }
 1952      else {
 1953        if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) {
 1954          update.SizePatchOffset = baseStream_.Position;
 1955        }
 1956
 1957        WriteLEInt(( int )entry.CompressedSize);
 1958        WriteLEInt(( int )entry.Size);
 1959      }
 1960
 1961      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 1962
 1963      if ( name.Length > 0xFFFF ) {
 1964        throw new ZipException("Entry name too long.");
 1965      }
 1966
 1967      var ed = new ZipExtraData(entry.ExtraData);
 1968
 1969      if ( entry.LocalHeaderRequiresZip64 ) {
 1970        ed.StartNewEntry();
 1971
 1972        // Local entry header always includes size and compressed size.
 1973        // NOTE the order of these fields is reversed when compared to the normal headers!
 1974        ed.AddLeLong(entry.Size);
 1975        ed.AddLeLong(entry.CompressedSize);
 1976        ed.AddNewEntry(1);
 1977      }
 1978      else {
 1979        ed.Delete(1);
 1980      }
 1981
 1982      entry.ExtraData = ed.GetEntryData();
 1983
 1984      WriteLEShort(name.Length);
 1985      WriteLEShort(entry.ExtraData.Length);
 1986
 1987      if ( name.Length > 0 ) {
 1988        baseStream_.Write(name, 0, name.Length);
 1989      }
 1990
 1991      if ( entry.LocalHeaderRequiresZip64 ) {
 1992        if ( !ed.Find(1) ) {
 1993          throw new ZipException("Internal error cannot find extra data");
 1994        }
 1995
 1996        update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex;
 1997      }
 1998
 1999      if ( entry.ExtraData.Length > 0 ) {
 2000        baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length);
 2001      }
 2002    }
 2003
 2004    int WriteCentralDirectoryHeader(ZipEntry entry)
 2005    {
 2006      if ( entry.CompressedSize < 0 ) {
 2007        throw new ZipException("Attempt to write central directory entry with unknown csize");
 2008      }
 2009
 2010      if ( entry.Size < 0 ) {
 2011        throw new ZipException("Attempt to write central directory entry with unknown size");
 2012      }
 2013
 2014      if ( entry.Crc < 0 ) {
 2015        throw new ZipException("Attempt to write central directory entry with unknown crc");
 2016      }
 2017
 2018      // Write the central file header
 2019      WriteLEInt(ZipConstants.CentralHeaderSignature);
 2020
 2021      // Version made by
 2022      WriteLEShort(ZipConstants.VersionMadeBy);
 2023
 2024      // Version required to extract
 2025      WriteLEShort(entry.Version);
 2026
 2027      WriteLEShort(entry.Flags);
 2028
 2029      unchecked {
 2030        WriteLEShort((byte)entry.CompressionMethod);
 2031        WriteLEInt((int)entry.DosTime);
 2032        WriteLEInt((int)entry.Crc);
 2033      }
 2034
 2035      if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) {
 2036        WriteLEInt(-1);
 2037      }
 2038      else {
 2039        WriteLEInt((int)(entry.CompressedSize & 0xffffffff));
 2040      }
 2041
 2042      if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) {
 2043        WriteLEInt(-1);
 2044      }
 2045      else {
 2046        WriteLEInt((int)entry.Size);
 2047      }
 2048
 2049      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 2050
 2051      if ( name.Length > 0xFFFF ) {
 2052        throw new ZipException("Entry name is too long.");
 2053      }
 2054
 2055      WriteLEShort(name.Length);
 2056
 2057      // Central header extra data is different to local header version so regenerate.
 2058      var ed = new ZipExtraData(entry.ExtraData);
 2059
 2060      if ( entry.CentralHeaderRequiresZip64 ) {
 2061        ed.StartNewEntry();
 2062
 2063        if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2064        {
 2065          ed.AddLeLong(entry.Size);
 2066        }
 2067
 2068        if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2069        {
 2070          ed.AddLeLong(entry.CompressedSize);
 2071        }
 2072
 2073        if ( entry.Offset >= 0xffffffff ) {
 2074          ed.AddLeLong(entry.Offset);
 2075        }
 2076
 2077        // Number of disk on which this file starts isnt supported and is never written here.
 2078        ed.AddNewEntry(1);
 2079      }
 2080      else {
 2081        // Should have already be done when local header was added.
 2082        ed.Delete(1);
 2083      }
 2084
 2085      byte[] centralExtraData = ed.GetEntryData();
 2086
 2087      WriteLEShort(centralExtraData.Length);
 2088      WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0);
 2089
 2090      WriteLEShort(0);  // disk number
 2091      WriteLEShort(0);  // internal file attributes
 2092
 2093      // External file attributes...
 2094      if ( entry.ExternalFileAttributes != -1 ) {
 2095        WriteLEInt(entry.ExternalFileAttributes);
 2096      }
 2097      else {
 2098        if ( entry.IsDirectory ) {
 2099          WriteLEUint(16);
 2100        }
 2101        else {
 2102          WriteLEUint(0);
 2103        }
 2104      }
 2105
 2106      if ( entry.Offset >= 0xffffffff ) {
 2107        WriteLEUint(0xffffffff);
 2108      }
 2109      else {
 2110        WriteLEUint((uint)(int)entry.Offset);
 2111      }
 2112
 2113      if ( name.Length > 0 ) {
 2114        baseStream_.Write(name, 0, name.Length);
 2115      }
 2116
 2117      if ( centralExtraData.Length > 0 ) {
 2118        baseStream_.Write(centralExtraData, 0, centralExtraData.Length);
 2119      }
 2120
 2121      byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0];
 2122
 2123      if ( rawComment.Length > 0 ) {
 2124        baseStream_.Write(rawComment, 0, rawComment.Length);
 2125      }
 2126
 2127      return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length;
 2128    }
 2129    #endregion
 2130
 2131    void PostUpdateCleanup()
 2132    {
 2133            updateDataSource_ = null;
 2134            updates_ = null;
 2135            updateIndex_ = null;
 2136
 2137            if (archiveStorage_ != null)
 2138            {
 2139        archiveStorage_.Dispose();
 2140        archiveStorage_=null;
 2141      }
 2142    }
 2143
 2144    string GetTransformedFileName(string name)
 2145    {
 2146            INameTransform transform = NameTransform;
 2147      return (transform != null) ?
 2148        transform.TransformFile(name) :
 2149        name;
 2150    }
 2151
 2152    string GetTransformedDirectoryName(string name)
 2153    {
 2154            INameTransform transform = NameTransform;
 2155            return (transform != null) ?
 2156        transform.TransformDirectory(name) :
 2157        name;
 2158    }
 2159
 2160    /// <summary>
 2161    /// Get a raw memory buffer.
 2162    /// </summary>
 2163    /// <returns>Returns a raw memory buffer.</returns>
 2164    byte[] GetBuffer()
 2165    {
 2166      if ( copyBuffer_ == null ) {
 2167        copyBuffer_ = new byte[bufferSize_];
 2168      }
 2169      return copyBuffer_;
 2170    }
 2171
 2172    void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
 2173    {
 2174      int bytesToCopy = GetDescriptorSize(update);
 2175
 2176      if ( bytesToCopy > 0 ) {
 2177        byte[] buffer = GetBuffer();
 2178
 2179        while ( bytesToCopy > 0 ) {
 2180          int readSize = Math.Min(buffer.Length, bytesToCopy);
 2181
 2182          int bytesRead = source.Read(buffer, 0, readSize);
 2183          if ( bytesRead > 0 ) {
 2184            dest.Write(buffer, 0, bytesRead);
 2185            bytesToCopy -= bytesRead;
 2186          }
 2187          else {
 2188            throw new ZipException("Unxpected end of stream");
 2189          }
 2190        }
 2191      }
 2192    }
 2193
 2194    void CopyBytes(ZipUpdate update, Stream destination, Stream source,
 2195      long bytesToCopy, bool updateCrc)
 2196    {
 2197      if ( destination == source ) {
 2198        throw new InvalidOperationException("Destination and source are the same");
 2199      }
 2200
 2201      // NOTE: Compressed size is updated elsewhere.
 2202      var crc = new Crc32();
 2203      byte[] buffer = GetBuffer();
 2204
 2205      long targetBytes = bytesToCopy;
 2206      long totalBytesRead = 0;
 2207
 2208      int bytesRead;
 2209      do {
 2210        int readSize = buffer.Length;
 2211
 2212        if ( bytesToCopy < readSize ) {
 2213          readSize = (int)bytesToCopy;
 2214        }
 2215
 2216        bytesRead = source.Read(buffer, 0, readSize);
 2217        if ( bytesRead > 0 ) {
 2218          if ( updateCrc ) {
 2219            crc.Update(buffer, 0, bytesRead);
 2220          }
 2221          destination.Write(buffer, 0, bytesRead);
 2222          bytesToCopy -= bytesRead;
 2223          totalBytesRead += bytesRead;
 2224        }
 2225      }
 2226      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2227
 2228      if ( totalBytesRead != targetBytes ) {
 2229        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2230      }
 2231
 2232      if ( updateCrc ) {
 2233        update.OutEntry.Crc = crc.Value;
 2234      }
 2235    }
 2236
 2237    /// <summary>
 2238    /// Get the size of the source descriptor for a <see cref="ZipUpdate"/>.
 2239    /// </summary>
 2240    /// <param name="update">The update to get the size for.</param>
 2241    /// <returns>The descriptor size, zero if there isnt one.</returns>
 2242    int GetDescriptorSize(ZipUpdate update)
 2243    {
 2244      int result = 0;
 2245      if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) {
 2246        result = ZipConstants.DataDescriptorSize - 4;
 2247        if ( update.Entry.LocalHeaderRequiresZip64 ) {
 2248          result = ZipConstants.Zip64DataDescriptorSize - 4;
 2249        }
 2250      }
 2251      return result;
 2252    }
 2253
 2254    void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition)
 2255    {
 2256      int bytesToCopy = GetDescriptorSize(update);
 2257
 2258      while ( bytesToCopy > 0 ) {
 2259        var readSize = (int)bytesToCopy;
 2260        byte[] buffer = GetBuffer();
 2261
 2262        stream.Position = sourcePosition;
 2263        int bytesRead = stream.Read(buffer, 0, readSize);
 2264        if ( bytesRead > 0 ) {
 2265          stream.Position = destinationPosition;
 2266          stream.Write(buffer, 0, bytesRead);
 2267          bytesToCopy -= bytesRead;
 2268          destinationPosition += bytesRead;
 2269          sourcePosition += bytesRead;
 2270        }
 2271        else {
 2272          throw new ZipException("Unxpected end of stream");
 2273        }
 2274      }
 2275    }
 2276
 2277    void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sou
 2278    {
 2279      long bytesToCopy = update.Entry.CompressedSize;
 2280
 2281      // NOTE: Compressed size is updated elsewhere.
 2282      var crc = new Crc32();
 2283      byte[] buffer = GetBuffer();
 2284
 2285      long targetBytes = bytesToCopy;
 2286      long totalBytesRead = 0;
 2287
 2288      int bytesRead;
 2289      do
 2290      {
 2291        int readSize = buffer.Length;
 2292
 2293        if ( bytesToCopy < readSize ) {
 2294          readSize = (int)bytesToCopy;
 2295        }
 2296
 2297        stream.Position = sourcePosition;
 2298        bytesRead = stream.Read(buffer, 0, readSize);
 2299        if ( bytesRead > 0 ) {
 2300          if ( updateCrc ) {
 2301            crc.Update(buffer, 0, bytesRead);
 2302          }
 2303          stream.Position = destinationPosition;
 2304          stream.Write(buffer, 0, bytesRead);
 2305
 2306          destinationPosition += bytesRead;
 2307          sourcePosition += bytesRead;
 2308          bytesToCopy -= bytesRead;
 2309          totalBytesRead += bytesRead;
 2310        }
 2311      }
 2312      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2313
 2314      if ( totalBytesRead != targetBytes ) {
 2315        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2316      }
 2317
 2318      if ( updateCrc ) {
 2319        update.OutEntry.Crc = crc.Value;
 2320      }
 2321    }
 2322
 2323    int FindExistingUpdate(ZipEntry entry)
 2324    {
 2325      int result = -1;
 2326      string convertedName = GetTransformedFileName(entry.Name);
 2327
 2328      if (updateIndex_.ContainsKey(convertedName)) {
 2329        result = (int)updateIndex_[convertedName];
 2330      }
 2331/*
 2332      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2333      // for CF?
 2334      for (int index = 0; index < updates_.Count; ++index)
 2335      {
 2336        ZipUpdate zu = ( ZipUpdate )updates_[index];
 2337        if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) &&
 2338          (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) {
 2339          result = index;
 2340          break;
 2341        }
 2342      }
 2343 */
 2344      return result;
 2345    }
 2346
 2347    int FindExistingUpdate(string fileName)
 2348    {
 2349      int result = -1;
 2350
 2351      string convertedName = GetTransformedFileName(fileName);
 2352
 2353      if (updateIndex_.ContainsKey(convertedName)) {
 2354        result = (int)updateIndex_[convertedName];
 2355      }
 2356
 2357/*
 2358      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2359      // for CF?
 2360      for ( int index = 0; index < updates_.Count; ++index ) {
 2361        if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name,
 2362          true, CultureInfo.InvariantCulture) == 0 ) {
 2363          result = index;
 2364          break;
 2365        }
 2366      }
 2367 */
 2368
 2369      return result;
 2370    }
 2371
 2372    /// <summary>
 2373    /// Get an output stream for the specified <see cref="ZipEntry"/>
 2374    /// </summary>
 2375    /// <param name="entry">The entry to get an output stream for.</param>
 2376    /// <returns>The output stream obtained for the entry.</returns>
 2377    Stream GetOutputStream(ZipEntry entry)
 2378    {
 2379      Stream result = baseStream_;
 2380
 2381      if ( entry.IsCrypted == true ) {
 2382#if NETCF_1_0
 2383        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 2384#else
 2385        result = CreateAndInitEncryptionStream(result, entry);
 2386#endif
 2387      }
 2388
 2389      switch ( entry.CompressionMethod ) {
 2390        case CompressionMethod.Stored:
 2391          result = new UncompressedStream(result);
 2392          break;
 2393
 2394        case CompressionMethod.Deflated:
 2395          var dos = new DeflaterOutputStream(result, new Deflater(9, true));
 2396          dos.IsStreamOwner = false;
 2397          result = dos;
 2398          break;
 2399
 2400        default:
 2401          throw new ZipException("Unknown compression method " + entry.CompressionMethod);
 2402      }
 2403      return result;
 2404    }
 2405
 2406    void AddEntry(ZipFile workFile, ZipUpdate update)
 2407    {
 2408      Stream source = null;
 2409
 2410      if ( update.Entry.IsFile ) {
 2411        source = update.GetSource();
 2412
 2413        if ( source == null ) {
 2414          source = updateDataSource_.GetSource(update.Entry, update.Filename);
 2415        }
 2416      }
 2417
 2418      if ( source != null ) {
 2419        using ( source ) {
 2420          long sourceStreamLength = source.Length;
 2421          if ( update.OutEntry.Size < 0 ) {
 2422            update.OutEntry.Size = sourceStreamLength;
 2423          }
 2424          else {
 2425            // Check for errant entries.
 2426            if ( update.OutEntry.Size != sourceStreamLength ) {
 2427              throw new ZipException("Entry size/stream size mismatch");
 2428            }
 2429          }
 2430
 2431          workFile.WriteLocalEntryHeader(update);
 2432
 2433          long dataStart = workFile.baseStream_.Position;
 2434
 2435          using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2436            CopyBytes(update, output, source, sourceStreamLength, true);
 2437          }
 2438
 2439          long dataEnd = workFile.baseStream_.Position;
 2440          update.OutEntry.CompressedSize = dataEnd - dataStart;
 2441
 2442          if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor)
 2443          {
 2444            var helper = new ZipHelperStream(workFile.baseStream_);
 2445            helper.WriteDataDescriptor(update.OutEntry);
 2446          }
 2447        }
 2448      }
 2449      else {
 2450        workFile.WriteLocalEntryHeader(update);
 2451        update.OutEntry.CompressedSize = 0;
 2452      }
 2453
 2454    }
 2455
 2456    void ModifyEntry(ZipFile workFile, ZipUpdate update)
 2457    {
 2458      workFile.WriteLocalEntryHeader(update);
 2459      long dataStart = workFile.baseStream_.Position;
 2460
 2461      // TODO: This is slow if the changes don't effect the data!!
 2462      if ( update.Entry.IsFile && (update.Filename != null) ) {
 2463        using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2464          using ( Stream source = this.GetInputStream(update.Entry) ) {
 2465            CopyBytes(update, output, source, source.Length, true);
 2466          }
 2467        }
 2468      }
 2469
 2470      long dataEnd = workFile.baseStream_.Position;
 2471      update.Entry.CompressedSize = dataEnd - dataStart;
 2472    }
 2473
 2474    void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition)
 2475    {
 2476      bool skipOver = false || update.Entry.Offset == destinationPosition;
 2477
 2478      if ( !skipOver ) {
 2479        baseStream_.Position = destinationPosition;
 2480        workFile.WriteLocalEntryHeader(update);
 2481        destinationPosition = baseStream_.Position;
 2482      }
 2483
 2484      long sourcePosition = 0;
 2485
 2486      const int NameLengthOffset = 26;
 2487
 2488      // TODO: Add base for SFX friendly handling
 2489      long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2490
 2491      baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2492
 2493      // Clumsy way of handling retrieving the original name and extra data length for now.
 2494      // TODO: Stop re-reading name and data length in CopyEntryDirect.
 2495      uint nameLength = ReadLEUshort();
 2496      uint extraLength = ReadLEUshort();
 2497
 2498      sourcePosition = baseStream_.Position + nameLength + extraLength;
 2499
 2500      if (skipOver) {
 2501        if (update.OffsetBasedSize != -1)
 2502          destinationPosition += update.OffsetBasedSize;
 2503        else
 2504          // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) ar
 2505          // WinZip produces a warning on these entries:
 2506          // "caution: value of lrec.csize (compressed size) changed from ..."
 2507          destinationPosition +=
 2508            (sourcePosition - entryDataOffset) + NameLengthOffset +  // Header size
 2509            update.Entry.CompressedSize + GetDescriptorSize(update);
 2510      }
 2511      else {
 2512        if ( update.Entry.CompressedSize > 0 ) {
 2513          CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition );
 2514        }
 2515        CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition);
 2516      }
 2517    }
 2518
 2519    void CopyEntry(ZipFile workFile, ZipUpdate update)
 2520    {
 2521      workFile.WriteLocalEntryHeader(update);
 2522
 2523      if ( update.Entry.CompressedSize > 0 ) {
 2524        const int NameLengthOffset = 26;
 2525
 2526        long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2527
 2528        // TODO: This wont work for SFX files!
 2529        baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2530
 2531        uint nameLength = ReadLEUshort();
 2532        uint extraLength = ReadLEUshort();
 2533
 2534        baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current);
 2535
 2536        CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false);
 2537      }
 2538      CopyDescriptorBytes(update, workFile.baseStream_, baseStream_);
 2539    }
 2540
 2541    void Reopen(Stream source)
 2542    {
 2543      if ( source == null ) {
 2544        throw new ZipException("Failed to reopen archive - no source");
 2545      }
 2546
 2547      isNewArchive_ = false;
 2548      baseStream_ = source;
 2549      ReadEntries();
 2550    }
 2551
 2552    void Reopen()
 2553    {
 2554      if (Name == null) {
 2555        throw new InvalidOperationException("Name is not known cannot Reopen");
 2556      }
 2557
 2558      Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read));
 2559    }
 2560
 2561    void UpdateCommentOnly()
 2562    {
 2563      long baseLength = baseStream_.Length;
 2564
 2565      ZipHelperStream updateFile = null;
 2566
 2567      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2568        Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_);
 2569        updateFile = new ZipHelperStream(copyStream);
 2570        updateFile.IsStreamOwner = true;
 2571
 2572        baseStream_.Close();
 2573        baseStream_ = null;
 2574      }
 2575      else {
 2576        if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) {
 2577          // TODO: archiveStorage wasnt originally intended for this use.
 2578          // Need to revisit this to tidy up handling as archive storage currently doesnt
 2579          // handle the original stream well.
 2580          // The problem is when using an existing zip archive with an in memory archive storage.
 2581          // The open stream wont support writing but the memory storage should open the same file not an in memory one.
 2582
 2583          // Need to tidy up the archive storage interface and contract basically.
 2584          baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_);
 2585          updateFile = new ZipHelperStream(baseStream_);
 2586        }
 2587        else {
 2588          baseStream_.Close();
 2589          baseStream_ = null;
 2590          updateFile = new ZipHelperStream(Name);
 2591        }
 2592      }
 2593
 2594      using ( updateFile ) {
 2595        long locatedCentralDirOffset =
 2596          updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 2597                            baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 2598        if ( locatedCentralDirOffset < 0 ) {
 2599          throw new ZipException("Cannot find central directory");
 2600        }
 2601
 2602        const int CentralHeaderCommentSizeOffset = 16;
 2603        updateFile.Position += CentralHeaderCommentSizeOffset;
 2604
 2605        byte[] rawComment = newComment_.RawComment;
 2606
 2607        updateFile.WriteLEShort(rawComment.Length);
 2608        updateFile.Write(rawComment, 0, rawComment.Length);
 2609        updateFile.SetLength(updateFile.Position);
 2610      }
 2611
 2612      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2613        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2614      }
 2615      else {
 2616        ReadEntries();
 2617      }
 2618    }
 2619
 2620    /// <summary>
 2621    /// Class used to sort updates.
 2622    /// </summary>
 2623    class UpdateComparer : IComparer
 2624    {
 2625      /// <summary>
 2626      /// Compares two objects and returns a value indicating whether one is
 2627      /// less than, equal to or greater than the other.
 2628      /// </summary>
 2629      /// <param name="x">First object to compare</param>
 2630      /// <param name="y">Second object to compare.</param>
 2631      /// <returns>Compare result.</returns>
 2632      public int Compare(
 2633        object x,
 2634        object y)
 2635      {
 2636        var zx = x as ZipUpdate;
 2637        var zy = y as ZipUpdate;
 2638
 2639        int result;
 2640
 2641        if (zx == null) {
 2642          if (zy == null) {
 2643            result = 0;
 2644          }
 2645          else {
 2646            result = -1;
 2647          }
 2648        }
 2649        else if (zy == null) {
 2650          result = 1;
 2651        }
 2652        else {
 2653          int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1;
 2654          int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1;
 2655
 2656          result = xCmdValue - yCmdValue;
 2657          if (result == 0) {
 2658            long offsetDiff = zx.Entry.Offset - zy.Entry.Offset;
 2659            if (offsetDiff < 0) {
 2660              result = -1;
 2661            }
 2662            else if (offsetDiff == 0) {
 2663              result = 0;
 2664            }
 2665            else {
 2666              result = 1;
 2667            }
 2668          }
 2669        }
 2670        return result;
 2671      }
 2672    }
 2673
 2674    void RunUpdates()
 2675    {
 2676      long sizeEntries = 0;
 2677      long endOfStream = 0;
 2678      bool directUpdate = false;
 2679      long destinationPosition = 0; // NOT SFX friendly
 2680
 2681      ZipFile workFile;
 2682
 2683      if ( IsNewArchive ) {
 2684        workFile = this;
 2685        workFile.baseStream_.Position = 0;
 2686        directUpdate = true;
 2687      }
 2688      else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) {
 2689        workFile = this;
 2690        workFile.baseStream_.Position = 0;
 2691        directUpdate = true;
 2692
 2693        // Sort the updates by offset within copies/modifies, then adds.
 2694        // This ensures that data required by copies will not be overwritten.
 2695        updates_.Sort(new UpdateComparer());
 2696      }
 2697      else {
 2698        workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput());
 2699        workFile.UseZip64 = UseZip64;
 2700
 2701        if (key != null) {
 2702          workFile.key = (byte[])key.Clone();
 2703        }
 2704      }
 2705
 2706      try {
 2707        foreach ( ZipUpdate update in updates_ ) {
 2708          if (update != null) {
 2709            switch (update.Command) {
 2710              case UpdateCommand.Copy:
 2711                if (directUpdate) {
 2712                  CopyEntryDirect(workFile, update, ref destinationPosition);
 2713                }
 2714                else {
 2715                  CopyEntry(workFile, update);
 2716                }
 2717                break;
 2718
 2719              case UpdateCommand.Modify:
 2720                // TODO: Direct modifying of an entry will take some legwork.
 2721                ModifyEntry(workFile, update);
 2722                break;
 2723
 2724              case UpdateCommand.Add:
 2725                if (!IsNewArchive && directUpdate) {
 2726                  workFile.baseStream_.Position = destinationPosition;
 2727                }
 2728
 2729                AddEntry(workFile, update);
 2730
 2731                if (directUpdate) {
 2732                  destinationPosition = workFile.baseStream_.Position;
 2733                }
 2734                break;
 2735            }
 2736          }
 2737        }
 2738
 2739        if ( !IsNewArchive && directUpdate ) {
 2740          workFile.baseStream_.Position = destinationPosition;
 2741        }
 2742
 2743        long centralDirOffset = workFile.baseStream_.Position;
 2744
 2745        foreach ( ZipUpdate update in updates_ ) {
 2746          if (update != null) {
 2747            sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry);
 2748          }
 2749        }
 2750
 2751        byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_);
 2752        using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) {
 2753          zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment);
 2754        }
 2755
 2756        endOfStream = workFile.baseStream_.Position;
 2757
 2758        // And now patch entries...
 2759        foreach ( ZipUpdate update in updates_ ) {
 2760          if (update != null)
 2761          {
 2762            // If the size of the entry is zero leave the crc as 0 as well.
 2763            // The calculated crc will be all bits on...
 2764            if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) {
 2765              workFile.baseStream_.Position = update.CrcPatchOffset;
 2766              workFile.WriteLEInt((int)update.OutEntry.Crc);
 2767            }
 2768
 2769            if (update.SizePatchOffset > 0) {
 2770              workFile.baseStream_.Position = update.SizePatchOffset;
 2771              if (update.OutEntry.LocalHeaderRequiresZip64) {
 2772                workFile.WriteLeLong(update.OutEntry.Size);
 2773                workFile.WriteLeLong(update.OutEntry.CompressedSize);
 2774              }
 2775              else {
 2776                workFile.WriteLEInt((int)update.OutEntry.CompressedSize);
 2777                workFile.WriteLEInt((int)update.OutEntry.Size);
 2778              }
 2779            }
 2780          }
 2781        }
 2782      }
 2783      catch {
 2784        workFile.Close();
 2785        if (!directUpdate && (workFile.Name != null)) {
 2786          File.Delete(workFile.Name);
 2787        }
 2788        throw;
 2789      }
 2790
 2791      if (directUpdate) {
 2792        workFile.baseStream_.SetLength(endOfStream);
 2793        workFile.baseStream_.Flush();
 2794        isNewArchive_ = false;
 2795        ReadEntries();
 2796      }
 2797      else {
 2798        baseStream_.Close();
 2799        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2800      }
 2801    }
 2802
 2803    void CheckUpdating()
 2804    {
 2805      if ( updates_ == null ) {
 2806        throw new InvalidOperationException("BeginUpdate has not been called");
 2807      }
 2808    }
 2809
 2810    #endregion
 2811
 2812    #region ZipUpdate class
 2813    /// <summary>
 2814    /// Represents a pending update to a Zip file.
 2815    /// </summary>
 2816    class ZipUpdate
 2817    {
 2818      #region Constructors
 2819      public ZipUpdate(string fileName, ZipEntry entry)
 2820      {
 2821        command_ = UpdateCommand.Add;
 2822        entry_ = entry;
 2823        filename_ = fileName;
 2824      }
 2825
 2826      [Obsolete]
 2827      public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod)
 2828      {
 2829        command_ = UpdateCommand.Add;
 2830        entry_ = new ZipEntry(entryName);
 2831        entry_.CompressionMethod = compressionMethod;
 2832        filename_ = fileName;
 2833      }
 2834
 2835      [Obsolete]
 2836      public ZipUpdate(string fileName, string entryName)
 2837        : this(fileName, entryName, CompressionMethod.Deflated)
 2838      {
 2839        // Do nothing.
 2840      }
 2841
 2842      [Obsolete]
 2843      public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 2844      {
 2845        command_ = UpdateCommand.Add;
 2846        entry_ = new ZipEntry(entryName);
 2847        entry_.CompressionMethod = compressionMethod;
 2848        dataSource_ = dataSource;
 2849      }
 2850
 2851      public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry)
 2852      {
 2853        command_ = UpdateCommand.Add;
 2854        entry_ = entry;
 2855        dataSource_ = dataSource;
 2856      }
 2857
 2858      public ZipUpdate(ZipEntry original, ZipEntry updated)
 2859      {
 2860        throw new ZipException("Modify not currently supported");
 2861      /*
 2862        command_ = UpdateCommand.Modify;
 2863        entry_ = ( ZipEntry )original.Clone();
 2864        outEntry_ = ( ZipEntry )updated.Clone();
 2865      */
 2866      }
 2867
 2868      public ZipUpdate(UpdateCommand command, ZipEntry entry)
 2869      {
 2870        command_ = command;
 2871        entry_ = ( ZipEntry )entry.Clone();
 2872      }
 2873
 2874
 2875      /// <summary>
 2876      /// Copy an existing entry.
 2877      /// </summary>
 2878      /// <param name="entry">The existing entry to copy.</param>
 2879      public ZipUpdate(ZipEntry entry)
 2880        : this(UpdateCommand.Copy, entry)
 2881      {
 2882        // Do nothing.
 2883      }
 2884      #endregion
 2885
 2886      /// <summary>
 2887      /// Get the <see cref="ZipEntry"/> for this update.
 2888      /// </summary>
 2889      /// <remarks>This is the source or original entry.</remarks>
 2890      public ZipEntry Entry
 2891      {
 2892        get { return entry_; }
 2893      }
 2894
 2895      /// <summary>
 2896      /// Get the <see cref="ZipEntry"/> that will be written to the updated/new file.
 2897      /// </summary>
 2898      public ZipEntry OutEntry
 2899      {
 2900        get {
 2901          if ( outEntry_ == null ) {
 2902            outEntry_ = (ZipEntry)entry_.Clone();
 2903          }
 2904
 2905          return outEntry_;
 2906        }
 2907      }
 2908
 2909      /// <summary>
 2910      /// Get the command for this update.
 2911      /// </summary>
 2912      public UpdateCommand Command
 2913      {
 2914        get { return command_; }
 2915      }
 2916
 2917      /// <summary>
 2918      /// Get the filename if any for this update.  Null if none exists.
 2919      /// </summary>
 2920      public string Filename
 2921      {
 2922        get { return filename_; }
 2923      }
 2924
 2925      /// <summary>
 2926      /// Get/set the location of the size patch for this update.
 2927      /// </summary>
 2928      public long SizePatchOffset
 2929      {
 2930        get { return sizePatchOffset_; }
 2931        set { sizePatchOffset_ = value; }
 2932      }
 2933
 2934      /// <summary>
 2935      /// Get /set the location of the crc patch for this update.
 2936      /// </summary>
 2937      public long CrcPatchOffset
 2938      {
 2939        get { return crcPatchOffset_; }
 2940        set { crcPatchOffset_ = value; }
 2941      }
 2942
 2943      /// <summary>
 2944      /// Get/set the size calculated by offset.
 2945      /// Specifically, the difference between this and next entry's starting offset.
 2946      /// </summary>
 2947      public long OffsetBasedSize
 2948      {
 2949        get { return _offsetBasedSize; }
 2950        set { _offsetBasedSize = value; }
 2951      }
 2952
 2953      public Stream GetSource()
 2954      {
 2955        Stream result = null;
 2956        if ( dataSource_ != null ) {
 2957          result = dataSource_.GetSource();
 2958        }
 2959
 2960        return result;
 2961      }
 2962
 2963      #region Instance Fields
 2964      ZipEntry entry_;
 2965      ZipEntry outEntry_;
 2966      UpdateCommand command_;
 2967      IStaticDataSource dataSource_;
 2968      string filename_;
 2969      long sizePatchOffset_ = -1;
 2970      long crcPatchOffset_ = -1;
 2971      long _offsetBasedSize = -1;
 2972      #endregion
 2973    }
 2974
 2975    #endregion
 2976    #endregion
 2977
 2978    #region Disposing
 2979
 2980    #region IDisposable Members
 2981    void IDisposable.Dispose()
 2982    {
 2983      Close();
 2984    }
 2985    #endregion
 2986
 2987    void DisposeInternal(bool disposing)
 2988    {
 2989      if ( !isDisposed_ ) {
 2990        isDisposed_ = true;
 2991        entries_ = new ZipEntry[0];
 2992
 2993        if ( IsStreamOwner && (baseStream_ != null) ) {
 2994          lock(baseStream_) {
 2995            baseStream_.Close();
 2996          }
 2997        }
 2998
 2999        PostUpdateCleanup();
 3000      }
 3001    }
 3002
 3003    /// <summary>
 3004    /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
 3005    /// </summary>
 3006    /// <param name="disposing">true to release both managed and unmanaged resources;
 3007    /// false to release only unmanaged resources.</param>
 3008    protected virtual void Dispose(bool disposing)
 3009    {
 3010      DisposeInternal(disposing);
 3011    }
 3012
 3013    #endregion
 3014
 3015    #region Internal routines
 3016    #region Reading
 3017    /// <summary>
 3018    /// Read an unsigned short in little endian byte order.
 3019    /// </summary>
 3020    /// <returns>Returns the value read.</returns>
 3021    /// <exception cref="EndOfStreamException">
 3022    /// The stream ends prematurely
 3023    /// </exception>
 3024    ushort ReadLEUshort()
 3025    {
 3026      int data1 = baseStream_.ReadByte();
 3027
 3028      if ( data1 < 0 ) {
 3029        throw new EndOfStreamException("End of stream");
 3030      }
 3031
 3032      int data2 = baseStream_.ReadByte();
 3033
 3034      if ( data2 < 0 ) {
 3035        throw new EndOfStreamException("End of stream");
 3036      }
 3037
 3038
 3039      return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8)));
 3040    }
 3041
 3042    /// <summary>
 3043    /// Read a uint in little endian byte order.
 3044    /// </summary>
 3045    /// <returns>Returns the value read.</returns>
 3046    /// <exception cref="IOException">
 3047    /// An i/o error occurs.
 3048    /// </exception>
 3049    /// <exception cref="System.IO.EndOfStreamException">
 3050    /// The file ends prematurely
 3051    /// </exception>
 3052    uint ReadLEUint()
 3053    {
 3054      return (uint)(ReadLEUshort() | (ReadLEUshort() << 16));
 3055    }
 3056
 3057    ulong ReadLEUlong()
 3058    {
 3059      return ReadLEUint() | ((ulong)ReadLEUint() << 32);
 3060    }
 3061
 3062    #endregion
 3063    // NOTE this returns the offset of the first byte after the signature.
 3064    long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 3065    {
 3066      using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) {
 3067        return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData);
 3068      }
 3069    }
 3070
 3071    /// <summary>
 3072    /// Search for and read the central directory of a zip file filling the entries array.
 3073    /// </summary>
 3074    /// <exception cref="System.IO.IOException">
 3075    /// An i/o error occurs.
 3076    /// </exception>
 3077    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3078    /// The central directory is malformed or cannot be found
 3079    /// </exception>
 3080    void ReadEntries()
 3081    {
 3082      // Search for the End Of Central Directory.  When a zip comment is
 3083      // present the directory will start earlier
 3084      //
 3085      // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed.
 3086      // This should be compatible with both SFX and ZIP files but has only been tested for Zip files
 3087      // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then
 3088      // this could be invalid.
 3089      // Could also speed this up by reading memory in larger blocks.
 3090
 3091      if (baseStream_.CanSeek == false) {
 3092        throw new ZipException("ZipFile stream must be seekable");
 3093      }
 3094
 3095      long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 3096        baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 3097
 3098      if (locatedEndOfCentralDir < 0) {
 3099        throw new ZipException("Cannot find central directory");
 3100      }
 3101
 3102      // Read end of central directory record
 3103      ushort thisDiskNumber           = ReadLEUshort();
 3104      ushort startCentralDirDisk      = ReadLEUshort();
 3105      ulong entriesForThisDisk        = ReadLEUshort();
 3106      ulong entriesForWholeCentralDir = ReadLEUshort();
 3107      ulong centralDirSize            = ReadLEUint();
 3108      long offsetOfCentralDir         = ReadLEUint();
 3109      uint commentSize                = ReadLEUshort();
 3110
 3111      if ( commentSize > 0 ) {
 3112        byte[] comment = new byte[commentSize];
 3113
 3114        StreamUtils.ReadFully(baseStream_, comment);
 3115        comment_ = ZipConstants.ConvertToString(comment);
 3116      }
 3117      else {
 3118        comment_ = string.Empty;
 3119      }
 3120
 3121      bool isZip64 = false;
 3122
 3123      // Check if zip64 header information is required.
 3124      if ( (thisDiskNumber == 0xffff) ||
 3125        (startCentralDirDisk == 0xffff) ||
 3126        (entriesForThisDisk == 0xffff) ||
 3127        (entriesForWholeCentralDir == 0xffff) ||
 3128        (centralDirSize == 0xffffffff) ||
 3129        (offsetOfCentralDir == 0xffffffff) ) {
 3130        isZip64 = true;
 3131
 3132        long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 
 3133        if ( offset < 0 ) {
 3134          throw new ZipException("Cannot find Zip64 locator");
 3135        }
 3136
 3137        // number of the disk with the start of the zip64 end of central directory 4 bytes
 3138        // relative offset of the zip64 end of central directory record 8 bytes
 3139        // total number of disks 4 bytes
 3140        ReadLEUint(); // startDisk64 is not currently used
 3141        ulong offset64 = ReadLEUlong();
 3142        uint totalDisks = ReadLEUint();
 3143
 3144        baseStream_.Position = (long)offset64;
 3145        long sig64 = ReadLEUint();
 3146
 3147        if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) {
 3148          throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64));
 3149        }
 3150
 3151        // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12.
 3152        ulong recordSize = ReadLEUlong();
 3153        int versionMadeBy = ReadLEUshort();
 3154        int versionToExtract = ReadLEUshort();
 3155        uint thisDisk = ReadLEUint();
 3156        uint centralDirDisk = ReadLEUint();
 3157        entriesForThisDisk = ReadLEUlong();
 3158        entriesForWholeCentralDir = ReadLEUlong();
 3159        centralDirSize = ReadLEUlong();
 3160        offsetOfCentralDir = (long)ReadLEUlong();
 3161
 3162        // NOTE: zip64 extensible data sector (variable size) is ignored.
 3163      }
 3164
 3165      entries_ = new ZipEntry[entriesForThisDisk];
 3166
 3167      // SFX/embedded support, find the offset of the first entry vis the start of the stream
 3168      // This applies to Zip files that are appended to the end of an SFX stub.
 3169      // Or are appended as a resource to an executable.
 3170      // Zip files created by some archivers have the offsets altered to reflect the true offsets
 3171      // and so dont require any adjustment here...
 3172      // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths?
 3173      if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) {
 3174        offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir);
 3175        if (offsetOfFirstEntry <= 0) {
 3176          throw new ZipException("Invalid embedded zip archive");
 3177        }
 3178      }
 3179
 3180      baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin);
 3181
 3182      for (ulong i = 0; i < entriesForThisDisk; i++) {
 3183        if (ReadLEUint() != ZipConstants.CentralHeaderSignature) {
 3184          throw new ZipException("Wrong Central Directory signature");
 3185        }
 3186
 3187        int versionMadeBy      = ReadLEUshort();
 3188        int versionToExtract   = ReadLEUshort();
 3189        int bitFlags           = ReadLEUshort();
 3190        int method             = ReadLEUshort();
 3191        uint dostime           = ReadLEUint();
 3192        uint crc               = ReadLEUint();
 3193        var csize             = (long)ReadLEUint();
 3194        var size              = (long)ReadLEUint();
 3195        int nameLen            = ReadLEUshort();
 3196        int extraLen           = ReadLEUshort();
 3197        int commentLen         = ReadLEUshort();
 3198
 3199        int diskStartNo        = ReadLEUshort();  // Not currently used
 3200        int internalAttributes = ReadLEUshort();  // Not currently used
 3201
 3202        uint externalAttributes = ReadLEUint();
 3203        long offset             = ReadLEUint();
 3204
 3205        byte[] buffer = new byte[Math.Max(nameLen, commentLen)];
 3206
 3207        StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen);
 3208        string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen);
 3209
 3210        var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method);
 3211        entry.Crc = crc & 0xffffffffL;
 3212        entry.Size = size & 0xffffffffL;
 3213        entry.CompressedSize = csize & 0xffffffffL;
 3214        entry.Flags = bitFlags;
 3215        entry.DosTime = (uint)dostime;
 3216        entry.ZipFileIndex = (long)i;
 3217        entry.Offset = offset;
 3218        entry.ExternalFileAttributes = (int)externalAttributes;
 3219
 3220        if ((bitFlags & 8) == 0) {
 3221          entry.CryptoCheckValue = (byte)(crc >> 24);
 3222        }
 3223        else {
 3224          entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 3225        }
 3226
 3227        if (extraLen > 0) {
 3228          byte[] extra = new byte[extraLen];
 3229          StreamUtils.ReadFully(baseStream_, extra);
 3230          entry.ExtraData = extra;
 3231        }
 3232
 3233        entry.ProcessExtraData(false);
 3234
 3235        if (commentLen > 0) {
 3236          StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen);
 3237          entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen);
 3238        }
 3239
 3240        entries_[i] = entry;
 3241      }
 3242    }
 3243
 3244    /// <summary>
 3245    /// Locate the data for a given entry.
 3246    /// </summary>
 3247    /// <returns>
 3248    /// The start offset of the data.
 3249    /// </returns>
 3250    /// <exception cref="System.IO.EndOfStreamException">
 3251    /// The stream ends prematurely
 3252    /// </exception>
 3253    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3254    /// The local header signature is invalid, the entry and central header file name lengths are different
 3255    /// or the local and entry compression methods dont match
 3256    /// </exception>
 3257    long LocateEntry(ZipEntry entry)
 3258    {
 3259      return TestLocalHeader(entry, HeaderTest.Extract);
 3260    }
 3261
 3262#if !NETCF_1_0
 3263    Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry)
 3264    {
 3265      CryptoStream result = null;
 3266
 3267      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3268        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3269        var classicManaged = new PkzipClassicManaged();
 3270
 3271        OnKeysRequired(entry.Name);
 3272        if (HaveKeys == false) {
 3273          throw new ZipException("No password available for encrypted stream");
 3274        }
 3275
 3276        result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read);
 3277        CheckClassicPassword(result, entry);
 3278      }
 3279      else {
 3280#if !NET_1_1 && !NETCF_2_0
 3281        if (entry.Version == ZipConstants.VERSION_AES) {
 3282          //
 3283          OnKeysRequired(entry.Name);
 3284          if (HaveKeys == false) {
 3285            throw new ZipException("No password available for AES encrypted stream");
 3286          }
 3287          int saltLen = entry.AESSaltLen;
 3288          byte[] saltBytes = new byte[saltLen];
 3289          int saltIn = baseStream.Read(saltBytes, 0, saltLen);
 3290          if (saltIn != saltLen)
 3291            throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn);
 3292          //
 3293          byte[] pwdVerifyRead = new byte[2];
 3294          baseStream.Read(pwdVerifyRead, 0, 2);
 3295          int blockSize = entry.AESKeySize / 8;  // bits to bytes
 3296
 3297          var decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false);
 3298          byte[] pwdVerifyCalc = decryptor.PwdVerifier;
 3299          if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1])
 3300            throw new Exception("Invalid password for AES");
 3301          result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read);
 3302        }
 3303        else
 3304#endif
 3305        {
 3306          throw new ZipException("Decryption method not supported");
 3307        }
 3308      }
 3309
 3310      return result;
 3311    }
 3312
 3313    Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry)
 3314    {
 3315      CryptoStream result = null;
 3316      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3317        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3318        var classicManaged = new PkzipClassicManaged();
 3319
 3320        OnKeysRequired(entry.Name);
 3321        if (HaveKeys == false) {
 3322          throw new ZipException("No password available for encrypted stream");
 3323        }
 3324
 3325        // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
 3326        // which doesnt do this.
 3327        result = new CryptoStream(new UncompressedStream(baseStream),
 3328          classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
 3329
 3330        if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) {
 3331          WriteEncryptionHeader(result, entry.DosTime << 16);
 3332        }
 3333        else {
 3334          WriteEncryptionHeader(result, entry.Crc);
 3335        }
 3336      }
 3337      return result;
 3338    }
 3339
 3340    static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry)
 3341    {
 3342      byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 3343      StreamUtils.ReadFully(classicCryptoStream, cryptbuffer);
 3344      if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 3345        throw new ZipException("Invalid password");
 3346      }
 3347    }
 3348#endif
 3349
 3350    static void WriteEncryptionHeader(Stream stream, long crcValue)
 3351    {
 3352      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 3353      var rnd = new Random();
 3354      rnd.NextBytes(cryptBuffer);
 3355      cryptBuffer[11] = (byte)(crcValue >> 24);
 3356      stream.Write(cryptBuffer, 0, cryptBuffer.Length);
 3357    }
 3358
 3359    #endregion
 3360
 3361    #region Instance Fields
 3362    bool       isDisposed_;
 3363    string     name_;
 3364    string     comment_;
 3365    string     rawPassword_;
 3366    Stream     baseStream_;
 3367    bool       isStreamOwner;
 3368    long       offsetOfFirstEntry;
 3369    ZipEntry[] entries_;
 3370    byte[] key;
 3371    bool isNewArchive_;
 3372
 3373    // Default is dynamic which is not backwards compatible and can cause problems
 3374    // with XP's built in compression which cant read Zip64 archives.
 3375    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 3376    // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed.
 3377    UseZip64 useZip64_ = UseZip64.Dynamic ;
 3378
 3379    #region Zip Update Instance Fields
 3380    ArrayList updates_;
 3381    long updateCount_; // Count is managed manually as updates_ can contain nulls!
 3382    Hashtable updateIndex_;
 3383    IArchiveStorage archiveStorage_;
 3384    IDynamicDataSource updateDataSource_;
 3385    bool contentsEdited_;
 3386    int bufferSize_ = DefaultBufferSize;
 3387    byte[] copyBuffer_;
 3388    ZipString newComment_;
 3389    bool commentEdited_;
 3390    IEntryFactory updateEntryFactory_ = new ZipEntryFactory();
 3391    #endregion
 3392    #endregion
 3393
 3394    #region Support Classes
 3395    /// <summary>
 3396    /// Represents a string from a <see cref="ZipFile"/> which is stored as an array of bytes.
 3397    /// </summary>
 3398    class ZipString
 3399    {
 3400      #region Constructors
 3401      /// <summary>
 3402      /// Initialise a <see cref="ZipString"/> with a string.
 3403      /// </summary>
 3404      /// <param name="comment">The textual string form.</param>
 3405      public ZipString(string comment)
 3406      {
 3407        comment_ = comment;
 3408        isSourceString_ = true;
 3409      }
 3410
 3411      /// <summary>
 3412      /// Initialise a <see cref="ZipString"/> using a string in its binary 'raw' form.
 3413      /// </summary>
 3414      /// <param name="rawString"></param>
 3415      public ZipString(byte[] rawString)
 3416      {
 3417        rawComment_ = rawString;
 3418      }
 3419      #endregion
 3420
 3421      /// <summary>
 3422      /// Get a value indicating the original source of data for this instance.
 3423      /// True if the source was a string; false if the source was binary data.
 3424      /// </summary>
 3425      public bool IsSourceString
 3426      {
 3427        get { return isSourceString_; }
 3428      }
 3429
 3430      /// <summary>
 3431      /// Get the length of the comment when represented as raw bytes.
 3432      /// </summary>
 3433      public int RawLength
 3434      {
 3435        get {
 3436          MakeBytesAvailable();
 3437          return rawComment_.Length;
 3438        }
 3439      }
 3440
 3441      /// <summary>
 3442      /// Get the comment in its 'raw' form as plain bytes.
 3443      /// </summary>
 3444      public byte[] RawComment
 3445      {
 3446        get {
 3447          MakeBytesAvailable();
 3448          return (byte[])rawComment_.Clone();
 3449        }
 3450      }
 3451
 3452      /// <summary>
 3453      /// Reset the comment to its initial state.
 3454      /// </summary>
 3455      public void Reset()
 3456      {
 3457        if ( isSourceString_ ) {
 3458          rawComment_ = null;
 3459        }
 3460        else {
 3461          comment_ = null;
 3462        }
 3463      }
 3464
 3465      void MakeTextAvailable()
 3466      {
 3467        if ( comment_ == null ) {
 3468          comment_ = ZipConstants.ConvertToString(rawComment_);
 3469        }
 3470      }
 3471
 3472      void MakeBytesAvailable()
 3473      {
 3474        if ( rawComment_ == null ) {
 3475          rawComment_ = ZipConstants.ConvertToArray(comment_);
 3476        }
 3477      }
 3478
 3479      /// <summary>
 3480      /// Implicit conversion of comment to a string.
 3481      /// </summary>
 3482      /// <param name="zipString">The <see cref="ZipString"/> to convert to a string.</param>
 3483      /// <returns>The textual equivalent for the input value.</returns>
 3484      static public implicit operator string(ZipString zipString)
 3485      {
 3486        zipString.MakeTextAvailable();
 3487        return zipString.comment_;
 3488      }
 3489
 3490      #region Instance Fields
 3491      string comment_;
 3492      byte[] rawComment_;
 3493      bool isSourceString_;
 3494      #endregion
 3495    }
 3496
 3497    /// <summary>
 3498    /// An <see cref="IEnumerator">enumerator</see> for <see cref="ZipEntry">Zip entries</see>
 3499    /// </summary>
 3500    class ZipEntryEnumerator : IEnumerator
 3501    {
 3502      #region Constructors
 3503      public ZipEntryEnumerator(ZipEntry[] entries)
 3504      {
 3505        array = entries;
 3506      }
 3507
 3508      #endregion
 3509      #region IEnumerator Members
 3510      public object Current
 3511      {
 3512        get {
 3513          return array[index];
 3514        }
 3515      }
 3516
 3517      public void Reset()
 3518      {
 3519        index = -1;
 3520      }
 3521
 3522      public bool MoveNext()
 3523      {
 3524        return (++index < array.Length);
 3525      }
 3526      #endregion
 3527      #region Instance Fields
 3528      ZipEntry[] array;
 3529      int index = -1;
 3530      #endregion
 3531    }
 3532
 3533    /// <summary>
 3534    /// An <see cref="UncompressedStream"/> is a stream that you can write uncompressed data
 3535    /// to and flush, but cannot read, seek or do anything else to.
 3536    /// </summary>
 3537    class UncompressedStream : Stream
 3538    {
 3539      #region Constructors
 3540      public UncompressedStream(Stream baseStream)
 3541      {
 3542        baseStream_ = baseStream;
 3543      }
 3544
 3545      #endregion
 3546
 3547      /// <summary>
 3548      /// Close this stream instance.
 3549      /// </summary>
 3550      public override void Close()
 3551      {
 3552        // Do nothing
 3553      }
 3554
 3555      /// <summary>
 3556      /// Gets a value indicating whether the current stream supports reading.
 3557      /// </summary>
 3558      public override bool CanRead
 3559      {
 3560        get {
 3561          return false;
 3562        }
 3563      }
 3564
 3565      /// <summary>
 3566      /// Write any buffered data to underlying storage.
 3567      /// </summary>
 3568      public override void Flush()
 3569      {
 3570        baseStream_.Flush();
 3571      }
 3572
 3573      /// <summary>
 3574      /// Gets a value indicating whether the current stream supports writing.
 3575      /// </summary>
 3576      public override bool CanWrite
 3577      {
 3578        get {
 3579          return baseStream_.CanWrite;
 3580        }
 3581      }
 3582
 3583      /// <summary>
 3584      /// Gets a value indicating whether the current stream supports seeking.
 3585      /// </summary>
 3586      public override bool CanSeek
 3587      {
 3588        get {
 3589          return false;
 3590        }
 3591      }
 3592
 3593      /// <summary>
 3594      /// Get the length in bytes of the stream.
 3595      /// </summary>
 3596      public override long Length
 3597      {
 3598        get {
 3599          return 0;
 3600        }
 3601      }
 3602
 3603      /// <summary>
 3604      /// Gets or sets the position within the current stream.
 3605      /// </summary>
 3606      public override long Position
 3607      {
 3608        get  {
 3609          return baseStream_.Position;
 3610        }
 3611                set {
 3612                    throw new NotImplementedException();
 3613                }
 3614            }
 3615
 3616            /// <summary>
 3617            /// Reads a sequence of bytes from the current stream and advances the position within the stream by the num
 3618            /// </summary>
 3619            /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte
 3620            /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from t
 3621            /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3622            /// <returns>
 3623            /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if t
 3624            /// </returns>
 3625            /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer lengt
 3626            /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </ex
 3627            /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3628            /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3629            /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3630            /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3631            public override int Read(byte[] buffer, int offset, int count)
 3632      {
 3633        return 0;
 3634      }
 3635
 3636      /// <summary>
 3637      /// Sets the position within the current stream.
 3638      /// </summary>
 3639      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3640      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3641      /// <returns>
 3642      /// The new position within the current stream.
 3643      /// </returns>
 3644      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3645      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3646      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3647      public override long Seek(long offset, SeekOrigin origin)
 3648      {
 3649        return 0;
 3650      }
 3651
 3652      /// <summary>
 3653      /// Sets the length of the current stream.
 3654      /// </summary>
 3655      /// <param name="value">The desired length of the current stream in bytes.</param>
 3656      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3657      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3658      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3659      public override void SetLength(long value)
 3660      {
 3661      }
 3662
 3663      /// <summary>
 3664      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3665      /// </summary>
 3666      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3667      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3668      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3669      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3670      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3671      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3672      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3673      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3674      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3675      public override void Write(byte[] buffer, int offset, int count)
 3676      {
 3677        baseStream_.Write(buffer, offset, count);
 3678      }
 3679
 3680      readonly
 3681
 3682      #region Instance Fields
 3683      Stream baseStream_;
 3684      #endregion
 3685    }
 3686
 3687    /// <summary>
 3688    /// A <see cref="PartialInputStream"/> is an <see cref="InflaterInputStream"/>
 3689    /// whose data is only a part or subsection of a file.
 3690    /// </summary>
 3691    class PartialInputStream : Stream
 3692    {
 3693      #region Constructors
 3694      /// <summary>
 3695      /// Initialise a new instance of the <see cref="PartialInputStream"/> class.
 3696      /// </summary>
 3697      /// <param name="zipFile">The <see cref="ZipFile"/> containing the underlying stream to use for IO.</param>
 3698      /// <param name="start">The start of the partial data.</param>
 3699      /// <param name="length">The length of the partial data.</param>
 3700      public PartialInputStream(ZipFile zipFile, long start, long length)
 3701      {
 3702        start_ = start;
 3703        length_ = length;
 3704
 3705        // Although this is the only time the zipfile is used
 3706        // keeping a reference here prevents premature closure of
 3707        // this zip file and thus the baseStream_.
 3708
 3709        // Code like this will cause apparently random failures depending
 3710        // on the size of the files and when garbage is collected.
 3711        //
 3712        // ZipFile z = new ZipFile (stream);
 3713        // Stream reader = z.GetInputStream(0);
 3714        // uses reader here....
 3715        zipFile_ = zipFile;
 3716        baseStream_ = zipFile_.baseStream_;
 3717        readPos_ = start;
 3718        end_ = start + length;
 3719      }
 3720      #endregion
 3721
 3722      /// <summary>
 3723      /// Read a byte from this stream.
 3724      /// </summary>
 3725      /// <returns>Returns the byte read or -1 on end of stream.</returns>
 3726      public override int ReadByte()
 3727      {
 3728        if (readPos_ >= end_) {
 3729           // -1 is the correct value at end of stream.
 3730          return -1;
 3731        }
 3732
 3733        lock( baseStream_ ) {
 3734          baseStream_.Seek(readPos_++, SeekOrigin.Begin);
 3735          return baseStream_.ReadByte();
 3736        }
 3737      }
 3738
 3739      /// <summary>
 3740      /// Close this <see cref="PartialInputStream">partial input stream</see>.
 3741      /// </summary>
 3742      /// <remarks>
 3743      /// The underlying stream is not closed.  Close the parent ZipFile class to do that.
 3744      /// </remarks>
 3745      public override void Close()
 3746      {
 3747        // Do nothing at all!
 3748      }
 3749
 3750      /// <summary>
 3751      /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of
 3752      /// </summary>
 3753      /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte array
 3754      /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the cur
 3755      /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3756      /// <returns>
 3757      /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that ma
 3758      /// </returns>
 3759      /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer length. </e
 3760      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3761      /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3762      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3763      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3764      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3765      public override int Read(byte[] buffer, int offset, int count)
 3766      {
 3767        lock(baseStream_) {
 3768          if (count > end_ - readPos_) {
 3769            count = (int) (end_ - readPos_);
 3770            if (count == 0) {
 3771              return 0;
 3772            }
 3773          }
 3774
 3775          baseStream_.Seek(readPos_, SeekOrigin.Begin);
 3776          int readCount = baseStream_.Read(buffer, offset, count);
 3777          if (readCount > 0) {
 3778            readPos_ += readCount;
 3779          }
 3780          return readCount;
 3781        }
 3782      }
 3783
 3784      /// <summary>
 3785      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3786      /// </summary>
 3787      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3788      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3789      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3790      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3791      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3792      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3793      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3794      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3795      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3796      public override void Write(byte[] buffer, int offset, int count)
 3797      {
 3798        throw new NotSupportedException();
 3799      }
 3800
 3801      /// <summary>
 3802      /// When overridden in a derived class, sets the length of the current stream.
 3803      /// </summary>
 3804      /// <param name="value">The desired length of the current stream in bytes.</param>
 3805      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3806      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3807      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3808      public override void SetLength(long value)
 3809      {
 3810        throw new NotSupportedException();
 3811      }
 3812
 3813      /// <summary>
 3814      /// When overridden in a derived class, sets the position within the current stream.
 3815      /// </summary>
 3816      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3817      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3818      /// <returns>
 3819      /// The new position within the current stream.
 3820      /// </returns>
 3821      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3822      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3823      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3824      public override long Seek(long offset, SeekOrigin origin)
 3825      {
 3826        long newPos = readPos_;
 3827
 3828        switch ( origin )
 3829        {
 3830          case SeekOrigin.Begin:
 3831            newPos = start_ + offset;
 3832            break;
 3833
 3834          case SeekOrigin.Current:
 3835            newPos = readPos_ + offset;
 3836            break;
 3837
 3838          case SeekOrigin.End:
 3839            newPos = end_ + offset;
 3840            break;
 3841        }
 3842
 3843        if ( newPos < start_ ) {
 3844          throw new ArgumentException("Negative position is invalid");
 3845        }
 3846
 3847        if ( newPos >= end_ ) {
 3848          throw new IOException("Cannot seek past end");
 3849        }
 3850        readPos_ = newPos;
 3851        return readPos_;
 3852      }
 3853
 3854      /// <summary>
 3855      /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device.
 3856      /// </summary>
 3857      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3858      public override void Flush()
 3859      {
 3860        // Nothing to do.
 3861      }
 3862
 3863      /// <summary>
 3864      /// Gets or sets the position within the current stream.
 3865      /// </summary>
 3866      /// <value></value>
 3867      /// <returns>The current position within the stream.</returns>
 3868      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3869      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking. </exception>
 3870      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3871      public override long Position {
 3872        get { return readPos_ - start_; }
 3873        set {
 3874          long newPos = start_ + value;
 3875
 3876          if ( newPos < start_ ) {
 3877            throw new ArgumentException("Negative position is invalid");
 3878          }
 3879
 3880          if ( newPos >= end_ ) {
 3881            throw new InvalidOperationException("Cannot seek past end");
 3882          }
 3883          readPos_ = newPos;
 3884        }
 3885      }
 3886
 3887      /// <summary>
 3888      /// Gets the length in bytes of the stream.
 3889      /// </summary>
 3890      /// <value></value>
 3891      /// <returns>A long value representing the length of the stream in bytes.</returns>
 3892      /// <exception cref="T:System.NotSupportedException">A class derived from Stream does not support seeking. </excep
 3893      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3894      public override long Length {
 3895        get { return length_; }
 3896      }
 3897
 3898      /// <summary>
 3899      /// Gets a value indicating whether the current stream supports writing.
 3900      /// </summary>
 3901      /// <value>false</value>
 3902      /// <returns>true if the stream supports writing; otherwise, false.</returns>
 3903      public override bool CanWrite {
 3904        get { return false; }
 3905      }
 3906
 3907      /// <summary>
 3908      /// Gets a value indicating whether the current stream supports seeking.
 3909      /// </summary>
 3910      /// <value>true</value>
 3911      /// <returns>true if the stream supports seeking; otherwise, false.</returns>
 3912      public override bool CanSeek {
 3913        get { return true; }
 3914      }
 3915
 3916      /// <summary>
 3917      /// Gets a value indicating whether the current stream supports reading.
 3918      /// </summary>
 3919      /// <value>true.</value>
 3920      /// <returns>true if the stream supports reading; otherwise, false.</returns>
 3921      public override bool CanRead {
 3922        get { return true; }
 3923      }
 3924
 3925#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 3926      /// <summary>
 3927      /// Gets a value that determines whether the current stream can time out.
 3928      /// </summary>
 3929      /// <value></value>
 3930      /// <returns>A value that determines whether the current stream can time out.</returns>
 3931      public override bool CanTimeout {
 3932        get { return baseStream_.CanTimeout; }
 3933      }
 3934#endif
 3935      #region Instance Fields
 3936      ZipFile zipFile_;
 3937      Stream baseStream_;
 3938      long start_;
 3939      long length_;
 3940      long readPos_;
 3941      long end_;
 3942      #endregion
 3943    }
 3944    #endregion
 3945  }
 3946
 3947  #endregion
 3948
 3949  #region DataSources
 3950  /// <summary>
 3951  /// Provides a static way to obtain a source of data for an entry.
 3952  /// </summary>
 3953  public interface IStaticDataSource
 3954  {
 3955    /// <summary>
 3956    /// Get a source of data by creating a new stream.
 3957    /// </summary>
 3958    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3959    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3960    Stream GetSource();
 3961  }
 3962
 3963  /// <summary>
 3964  /// Represents a source of data that can dynamically provide
 3965  /// multiple <see cref="Stream">data sources</see> based on the parameters passed.
 3966  /// </summary>
 3967  public interface IDynamicDataSource
 3968  {
 3969    /// <summary>
 3970    /// Get a data source.
 3971    /// </summary>
 3972    /// <param name="entry">The <see cref="ZipEntry"/> to get a source for.</param>
 3973    /// <param name="name">The name for data if known.</param>
 3974    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3975    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3976    Stream GetSource(ZipEntry entry, string name);
 3977  }
 3978
 3979  /// <summary>
 3980  /// Default implementation of a <see cref="IStaticDataSource"/> for use with files stored on disk.
 3981  /// </summary>
 3982  public class StaticDiskDataSource : IStaticDataSource
 3983  {
 3984    /// <summary>
 3985    /// Initialise a new instnace of <see cref="StaticDiskDataSource"/>
 3986    /// </summary>
 3987    /// <param name="fileName">The name of the file to obtain data from.</param>
 3988    public StaticDiskDataSource(string fileName)
 3989    {
 3990      fileName_ = fileName;
 3991    }
 3992
 3993    #region IDataSource Members
 3994
 3995    /// <summary>
 3996    /// Get a <see cref="Stream"/> providing data.
 3997    /// </summary>
 3998    /// <returns>Returns a <see cref="Stream"/> provising data.</returns>
 3999    public Stream GetSource()
 4000    {
 4001      return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4002    }
 4003
 4004    readonly
 4005
 4006    #endregion
 4007    #region Instance Fields
 4008    string fileName_;
 4009    #endregion
 4010  }
 4011
 4012
 4013  /// <summary>
 4014  /// Default implementation of <see cref="IDynamicDataSource"/> for files stored on disk.
 4015  /// </summary>
 4016  public class DynamicDiskDataSource : IDynamicDataSource
 4017  {
 4018
 4019    #region IDataSource Members
 4020    /// <summary>
 4021    /// Get a <see cref="Stream"/> providing data for an entry.
 4022    /// </summary>
 4023    /// <param name="entry">The entry to provide data for.</param>
 4024    /// <param name="name">The file name for data if known.</param>
 4025    /// <returns>Returns a stream providing data; or null if not available</returns>
 4026    public Stream GetSource(ZipEntry entry, string name)
 4027    {
 655404028      Stream result = null;
 4029
 655404030       if ( name != null ) {
 34031        result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 4032      }
 4033
 655404034      return result;
 4035    }
 4036
 4037    #endregion
 4038  }
 4039
 4040  #endregion
 4041
 4042  #region Archive Storage
 4043  /// <summary>
 4044  /// Defines facilities for data storage when updating Zip Archives.
 4045  /// </summary>
 4046  public interface IArchiveStorage
 4047  {
 4048    /// <summary>
 4049    /// Get the <see cref="FileUpdateMode"/> to apply during updates.
 4050    /// </summary>
 4051    FileUpdateMode UpdateMode { get; }
 4052
 4053    /// <summary>
 4054    /// Get an empty <see cref="Stream"/> that can be used for temporary output.
 4055    /// </summary>
 4056    /// <returns>Returns a temporary output <see cref="Stream"/></returns>
 4057    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4058    Stream GetTemporaryOutput();
 4059
 4060    /// <summary>
 4061    /// Convert a temporary output stream to a final stream.
 4062    /// </summary>
 4063    /// <returns>The resulting final <see cref="Stream"/></returns>
 4064    /// <seealso cref="GetTemporaryOutput"/>
 4065    Stream ConvertTemporaryToFinal();
 4066
 4067    /// <summary>
 4068    /// Make a temporary copy of the original stream.
 4069    /// </summary>
 4070    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4071    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4072    Stream MakeTemporaryCopy(Stream stream);
 4073
 4074    /// <summary>
 4075    /// Return a stream suitable for performing direct updates on the original source.
 4076    /// </summary>
 4077    /// <param name="stream">The current stream.</param>
 4078    /// <returns>Returns a stream suitable for direct updating.</returns>
 4079    /// <remarks>This may be the current stream passed.</remarks>
 4080    Stream OpenForDirectUpdate(Stream stream);
 4081
 4082    /// <summary>
 4083    /// Dispose of this instance.
 4084    /// </summary>
 4085    void Dispose();
 4086  }
 4087
 4088  /// <summary>
 4089  /// An abstract <see cref="IArchiveStorage"/> suitable for extension by inheritance.
 4090  /// </summary>
 4091  abstract public class BaseArchiveStorage : IArchiveStorage
 4092  {
 4093    #region Constructors
 4094    /// <summary>
 4095    /// Initializes a new instance of the <see cref="BaseArchiveStorage"/> class.
 4096    /// </summary>
 4097    /// <param name="updateMode">The update mode.</param>
 4098    protected BaseArchiveStorage(FileUpdateMode updateMode)
 4099    {
 4100      updateMode_ = updateMode;
 4101    }
 4102    #endregion
 4103
 4104    #region IArchiveStorage Members
 4105
 4106    /// <summary>
 4107    /// Gets a temporary output <see cref="Stream"/>
 4108    /// </summary>
 4109    /// <returns>Returns the temporary output stream.</returns>
 4110    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4111    public abstract Stream GetTemporaryOutput();
 4112
 4113    /// <summary>
 4114    /// Converts the temporary <see cref="Stream"/> to its final form.
 4115    /// </summary>
 4116    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4117    /// the final storage for the archive.</returns>
 4118    /// <seealso cref="GetTemporaryOutput"/>
 4119    public abstract Stream ConvertTemporaryToFinal();
 4120
 4121    /// <summary>
 4122    /// Make a temporary copy of a <see cref="Stream"/>.
 4123    /// </summary>
 4124    /// <param name="stream">The <see cref="Stream"/> to make a copy of.</param>
 4125    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4126    public abstract Stream MakeTemporaryCopy(Stream stream);
 4127
 4128    /// <summary>
 4129    /// Return a stream suitable for performing direct updates on the original source.
 4130    /// </summary>
 4131    /// <param name="stream">The <see cref="Stream"/> to open for direct update.</param>
 4132    /// <returns>Returns a stream suitable for direct updating.</returns>
 4133    public abstract Stream OpenForDirectUpdate(Stream stream);
 4134
 4135    /// <summary>
 4136    /// Disposes this instance.
 4137    /// </summary>
 4138    public abstract void Dispose();
 4139
 4140    /// <summary>
 4141    /// Gets the update mode applicable.
 4142    /// </summary>
 4143    /// <value>The update mode.</value>
 4144    public FileUpdateMode UpdateMode
 4145    {
 4146      get {
 4147        return updateMode_;
 4148      }
 4149    }
 4150
 4151    #endregion
 4152
 4153    #region Instance Fields
 4154    FileUpdateMode updateMode_;
 4155    #endregion
 4156  }
 4157
 4158  /// <summary>
 4159  /// An <see cref="IArchiveStorage"/> implementation suitable for hard disks.
 4160  /// </summary>
 4161  public class DiskArchiveStorage : BaseArchiveStorage
 4162  {
 4163    #region Constructors
 4164    /// <summary>
 4165    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4166    /// </summary>
 4167    /// <param name="file">The file.</param>
 4168    /// <param name="updateMode">The update mode.</param>
 4169    public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode)
 4170      : base(updateMode)
 4171    {
 4172      if ( file.Name == null ) {
 4173        throw new ZipException("Cant handle non file archives");
 4174      }
 4175
 4176      fileName_ = file.Name;
 4177    }
 4178
 4179    /// <summary>
 4180    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4181    /// </summary>
 4182    /// <param name="file">The file.</param>
 4183    public DiskArchiveStorage(ZipFile file)
 4184      : this(file, FileUpdateMode.Safe)
 4185    {
 4186    }
 4187    #endregion
 4188
 4189    #region IArchiveStorage Members
 4190
 4191    /// <summary>
 4192    /// Gets a temporary output <see cref="Stream"/> for performing updates on.
 4193    /// </summary>
 4194    /// <returns>Returns the temporary output stream.</returns>
 4195    public override Stream GetTemporaryOutput()
 4196    {
 4197      if ( temporaryName_ != null ) {
 4198        temporaryName_ = GetTempFileName(temporaryName_, true);
 4199        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4200      }
 4201      else {
 4202        // Determine where to place files based on internal strategy.
 4203        // Currently this is always done in system temp directory.
 4204        temporaryName_ = Path.GetTempFileName();
 4205        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4206      }
 4207
 4208      return temporaryStream_;
 4209    }
 4210
 4211    /// <summary>
 4212    /// Converts a temporary <see cref="Stream"/> to its final form.
 4213    /// </summary>
 4214    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4215    /// the final storage for the archive.</returns>
 4216    public override Stream ConvertTemporaryToFinal()
 4217    {
 4218      if ( temporaryStream_ == null ) {
 4219        throw new ZipException("No temporary stream has been created");
 4220      }
 4221
 4222      Stream result = null;
 4223
 4224      string moveTempName = GetTempFileName(fileName_, false);
 4225      bool newFileCreated = false;
 4226
 4227      try  {
 4228        temporaryStream_.Close();
 4229        File.Move(fileName_, moveTempName);
 4230        File.Move(temporaryName_, fileName_);
 4231        newFileCreated = true;
 4232        File.Delete(moveTempName);
 4233
 4234        result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4235      }
 4236      catch(Exception) {
 4237        result  = null;
 4238
 4239        // Try to roll back changes...
 4240        if ( !newFileCreated ) {
 4241          File.Move(moveTempName, fileName_);
 4242          File.Delete(temporaryName_);
 4243        }
 4244
 4245        throw;
 4246      }
 4247
 4248      return result;
 4249    }
 4250
 4251    /// <summary>
 4252    /// Make a temporary copy of a stream.
 4253    /// </summary>
 4254    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4255    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4256    public override Stream MakeTemporaryCopy(Stream stream)
 4257    {
 4258      stream.Close();
 4259
 4260      temporaryName_ = GetTempFileName(fileName_, true);
 4261      File.Copy(fileName_, temporaryName_, true);
 4262
 4263      temporaryStream_ = new FileStream(temporaryName_,
 4264        FileMode.Open,
 4265        FileAccess.ReadWrite);
 4266      return temporaryStream_;
 4267    }
 4268
 4269    /// <summary>
 4270    /// Return a stream suitable for performing direct updates on the original source.
 4271    /// </summary>
 4272    /// <param name="stream">The current stream.</param>
 4273    /// <returns>Returns a stream suitable for direct updating.</returns>
 4274    /// <remarks>If the <paramref name="stream"/> is not null this is used as is.</remarks>
 4275    public override Stream OpenForDirectUpdate(Stream stream)
 4276    {
 4277      Stream result;
 4278      if ((stream == null) || !stream.CanWrite)
 4279      {
 4280        if (stream != null) {
 4281          stream.Close();
 4282        }
 4283
 4284        result = new FileStream(fileName_,
 4285            FileMode.Open,
 4286            FileAccess.ReadWrite);
 4287      }
 4288      else
 4289      {
 4290        result = stream;
 4291      }
 4292
 4293      return result;
 4294    }
 4295
 4296    /// <summary>
 4297    /// Disposes this instance.
 4298    /// </summary>
 4299    public override void Dispose()
 4300    {
 4301      if ( temporaryStream_ != null ) {
 4302        temporaryStream_.Close();
 4303      }
 4304    }
 4305
 4306    #endregion
 4307
 4308    #region Internal routines
 4309    static string GetTempFileName(string original, bool makeTempFile)
 4310    {
 4311      string result = null;
 4312
 4313      if ( original == null ) {
 4314        result = Path.GetTempFileName();
 4315      }
 4316      else {
 4317        int counter = 0;
 4318        int suffixSeed = DateTime.Now.Second;
 4319
 4320        while ( result == null ) {
 4321          counter += 1;
 4322          string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter);
 4323          if ( !File.Exists(newName) ) {
 4324            if ( makeTempFile) {
 4325              try  {
 4326                // Try and create the file.
 4327                using ( FileStream stream = File.Create(newName) ) {
 4328                }
 4329                result = newName;
 4330              }
 4331              catch {
 4332                suffixSeed = DateTime.Now.Second;
 4333              }
 4334            }
 4335            else {
 4336              result = newName;
 4337            }
 4338          }
 4339        }
 4340      }
 4341      return result;
 4342    }
 4343    #endregion
 4344
 4345    #region Instance Fields
 4346    Stream temporaryStream_;
 4347    string fileName_;
 4348    string temporaryName_;
 4349    #endregion
 4350  }
 4351
 4352  /// <summary>
 4353  /// An <see cref="IArchiveStorage"/> implementation suitable for in memory streams.
 4354  /// </summary>
 4355  public class MemoryArchiveStorage : BaseArchiveStorage
 4356  {
 4357    #region Constructors
 4358    /// <summary>
 4359    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4360    /// </summary>
 4361    public MemoryArchiveStorage()
 4362      : base(FileUpdateMode.Direct)
 4363    {
 4364    }
 4365
 4366    /// <summary>
 4367    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4368    /// </summary>
 4369    /// <param name="updateMode">The <see cref="FileUpdateMode"/> to use</param>
 4370    /// <remarks>This constructor is for testing as memory streams dont really require safe mode.</remarks>
 4371    public MemoryArchiveStorage(FileUpdateMode updateMode)
 4372      : base(updateMode)
 4373    {
 4374    }
 4375
 4376    #endregion
 4377
 4378    #region Properties
 4379    /// <summary>
 4380    /// Get the stream returned by <see cref="ConvertTemporaryToFinal"/> if this was in fact called.
 4381    /// </summary>
 4382    public MemoryStream FinalStream
 4383    {
 4384      get { return finalStream_; }
 4385    }
 4386
 4387    #endregion
 4388
 4389    #region IArchiveStorage Members
 4390
 4391    /// <summary>
 4392    /// Gets the temporary output <see cref="Stream"/>
 4393    /// </summary>
 4394    /// <returns>Returns the temporary output stream.</returns>
 4395    public override Stream GetTemporaryOutput()
 4396    {
 4397      temporaryStream_ = new MemoryStream();
 4398      return temporaryStream_;
 4399    }
 4400
 4401    /// <summary>
 4402    /// Converts the temporary <see cref="Stream"/> to its final form.
 4403    /// </summary>
 4404    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4405    /// the final storage for the archive.</returns>
 4406    public override Stream ConvertTemporaryToFinal()
 4407    {
 4408      if ( temporaryStream_ == null ) {
 4409        throw new ZipException("No temporary stream has been created");
 4410      }
 4411
 4412      finalStream_ = new MemoryStream(temporaryStream_.ToArray());
 4413      return finalStream_;
 4414    }
 4415
 4416    /// <summary>
 4417    /// Make a temporary copy of the original stream.
 4418    /// </summary>
 4419    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4420    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4421    public override Stream MakeTemporaryCopy(Stream stream)
 4422    {
 4423      temporaryStream_ = new MemoryStream();
 4424      stream.Position = 0;
 4425      StreamUtils.Copy(stream, temporaryStream_, new byte[4096]);
 4426      return temporaryStream_;
 4427    }
 4428
 4429    /// <summary>
 4430    /// Return a stream suitable for performing direct updates on the original source.
 4431    /// </summary>
 4432    /// <param name="stream">The original source stream</param>
 4433    /// <returns>Returns a stream suitable for direct updating.</returns>
 4434    /// <remarks>If the <paramref name="stream"/> passed is not null this is used;
 4435    /// otherwise a new <see cref="MemoryStream"/> is returned.</remarks>
 4436    public override Stream OpenForDirectUpdate(Stream stream)
 4437    {
 4438      Stream result;
 4439      if ((stream == null) || !stream.CanWrite) {
 4440
 4441        result = new MemoryStream();
 4442
 4443        if (stream != null) {
 4444          stream.Position = 0;
 4445          StreamUtils.Copy(stream, result, new byte[4096]);
 4446
 4447          stream.Close();
 4448        }
 4449      }
 4450      else {
 4451        result = stream;
 4452      }
 4453
 4454      return result;
 4455    }
 4456
 4457    /// <summary>
 4458    /// Disposes this instance.
 4459    /// </summary>
 4460    public override void Dispose()
 4461    {
 4462      if ( temporaryStream_ != null ) {
 4463        temporaryStream_.Close();
 4464      }
 4465    }
 4466
 4467    #endregion
 4468
 4469    #region Instance Fields
 4470    MemoryStream temporaryStream_;
 4471    MemoryStream finalStream_;
 4472    #endregion
 4473  }
 4474
 4475  #endregion
 4476}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_EntryPatchData.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_EntryPatchData.htm new file mode 100644 index 000000000..1ea4f3903 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_EntryPatchData.htm @@ -0,0 +1,657 @@ + + + + +ICSharpCode.SharpZipLib.Zip.EntryPatchData - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.EntryPatchData
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipHelperStream.cs
Covered lines:0
Uncovered lines:4
Coverable lines:4
Total lines:623
Line coverage:0%
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipHelperStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipHelperStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38using System.Text;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42
 43  /// <summary>
 44  /// Holds data pertinent to a data descriptor.
 45  /// </summary>
 46  public class DescriptorData
 47  {
 48    /// <summary>
 49    /// Get /set the compressed size of data.
 50    /// </summary>
 51    public long CompressedSize
 52    {
 53      get { return compressedSize; }
 54      set { compressedSize = value; }
 55    }
 56
 57    /// <summary>
 58    /// Get / set the uncompressed size of data
 59    /// </summary>
 60    public long Size
 61    {
 62      get { return size; }
 63      set { size = value; }
 64    }
 65
 66    /// <summary>
 67    /// Get /set the crc value.
 68    /// </summary>
 69    public long Crc
 70    {
 71      get { return crc; }
 72      set { crc = (value & 0xffffffff); }
 73    }
 74
 75    #region Instance Fields
 76    long size;
 77    long compressedSize;
 78    long crc;
 79    #endregion
 80  }
 81
 82  class EntryPatchData
 83  {
 84    public long SizePatchOffset
 85    {
 086      get { return sizePatchOffset_; }
 087      set { sizePatchOffset_ = value; }
 88    }
 89
 90    public long CrcPatchOffset
 91    {
 092      get { return crcPatchOffset_; }
 093      set { crcPatchOffset_ = value; }
 94    }
 95
 96    #region Instance Fields
 97    long sizePatchOffset_;
 98    long crcPatchOffset_;
 99    #endregion
 100  }
 101
 102  /// <summary>
 103  /// This class assists with writing/reading from Zip files.
 104  /// </summary>
 105  internal class ZipHelperStream : Stream
 106  {
 107    #region Constructors
 108    /// <summary>
 109    /// Initialise an instance of this class.
 110    /// </summary>
 111    /// <param name="name">The name of the file to open.</param>
 112    public ZipHelperStream(string name)
 113    {
 114      stream_ = new FileStream(name, FileMode.Open, FileAccess.ReadWrite);
 115      isOwner_ = true;
 116    }
 117
 118    /// <summary>
 119    /// Initialise a new instance of <see cref="ZipHelperStream"/>.
 120    /// </summary>
 121    /// <param name="stream">The stream to use.</param>
 122    public ZipHelperStream(Stream stream)
 123    {
 124      stream_ = stream;
 125    }
 126    #endregion
 127
 128    /// <summary>
 129    /// Get / set a value indicating wether the the underlying stream is owned or not.
 130    /// </summary>
 131    /// <remarks>If the stream is owned it is closed when this instance is closed.</remarks>
 132    public bool IsStreamOwner
 133    {
 134      get { return isOwner_; }
 135      set { isOwner_ = value; }
 136    }
 137
 138    #region Base Stream Methods
 139    public override bool CanRead
 140    {
 141      get { return stream_.CanRead; }
 142    }
 143
 144    public override bool CanSeek
 145    {
 146      get { return stream_.CanSeek; }
 147    }
 148
 149#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 150    public override bool CanTimeout
 151    {
 152      get { return stream_.CanTimeout; }
 153    }
 154#endif
 155
 156    public override long Length
 157    {
 158      get { return stream_.Length; }
 159    }
 160
 161    public override long Position
 162    {
 163      get { return stream_.Position; }
 164      set { stream_.Position = value;  }
 165    }
 166
 167    public override bool CanWrite
 168    {
 169      get { return stream_.CanWrite; }
 170    }
 171
 172    public override void Flush()
 173    {
 174      stream_.Flush();
 175    }
 176
 177    public override long Seek(long offset, SeekOrigin origin)
 178    {
 179      return stream_.Seek(offset, origin);
 180    }
 181
 182    public override void SetLength(long value)
 183    {
 184      stream_.SetLength(value);
 185    }
 186
 187    public override int Read(byte[] buffer, int offset, int count)
 188    {
 189      return stream_.Read(buffer, offset, count);
 190    }
 191
 192    public override void Write(byte[] buffer, int offset, int count)
 193    {
 194      stream_.Write(buffer, offset, count);
 195    }
 196
 197    /// <summary>
 198    /// Close the stream.
 199    /// </summary>
 200    /// <remarks>
 201    /// The underlying stream is closed only if <see cref="IsStreamOwner"/> is true.
 202    /// </remarks>
 203    override public void Close()
 204    {
 205      Stream toClose = stream_;
 206      stream_ = null;
 207      if (isOwner_ && (toClose != null))
 208      {
 209        isOwner_ = false;
 210        toClose.Close();
 211      }
 212    }
 213    #endregion
 214
 215    // Write the local file header
 216    // TODO: ZipHelperStream.WriteLocalHeader is not yet used and needs checking for ZipFile and ZipOuptutStream usage
 217    void WriteLocalHeader(ZipEntry entry, EntryPatchData patchData)
 218    {
 219      CompressionMethod method = entry.CompressionMethod;
 220      bool headerInfoAvailable = true; // How to get this?
 221      bool patchEntryHeader = false;
 222
 223      WriteLEInt(ZipConstants.LocalHeaderSignature);
 224
 225      WriteLEShort(entry.Version);
 226      WriteLEShort(entry.Flags);
 227      WriteLEShort((byte)method);
 228      WriteLEInt((int)entry.DosTime);
 229
 230      if (headerInfoAvailable == true) {
 231        WriteLEInt((int)entry.Crc);
 232        if ( entry.LocalHeaderRequiresZip64 ) {
 233          WriteLEInt(-1);
 234          WriteLEInt(-1);
 235        }
 236        else {
 237          WriteLEInt(entry.IsCrypted ? (int)entry.CompressedSize + ZipConstants.CryptoHeaderSize : (int)entry.Compressed
 238          WriteLEInt((int)entry.Size);
 239        }
 240      } else {
 241        if (patchData != null) {
 242          patchData.CrcPatchOffset = stream_.Position;
 243        }
 244        WriteLEInt(0);  // Crc
 245
 246        if ( patchData != null ) {
 247          patchData.SizePatchOffset = stream_.Position;
 248        }
 249
 250        // For local header both sizes appear in Zip64 Extended Information
 251        if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) {
 252          WriteLEInt(-1);
 253          WriteLEInt(-1);
 254        }
 255        else {
 256          WriteLEInt(0);  // Compressed size
 257          WriteLEInt(0);  // Uncompressed size
 258        }
 259      }
 260
 261      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 262
 263      if (name.Length > 0xFFFF) {
 264        throw new ZipException("Entry name too long.");
 265      }
 266
 267      var ed = new ZipExtraData(entry.ExtraData);
 268
 269      if (entry.LocalHeaderRequiresZip64 && (headerInfoAvailable || patchEntryHeader)) {
 270        ed.StartNewEntry();
 271        if (headerInfoAvailable) {
 272          ed.AddLeLong(entry.Size);
 273          ed.AddLeLong(entry.CompressedSize);
 274        }
 275        else {
 276          ed.AddLeLong(-1);
 277          ed.AddLeLong(-1);
 278        }
 279        ed.AddNewEntry(1);
 280
 281        if ( !ed.Find(1) ) {
 282          throw new ZipException("Internal error cant find extra data");
 283        }
 284
 285        if ( patchData != null ) {
 286          patchData.SizePatchOffset = ed.CurrentReadIndex;
 287        }
 288      }
 289      else {
 290        ed.Delete(1);
 291      }
 292
 293      byte[] extra = ed.GetEntryData();
 294
 295      WriteLEShort(name.Length);
 296      WriteLEShort(extra.Length);
 297
 298      if ( name.Length > 0 ) {
 299        stream_.Write(name, 0, name.Length);
 300      }
 301
 302      if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) {
 303        patchData.SizePatchOffset += stream_.Position;
 304      }
 305
 306      if ( extra.Length > 0 ) {
 307        stream_.Write(extra, 0, extra.Length);
 308      }
 309    }
 310
 311    /// <summary>
 312    /// Locates a block with the desired <paramref name="signature"/>.
 313    /// </summary>
 314    /// <param name="signature">The signature to find.</param>
 315    /// <param name="endLocation">Location, marking the end of block.</param>
 316    /// <param name="minimumBlockSize">Minimum size of the block.</param>
 317    /// <param name="maximumVariableData">The maximum variable data.</param>
 318    /// <returns>Eeturns the offset of the first byte after the signature; -1 if not found</returns>
 319    public long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 320    {
 321      long pos = endLocation - minimumBlockSize;
 322      if ( pos < 0 ) {
 323        return -1;
 324      }
 325
 326      long giveUpMarker = Math.Max(pos - maximumVariableData, 0);
 327
 328      // TODO: This loop could be optimised for speed.
 329      do {
 330        if ( pos < giveUpMarker ) {
 331          return -1;
 332        }
 333        Seek(pos--, SeekOrigin.Begin);
 334      } while ( ReadLEInt() != signature );
 335
 336      return Position;
 337    }
 338
 339    /// <summary>
 340    /// Write Zip64 end of central directory records (File header and locator).
 341    /// </summary>
 342    /// <param name="noOfEntries">The number of entries in the central directory.</param>
 343    /// <param name="sizeEntries">The size of entries in the central directory.</param>
 344    /// <param name="centralDirOffset">The offset of the dentral directory.</param>
 345    public void WriteZip64EndOfCentralDirectory(long noOfEntries, long sizeEntries, long centralDirOffset)
 346    {
 347      long centralSignatureOffset = stream_.Position;
 348      WriteLEInt(ZipConstants.Zip64CentralFileHeaderSignature);
 349      WriteLELong(44);    // Size of this record (total size of remaining fields in header or full size - 12)
 350      WriteLEShort(ZipConstants.VersionMadeBy);   // Version made by
 351      WriteLEShort(ZipConstants.VersionZip64);   // Version to extract
 352      WriteLEInt(0);      // Number of this disk
 353      WriteLEInt(0);      // number of the disk with the start of the central directory
 354      WriteLELong(noOfEntries);       // No of entries on this disk
 355      WriteLELong(noOfEntries);       // Total No of entries in central directory
 356      WriteLELong(sizeEntries);       // Size of the central directory
 357      WriteLELong(centralDirOffset);  // offset of start of central directory
 358      // zip64 extensible data sector not catered for here (variable size)
 359
 360      // Write the Zip64 end of central directory locator
 361      WriteLEInt(ZipConstants.Zip64CentralDirLocatorSignature);
 362
 363      // no of the disk with the start of the zip64 end of central directory
 364      WriteLEInt(0);
 365
 366      // relative offset of the zip64 end of central directory record
 367      WriteLELong(centralSignatureOffset);
 368
 369      // total number of disks
 370      WriteLEInt(1);
 371    }
 372
 373    /// <summary>
 374    /// Write the required records to end the central directory.
 375    /// </summary>
 376    /// <param name="noOfEntries">The number of entries in the directory.</param>
 377    /// <param name="sizeEntries">The size of the entries in the directory.</param>
 378    /// <param name="startOfCentralDirectory">The start of the central directory.</param>
 379    /// <param name="comment">The archive comment.  (This can be null).</param>
 380    public void WriteEndOfCentralDirectory(long noOfEntries, long sizeEntries,
 381      long startOfCentralDirectory, byte[] comment)
 382    {
 383
 384      if ( (noOfEntries >= 0xffff) ||
 385        (startOfCentralDirectory >= 0xffffffff) ||
 386        (sizeEntries >= 0xffffffff) ) {
 387        WriteZip64EndOfCentralDirectory(noOfEntries, sizeEntries, startOfCentralDirectory);
 388      }
 389
 390      WriteLEInt(ZipConstants.EndOfCentralDirectorySignature);
 391
 392      // TODO: ZipFile Multi disk handling not done
 393      WriteLEShort(0);                    // number of this disk
 394      WriteLEShort(0);                    // no of disk with start of central dir
 395
 396
 397      // Number of entries
 398      if ( noOfEntries >= 0xffff ) {
 399        WriteLEUshort(0xffff);  // Zip64 marker
 400        WriteLEUshort(0xffff);
 401      }
 402      else {
 403        WriteLEShort(( short )noOfEntries);          // entries in central dir for this disk
 404        WriteLEShort(( short )noOfEntries);          // total entries in central directory
 405      }
 406
 407      // Size of the central directory
 408      if ( sizeEntries >= 0xffffffff ) {
 409        WriteLEUint(0xffffffff);    // Zip64 marker
 410      }
 411      else {
 412        WriteLEInt(( int )sizeEntries);
 413      }
 414
 415
 416      // offset of start of central directory
 417      if ( startOfCentralDirectory >= 0xffffffff ) {
 418        WriteLEUint(0xffffffff);    // Zip64 marker
 419      }
 420      else {
 421        WriteLEInt(( int )startOfCentralDirectory);
 422      }
 423
 424      int commentLength = (comment != null) ? comment.Length : 0;
 425
 426      if ( commentLength > 0xffff ) {
 427        throw new ZipException(string.Format("Comment length({0}) is too long can only be 64K", commentLength));
 428      }
 429
 430      WriteLEShort(commentLength);
 431
 432      if ( commentLength > 0 ) {
 433        Write(comment, 0, comment.Length);
 434      }
 435    }
 436
 437    #region LE value reading/writing
 438    /// <summary>
 439    /// Read an unsigned short in little endian byte order.
 440    /// </summary>
 441    /// <returns>Returns the value read.</returns>
 442    /// <exception cref="IOException">
 443    /// An i/o error occurs.
 444    /// </exception>
 445    /// <exception cref="EndOfStreamException">
 446    /// The file ends prematurely
 447    /// </exception>
 448    public int ReadLEShort()
 449    {
 450      int byteValue1 = stream_.ReadByte();
 451
 452      if (byteValue1 < 0) {
 453        throw new EndOfStreamException();
 454      }
 455
 456      int byteValue2 = stream_.ReadByte();
 457      if (byteValue2 < 0) {
 458        throw new EndOfStreamException();
 459      }
 460
 461      return byteValue1 | (byteValue2 << 8);
 462    }
 463
 464    /// <summary>
 465    /// Read an int in little endian byte order.
 466    /// </summary>
 467    /// <returns>Returns the value read.</returns>
 468    /// <exception cref="IOException">
 469    /// An i/o error occurs.
 470    /// </exception>
 471    /// <exception cref="System.IO.EndOfStreamException">
 472    /// The file ends prematurely
 473    /// </exception>
 474    public int ReadLEInt()
 475    {
 476      return ReadLEShort() | (ReadLEShort() << 16);
 477    }
 478
 479    /// <summary>
 480    /// Read a long in little endian byte order.
 481    /// </summary>
 482    /// <returns>The value read.</returns>
 483    public long ReadLELong()
 484    {
 485      return (uint)ReadLEInt() | ((long)ReadLEInt() << 32);
 486    }
 487
 488    /// <summary>
 489    /// Write an unsigned short in little endian byte order.
 490    /// </summary>
 491    /// <param name="value">The value to write.</param>
 492    public void WriteLEShort(int value)
 493    {
 494      stream_.WriteByte(( byte )(value & 0xff));
 495      stream_.WriteByte(( byte )((value >> 8) & 0xff));
 496    }
 497
 498    /// <summary>
 499    /// Write a ushort in little endian byte order.
 500    /// </summary>
 501    /// <param name="value">The value to write.</param>
 502    public void WriteLEUshort(ushort value)
 503    {
 504      stream_.WriteByte(( byte )(value & 0xff));
 505      stream_.WriteByte(( byte )(value >> 8));
 506    }
 507
 508    /// <summary>
 509    /// Write an int in little endian byte order.
 510    /// </summary>
 511    /// <param name="value">The value to write.</param>
 512    public void WriteLEInt(int value)
 513    {
 514      WriteLEShort(value);
 515      WriteLEShort(value >> 16);
 516    }
 517
 518    /// <summary>
 519    /// Write a uint in little endian byte order.
 520    /// </summary>
 521    /// <param name="value">The value to write.</param>
 522    public void WriteLEUint(uint value)
 523    {
 524      WriteLEUshort(( ushort )(value & 0xffff));
 525      WriteLEUshort(( ushort )(value >> 16));
 526    }
 527
 528    /// <summary>
 529    /// Write a long in little endian byte order.
 530    /// </summary>
 531    /// <param name="value">The value to write.</param>
 532    public void WriteLELong(long value)
 533    {
 534      WriteLEInt(( int )value);
 535      WriteLEInt(( int )(value >> 32));
 536    }
 537
 538    /// <summary>
 539    /// Write a ulong in little endian byte order.
 540    /// </summary>
 541    /// <param name="value">The value to write.</param>
 542    public void WriteLEUlong(ulong value)
 543    {
 544      WriteLEUint(( uint )(value & 0xffffffff));
 545      WriteLEUint(( uint )(value >> 32));
 546    }
 547
 548    #endregion
 549
 550    /// <summary>
 551    /// Write a data descriptor.
 552    /// </summary>
 553    /// <param name="entry">The entry to write a descriptor for.</param>
 554    /// <returns>Returns the number of descriptor bytes written.</returns>
 555    public int WriteDataDescriptor(ZipEntry entry)
 556    {
 557      if (entry == null) {
 558        throw new ArgumentNullException(nameof(entry));
 559      }
 560
 561      int result=0;
 562
 563      // Add data descriptor if flagged as required
 564      if ((entry.Flags & (int)GeneralBitFlags.Descriptor) != 0)
 565      {
 566        // The signature is not PKZIP originally but is now described as optional
 567        // in the PKZIP Appnote documenting trhe format.
 568        WriteLEInt(ZipConstants.DataDescriptorSignature);
 569        WriteLEInt(unchecked((int)(entry.Crc)));
 570
 571        result+=8;
 572
 573        if (entry.LocalHeaderRequiresZip64)
 574        {
 575          WriteLELong(entry.CompressedSize);
 576          WriteLELong(entry.Size);
 577          result+=16;
 578        }
 579        else
 580        {
 581          WriteLEInt((int)entry.CompressedSize);
 582          WriteLEInt((int)entry.Size);
 583          result+=8;
 584        }
 585      }
 586
 587      return result;
 588    }
 589
 590    /// <summary>
 591    /// Read data descriptor at the end of compressed data.
 592    /// </summary>
 593    /// <param name="zip64">if set to <c>true</c> [zip64].</param>
 594    /// <param name="data">The data to fill in.</param>
 595    /// <returns>Returns the number of bytes read in the descriptor.</returns>
 596    public void ReadDataDescriptor(bool zip64, DescriptorData data)
 597    {
 598      int intValue = ReadLEInt();
 599
 600      // In theory this may not be a descriptor according to PKZIP appnote.
 601      // In practise its always there.
 602      if (intValue != ZipConstants.DataDescriptorSignature) {
 603        throw new ZipException("Data descriptor signature not found");
 604      }
 605
 606      data.Crc = ReadLEInt();
 607
 608      if (zip64) {
 609        data.CompressedSize = ReadLELong();
 610        data.Size = ReadLELong();
 611      }
 612      else {
 613        data.CompressedSize = ReadLEInt();
 614        data.Size = ReadLEInt();
 615      }
 616    }
 617
 618    #region Instance Fields
 619    bool isOwner_;
 620    Stream stream_;
 621    #endregion
 622  }
 623}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedPathFilter.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedPathFilter.htm new file mode 100644 index 000000000..610f36dfe --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedPathFilter.htm @@ -0,0 +1,381 @@ + + + + +ICSharpCode.SharpZipLib.Core.ExtendedPathFilter - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ExtendedPathFilter
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs
Covered lines:0
Uncovered lines:47
Coverable lines:47
Total lines:336
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor(...)100
.ctor(...)100
IsMatch(...)500
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// PathFilter.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  /// <summary>
 42  /// PathFilter filters directories and files using a form of <see cref="System.Text.RegularExpressions.Regex">regular 
 43  /// by full path name.
 44  /// See <see cref="NameFilter">NameFilter</see> for more detail on filtering.
 45  /// </summary>
 46  public class PathFilter : IScanFilter
 47  {
 48    #region Constructors
 49    /// <summary>
 50    /// Initialise a new instance of <see cref="PathFilter"></see>.
 51    /// </summary>
 52    /// <param name="filter">The <see cref="NameFilter">filter</see> expression to apply.</param>
 53    public PathFilter(string filter)
 54    {
 55      nameFilter_ = new NameFilter(filter);
 56    }
 57    #endregion
 58
 59    #region IScanFilter Members
 60    /// <summary>
 61    /// Test a name to see if it matches the filter.
 62    /// </summary>
 63    /// <param name="name">The name to test.</param>
 64    /// <returns>True if the name matches, false otherwise.</returns>
 65    /// <remarks><see cref="Path.GetFullPath(string)"/> is used to get the full path before matching.</remarks>
 66    public virtual bool IsMatch(string name)
 67    {
 68      bool result = false;
 69
 70      if ( name != null ) {
 71        string cooked = (name.Length > 0) ? Path.GetFullPath(name) : "";
 72        result = nameFilter_.IsMatch(cooked);
 73      }
 74      return result;
 75    }
 76
 77    readonly
 78    #endregion
 79
 80    #region Instance Fields
 81    NameFilter nameFilter_;
 82    #endregion
 83  }
 84
 85  /// <summary>
 86  /// ExtendedPathFilter filters based on name, file size, and the last write time of the file.
 87  /// </summary>
 88  /// <remarks>Provides an example of how to customise filtering.</remarks>
 89  public class ExtendedPathFilter : PathFilter
 90  {
 91    #region Constructors
 92    /// <summary>
 93    /// Initialise a new instance of ExtendedPathFilter.
 94    /// </summary>
 95    /// <param name="filter">The filter to apply.</param>
 96    /// <param name="minSize">The minimum file size to include.</param>
 97    /// <param name="maxSize">The maximum file size to include.</param>
 98    public ExtendedPathFilter(string filter,
 99      long minSize, long maxSize)
 0100      : base(filter)
 101    {
 0102      MinSize = minSize;
 0103      MaxSize = maxSize;
 0104    }
 105
 106    /// <summary>
 107    /// Initialise a new instance of ExtendedPathFilter.
 108    /// </summary>
 109    /// <param name="filter">The filter to apply.</param>
 110    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 111    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 112    public ExtendedPathFilter(string filter,
 113      DateTime minDate, DateTime maxDate)
 0114      : base(filter)
 115    {
 0116      MinDate = minDate;
 0117      MaxDate = maxDate;
 0118    }
 119
 120    /// <summary>
 121    /// Initialise a new instance of ExtendedPathFilter.
 122    /// </summary>
 123    /// <param name="filter">The filter to apply.</param>
 124    /// <param name="minSize">The minimum file size to include.</param>
 125    /// <param name="maxSize">The maximum file size to include.</param>
 126    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 127    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 128    public ExtendedPathFilter(string filter,
 129      long minSize, long maxSize,
 130      DateTime minDate, DateTime maxDate)
 0131      : base(filter)
 132    {
 0133      MinSize = minSize;
 0134      MaxSize = maxSize;
 0135      MinDate = minDate;
 0136      MaxDate = maxDate;
 0137    }
 138    #endregion
 139
 140    #region IScanFilter Members
 141    /// <summary>
 142    /// Test a filename to see if it matches the filter.
 143    /// </summary>
 144    /// <param name="name">The filename to test.</param>
 145    /// <returns>True if the filter matches, false otherwise.</returns>
 146    /// <exception cref="System.IO.FileNotFoundException">The <see paramref="fileName"/> doesnt exist</exception>
 147    public override bool IsMatch(string name)
 148    {
 0149      bool result = base.IsMatch(name);
 150
 0151       if ( result ) {
 0152        var fileInfo = new FileInfo(name);
 0153        result =
 0154          (MinSize <= fileInfo.Length) &&
 0155          (MaxSize >= fileInfo.Length) &&
 0156          (MinDate <= fileInfo.LastWriteTime) &&
 0157          (MaxDate >= fileInfo.LastWriteTime)
 0158          ;
 159      }
 0160      return result;
 161    }
 162    #endregion
 163
 164    #region Properties
 165    /// <summary>
 166    /// Get/set the minimum size/length for a file that will match this filter.
 167    /// </summary>
 168    /// <remarks>The default value is zero.</remarks>
 169    /// <exception cref="ArgumentOutOfRangeException">value is less than zero; greater than <see cref="MaxSize"/></excep
 170    public long MinSize
 171    {
 0172      get { return minSize_; }
 173      set
 174      {
 0175         if ( (value < 0) || (maxSize_ < value) ) {
 0176          throw new ArgumentOutOfRangeException(nameof(value));
 177        }
 178
 0179        minSize_ = value;
 0180      }
 181    }
 182
 183    /// <summary>
 184    /// Get/set the maximum size/length for a file that will match this filter.
 185    /// </summary>
 186    /// <remarks>The default value is <see cref="System.Int64.MaxValue"/></remarks>
 187    /// <exception cref="ArgumentOutOfRangeException">value is less than zero or less than <see cref="MinSize"/></except
 188    public long MaxSize
 189    {
 0190      get { return maxSize_; }
 191      set
 192      {
 0193         if ( (value < 0) || (minSize_ > value) ) {
 0194          throw new ArgumentOutOfRangeException(nameof(value));
 195        }
 196
 0197        maxSize_ = value;
 0198      }
 199    }
 200
 201    /// <summary>
 202    /// Get/set the minimum <see cref="DateTime"/> value that will match for this filter.
 203    /// </summary>
 204    /// <remarks>Files with a LastWrite time less than this value are excluded by the filter.</remarks>
 205    public DateTime MinDate
 206    {
 207      get
 208      {
 0209        return minDate_;
 210      }
 211
 212      set
 213      {
 0214         if ( value > maxDate_ ) {
 215#if NETCF_1_0
 216          throw new ArgumentOutOfRangeException("value");
 217#else
 0218          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MaxDate");
 219#endif
 220        }
 221
 0222        minDate_ = value;
 0223      }
 224    }
 225
 226    /// <summary>
 227    /// Get/set the maximum <see cref="DateTime"/> value that will match for this filter.
 228    /// </summary>
 229    /// <remarks>Files with a LastWrite time greater than this value are excluded by the filter.</remarks>
 230    public DateTime MaxDate
 231    {
 232      get
 233      {
 0234        return maxDate_;
 235      }
 236
 237      set
 238      {
 0239         if ( minDate_ > value ) {
 240#if NETCF_1_0
 241          throw new ArgumentOutOfRangeException("value");
 242#else
 0243          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MinDate");
 244#endif
 245        }
 246
 0247        maxDate_ = value;
 0248      }
 249    }
 250    #endregion
 251
 252    #region Instance Fields
 253    long minSize_;
 0254    long maxSize_ = long.MaxValue;
 0255    DateTime minDate_ = DateTime.MinValue;
 0256    DateTime maxDate_ = DateTime.MaxValue;
 257    #endregion
 258  }
 259
 260  /// <summary>
 261  /// NameAndSizeFilter filters based on name and file size.
 262  /// </summary>
 263  /// <remarks>A sample showing how filters might be extended.</remarks>
 264  [Obsolete("Use ExtendedPathFilter instead")]
 265  public class NameAndSizeFilter : PathFilter
 266  {
 267
 268    /// <summary>
 269    /// Initialise a new instance of NameAndSizeFilter.
 270    /// </summary>
 271    /// <param name="filter">The filter to apply.</param>
 272    /// <param name="minSize">The minimum file size to include.</param>
 273    /// <param name="maxSize">The maximum file size to include.</param>
 274    public NameAndSizeFilter(string filter, long minSize, long maxSize)
 275      : base(filter)
 276    {
 277      MinSize = minSize;
 278      MaxSize = maxSize;
 279    }
 280
 281    /// <summary>
 282    /// Test a filename to see if it matches the filter.
 283    /// </summary>
 284    /// <param name="name">The filename to test.</param>
 285    /// <returns>True if the filter matches, false otherwise.</returns>
 286    public override bool IsMatch(string name)
 287    {
 288      bool result = base.IsMatch(name);
 289
 290      if ( result ) {
 291        var fileInfo = new FileInfo(name);
 292        long length = fileInfo.Length;
 293        result =
 294          (MinSize <= length) &&
 295          (MaxSize >= length);
 296      }
 297      return result;
 298    }
 299
 300    /// <summary>
 301    /// Get/set the minimum size for a file that will match this filter.
 302    /// </summary>
 303    public long MinSize
 304    {
 305      get { return minSize_; }
 306      set {
 307        if ( (value < 0) || (maxSize_ < value) ) {
 308          throw new ArgumentOutOfRangeException(nameof(value));
 309        }
 310
 311        minSize_ = value;
 312      }
 313    }
 314
 315    /// <summary>
 316    /// Get/set the maximum size for a file that will match this filter.
 317    /// </summary>
 318    public long MaxSize
 319    {
 320      get { return maxSize_; }
 321      set
 322      {
 323        if ( (value < 0) || (minSize_ > value) ) {
 324          throw new ArgumentOutOfRangeException(nameof(value));
 325        }
 326
 327        maxSize_ = value;
 328      }
 329    }
 330
 331    #region Instance Fields
 332    long minSize_;
 333    long maxSize_ = long.MaxValue;
 334    #endregion
 335  }
 336}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedUnixData.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedUnixData.htm new file mode 100644 index 000000000..a7cfcfbe9 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedUnixData.htm @@ -0,0 +1,1032 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ExtendedUnixData - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ExtendedUnixData
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipExtraData.cs
Covered lines:34
Uncovered lines:27
Coverable lines:61
Total lines:987
Line coverage:55.7%
Branch coverage:40%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
SetData(...)771.4355.56
GetData()666.6757.14
IsValidValue(...)2100100
.ctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipExtraData.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// ZipExtraData.cs
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36
 37using System;
 38using System.IO;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42  // TODO: Sort out wether tagged data is useful and what a good implementation might look like.
 43  // Its just a sketch of an idea at the moment.
 44
 45  /// <summary>
 46  /// ExtraData tagged value interface.
 47  /// </summary>
 48  public interface ITaggedData
 49  {
 50    /// <summary>
 51    /// Get the ID for this tagged data value.
 52    /// </summary>
 53    short TagID { get; }
 54
 55    /// <summary>
 56    /// Set the contents of this instance from the data passed.
 57    /// </summary>
 58    /// <param name="data">The data to extract contents from.</param>
 59    /// <param name="offset">The offset to begin extracting data from.</param>
 60    /// <param name="count">The number of bytes to extract.</param>
 61    void SetData(byte[] data, int offset, int count);
 62
 63    /// <summary>
 64    /// Get the data representing this instance.
 65    /// </summary>
 66    /// <returns>Returns the data for this instance.</returns>
 67    byte[] GetData();
 68  }
 69
 70  /// <summary>
 71  /// A raw binary tagged value
 72  /// </summary>
 73  public class RawTaggedData : ITaggedData
 74  {
 75    /// <summary>
 76    /// Initialise a new instance.
 77    /// </summary>
 78    /// <param name="tag">The tag ID.</param>
 79    public RawTaggedData(short tag)
 80    {
 81      _tag = tag;
 82    }
 83
 84    #region ITaggedData Members
 85
 86    /// <summary>
 87    /// Get the ID for this tagged data value.
 88    /// </summary>
 89    public short TagID
 90    {
 91      get { return _tag; }
 92      set { _tag = value; }
 93    }
 94
 95    /// <summary>
 96    /// Set the data from the raw values provided.
 97    /// </summary>
 98    /// <param name="data">The raw data to extract values from.</param>
 99    /// <param name="offset">The index to start extracting values from.</param>
 100    /// <param name="count">The number of bytes available.</param>
 101    public void SetData(byte[] data, int offset, int count)
 102    {
 103      if( data==null )
 104      {
 105        throw new ArgumentNullException(nameof(data));
 106      }
 107
 108      _data=new byte[count];
 109      Array.Copy(data, offset, _data, 0, count);
 110    }
 111
 112    /// <summary>
 113    /// Get the binary data representing this instance.
 114    /// </summary>
 115    /// <returns>The raw binary data representing this instance.</returns>
 116    public byte[] GetData()
 117    {
 118      return _data;
 119    }
 120
 121    #endregion
 122
 123    /// <summary>
 124    /// Get /set the binary data representing this instance.
 125    /// </summary>
 126    /// <returns>The raw binary data representing this instance.</returns>
 127    public byte[] Data
 128    {
 129      get { return _data; }
 130      set { _data=value; }
 131    }
 132
 133    #region Instance Fields
 134    /// <summary>
 135    /// The tag ID for this instance.
 136    /// </summary>
 137    short _tag;
 138
 139    byte[] _data;
 140    #endregion
 141  }
 142
 143  /// <summary>
 144  /// Class representing extended unix date time values.
 145  /// </summary>
 146  public class ExtendedUnixData : ITaggedData
 147  {
 148    /// <summary>
 149    /// Flags indicate which values are included in this instance.
 150    /// </summary>
 151    [Flags]
 152    public enum Flags : byte
 153    {
 154      /// <summary>
 155      /// The modification time is included
 156      /// </summary>
 157      ModificationTime = 0x01,
 158
 159      /// <summary>
 160      /// The access time is included
 161      /// </summary>
 162      AccessTime = 0x02,
 163
 164      /// <summary>
 165      /// The create time is included.
 166      /// </summary>
 167      CreateTime = 0x04,
 168    }
 169
 170    #region ITaggedData Members
 171
 172    /// <summary>
 173    /// Get the ID
 174    /// </summary>
 175    public short TagID
 176    {
 1177      get { return 0x5455; }
 178    }
 179
 180    /// <summary>
 181    /// Set the data from the raw values provided.
 182    /// </summary>
 183    /// <param name="data">The raw data to extract values from.</param>
 184    /// <param name="index">The index to start extracting values from.</param>
 185    /// <param name="count">The number of bytes available.</param>
 186    public void SetData(byte[] data, int index, int count)
 187    {
 1188      using (MemoryStream ms = new MemoryStream(data, index, count, false))
 1189      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 190      {
 191        // bit 0           if set, modification time is present
 192        // bit 1           if set, access time is present
 193        // bit 2           if set, creation time is present
 194
 1195        _flags = (Flags)helperStream.ReadByte();
 1196         if (((_flags & Flags.ModificationTime) != 0) && (count >= 5))
 197        {
 1198          int iTime = helperStream.ReadLEInt();
 199
 1200          _modificationTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 1201            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 202        }
 203
 1204         if ((_flags & Flags.AccessTime) != 0)
 205        {
 0206          int iTime = helperStream.ReadLEInt();
 207
 0208          _lastAccessTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 0209            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 210        }
 211
 1212         if ((_flags & Flags.CreateTime) != 0)
 213        {
 0214          int iTime = helperStream.ReadLEInt();
 215
 0216          _createTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 0217            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 218        }
 1219      }
 1220    }
 221
 222    /// <summary>
 223    /// Get the binary data representing this instance.
 224    /// </summary>
 225    /// <returns>The raw binary data representing this instance.</returns>
 226    public byte[] GetData()
 227    {
 1228      using (MemoryStream ms = new MemoryStream())
 1229      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 230      {
 1231        helperStream.IsStreamOwner = false;
 1232        helperStream.WriteByte((byte)_flags);     // Flags
 1233         if ( (_flags & Flags.ModificationTime) != 0) {
 1234          TimeSpan span = _modificationTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 1235          var seconds = (int)span.TotalSeconds;
 1236          helperStream.WriteLEInt(seconds);
 237        }
 1238         if ( (_flags & Flags.AccessTime) != 0) {
 0239          TimeSpan span = _lastAccessTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 0240          var seconds = (int)span.TotalSeconds;
 0241          helperStream.WriteLEInt(seconds);
 242        }
 1243         if ( (_flags & Flags.CreateTime) != 0) {
 0244          TimeSpan span = _createTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 0245          var seconds = (int)span.TotalSeconds;
 0246          helperStream.WriteLEInt(seconds);
 247        }
 1248        return ms.ToArray();
 249      }
 1250    }
 251
 252    #endregion
 253
 254    /// <summary>
 255    /// Test a <see cref="DateTime"> value to see if is valid and can be represented here.</see>
 256    /// </summary>
 257    /// <param name="value">The <see cref="DateTime">value</see> to test.</param>
 258    /// <returns>Returns true if the value is valid and can be represented; false if not.</returns>
 259    /// <remarks>The standard Unix time is a signed integer data type, directly encoding the Unix time number,
 260    /// which is the number of seconds since 1970-01-01.
 261    /// Being 32 bits means the values here cover a range of about 136 years.
 262    /// The minimum representable time is 1901-12-13 20:45:52,
 263    /// and the maximum representable time is 2038-01-19 03:14:07.
 264    /// </remarks>
 265    public static bool IsValidValue(DateTime value)
 266    {
 2267      return (( value >= new DateTime(1901, 12, 13, 20, 45, 52)) ||
 2268          ( value <= new DateTime(2038, 1, 19, 03, 14, 07) ));
 269    }
 270
 271    /// <summary>
 272    /// Get /set the Modification Time
 273    /// </summary>
 274    /// <exception cref="ArgumentOutOfRangeException"></exception>
 275    /// <seealso cref="IsValidValue"></seealso>
 276    public DateTime ModificationTime
 277    {
 4278      get { return _modificationTime; }
 279      set
 280      {
 2281         if ( !IsValidValue(value) ) {
 0282          throw new ArgumentOutOfRangeException(nameof(value));
 283        }
 284
 2285        _flags |= Flags.ModificationTime;
 2286        _modificationTime=value;
 2287      }
 288    }
 289
 290    /// <summary>
 291    /// Get / set the Access Time
 292    /// </summary>
 293    /// <exception cref="ArgumentOutOfRangeException"></exception>
 294    /// <seealso cref="IsValidValue"></seealso>
 295    public DateTime AccessTime
 296    {
 0297      get { return _lastAccessTime; }
 298      set {
 0299         if ( !IsValidValue(value) ) {
 0300          throw new ArgumentOutOfRangeException(nameof(value));
 301        }
 302
 0303        _flags |= Flags.AccessTime;
 0304        _lastAccessTime=value;
 0305      }
 306    }
 307
 308    /// <summary>
 309    /// Get / Set the Create Time
 310    /// </summary>
 311    /// <exception cref="ArgumentOutOfRangeException"></exception>
 312    /// <seealso cref="IsValidValue"></seealso>
 313    public DateTime CreateTime
 314    {
 0315      get { return _createTime; }
 316      set {
 0317         if ( !IsValidValue(value) ) {
 0318          throw new ArgumentOutOfRangeException(nameof(value));
 319        }
 320
 0321        _flags |= Flags.CreateTime;
 0322        _createTime=value;
 0323      }
 324    }
 325
 326    /// <summary>
 327    /// Get/set the <see cref="Flags">values</see> to include.
 328    /// </summary>
 329    Flags Include
 330    {
 0331      get { return _flags; }
 0332      set { _flags = value; }
 333    }
 334
 335    #region Instance Fields
 336    Flags _flags;
 1337    DateTime _modificationTime = new DateTime(1970,1,1);
 1338    DateTime _lastAccessTime = new DateTime(1970, 1, 1);
 1339    DateTime _createTime = new DateTime(1970, 1, 1);
 340    #endregion
 341  }
 342
 343  /// <summary>
 344  /// Class handling NT date time values.
 345  /// </summary>
 346  public class NTTaggedData : ITaggedData
 347  {
 348    /// <summary>
 349    /// Get the ID for this tagged data value.
 350    /// </summary>
 351    public short TagID
 352    {
 353      get { return 10; }
 354    }
 355
 356    /// <summary>
 357    /// Set the data from the raw values provided.
 358    /// </summary>
 359    /// <param name="data">The raw data to extract values from.</param>
 360    /// <param name="index">The index to start extracting values from.</param>
 361    /// <param name="count">The number of bytes available.</param>
 362    public void SetData(byte[] data, int index, int count)
 363    {
 364      using (MemoryStream ms = new MemoryStream(data, index, count, false))
 365      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 366      {
 367        helperStream.ReadLEInt(); // Reserved
 368        while (helperStream.Position < helperStream.Length)
 369        {
 370          int ntfsTag = helperStream.ReadLEShort();
 371          int ntfsLength = helperStream.ReadLEShort();
 372          if (ntfsTag == 1)
 373          {
 374            if (ntfsLength >= 24)
 375            {
 376              long lastModificationTicks = helperStream.ReadLELong();
 377              _lastModificationTime = DateTime.FromFileTime(lastModificationTicks);
 378
 379              long lastAccessTicks = helperStream.ReadLELong();
 380              _lastAccessTime = DateTime.FromFileTime(lastAccessTicks);
 381
 382              long createTimeTicks = helperStream.ReadLELong();
 383              _createTime = DateTime.FromFileTime(createTimeTicks);
 384            }
 385            break;
 386          }
 387          else
 388          {
 389            // An unknown NTFS tag so simply skip it.
 390            helperStream.Seek(ntfsLength, SeekOrigin.Current);
 391          }
 392        }
 393      }
 394    }
 395
 396    /// <summary>
 397    /// Get the binary data representing this instance.
 398    /// </summary>
 399    /// <returns>The raw binary data representing this instance.</returns>
 400    public byte[] GetData()
 401    {
 402      using (MemoryStream ms = new MemoryStream())
 403      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 404      {
 405        helperStream.IsStreamOwner = false;
 406        helperStream.WriteLEInt(0);       // Reserved
 407        helperStream.WriteLEShort(1);     // Tag
 408        helperStream.WriteLEShort(24);    // Length = 3 x 8.
 409        helperStream.WriteLELong(_lastModificationTime.ToFileTime());
 410        helperStream.WriteLELong(_lastAccessTime.ToFileTime());
 411        helperStream.WriteLELong(_createTime.ToFileTime());
 412        return ms.ToArray();
 413      }
 414    }
 415
 416    /// <summary>
 417    /// Test a <see cref="DateTime"> valuie to see if is valid and can be represented here.</see>
 418    /// </summary>
 419    /// <param name="value">The <see cref="DateTime">value</see> to test.</param>
 420    /// <returns>Returns true if the value is valid and can be represented; false if not.</returns>
 421    /// <remarks>
 422    /// NTFS filetimes are 64-bit unsigned integers, stored in Intel
 423    /// (least significant byte first) byte order. They determine the
 424    /// number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch",
 425    /// which is "01-Jan-1601 00:00:00 UTC". 28 May 60056 is the upper limit
 426    /// </remarks>
 427    public static bool IsValidValue(DateTime value)
 428    {
 429      bool result = true;
 430      try
 431      {
 432        value.ToFileTimeUtc();
 433      }
 434      catch
 435      {
 436        result = false;
 437      }
 438      return result;
 439    }
 440
 441    /// <summary>
 442    /// Get/set the <see cref="DateTime">last modification time</see>.
 443    /// </summary>
 444    public DateTime LastModificationTime
 445    {
 446      get { return _lastModificationTime; }
 447      set {
 448        if (! IsValidValue(value))
 449        {
 450          throw new ArgumentOutOfRangeException(nameof(value));
 451        }
 452        _lastModificationTime = value;
 453      }
 454    }
 455
 456    /// <summary>
 457    /// Get /set the <see cref="DateTime">create time</see>
 458    /// </summary>
 459    public DateTime CreateTime
 460    {
 461      get { return _createTime; }
 462      set {
 463        if ( !IsValidValue(value)) {
 464          throw new ArgumentOutOfRangeException(nameof(value));
 465        }
 466        _createTime = value;
 467      }
 468    }
 469
 470    /// <summary>
 471    /// Get /set the <see cref="DateTime">last access time</see>.
 472    /// </summary>
 473    public DateTime LastAccessTime
 474    {
 475      get { return _lastAccessTime; }
 476      set {
 477        if (!IsValidValue(value)) {
 478          throw new ArgumentOutOfRangeException(nameof(value));
 479        }
 480        _lastAccessTime = value;
 481      }
 482    }
 483
 484    #region Instance Fields
 485    DateTime _lastAccessTime = DateTime.FromFileTime(0);
 486    DateTime _lastModificationTime = DateTime.FromFileTime(0);
 487    DateTime _createTime = DateTime.FromFileTime(0);
 488    #endregion
 489  }
 490
 491  /// <summary>
 492  /// A factory that creates <see cref="ITaggedData">tagged data</see> instances.
 493  /// </summary>
 494  interface ITaggedDataFactory
 495  {
 496    /// <summary>
 497    /// Get data for a specific tag value.
 498    /// </summary>
 499    /// <param name="tag">The tag ID to find.</param>
 500    /// <param name="data">The data to search.</param>
 501    /// <param name="offset">The offset to begin extracting data from.</param>
 502    /// <param name="count">The number of bytes to extract.</param>
 503    /// <returns>The located <see cref="ITaggedData">value found</see>, or null if not found.</returns>
 504    ITaggedData Create(short tag, byte[] data, int offset, int count);
 505  }
 506
 507  ///
 508  /// <summary>
 509  /// A class to handle the extra data field for Zip entries
 510  /// </summary>
 511  /// <remarks>
 512  /// Extra data contains 0 or more values each prefixed by a header tag and length.
 513  /// They contain zero or more bytes of actual data.
 514  /// The data is held internally using a copy on write strategy.  This is more efficient but
 515  /// means that for extra data created by passing in data can have the values modified by the caller
 516  /// in some circumstances.
 517  /// </remarks>
 518  sealed public class ZipExtraData : IDisposable
 519  {
 520    #region Constructors
 521    /// <summary>
 522    /// Initialise a default instance.
 523    /// </summary>
 524    public ZipExtraData()
 525    {
 526      Clear();
 527    }
 528
 529    /// <summary>
 530    /// Initialise with known extra data.
 531    /// </summary>
 532    /// <param name="data">The extra data.</param>
 533    public ZipExtraData(byte[] data)
 534    {
 535      if ( data == null )
 536      {
 537        _data = new byte[0];
 538      }
 539      else
 540      {
 541        _data = data;
 542      }
 543    }
 544    #endregion
 545
 546    /// <summary>
 547    /// Get the raw extra data value
 548    /// </summary>
 549    /// <returns>Returns the raw byte[] extra data this instance represents.</returns>
 550    public byte[] GetEntryData()
 551    {
 552      if ( Length > ushort.MaxValue ) {
 553        throw new ZipException("Data exceeds maximum length");
 554      }
 555
 556      return (byte[])_data.Clone();
 557    }
 558
 559    /// <summary>
 560    /// Clear the stored data.
 561    /// </summary>
 562    public void Clear()
 563    {
 564      if ( (_data == null) || (_data.Length != 0) ) {
 565        _data = new byte[0];
 566      }
 567    }
 568
 569    /// <summary>
 570    /// Gets the current extra data length.
 571    /// </summary>
 572    public int Length
 573    {
 574      get { return _data.Length; }
 575    }
 576
 577    /// <summary>
 578    /// Get a read-only <see cref="Stream"/> for the associated tag.
 579    /// </summary>
 580    /// <param name="tag">The tag to locate data for.</param>
 581    /// <returns>Returns a <see cref="Stream"/> containing tag data or null if no tag was found.</returns>
 582    public Stream GetStreamForTag(int tag)
 583    {
 584      Stream result = null;
 585      if ( Find(tag) ) {
 586        result = new MemoryStream(_data, _index, _readValueLength, false);
 587      }
 588      return result;
 589    }
 590
 591    /// <summary>
 592    /// Get the <see cref="ITaggedData">tagged data</see> for a tag.
 593    /// </summary>
 594    /// <param name="tag">The tag to search for.</param>
 595    /// <returns>Returns a <see cref="ITaggedData">tagged value</see> or null if none found.</returns>
 596    private ITaggedData GetData(short tag)
 597    {
 598      ITaggedData result = null;
 599      if (Find(tag))
 600      {
 601        result = Create(tag, _data, _readValueStart, _readValueLength);
 602      }
 603      return result;
 604    }
 605
 606    static ITaggedData Create(short tag, byte[] data, int offset, int count)
 607    {
 608      ITaggedData result = null;
 609      switch ( tag )
 610      {
 611        case 0x000A:
 612          result = new NTTaggedData();
 613          break;
 614        case 0x5455:
 615          result = new ExtendedUnixData();
 616          break;
 617        default:
 618          result = new RawTaggedData(tag);
 619          break;
 620      }
 621      result.SetData(data, offset, count);
 622      return result;
 623    }
 624
 625    /// <summary>
 626    /// Get the length of the last value found by <see cref="Find"/>
 627    /// </summary>
 628    /// <remarks>This is only valid if <see cref="Find"/> has previously returned true.</remarks>
 629    public int ValueLength
 630    {
 631      get { return _readValueLength; }
 632    }
 633
 634    /// <summary>
 635    /// Get the index for the current read value.
 636    /// </summary>
 637    /// <remarks>This is only valid if <see cref="Find"/> has previously returned true.
 638    /// Initially the result will be the index of the first byte of actual data.  The value is updated after calls to
 639    /// <see cref="ReadInt"/>, <see cref="ReadShort"/> and <see cref="ReadLong"/>. </remarks>
 640    public int CurrentReadIndex
 641    {
 642      get { return _index; }
 643    }
 644
 645    /// <summary>
 646    /// Get the number of bytes remaining to be read for the current value;
 647    /// </summary>
 648    public int UnreadCount
 649    {
 650      get
 651      {
 652        if ((_readValueStart > _data.Length) ||
 653          (_readValueStart < 4) ) {
 654          throw new ZipException("Find must be called before calling a Read method");
 655        }
 656
 657        return _readValueStart + _readValueLength - _index;
 658      }
 659    }
 660
 661    /// <summary>
 662    /// Find an extra data value
 663    /// </summary>
 664    /// <param name="headerID">The identifier for the value to find.</param>
 665    /// <returns>Returns true if the value was found; false otherwise.</returns>
 666    public bool Find(int headerID)
 667    {
 668      _readValueStart = _data.Length;
 669      _readValueLength = 0;
 670      _index = 0;
 671
 672      int localLength = _readValueStart;
 673      int localTag = headerID - 1;
 674
 675      // Trailing bytes that cant make up an entry (as there arent enough
 676      // bytes for a tag and length) are ignored!
 677      while ( (localTag != headerID) && (_index < _data.Length - 3) ) {
 678        localTag = ReadShortInternal();
 679        localLength = ReadShortInternal();
 680        if ( localTag != headerID ) {
 681          _index += localLength;
 682        }
 683      }
 684
 685      bool result = (localTag == headerID) && ((_index + localLength) <= _data.Length);
 686
 687      if ( result ) {
 688        _readValueStart = _index;
 689        _readValueLength = localLength;
 690      }
 691
 692      return result;
 693    }
 694
 695    /// <summary>
 696    /// Add a new entry to extra data.
 697    /// </summary>
 698    /// <param name="taggedData">The <see cref="ITaggedData"/> value to add.</param>
 699    public void AddEntry(ITaggedData taggedData)
 700    {
 701      if (taggedData == null)
 702      {
 703        throw new ArgumentNullException(nameof(taggedData));
 704      }
 705      AddEntry(taggedData.TagID, taggedData.GetData());
 706    }
 707
 708    /// <summary>
 709    /// Add a new entry to extra data
 710    /// </summary>
 711    /// <param name="headerID">The ID for this entry.</param>
 712    /// <param name="fieldData">The data to add.</param>
 713    /// <remarks>If the ID already exists its contents are replaced.</remarks>
 714    public void AddEntry(int headerID, byte[] fieldData)
 715    {
 716      if ( (headerID > ushort.MaxValue) || (headerID < 0)) {
 717        throw new ArgumentOutOfRangeException(nameof(headerID));
 718      }
 719
 720      int addLength = (fieldData == null) ? 0 : fieldData.Length;
 721
 722      if ( addLength > ushort.MaxValue ) {
 723#if NETCF_1_0
 724        throw new ArgumentOutOfRangeException("fieldData");
 725#else
 726        throw new ArgumentOutOfRangeException(nameof(fieldData), "exceeds maximum length");
 727#endif
 728      }
 729
 730      // Test for new length before adjusting data.
 731      int newLength = _data.Length + addLength + 4;
 732
 733      if ( Find(headerID) )
 734      {
 735        newLength -= (ValueLength + 4);
 736      }
 737
 738      if ( newLength > ushort.MaxValue ) {
 739        throw new ZipException("Data exceeds maximum length");
 740      }
 741
 742      Delete(headerID);
 743
 744      byte[] newData = new byte[newLength];
 745      _data.CopyTo(newData, 0);
 746      int index = _data.Length;
 747      _data = newData;
 748      SetShort(ref index, headerID);
 749      SetShort(ref index, addLength);
 750      if ( fieldData != null ) {
 751        fieldData.CopyTo(newData, index);
 752      }
 753    }
 754
 755    /// <summary>
 756    /// Start adding a new entry.
 757    /// </summary>
 758    /// <remarks>Add data using <see cref="AddData(byte[])"/>, <see cref="AddLeShort"/>, <see cref="AddLeInt"/>, or <see
 759    /// The new entry is completed and actually added by calling <see cref="AddNewEntry"/></remarks>
 760    /// <seealso cref="AddEntry(ITaggedData)"/>
 761    public void StartNewEntry()
 762    {
 763      _newEntry = new MemoryStream();
 764    }
 765
 766    /// <summary>
 767    /// Add entry data added since <see cref="StartNewEntry"/> using the ID passed.
 768    /// </summary>
 769    /// <param name="headerID">The identifier to use for this entry.</param>
 770    public void AddNewEntry(int headerID)
 771    {
 772      byte[] newData = _newEntry.ToArray();
 773      _newEntry = null;
 774      AddEntry(headerID, newData);
 775    }
 776
 777    /// <summary>
 778    /// Add a byte of data to the pending new entry.
 779    /// </summary>
 780    /// <param name="data">The byte to add.</param>
 781    /// <seealso cref="StartNewEntry"/>
 782    public void AddData(byte data)
 783    {
 784      _newEntry.WriteByte(data);
 785    }
 786
 787    /// <summary>
 788    /// Add data to a pending new entry.
 789    /// </summary>
 790    /// <param name="data">The data to add.</param>
 791    /// <seealso cref="StartNewEntry"/>
 792    public void AddData(byte[] data)
 793    {
 794      if ( data == null ) {
 795        throw new ArgumentNullException(nameof(data));
 796      }
 797
 798      _newEntry.Write(data, 0, data.Length);
 799    }
 800
 801    /// <summary>
 802    /// Add a short value in little endian order to the pending new entry.
 803    /// </summary>
 804    /// <param name="toAdd">The data to add.</param>
 805    /// <seealso cref="StartNewEntry"/>
 806    public void AddLeShort(int toAdd)
 807    {
 808      unchecked {
 809        _newEntry.WriteByte(( byte )toAdd);
 810        _newEntry.WriteByte(( byte )(toAdd >> 8));
 811      }
 812    }
 813
 814    /// <summary>
 815    /// Add an integer value in little endian order to the pending new entry.
 816    /// </summary>
 817    /// <param name="toAdd">The data to add.</param>
 818    /// <seealso cref="StartNewEntry"/>
 819    public void AddLeInt(int toAdd)
 820    {
 821      unchecked {
 822        AddLeShort(( short )toAdd);
 823        AddLeShort(( short )(toAdd >> 16));
 824      }
 825    }
 826
 827    /// <summary>
 828    /// Add a long value in little endian order to the pending new entry.
 829    /// </summary>
 830    /// <param name="toAdd">The data to add.</param>
 831    /// <seealso cref="StartNewEntry"/>
 832    public void AddLeLong(long toAdd)
 833    {
 834      unchecked {
 835        AddLeInt(( int )(toAdd & 0xffffffff));
 836        AddLeInt(( int )(toAdd >> 32));
 837      }
 838    }
 839
 840    /// <summary>
 841    /// Delete an extra data field.
 842    /// </summary>
 843    /// <param name="headerID">The identifier of the field to delete.</param>
 844    /// <returns>Returns true if the field was found and deleted.</returns>
 845    public bool Delete(int headerID)
 846    {
 847      bool result = false;
 848
 849      if ( Find(headerID) ) {
 850        result = true;
 851        int trueStart = _readValueStart - 4;
 852
 853        byte[] newData = new byte[_data.Length - (ValueLength + 4)];
 854        Array.Copy(_data, 0, newData, 0, trueStart);
 855
 856        int trueEnd = trueStart + ValueLength + 4;
 857        Array.Copy(_data, trueEnd, newData, trueStart, _data.Length - trueEnd);
 858        _data = newData;
 859      }
 860      return result;
 861    }
 862
 863    #region Reading Support
 864    /// <summary>
 865    /// Read a long in little endian form from the last <see cref="Find">found</see> data value
 866    /// </summary>
 867    /// <returns>Returns the long value read.</returns>
 868    public long ReadLong()
 869    {
 870      ReadCheck(8);
 871      return (ReadInt() & 0xffffffff) | ((( long )ReadInt()) << 32);
 872    }
 873
 874    /// <summary>
 875    /// Read an integer in little endian form from the last <see cref="Find">found</see> data value.
 876    /// </summary>
 877    /// <returns>Returns the integer read.</returns>
 878    public int ReadInt()
 879    {
 880      ReadCheck(4);
 881
 882      int result = _data[_index] + (_data[_index + 1] << 8) +
 883        (_data[_index + 2] << 16) + (_data[_index + 3] << 24);
 884      _index += 4;
 885      return result;
 886    }
 887
 888    /// <summary>
 889    /// Read a short value in little endian form from the last <see cref="Find">found</see> data value.
 890    /// </summary>
 891    /// <returns>Returns the short value read.</returns>
 892    public int ReadShort()
 893    {
 894      ReadCheck(2);
 895      int result = _data[_index] + (_data[_index + 1] << 8);
 896      _index += 2;
 897      return result;
 898    }
 899
 900    /// <summary>
 901    /// Read a byte from an extra data
 902    /// </summary>
 903    /// <returns>The byte value read or -1 if the end of data has been reached.</returns>
 904    public int ReadByte()
 905    {
 906      int result = -1;
 907      if ( (_index < _data.Length) && (_readValueStart + _readValueLength > _index) ) {
 908        result = _data[_index];
 909        _index += 1;
 910      }
 911      return result;
 912    }
 913
 914    /// <summary>
 915    /// Skip data during reading.
 916    /// </summary>
 917    /// <param name="amount">The number of bytes to skip.</param>
 918    public void Skip(int amount)
 919    {
 920      ReadCheck(amount);
 921      _index += amount;
 922    }
 923
 924    void ReadCheck(int length)
 925    {
 926      if ((_readValueStart > _data.Length) ||
 927        (_readValueStart < 4) ) {
 928        throw new ZipException("Find must be called before calling a Read method");
 929      }
 930
 931      if (_index > _readValueStart + _readValueLength - length ) {
 932        throw new ZipException("End of extra data");
 933      }
 934
 935            if ( _index + length < 4 ) {
 936                throw new ZipException("Cannot read before start of tag");
 937            }
 938    }
 939
 940    /// <summary>
 941    /// Internal form of <see cref="ReadShort"/> that reads data at any location.
 942    /// </summary>
 943    /// <returns>Returns the short value read.</returns>
 944    int ReadShortInternal()
 945    {
 946      if ( _index > _data.Length - 2) {
 947        throw new ZipException("End of extra data");
 948      }
 949
 950      int result = _data[_index] + (_data[_index + 1] << 8);
 951      _index += 2;
 952      return result;
 953    }
 954
 955    void SetShort(ref int index, int source)
 956    {
 957      _data[index] = (byte)source;
 958      _data[index + 1] = (byte)(source >> 8);
 959      index += 2;
 960    }
 961
 962    #endregion
 963
 964    #region IDisposable Members
 965
 966    /// <summary>
 967    /// Dispose of this instance.
 968    /// </summary>
 969    public void Dispose()
 970    {
 971      if ( _newEntry != null ) {
 972        _newEntry.Close();
 973      }
 974    }
 975
 976    #endregion
 977
 978    #region Instance Fields
 979    int _index;
 980    int _readValueStart;
 981    int _readValueLength;
 982
 983    MemoryStream _newEntry;
 984    byte[] _data;
 985    #endregion
 986  }
 987}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_FastZip.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_FastZip.htm new file mode 100644 index 000000000..42185e1bd --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_FastZip.htm @@ -0,0 +1,784 @@ + + + + +ICSharpCode.SharpZipLib.Zip.FastZip - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.FastZip
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\FastZip.cs
Covered lines:90
Uncovered lines:99
Coverable lines:189
Total lines:728
Line coverage:47.6%
Branch coverage:29.1%
+

Metrics

+ + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)100
CreateZip(...)100
CreateZip(...)150100
CreateZip(...)772.2245.45
ExtractZip(...)1100100
ExtractZip(...)1100100
ExtractZip(...)138047.83
ProcessDirectory(...)600
ProcessFile(...)676.4755.56
AddFileContents(...)663.6454.55
ExtractFileEntry(...)1800
ExtractEntry(...)1454.5544.44
MakeExternalAttributes(...)100
NameIsValid(...)200
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\FastZip.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// FastZip.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38using ICSharpCode.SharpZipLib.Core;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42  /// <summary>
 43  /// FastZipEvents supports all events applicable to <see cref="FastZip">FastZip</see> operations.
 44  /// </summary>
 45  public class FastZipEvents
 46  {
 47    /// <summary>
 48    /// Delegate to invoke when processing directories.
 49    /// </summary>
 50    public event EventHandler<DirectoryEventArgs> ProcessDirectory;
 51
 52    /// <summary>
 53    /// Delegate to invoke when processing files.
 54    /// </summary>
 55    public ProcessFileHandler ProcessFile;
 56
 57    /// <summary>
 58    /// Delegate to invoke during processing of files.
 59    /// </summary>
 60    public ProgressHandler Progress;
 61
 62    /// <summary>
 63    /// Delegate to invoke when processing for a file has been completed.
 64    /// </summary>
 65    public CompletedFileHandler CompletedFile;
 66
 67    /// <summary>
 68    /// Delegate to invoke when processing directory failures.
 69    /// </summary>
 70    public DirectoryFailureHandler DirectoryFailure;
 71
 72    /// <summary>
 73    /// Delegate to invoke when processing file failures.
 74    /// </summary>
 75    public FileFailureHandler FileFailure;
 76
 77    /// <summary>
 78    /// Raise the <see cref="DirectoryFailure">directory failure</see> event.
 79    /// </summary>
 80    /// <param name="directory">The directory causing the failure.</param>
 81    /// <param name="e">The exception for this event.</param>
 82    /// <returns>A boolean indicating if execution should continue or not.</returns>
 83    public bool OnDirectoryFailure(string directory, Exception e)
 84    {
 85      bool result = false;
 86      DirectoryFailureHandler handler = DirectoryFailure;
 87
 88      if ( handler != null ) {
 89        var args = new ScanFailureEventArgs(directory, e);
 90        handler(this, args);
 91        result = args.ContinueRunning;
 92      }
 93      return result;
 94    }
 95
 96    /// <summary>
 97    /// Fires the <see cref="FileFailure"> file failure handler delegate</see>.
 98    /// </summary>
 99    /// <param name="file">The file causing the failure.</param>
 100    /// <param name="e">The exception for this failure.</param>
 101    /// <returns>A boolean indicating if execution should continue or not.</returns>
 102    public bool OnFileFailure(string file, Exception e)
 103    {
 104      FileFailureHandler handler = FileFailure;
 105            bool result = (handler != null);
 106
 107      if ( result ) {
 108        var args = new ScanFailureEventArgs(file, e);
 109        handler(this, args);
 110        result = args.ContinueRunning;
 111      }
 112      return result;
 113    }
 114
 115    /// <summary>
 116    /// Fires the <see cref="ProcessFile">ProcessFile delegate</see>.
 117    /// </summary>
 118    /// <param name="file">The file being processed.</param>
 119    /// <returns>A boolean indicating if execution should continue or not.</returns>
 120    public bool OnProcessFile(string file)
 121    {
 122      bool result = true;
 123      ProcessFileHandler handler = ProcessFile;
 124
 125      if ( handler != null ) {
 126        var args = new ScanEventArgs(file);
 127        handler(this, args);
 128        result = args.ContinueRunning;
 129      }
 130      return result;
 131    }
 132
 133    /// <summary>
 134        /// Fires the <see cref="CompletedFile"/> delegate
 135    /// </summary>
 136    /// <param name="file">The file whose processing has been completed.</param>
 137    /// <returns>A boolean indicating if execution should continue or not.</returns>
 138    public bool OnCompletedFile(string file)
 139    {
 140      bool result = true;
 141      CompletedFileHandler handler = CompletedFile;
 142      if ( handler != null ) {
 143        var args = new ScanEventArgs(file);
 144        handler(this, args);
 145        result = args.ContinueRunning;
 146      }
 147      return result;
 148    }
 149
 150    /// <summary>
 151    /// Fires the <see cref="ProcessDirectory">process directory</see> delegate.
 152    /// </summary>
 153    /// <param name="directory">The directory being processed.</param>
 154    /// <param name="hasMatchingFiles">Flag indicating if the directory has matching files as determined by the current 
 155    /// <returns>A <see cref="bool"/> of true if the operation should continue; false otherwise.</returns>
 156    public bool OnProcessDirectory(string directory, bool hasMatchingFiles)
 157    {
 158      bool result = true;
 159      EventHandler<DirectoryEventArgs> handler = ProcessDirectory;
 160      if ( handler != null ) {
 161        var args = new DirectoryEventArgs(directory, hasMatchingFiles);
 162        handler(this, args);
 163        result = args.ContinueRunning;
 164      }
 165      return result;
 166    }
 167
 168    /// <summary>
 169    /// The minimum timespan between <see cref="Progress"/> events.
 170    /// </summary>
 171    /// <value>The minimum period of time between <see cref="Progress"/> events.</value>
 172    /// <seealso cref="Progress"/>
 173        /// <remarks>The default interval is three seconds.</remarks>
 174    public TimeSpan ProgressInterval
 175    {
 176      get { return progressInterval_; }
 177      set { progressInterval_ = value; }
 178    }
 179
 180    #region Instance Fields
 181    TimeSpan progressInterval_ = TimeSpan.FromSeconds(3);
 182    #endregion
 183  }
 184
 185  /// <summary>
 186  /// FastZip provides facilities for creating and extracting zip files.
 187  /// </summary>
 188  public class FastZip
 189  {
 190    #region Enumerations
 191    /// <summary>
 192    /// Defines the desired handling when overwriting files during extraction.
 193    /// </summary>
 194    public enum Overwrite
 195    {
 196      /// <summary>
 197      /// Prompt the user to confirm overwriting
 198      /// </summary>
 199      Prompt,
 200      /// <summary>
 201      /// Never overwrite files.
 202      /// </summary>
 203      Never,
 204      /// <summary>
 205      /// Always overwrite files.
 206      /// </summary>
 207      Always
 208    }
 209    #endregion
 210
 211    #region Constructors
 212    /// <summary>
 213    /// Initialise a default instance of <see cref="FastZip"/>.
 214    /// </summary>
 8215    public FastZip()
 216    {
 8217    }
 218
 219    /// <summary>
 220    /// Initialise a new instance of <see cref="FastZip"/>
 221    /// </summary>
 222    /// <param name="events">The <see cref="FastZipEvents">events</see> to use during operations.</param>
 0223    public FastZip(FastZipEvents events)
 224    {
 0225      events_ = events;
 0226    }
 227    #endregion
 228
 229    #region Properties
 230    /// <summary>
 231    /// Get/set a value indicating wether empty directories should be created.
 232    /// </summary>
 233    public bool CreateEmptyDirectories
 234    {
 8235      get { return createEmptyDirectories_; }
 2236      set { createEmptyDirectories_ = value; }
 237    }
 238
 239#if !NETCF_1_0
 240    /// <summary>
 241    /// Get / set the password value.
 242    /// </summary>
 243    public string Password
 244    {
 0245      get { return password_; }
 4246      set { password_ = value; }
 247    }
 248#endif
 249
 250    /// <summary>
 251    /// Get or set the <see cref="INameTransform"></see> active when creating Zip files.
 252    /// </summary>
 253    /// <seealso cref="EntryFactory"></seealso>
 254    public INameTransform NameTransform
 255    {
 0256      get { return entryFactory_.NameTransform; }
 257      set {
 6258        entryFactory_.NameTransform = value;
 6259      }
 260    }
 261
 262    /// <summary>
 263    /// Get or set the <see cref="IEntryFactory"></see> active when creating Zip files.
 264    /// </summary>
 265    public IEntryFactory EntryFactory
 266    {
 0267      get { return entryFactory_; }
 268      set {
 1269         if ( value == null ) {
 0270          entryFactory_ = new ZipEntryFactory();
 0271        }
 272        else {
 1273          entryFactory_ = value;
 274        }
 1275      }
 276    }
 277
 278    /// <summary>
 279    /// Gets or sets the setting for <see cref="UseZip64">Zip64 handling when writing.</see>
 280    /// </summary>
 281        /// <remarks>
 282        /// The default value is dynamic which is not backwards compatible with old
 283        /// programs and can cause problems with XP's built in compression which cant
 284        /// read Zip64 archives. However it does avoid the situation were a large file
 285        /// is added and cannot be completed correctly.
 286        /// NOTE: Setting the size for entries before they are added is the best solution!
 287        /// By default the EntryFactory used by FastZip will set fhe file size.
 288        /// </remarks>
 289    public UseZip64 UseZip64
 290    {
 6291      get { return useZip64_; }
 0292      set { useZip64_ = value; }
 293    }
 294
 295    /// <summary>
 296    /// Get/set a value indicating wether file dates and times should
 297    /// be restored when extracting files from an archive.
 298    /// </summary>
 299    /// <remarks>The default value is false.</remarks>
 300    public bool RestoreDateTimeOnExtract
 301    {
 302      get {
 0303        return restoreDateTimeOnExtract_;
 304      }
 305      set {
 0306        restoreDateTimeOnExtract_ = value;
 0307      }
 308    }
 309
 310    /// <summary>
 311    /// Get/set a value indicating wether file attributes should
 312    /// be restored during extract operations
 313    /// </summary>
 314    public bool RestoreAttributesOnExtract
 315    {
 0316      get { return restoreAttributesOnExtract_; }
 0317      set { restoreAttributesOnExtract_ = value; }
 318    }
 319    #endregion
 320
 321    #region Delegates
 322    /// <summary>
 323    /// Delegate called when confirming overwriting of files.
 324    /// </summary>
 325    public delegate bool ConfirmOverwriteDelegate(string fileName);
 326    #endregion
 327
 328    #region CreateZip
 329    /// <summary>
 330    /// Create a zip file.
 331    /// </summary>
 332    /// <param name="zipFileName">The name of the zip file to create.</param>
 333    /// <param name="sourceDirectory">The directory to source files from.</param>
 334    /// <param name="recurse">True to recurse directories, false for no recursion.</param>
 335    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 336    /// <param name="directoryFilter">The <see cref="PathFilter">directory filter</see> to apply.</param>
 337    public void CreateZip(string zipFileName, string sourceDirectory,
 338      bool recurse, string fileFilter, string directoryFilter)
 339    {
 0340      CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, directoryFilter);
 0341    }
 342
 343    /// <summary>
 344    /// Create a zip file/archive.
 345    /// </summary>
 346    /// <param name="zipFileName">The name of the zip file to create.</param>
 347    /// <param name="sourceDirectory">The directory to obtain files and directories from.</param>
 348    /// <param name="recurse">True to recurse directories, false for no recursion.</param>
 349    /// <param name="fileFilter">The file filter to apply.</param>
 350    public void CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter)
 351    {
 1352      CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, null);
 0353    }
 354
 355    /// <summary>
 356    /// Create a zip archive sending output to the <paramref name="outputStream"/> passed.
 357    /// </summary>
 358    /// <param name="outputStream">The stream to write archive data to.</param>
 359    /// <param name="sourceDirectory">The directory to source files from.</param>
 360    /// <param name="recurse">True to recurse directories, false for no recursion.</param>
 361    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 362    /// <param name="directoryFilter">The <see cref="PathFilter">directory filter</see> to apply.</param>
 363        /// <remarks>The <paramref name="outputStream"/> is closed after creation.</remarks>
 364    public void CreateZip(Stream outputStream, string sourceDirectory, bool recurse, string fileFilter, string directory
 365    {
 6366      NameTransform = new ZipNameTransform(sourceDirectory);
 6367      sourceDirectory_ = sourceDirectory;
 368
 6369      using ( outputStream_ = new ZipOutputStream(outputStream) ) {
 370
 371#if !NETCF_1_0
 6372         if ( password_ != null ) {
 2373          outputStream_.Password = password_;
 374        }
 375#endif
 376
 6377        outputStream_.UseZip64 = UseZip64;
 6378        var scanner = new FileSystemScanner(fileFilter, directoryFilter);
 6379        scanner.ProcessFile += ProcessFile;
 6380         if ( this.CreateEmptyDirectories ) {
 0381          scanner.ProcessDirectory += ProcessDirectory;
 382        }
 383
 6384         if (events_ != null) {
 0385           if ( events_.FileFailure != null ) {
 0386            scanner.FileFailure += events_.FileFailure;
 387          }
 388
 0389           if ( events_.DirectoryFailure != null ) {
 0390            scanner.DirectoryFailure += events_.DirectoryFailure;
 391          }
 392        }
 393
 6394        scanner.Scan(sourceDirectory, recurse);
 4395      }
 4396    }
 397
 398    #endregion
 399
 400    #region ExtractZip
 401    /// <summary>
 402    /// Extract the contents of a zip file.
 403    /// </summary>
 404    /// <param name="zipFileName">The zip file to extract from.</param>
 405    /// <param name="targetDirectory">The directory to save extracted information in.</param>
 406    /// <param name="fileFilter">A filter to apply to files.</param>
 407    public void ExtractZip(string zipFileName, string targetDirectory, string fileFilter)
 408    {
 2409      ExtractZip(zipFileName, targetDirectory, Overwrite.Always, null, fileFilter, null, restoreDateTimeOnExtract_);
 1410    }
 411
 412    /// <summary>
 413    /// Extract the contents of a zip file.
 414    /// </summary>
 415    /// <param name="zipFileName">The zip file to extract from.</param>
 416    /// <param name="targetDirectory">The directory to save extracted information in.</param>
 417    /// <param name="overwrite">The style of <see cref="Overwrite">overwriting</see> to apply.</param>
 418    /// <param name="confirmDelegate">A delegate to invoke when confirming overwriting.</param>
 419    /// <param name="fileFilter">A filter to apply to files.</param>
 420    /// <param name="directoryFilter">A filter to apply to directories.</param>
 421    /// <param name="restoreDateTime">Flag indicating whether to restore the date and time for extracted files.</param>
 422    public void ExtractZip(string zipFileName, string targetDirectory,
 423                 Overwrite overwrite, ConfirmOverwriteDelegate confirmDelegate,
 424                 string fileFilter, string directoryFilter, bool restoreDateTime)
 425    {
 2426      Stream inputStream = File.Open(zipFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
 1427      ExtractZip(inputStream, targetDirectory, overwrite, confirmDelegate, fileFilter, directoryFilter, restoreDateTime,
 1428    }
 429
 430    /// <summary>
 431    /// Extract the contents of a zip file held in a stream.
 432    /// </summary>
 433    /// <param name="inputStream">The seekable input stream containing the zip to extract from.</param>
 434    /// <param name="targetDirectory">The directory to save extracted information in.</param>
 435    /// <param name="overwrite">The style of <see cref="Overwrite">overwriting</see> to apply.</param>
 436    /// <param name="confirmDelegate">A delegate to invoke when confirming overwriting.</param>
 437    /// <param name="fileFilter">A filter to apply to files.</param>
 438    /// <param name="directoryFilter">A filter to apply to directories.</param>
 439    /// <param name="restoreDateTime">Flag indicating whether to restore the date and time for extracted files.</param>
 440    /// <param name="isStreamOwner">Flag indicating whether the inputStream will be closed by this method.</param>
 441    public void ExtractZip(Stream inputStream, string targetDirectory,
 442             Overwrite overwrite, ConfirmOverwriteDelegate confirmDelegate,
 443             string fileFilter, string directoryFilter, bool restoreDateTime,
 444             bool isStreamOwner)
 445    {
 1446       if ((overwrite == Overwrite.Prompt) && (confirmDelegate == null)) {
 0447        throw new ArgumentNullException(nameof(confirmDelegate));
 448      }
 449
 1450      continueRunning_ = true;
 1451      overwrite_ = overwrite;
 1452      confirmDelegate_ = confirmDelegate;
 1453      extractNameTransform_ = new WindowsNameTransform(targetDirectory);
 454
 1455      fileFilter_ = new NameFilter(fileFilter);
 1456      directoryFilter_ = new NameFilter(directoryFilter);
 1457      restoreDateTimeOnExtract_ = restoreDateTime;
 458
 1459      using (zipFile_ = new ZipFile(inputStream)) {
 460
 461#if !NETCF_1_0
 1462         if (password_ != null) {
 0463          zipFile_.Password = password_;
 464        }
 465#endif
 1466        zipFile_.IsStreamOwner = isStreamOwner;
 1467        System.Collections.IEnumerator enumerator = zipFile_.GetEnumerator();
 2468         while (continueRunning_ && enumerator.MoveNext()) {
 1469          var entry = (ZipEntry)enumerator.Current;
 1470           if (entry.IsFile)
 471          {
 472            // TODO Path.GetDirectory can fail here on invalid characters.
 0473             if (directoryFilter_.IsMatch(Path.GetDirectoryName(entry.Name)) && fileFilter_.IsMatch(entry.Name)) {
 0474              ExtractEntry(entry);
 475            }
 0476          }
 1477           else if (entry.IsDirectory) {
 1478             if (directoryFilter_.IsMatch(entry.Name) && CreateEmptyDirectories) {
 1479              ExtractEntry(entry);
 480            }
 481          }
 482          else {
 483            // Do nothing for volume labels etc...
 484          }
 485        }
 1486      }
 1487    }
 488    #endregion
 489
 490    #region Internal Processing
 491    void ProcessDirectory(object sender, DirectoryEventArgs e)
 492    {
 0493       if ( !e.HasMatchingFiles && CreateEmptyDirectories ) {
 0494         if ( events_ != null ) {
 0495          events_.OnProcessDirectory(e.Name, e.HasMatchingFiles);
 496        }
 497
 0498         if ( e.ContinueRunning ) {
 0499           if (e.Name != sourceDirectory_) {
 0500            ZipEntry entry = entryFactory_.MakeDirectoryEntry(e.Name);
 0501            outputStream_.PutNextEntry(entry);
 502          }
 503        }
 504      }
 0505    }
 506
 507    void ProcessFile(object sender, ScanEventArgs e)
 508    {
 5509       if ( (events_ != null) && (events_.ProcessFile != null) ) {
 0510        events_.ProcessFile(sender, e);
 511      }
 512
 5513       if ( e.ContinueRunning ) {
 514                try {
 515                    // The open below is equivalent to OpenRead which gaurantees that if opened the
 516                    // file will not be changed by subsequent openers, but precludes opening in some cases
 517                    // were it could succeed. ie the open may fail as its already open for writing and the share mode sh
 5518                    using (FileStream stream = File.Open(e.Name, FileMode.Open, FileAccess.Read, FileShare.Read)) {
 4519                        ZipEntry entry = entryFactory_.MakeFileEntry(e.Name);
 4520                        outputStream_.PutNextEntry(entry);
 4521                        AddFileContents(e.Name, stream);
 4522                    }
 4523                }
 1524                catch(Exception ex) {
 1525                     if (events_ != null) {
 0526                        continueRunning_ = events_.OnFileFailure(e.Name, ex);
 0527                    }
 528                    else {
 1529                        continueRunning_ = false;
 1530                        throw;
 531                    }
 0532                }
 533      }
 4534    }
 535
 536    void AddFileContents(string name, Stream stream)
 537    {
 4538       if( stream==null ) {
 0539        throw new ArgumentNullException(nameof(stream));
 540      }
 541
 4542       if( buffer_==null ) {
 4543        buffer_=new byte[4096];
 544      }
 545
 4546       if( (events_!=null)&&(events_.Progress!=null) ) {
 0547        StreamUtils.Copy(stream, outputStream_, buffer_,
 0548          events_.Progress, events_.ProgressInterval, this, name);
 0549      }
 550      else {
 4551        StreamUtils.Copy(stream, outputStream_, buffer_);
 552      }
 553
 4554       if( events_!=null ) {
 0555        continueRunning_=events_.OnCompletedFile(name);
 556      }
 4557    }
 558
 559    void ExtractFileEntry(ZipEntry entry, string targetName)
 560    {
 0561      bool proceed = true;
 0562       if ( overwrite_ != Overwrite.Always ) {
 0563         if ( File.Exists(targetName) ) {
 0564           if ( (overwrite_ == Overwrite.Prompt) && (confirmDelegate_ != null) ) {
 0565            proceed = confirmDelegate_(targetName);
 0566          }
 567          else {
 0568            proceed = false;
 569          }
 570        }
 571      }
 572
 0573       if ( proceed ) {
 0574         if ( events_ != null ) {
 0575          continueRunning_ = events_.OnProcessFile(entry.Name);
 576        }
 577
 0578         if ( continueRunning_ ) {
 579          try {
 0580            using ( FileStream outputStream = File.Create(targetName) ) {
 0581               if ( buffer_ == null ) {
 0582                buffer_ = new byte[4096];
 583              }
 0584               if ((events_ != null) && (events_.Progress != null))
 585              {
 0586                StreamUtils.Copy(zipFile_.GetInputStream(entry), outputStream, buffer_,
 0587                  events_.Progress, events_.ProgressInterval, this, entry.Name, entry.Size);
 0588              }
 589              else
 590              {
 0591                StreamUtils.Copy(zipFile_.GetInputStream(entry), outputStream, buffer_);
 592              }
 593
 0594               if (events_ != null) {
 0595                continueRunning_ = events_.OnCompletedFile(entry.Name);
 596              }
 0597            }
 598
 599#if !NETCF_1_0 && !NETCF_2_0
 0600             if ( restoreDateTimeOnExtract_ ) {
 0601              File.SetLastWriteTime(targetName, entry.DateTime);
 602            }
 603
 0604             if ( RestoreAttributesOnExtract && entry.IsDOSEntry && (entry.ExternalFileAttributes != -1)) {
 0605              var fileAttributes = (FileAttributes) entry.ExternalFileAttributes;
 606              // TODO: FastZip - Setting of other file attributes on extraction is a little trickier.
 0607              fileAttributes &= (FileAttributes.Archive | FileAttributes.Normal | FileAttributes.ReadOnly | FileAttribut
 0608              File.SetAttributes(targetName, fileAttributes);
 609            }
 610#endif
 0611          }
 0612          catch(Exception ex) {
 0613             if ( events_ != null ) {
 0614              continueRunning_ = events_.OnFileFailure(targetName, ex);
 0615            }
 616            else {
 0617                            continueRunning_ = false;
 0618                            throw;
 619            }
 0620          }
 621        }
 622      }
 0623    }
 624
 625    void ExtractEntry(ZipEntry entry)
 626    {
 1627      bool doExtraction = entry.IsCompressionMethodSupported();
 1628      string targetName = entry.Name;
 629
 1630       if ( doExtraction ) {
 1631         if ( entry.IsFile ) {
 0632          targetName = extractNameTransform_.TransformFile(targetName);
 0633        }
 1634         else if ( entry.IsDirectory ) {
 1635          targetName = extractNameTransform_.TransformDirectory(targetName);
 636        }
 637
 1638        doExtraction = !(string.IsNullOrEmpty(targetName));
 639      }
 640
 641      // TODO: Fire delegate/throw exception were compression method not supported, or name is invalid?
 642
 1643      string dirName = null;
 644
 1645       if ( doExtraction ) {
 1646           if ( entry.IsDirectory ) {
 1647            dirName = targetName;
 1648          }
 649          else {
 0650            dirName = Path.GetDirectoryName(Path.GetFullPath(targetName));
 651          }
 652      }
 653
 1654       if ( doExtraction && !Directory.Exists(dirName) ) {
 1655         if ( !entry.IsDirectory || CreateEmptyDirectories ) {
 656          try {
 1657            Directory.CreateDirectory(dirName);
 1658          }
 0659          catch (Exception ex) {
 0660            doExtraction = false;
 0661             if ( events_ != null ) {
 0662               if ( entry.IsDirectory ) {
 0663                continueRunning_ = events_.OnDirectoryFailure(targetName, ex);
 0664              }
 665              else {
 0666                continueRunning_ = events_.OnFileFailure(targetName, ex);
 667              }
 0668            }
 669            else {
 0670              continueRunning_ = false;
 0671                            throw;
 672            }
 0673          }
 674        }
 675      }
 676
 1677       if ( doExtraction && entry.IsFile ) {
 0678        ExtractFileEntry(entry, targetName);
 679      }
 1680    }
 681
 682    static int MakeExternalAttributes(FileInfo info)
 683    {
 0684      return (int)info.Attributes;
 685    }
 686
 687#if NET_1_0 || NET_1_1 || NETCF_1_0
 688    static bool NameIsValid(string name)
 689    {
 690      return (name != null) &&
 691        (name.Length > 0) &&
 692        (name.IndexOfAny(Path.InvalidPathChars) < 0);
 693    }
 694#else
 695    static bool NameIsValid(string name)
 696    {
 0697      return !string.IsNullOrEmpty(name)&&
 0698        (name.IndexOfAny(Path.GetInvalidPathChars()) < 0);
 699    }
 700#endif
 701    #endregion
 702
 703    #region Instance Fields
 704    bool continueRunning_;
 705    byte[] buffer_;
 706    ZipOutputStream outputStream_;
 707    ZipFile zipFile_;
 708    string sourceDirectory_;
 709    NameFilter fileFilter_;
 710    NameFilter directoryFilter_;
 711    Overwrite overwrite_;
 712    ConfirmOverwriteDelegate confirmDelegate_;
 713
 714    bool restoreDateTimeOnExtract_;
 715    bool restoreAttributesOnExtract_;
 716    bool createEmptyDirectories_;
 717    FastZipEvents events_;
 8718    IEntryFactory entryFactory_ = new ZipEntryFactory();
 719    INameTransform extractNameTransform_;
 8720    UseZip64 useZip64_=UseZip64.Dynamic;
 721
 722#if !NETCF_1_0
 723    string password_;
 724#endif
 725
 726    #endregion
 727  }
 728}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_FastZipEvents.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_FastZipEvents.htm new file mode 100644 index 000000000..b0e143233 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_FastZipEvents.htm @@ -0,0 +1,775 @@ + + + + +ICSharpCode.SharpZipLib.Zip.FastZipEvents - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.FastZipEvents
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\FastZip.cs
Covered lines:0
Uncovered lines:38
Coverable lines:38
Total lines:728
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
OnDirectoryFailure(...)200
OnFileFailure(...)200
OnProcessFile(...)200
OnCompletedFile(...)200
OnProcessDirectory(...)200
.ctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\FastZip.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// FastZip.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38using ICSharpCode.SharpZipLib.Core;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42  /// <summary>
 43  /// FastZipEvents supports all events applicable to <see cref="FastZip">FastZip</see> operations.
 44  /// </summary>
 45  public class FastZipEvents
 46  {
 47    /// <summary>
 48    /// Delegate to invoke when processing directories.
 49    /// </summary>
 50    public event EventHandler<DirectoryEventArgs> ProcessDirectory;
 51
 52    /// <summary>
 53    /// Delegate to invoke when processing files.
 54    /// </summary>
 55    public ProcessFileHandler ProcessFile;
 56
 57    /// <summary>
 58    /// Delegate to invoke during processing of files.
 59    /// </summary>
 60    public ProgressHandler Progress;
 61
 62    /// <summary>
 63    /// Delegate to invoke when processing for a file has been completed.
 64    /// </summary>
 65    public CompletedFileHandler CompletedFile;
 66
 67    /// <summary>
 68    /// Delegate to invoke when processing directory failures.
 69    /// </summary>
 70    public DirectoryFailureHandler DirectoryFailure;
 71
 72    /// <summary>
 73    /// Delegate to invoke when processing file failures.
 74    /// </summary>
 75    public FileFailureHandler FileFailure;
 76
 77    /// <summary>
 78    /// Raise the <see cref="DirectoryFailure">directory failure</see> event.
 79    /// </summary>
 80    /// <param name="directory">The directory causing the failure.</param>
 81    /// <param name="e">The exception for this event.</param>
 82    /// <returns>A boolean indicating if execution should continue or not.</returns>
 83    public bool OnDirectoryFailure(string directory, Exception e)
 84    {
 085      bool result = false;
 086      DirectoryFailureHandler handler = DirectoryFailure;
 87
 088       if ( handler != null ) {
 089        var args = new ScanFailureEventArgs(directory, e);
 090        handler(this, args);
 091        result = args.ContinueRunning;
 92      }
 093      return result;
 94    }
 95
 96    /// <summary>
 97    /// Fires the <see cref="FileFailure"> file failure handler delegate</see>.
 98    /// </summary>
 99    /// <param name="file">The file causing the failure.</param>
 100    /// <param name="e">The exception for this failure.</param>
 101    /// <returns>A boolean indicating if execution should continue or not.</returns>
 102    public bool OnFileFailure(string file, Exception e)
 103    {
 0104      FileFailureHandler handler = FileFailure;
 0105            bool result = (handler != null);
 106
 0107       if ( result ) {
 0108        var args = new ScanFailureEventArgs(file, e);
 0109        handler(this, args);
 0110        result = args.ContinueRunning;
 111      }
 0112      return result;
 113    }
 114
 115    /// <summary>
 116    /// Fires the <see cref="ProcessFile">ProcessFile delegate</see>.
 117    /// </summary>
 118    /// <param name="file">The file being processed.</param>
 119    /// <returns>A boolean indicating if execution should continue or not.</returns>
 120    public bool OnProcessFile(string file)
 121    {
 0122      bool result = true;
 0123      ProcessFileHandler handler = ProcessFile;
 124
 0125       if ( handler != null ) {
 0126        var args = new ScanEventArgs(file);
 0127        handler(this, args);
 0128        result = args.ContinueRunning;
 129      }
 0130      return result;
 131    }
 132
 133    /// <summary>
 134        /// Fires the <see cref="CompletedFile"/> delegate
 135    /// </summary>
 136    /// <param name="file">The file whose processing has been completed.</param>
 137    /// <returns>A boolean indicating if execution should continue or not.</returns>
 138    public bool OnCompletedFile(string file)
 139    {
 0140      bool result = true;
 0141      CompletedFileHandler handler = CompletedFile;
 0142       if ( handler != null ) {
 0143        var args = new ScanEventArgs(file);
 0144        handler(this, args);
 0145        result = args.ContinueRunning;
 146      }
 0147      return result;
 148    }
 149
 150    /// <summary>
 151    /// Fires the <see cref="ProcessDirectory">process directory</see> delegate.
 152    /// </summary>
 153    /// <param name="directory">The directory being processed.</param>
 154    /// <param name="hasMatchingFiles">Flag indicating if the directory has matching files as determined by the current 
 155    /// <returns>A <see cref="bool"/> of true if the operation should continue; false otherwise.</returns>
 156    public bool OnProcessDirectory(string directory, bool hasMatchingFiles)
 157    {
 0158      bool result = true;
 0159      EventHandler<DirectoryEventArgs> handler = ProcessDirectory;
 0160       if ( handler != null ) {
 0161        var args = new DirectoryEventArgs(directory, hasMatchingFiles);
 0162        handler(this, args);
 0163        result = args.ContinueRunning;
 164      }
 0165      return result;
 166    }
 167
 168    /// <summary>
 169    /// The minimum timespan between <see cref="Progress"/> events.
 170    /// </summary>
 171    /// <value>The minimum period of time between <see cref="Progress"/> events.</value>
 172    /// <seealso cref="Progress"/>
 173        /// <remarks>The default interval is three seconds.</remarks>
 174    public TimeSpan ProgressInterval
 175    {
 0176      get { return progressInterval_; }
 0177      set { progressInterval_ = value; }
 178    }
 179
 180    #region Instance Fields
 0181    TimeSpan progressInterval_ = TimeSpan.FromSeconds(3);
 182    #endregion
 183  }
 184
 185  /// <summary>
 186  /// FastZip provides facilities for creating and extracting zip files.
 187  /// </summary>
 188  public class FastZip
 189  {
 190    #region Enumerations
 191    /// <summary>
 192    /// Defines the desired handling when overwriting files during extraction.
 193    /// </summary>
 194    public enum Overwrite
 195    {
 196      /// <summary>
 197      /// Prompt the user to confirm overwriting
 198      /// </summary>
 199      Prompt,
 200      /// <summary>
 201      /// Never overwrite files.
 202      /// </summary>
 203      Never,
 204      /// <summary>
 205      /// Always overwrite files.
 206      /// </summary>
 207      Always
 208    }
 209    #endregion
 210
 211    #region Constructors
 212    /// <summary>
 213    /// Initialise a default instance of <see cref="FastZip"/>.
 214    /// </summary>
 215    public FastZip()
 216    {
 217    }
 218
 219    /// <summary>
 220    /// Initialise a new instance of <see cref="FastZip"/>
 221    /// </summary>
 222    /// <param name="events">The <see cref="FastZipEvents">events</see> to use during operations.</param>
 223    public FastZip(FastZipEvents events)
 224    {
 225      events_ = events;
 226    }
 227    #endregion
 228
 229    #region Properties
 230    /// <summary>
 231    /// Get/set a value indicating wether empty directories should be created.
 232    /// </summary>
 233    public bool CreateEmptyDirectories
 234    {
 235      get { return createEmptyDirectories_; }
 236      set { createEmptyDirectories_ = value; }
 237    }
 238
 239#if !NETCF_1_0
 240    /// <summary>
 241    /// Get / set the password value.
 242    /// </summary>
 243    public string Password
 244    {
 245      get { return password_; }
 246      set { password_ = value; }
 247    }
 248#endif
 249
 250    /// <summary>
 251    /// Get or set the <see cref="INameTransform"></see> active when creating Zip files.
 252    /// </summary>
 253    /// <seealso cref="EntryFactory"></seealso>
 254    public INameTransform NameTransform
 255    {
 256      get { return entryFactory_.NameTransform; }
 257      set {
 258        entryFactory_.NameTransform = value;
 259      }
 260    }
 261
 262    /// <summary>
 263    /// Get or set the <see cref="IEntryFactory"></see> active when creating Zip files.
 264    /// </summary>
 265    public IEntryFactory EntryFactory
 266    {
 267      get { return entryFactory_; }
 268      set {
 269        if ( value == null ) {
 270          entryFactory_ = new ZipEntryFactory();
 271        }
 272        else {
 273          entryFactory_ = value;
 274        }
 275      }
 276    }
 277
 278    /// <summary>
 279    /// Gets or sets the setting for <see cref="UseZip64">Zip64 handling when writing.</see>
 280    /// </summary>
 281        /// <remarks>
 282        /// The default value is dynamic which is not backwards compatible with old
 283        /// programs and can cause problems with XP's built in compression which cant
 284        /// read Zip64 archives. However it does avoid the situation were a large file
 285        /// is added and cannot be completed correctly.
 286        /// NOTE: Setting the size for entries before they are added is the best solution!
 287        /// By default the EntryFactory used by FastZip will set fhe file size.
 288        /// </remarks>
 289    public UseZip64 UseZip64
 290    {
 291      get { return useZip64_; }
 292      set { useZip64_ = value; }
 293    }
 294
 295    /// <summary>
 296    /// Get/set a value indicating wether file dates and times should
 297    /// be restored when extracting files from an archive.
 298    /// </summary>
 299    /// <remarks>The default value is false.</remarks>
 300    public bool RestoreDateTimeOnExtract
 301    {
 302      get {
 303        return restoreDateTimeOnExtract_;
 304      }
 305      set {
 306        restoreDateTimeOnExtract_ = value;
 307      }
 308    }
 309
 310    /// <summary>
 311    /// Get/set a value indicating wether file attributes should
 312    /// be restored during extract operations
 313    /// </summary>
 314    public bool RestoreAttributesOnExtract
 315    {
 316      get { return restoreAttributesOnExtract_; }
 317      set { restoreAttributesOnExtract_ = value; }
 318    }
 319    #endregion
 320
 321    #region Delegates
 322    /// <summary>
 323    /// Delegate called when confirming overwriting of files.
 324    /// </summary>
 325    public delegate bool ConfirmOverwriteDelegate(string fileName);
 326    #endregion
 327
 328    #region CreateZip
 329    /// <summary>
 330    /// Create a zip file.
 331    /// </summary>
 332    /// <param name="zipFileName">The name of the zip file to create.</param>
 333    /// <param name="sourceDirectory">The directory to source files from.</param>
 334    /// <param name="recurse">True to recurse directories, false for no recursion.</param>
 335    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 336    /// <param name="directoryFilter">The <see cref="PathFilter">directory filter</see> to apply.</param>
 337    public void CreateZip(string zipFileName, string sourceDirectory,
 338      bool recurse, string fileFilter, string directoryFilter)
 339    {
 340      CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, directoryFilter);
 341    }
 342
 343    /// <summary>
 344    /// Create a zip file/archive.
 345    /// </summary>
 346    /// <param name="zipFileName">The name of the zip file to create.</param>
 347    /// <param name="sourceDirectory">The directory to obtain files and directories from.</param>
 348    /// <param name="recurse">True to recurse directories, false for no recursion.</param>
 349    /// <param name="fileFilter">The file filter to apply.</param>
 350    public void CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter)
 351    {
 352      CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, null);
 353    }
 354
 355    /// <summary>
 356    /// Create a zip archive sending output to the <paramref name="outputStream"/> passed.
 357    /// </summary>
 358    /// <param name="outputStream">The stream to write archive data to.</param>
 359    /// <param name="sourceDirectory">The directory to source files from.</param>
 360    /// <param name="recurse">True to recurse directories, false for no recursion.</param>
 361    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 362    /// <param name="directoryFilter">The <see cref="PathFilter">directory filter</see> to apply.</param>
 363        /// <remarks>The <paramref name="outputStream"/> is closed after creation.</remarks>
 364    public void CreateZip(Stream outputStream, string sourceDirectory, bool recurse, string fileFilter, string directory
 365    {
 366      NameTransform = new ZipNameTransform(sourceDirectory);
 367      sourceDirectory_ = sourceDirectory;
 368
 369      using ( outputStream_ = new ZipOutputStream(outputStream) ) {
 370
 371#if !NETCF_1_0
 372        if ( password_ != null ) {
 373          outputStream_.Password = password_;
 374        }
 375#endif
 376
 377        outputStream_.UseZip64 = UseZip64;
 378        var scanner = new FileSystemScanner(fileFilter, directoryFilter);
 379        scanner.ProcessFile += ProcessFile;
 380        if ( this.CreateEmptyDirectories ) {
 381          scanner.ProcessDirectory += ProcessDirectory;
 382        }
 383
 384        if (events_ != null) {
 385          if ( events_.FileFailure != null ) {
 386            scanner.FileFailure += events_.FileFailure;
 387          }
 388
 389          if ( events_.DirectoryFailure != null ) {
 390            scanner.DirectoryFailure += events_.DirectoryFailure;
 391          }
 392        }
 393
 394        scanner.Scan(sourceDirectory, recurse);
 395      }
 396    }
 397
 398    #endregion
 399
 400    #region ExtractZip
 401    /// <summary>
 402    /// Extract the contents of a zip file.
 403    /// </summary>
 404    /// <param name="zipFileName">The zip file to extract from.</param>
 405    /// <param name="targetDirectory">The directory to save extracted information in.</param>
 406    /// <param name="fileFilter">A filter to apply to files.</param>
 407    public void ExtractZip(string zipFileName, string targetDirectory, string fileFilter)
 408    {
 409      ExtractZip(zipFileName, targetDirectory, Overwrite.Always, null, fileFilter, null, restoreDateTimeOnExtract_);
 410    }
 411
 412    /// <summary>
 413    /// Extract the contents of a zip file.
 414    /// </summary>
 415    /// <param name="zipFileName">The zip file to extract from.</param>
 416    /// <param name="targetDirectory">The directory to save extracted information in.</param>
 417    /// <param name="overwrite">The style of <see cref="Overwrite">overwriting</see> to apply.</param>
 418    /// <param name="confirmDelegate">A delegate to invoke when confirming overwriting.</param>
 419    /// <param name="fileFilter">A filter to apply to files.</param>
 420    /// <param name="directoryFilter">A filter to apply to directories.</param>
 421    /// <param name="restoreDateTime">Flag indicating whether to restore the date and time for extracted files.</param>
 422    public void ExtractZip(string zipFileName, string targetDirectory,
 423                 Overwrite overwrite, ConfirmOverwriteDelegate confirmDelegate,
 424                 string fileFilter, string directoryFilter, bool restoreDateTime)
 425    {
 426      Stream inputStream = File.Open(zipFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
 427      ExtractZip(inputStream, targetDirectory, overwrite, confirmDelegate, fileFilter, directoryFilter, restoreDateTime,
 428    }
 429
 430    /// <summary>
 431    /// Extract the contents of a zip file held in a stream.
 432    /// </summary>
 433    /// <param name="inputStream">The seekable input stream containing the zip to extract from.</param>
 434    /// <param name="targetDirectory">The directory to save extracted information in.</param>
 435    /// <param name="overwrite">The style of <see cref="Overwrite">overwriting</see> to apply.</param>
 436    /// <param name="confirmDelegate">A delegate to invoke when confirming overwriting.</param>
 437    /// <param name="fileFilter">A filter to apply to files.</param>
 438    /// <param name="directoryFilter">A filter to apply to directories.</param>
 439    /// <param name="restoreDateTime">Flag indicating whether to restore the date and time for extracted files.</param>
 440    /// <param name="isStreamOwner">Flag indicating whether the inputStream will be closed by this method.</param>
 441    public void ExtractZip(Stream inputStream, string targetDirectory,
 442             Overwrite overwrite, ConfirmOverwriteDelegate confirmDelegate,
 443             string fileFilter, string directoryFilter, bool restoreDateTime,
 444             bool isStreamOwner)
 445    {
 446      if ((overwrite == Overwrite.Prompt) && (confirmDelegate == null)) {
 447        throw new ArgumentNullException(nameof(confirmDelegate));
 448      }
 449
 450      continueRunning_ = true;
 451      overwrite_ = overwrite;
 452      confirmDelegate_ = confirmDelegate;
 453      extractNameTransform_ = new WindowsNameTransform(targetDirectory);
 454
 455      fileFilter_ = new NameFilter(fileFilter);
 456      directoryFilter_ = new NameFilter(directoryFilter);
 457      restoreDateTimeOnExtract_ = restoreDateTime;
 458
 459      using (zipFile_ = new ZipFile(inputStream)) {
 460
 461#if !NETCF_1_0
 462        if (password_ != null) {
 463          zipFile_.Password = password_;
 464        }
 465#endif
 466        zipFile_.IsStreamOwner = isStreamOwner;
 467        System.Collections.IEnumerator enumerator = zipFile_.GetEnumerator();
 468        while (continueRunning_ && enumerator.MoveNext()) {
 469          var entry = (ZipEntry)enumerator.Current;
 470          if (entry.IsFile)
 471          {
 472            // TODO Path.GetDirectory can fail here on invalid characters.
 473            if (directoryFilter_.IsMatch(Path.GetDirectoryName(entry.Name)) && fileFilter_.IsMatch(entry.Name)) {
 474              ExtractEntry(entry);
 475            }
 476          }
 477          else if (entry.IsDirectory) {
 478            if (directoryFilter_.IsMatch(entry.Name) && CreateEmptyDirectories) {
 479              ExtractEntry(entry);
 480            }
 481          }
 482          else {
 483            // Do nothing for volume labels etc...
 484          }
 485        }
 486      }
 487    }
 488    #endregion
 489
 490    #region Internal Processing
 491    void ProcessDirectory(object sender, DirectoryEventArgs e)
 492    {
 493      if ( !e.HasMatchingFiles && CreateEmptyDirectories ) {
 494        if ( events_ != null ) {
 495          events_.OnProcessDirectory(e.Name, e.HasMatchingFiles);
 496        }
 497
 498        if ( e.ContinueRunning ) {
 499          if (e.Name != sourceDirectory_) {
 500            ZipEntry entry = entryFactory_.MakeDirectoryEntry(e.Name);
 501            outputStream_.PutNextEntry(entry);
 502          }
 503        }
 504      }
 505    }
 506
 507    void ProcessFile(object sender, ScanEventArgs e)
 508    {
 509      if ( (events_ != null) && (events_.ProcessFile != null) ) {
 510        events_.ProcessFile(sender, e);
 511      }
 512
 513      if ( e.ContinueRunning ) {
 514                try {
 515                    // The open below is equivalent to OpenRead which gaurantees that if opened the
 516                    // file will not be changed by subsequent openers, but precludes opening in some cases
 517                    // were it could succeed. ie the open may fail as its already open for writing and the share mode sh
 518                    using (FileStream stream = File.Open(e.Name, FileMode.Open, FileAccess.Read, FileShare.Read)) {
 519                        ZipEntry entry = entryFactory_.MakeFileEntry(e.Name);
 520                        outputStream_.PutNextEntry(entry);
 521                        AddFileContents(e.Name, stream);
 522                    }
 523                }
 524                catch(Exception ex) {
 525                    if (events_ != null) {
 526                        continueRunning_ = events_.OnFileFailure(e.Name, ex);
 527                    }
 528                    else {
 529                        continueRunning_ = false;
 530                        throw;
 531                    }
 532                }
 533      }
 534    }
 535
 536    void AddFileContents(string name, Stream stream)
 537    {
 538      if( stream==null ) {
 539        throw new ArgumentNullException(nameof(stream));
 540      }
 541
 542      if( buffer_==null ) {
 543        buffer_=new byte[4096];
 544      }
 545
 546      if( (events_!=null)&&(events_.Progress!=null) ) {
 547        StreamUtils.Copy(stream, outputStream_, buffer_,
 548          events_.Progress, events_.ProgressInterval, this, name);
 549      }
 550      else {
 551        StreamUtils.Copy(stream, outputStream_, buffer_);
 552      }
 553
 554      if( events_!=null ) {
 555        continueRunning_=events_.OnCompletedFile(name);
 556      }
 557    }
 558
 559    void ExtractFileEntry(ZipEntry entry, string targetName)
 560    {
 561      bool proceed = true;
 562      if ( overwrite_ != Overwrite.Always ) {
 563        if ( File.Exists(targetName) ) {
 564          if ( (overwrite_ == Overwrite.Prompt) && (confirmDelegate_ != null) ) {
 565            proceed = confirmDelegate_(targetName);
 566          }
 567          else {
 568            proceed = false;
 569          }
 570        }
 571      }
 572
 573      if ( proceed ) {
 574        if ( events_ != null ) {
 575          continueRunning_ = events_.OnProcessFile(entry.Name);
 576        }
 577
 578        if ( continueRunning_ ) {
 579          try {
 580            using ( FileStream outputStream = File.Create(targetName) ) {
 581              if ( buffer_ == null ) {
 582                buffer_ = new byte[4096];
 583              }
 584              if ((events_ != null) && (events_.Progress != null))
 585              {
 586                StreamUtils.Copy(zipFile_.GetInputStream(entry), outputStream, buffer_,
 587                  events_.Progress, events_.ProgressInterval, this, entry.Name, entry.Size);
 588              }
 589              else
 590              {
 591                StreamUtils.Copy(zipFile_.GetInputStream(entry), outputStream, buffer_);
 592              }
 593
 594              if (events_ != null) {
 595                continueRunning_ = events_.OnCompletedFile(entry.Name);
 596              }
 597            }
 598
 599#if !NETCF_1_0 && !NETCF_2_0
 600            if ( restoreDateTimeOnExtract_ ) {
 601              File.SetLastWriteTime(targetName, entry.DateTime);
 602            }
 603
 604            if ( RestoreAttributesOnExtract && entry.IsDOSEntry && (entry.ExternalFileAttributes != -1)) {
 605              var fileAttributes = (FileAttributes) entry.ExternalFileAttributes;
 606              // TODO: FastZip - Setting of other file attributes on extraction is a little trickier.
 607              fileAttributes &= (FileAttributes.Archive | FileAttributes.Normal | FileAttributes.ReadOnly | FileAttribut
 608              File.SetAttributes(targetName, fileAttributes);
 609            }
 610#endif
 611          }
 612          catch(Exception ex) {
 613            if ( events_ != null ) {
 614              continueRunning_ = events_.OnFileFailure(targetName, ex);
 615            }
 616            else {
 617                            continueRunning_ = false;
 618                            throw;
 619            }
 620          }
 621        }
 622      }
 623    }
 624
 625    void ExtractEntry(ZipEntry entry)
 626    {
 627      bool doExtraction = entry.IsCompressionMethodSupported();
 628      string targetName = entry.Name;
 629
 630      if ( doExtraction ) {
 631        if ( entry.IsFile ) {
 632          targetName = extractNameTransform_.TransformFile(targetName);
 633        }
 634        else if ( entry.IsDirectory ) {
 635          targetName = extractNameTransform_.TransformDirectory(targetName);
 636        }
 637
 638        doExtraction = !(string.IsNullOrEmpty(targetName));
 639      }
 640
 641      // TODO: Fire delegate/throw exception were compression method not supported, or name is invalid?
 642
 643      string dirName = null;
 644
 645      if ( doExtraction ) {
 646          if ( entry.IsDirectory ) {
 647            dirName = targetName;
 648          }
 649          else {
 650            dirName = Path.GetDirectoryName(Path.GetFullPath(targetName));
 651          }
 652      }
 653
 654      if ( doExtraction && !Directory.Exists(dirName) ) {
 655        if ( !entry.IsDirectory || CreateEmptyDirectories ) {
 656          try {
 657            Directory.CreateDirectory(dirName);
 658          }
 659          catch (Exception ex) {
 660            doExtraction = false;
 661            if ( events_ != null ) {
 662              if ( entry.IsDirectory ) {
 663                continueRunning_ = events_.OnDirectoryFailure(targetName, ex);
 664              }
 665              else {
 666                continueRunning_ = events_.OnFileFailure(targetName, ex);
 667              }
 668            }
 669            else {
 670              continueRunning_ = false;
 671                            throw;
 672            }
 673          }
 674        }
 675      }
 676
 677      if ( doExtraction && entry.IsFile ) {
 678        ExtractFileEntry(entry, targetName);
 679      }
 680    }
 681
 682    static int MakeExternalAttributes(FileInfo info)
 683    {
 684      return (int)info.Attributes;
 685    }
 686
 687#if NET_1_0 || NET_1_1 || NETCF_1_0
 688    static bool NameIsValid(string name)
 689    {
 690      return (name != null) &&
 691        (name.Length > 0) &&
 692        (name.IndexOfAny(Path.InvalidPathChars) < 0);
 693    }
 694#else
 695    static bool NameIsValid(string name)
 696    {
 697      return !string.IsNullOrEmpty(name)&&
 698        (name.IndexOfAny(Path.GetInvalidPathChars()) < 0);
 699    }
 700#endif
 701    #endregion
 702
 703    #region Instance Fields
 704    bool continueRunning_;
 705    byte[] buffer_;
 706    ZipOutputStream outputStream_;
 707    ZipFile zipFile_;
 708    string sourceDirectory_;
 709    NameFilter fileFilter_;
 710    NameFilter directoryFilter_;
 711    Overwrite overwrite_;
 712    ConfirmOverwriteDelegate confirmDelegate_;
 713
 714    bool restoreDateTimeOnExtract_;
 715    bool restoreAttributesOnExtract_;
 716    bool createEmptyDirectories_;
 717    FastZipEvents events_;
 718    IEntryFactory entryFactory_ = new ZipEntryFactory();
 719    INameTransform extractNameTransform_;
 720    UseZip64 useZip64_=UseZip64.Dynamic;
 721
 722#if !NETCF_1_0
 723    string password_;
 724#endif
 725
 726    #endregion
 727  }
 728}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_FileFailureHandler.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_FileFailureHandler.htm new file mode 100644 index 000000000..d25e4c002 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_FileFailureHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.FileFailureHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.FileFailureHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_FileSystemScanner.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_FileSystemScanner.htm new file mode 100644 index 000000000..33a4211af --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_FileSystemScanner.htm @@ -0,0 +1,582 @@ + + + + +ICSharpCode.SharpZipLib.Core.FileSystemScanner - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.FileSystemScanner
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs
Covered lines:47
Uncovered lines:38
Coverable lines:85
Total lines:530
Line coverage:55.2%
Branch coverage:44.1%
+

Metrics

+ + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor(...)1100100
.ctor(...)100
.ctor(...)100
OnDirectoryFailure(...)257.1466.67
OnFileFailure(...)257.1466.67
OnProcessFile(...)210066.67
OnCompleteFile(...)200
OnProcessDirectory(...)25066.67
Scan(...)1100100
ScanDir(...)1564.2948
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// FileSystemScanner.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36
 37using System;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  #region EventArgs
 42  /// <summary>
 43  /// Event arguments for scanning.
 44  /// </summary>
 45  public class ScanEventArgs : EventArgs
 46  {
 47    #region Constructors
 48    /// <summary>
 49    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 50    /// </summary>
 51    /// <param name="name">The file or directory name.</param>
 52    public ScanEventArgs(string name)
 53    {
 54      name_ = name;
 55    }
 56    #endregion
 57
 58    /// <summary>
 59    /// The file or directory name for this event.
 60    /// </summary>
 61    public string Name
 62    {
 63      get { return name_; }
 64    }
 65
 66    /// <summary>
 67    /// Get set a value indicating if scanning should continue or not.
 68    /// </summary>
 69    public bool ContinueRunning
 70    {
 71      get { return continueRunning_; }
 72      set { continueRunning_ = value; }
 73    }
 74
 75    #region Instance Fields
 76    string name_;
 77    bool continueRunning_ = true;
 78    #endregion
 79  }
 80
 81  /// <summary>
 82  /// Event arguments during processing of a single file or directory.
 83  /// </summary>
 84  public class ProgressEventArgs : EventArgs
 85  {
 86    #region Constructors
 87    /// <summary>
 88    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 89    /// </summary>
 90    /// <param name="name">The file or directory name if known.</param>
 91    /// <param name="processed">The number of bytes processed so far</param>
 92    /// <param name="target">The total number of bytes to process, 0 if not known</param>
 93    public ProgressEventArgs(string name, long processed, long target)
 94    {
 95      name_ = name;
 96      processed_ = processed;
 97      target_ = target;
 98    }
 99    #endregion
 100
 101    /// <summary>
 102    /// The name for this event if known.
 103    /// </summary>
 104    public string Name
 105    {
 106      get { return name_; }
 107    }
 108
 109    /// <summary>
 110    /// Get set a value indicating wether scanning should continue or not.
 111    /// </summary>
 112    public bool ContinueRunning
 113    {
 114      get { return continueRunning_; }
 115      set { continueRunning_ = value; }
 116    }
 117
 118    /// <summary>
 119    /// Get a percentage representing how much of the <see cref="Target"></see> has been processed
 120    /// </summary>
 121    /// <value>0.0 to 100.0 percent; 0 if target is not known.</value>
 122    public float PercentComplete
 123    {
 124      get
 125      {
 126          float result;
 127        if (target_ <= 0)
 128        {
 129          result = 0;
 130        }
 131        else
 132        {
 133          result = ((float)processed_ / (float)target_) * 100.0f;
 134        }
 135          return result;
 136      }
 137    }
 138
 139    /// <summary>
 140    /// The number of bytes processed so far
 141    /// </summary>
 142    public long Processed
 143    {
 144      get { return processed_; }
 145    }
 146
 147    /// <summary>
 148    /// The number of bytes to process.
 149    /// </summary>
 150    /// <remarks>Target may be 0 or negative if the value isnt known.</remarks>
 151    public long Target
 152    {
 153      get { return target_; }
 154    }
 155
 156    #region Instance Fields
 157    string name_;
 158    long processed_;
 159    long target_;
 160    bool continueRunning_ = true;
 161    #endregion
 162  }
 163
 164  /// <summary>
 165  /// Event arguments for directories.
 166  /// </summary>
 167  public class DirectoryEventArgs : ScanEventArgs
 168  {
 169    #region Constructors
 170    /// <summary>
 171    /// Initialize an instance of <see cref="DirectoryEventArgs"></see>.
 172    /// </summary>
 173    /// <param name="name">The name for this directory.</param>
 174    /// <param name="hasMatchingFiles">Flag value indicating if any matching files are contained in this directory.</par
 175    public DirectoryEventArgs(string name, bool hasMatchingFiles)
 176      : base (name)
 177    {
 178      hasMatchingFiles_ = hasMatchingFiles;
 179    }
 180    #endregion
 181
 182    /// <summary>
 183    /// Get a value indicating if the directory contains any matching files or not.
 184    /// </summary>
 185    public bool HasMatchingFiles
 186    {
 187      get { return hasMatchingFiles_; }
 188    }
 189
 190    readonly
 191
 192    #region Instance Fields
 193    bool hasMatchingFiles_;
 194    #endregion
 195  }
 196
 197  /// <summary>
 198  /// Arguments passed when scan failures are detected.
 199  /// </summary>
 200  public class ScanFailureEventArgs : EventArgs
 201  {
 202    #region Constructors
 203    /// <summary>
 204    /// Initialise a new instance of <see cref="ScanFailureEventArgs"></see>
 205    /// </summary>
 206    /// <param name="name">The name to apply.</param>
 207    /// <param name="e">The exception to use.</param>
 208    public ScanFailureEventArgs(string name, Exception e)
 209    {
 210      name_ = name;
 211      exception_ = e;
 212      continueRunning_ = true;
 213    }
 214    #endregion
 215
 216    /// <summary>
 217    /// The applicable name.
 218    /// </summary>
 219    public string Name
 220    {
 221      get { return name_; }
 222    }
 223
 224    /// <summary>
 225    /// The applicable exception.
 226    /// </summary>
 227    public Exception Exception
 228    {
 229      get { return exception_; }
 230    }
 231
 232    /// <summary>
 233    /// Get / set a value indicating wether scanning should continue.
 234    /// </summary>
 235    public bool ContinueRunning
 236    {
 237      get { return continueRunning_; }
 238      set { continueRunning_ = value; }
 239    }
 240
 241    #region Instance Fields
 242    string name_;
 243    Exception exception_;
 244    bool continueRunning_;
 245    #endregion
 246  }
 247
 248  #endregion
 249
 250  #region Delegates
 251  /// <summary>
 252  /// Delegate invoked before starting to process a file.
 253  /// </summary>
 254  /// <param name="sender">The source of the event</param>
 255  /// <param name="e">The event arguments.</param>
 256  public delegate void ProcessFileHandler(object sender, ScanEventArgs e);
 257
 258  /// <summary>
 259  /// Delegate invoked during processing of a file or directory
 260  /// </summary>
 261  /// <param name="sender">The source of the event</param>
 262  /// <param name="e">The event arguments.</param>
 263  public delegate void ProgressHandler(object sender, ProgressEventArgs e);
 264
 265  /// <summary>
 266  /// Delegate invoked when a file has been completely processed.
 267  /// </summary>
 268  /// <param name="sender">The source of the event</param>
 269  /// <param name="e">The event arguments.</param>
 270  public delegate void CompletedFileHandler(object sender, ScanEventArgs e);
 271
 272  /// <summary>
 273  /// Delegate invoked when a directory failure is detected.
 274  /// </summary>
 275  /// <param name="sender">The source of the event</param>
 276  /// <param name="e">The event arguments.</param>
 277  public delegate void DirectoryFailureHandler(object sender, ScanFailureEventArgs e);
 278
 279  /// <summary>
 280  /// Delegate invoked when a file failure is detected.
 281  /// </summary>
 282  /// <param name="sender">The source of the event</param>
 283  /// <param name="e">The event arguments.</param>
 284  public delegate void FileFailureHandler(object sender, ScanFailureEventArgs e);
 285  #endregion
 286
 287  /// <summary>
 288  /// FileSystemScanner provides facilities scanning of files and directories.
 289  /// </summary>
 290  public class FileSystemScanner
 291  {
 292    #region Constructors
 293    /// <summary>
 294    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 295    /// </summary>
 296    /// <param name="filter">The <see cref="PathFilter">file filter</see> to apply when scanning.</param>
 0297    public FileSystemScanner(string filter)
 298    {
 0299      fileFilter_ = new PathFilter(filter);
 0300    }
 301
 302    /// <summary>
 303    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 304    /// </summary>
 305    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 306    /// <param name="directoryFilter">The <see cref="PathFilter"> directory filter</see> to apply.</param>
 6307    public FileSystemScanner(string fileFilter, string directoryFilter)
 308    {
 6309      fileFilter_ = new PathFilter(fileFilter);
 6310      directoryFilter_ = new PathFilter(directoryFilter);
 6311    }
 312
 313    /// <summary>
 314    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 315    /// </summary>
 316    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see> to apply.</param>
 0317    public FileSystemScanner(IScanFilter fileFilter)
 318    {
 0319      fileFilter_ = fileFilter;
 0320    }
 321
 322    /// <summary>
 323    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 324    /// </summary>
 325    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see>  to apply.</param>
 326    /// <param name="directoryFilter">The directory <see cref="IScanFilter">filter</see>  to apply.</param>
 0327    public FileSystemScanner(IScanFilter fileFilter, IScanFilter directoryFilter)
 328    {
 0329      fileFilter_ = fileFilter;
 0330      directoryFilter_ = directoryFilter;
 0331    }
 332    #endregion
 333
 334    #region Delegates
 335    /// <summary>
 336    /// Delegate to invoke when a directory is processed.
 337    /// </summary>
 338    public event EventHandler<DirectoryEventArgs> ProcessDirectory;
 339
 340    /// <summary>
 341    /// Delegate to invoke when a file is processed.
 342    /// </summary>
 343    public ProcessFileHandler ProcessFile;
 344
 345    /// <summary>
 346    /// Delegate to invoke when processing for a file has finished.
 347    /// </summary>
 348    public CompletedFileHandler CompletedFile;
 349
 350    /// <summary>
 351    /// Delegate to invoke when a directory failure is detected.
 352    /// </summary>
 353    public DirectoryFailureHandler DirectoryFailure;
 354
 355    /// <summary>
 356    /// Delegate to invoke when a file failure is detected.
 357    /// </summary>
 358    public FileFailureHandler FileFailure;
 359    #endregion
 360
 361    /// <summary>
 362    /// Raise the DirectoryFailure event.
 363    /// </summary>
 364    /// <param name="directory">The directory name.</param>
 365    /// <param name="e">The exception detected.</param>
 366    bool OnDirectoryFailure(string directory, Exception e)
 367    {
 2368            DirectoryFailureHandler handler = DirectoryFailure;
 2369            bool result = (handler != null);
 2370             if ( result ) {
 0371        var args = new ScanFailureEventArgs(directory, e);
 0372        handler(this, args);
 0373        alive_ = args.ContinueRunning;
 374      }
 2375            return result;
 376    }
 377
 378    /// <summary>
 379    /// Raise the FileFailure event.
 380    /// </summary>
 381    /// <param name="file">The file name.</param>
 382    /// <param name="e">The exception detected.</param>
 383    bool OnFileFailure(string file, Exception e)
 384    {
 1385            FileFailureHandler handler = FileFailure;
 386
 1387            bool result = (handler != null);
 388
 1389       if ( result ){
 0390        var args = new ScanFailureEventArgs(file, e);
 0391        FileFailure(this, args);
 0392        alive_ = args.ContinueRunning;
 393      }
 1394            return result;
 395    }
 396
 397    /// <summary>
 398    /// Raise the ProcessFile event.
 399    /// </summary>
 400    /// <param name="file">The file name.</param>
 401    void OnProcessFile(string file)
 402    {
 5403      ProcessFileHandler handler = ProcessFile;
 404
 5405       if ( handler!= null ) {
 5406        var args = new ScanEventArgs(file);
 5407        handler(this, args);
 4408        alive_ = args.ContinueRunning;
 409      }
 4410    }
 411
 412    /// <summary>
 413    /// Raise the complete file event
 414    /// </summary>
 415    /// <param name="file">The file name</param>
 416    void OnCompleteFile(string file)
 417    {
 0418      CompletedFileHandler handler = CompletedFile;
 419
 0420       if (handler != null)
 421      {
 0422        var args = new ScanEventArgs(file);
 0423        handler(this, args);
 0424        alive_ = args.ContinueRunning;
 425      }
 0426    }
 427
 428    /// <summary>
 429    /// Raise the ProcessDirectory event.
 430    /// </summary>
 431    /// <param name="directory">The directory name.</param>
 432    /// <param name="hasMatchingFiles">Flag indicating if the directory has matching files.</param>
 433    void OnProcessDirectory(string directory, bool hasMatchingFiles)
 434    {
 5435      EventHandler<DirectoryEventArgs> handler = ProcessDirectory;
 436
 5437       if ( handler != null ) {
 0438        var args = new DirectoryEventArgs(directory, hasMatchingFiles);
 0439        handler(this, args);
 0440        alive_ = args.ContinueRunning;
 441      }
 5442    }
 443
 444    /// <summary>
 445    /// Scan a directory.
 446    /// </summary>
 447    /// <param name="directory">The base directory to scan.</param>
 448    /// <param name="recurse">True to recurse subdirectories, false to scan a single directory.</param>
 449    public void Scan(string directory, bool recurse)
 450    {
 6451      alive_ = true;
 6452      ScanDir(directory, recurse);
 4453    }
 454
 455    void ScanDir(string directory, bool recurse)
 456    {
 457
 458      try {
 6459        string[] names = System.IO.Directory.GetFiles(directory);
 5460        bool hasMatch = false;
 28178461         for (int fileIndex = 0; fileIndex < names.Length; ++fileIndex) {
 14084462           if ( !fileFilter_.IsMatch(names[fileIndex]) ) {
 14079463            names[fileIndex] = null;
 14079464          } else {
 5465            hasMatch = true;
 466          }
 467        }
 468
 5469        OnProcessDirectory(directory, hasMatch);
 470
 5471         if ( alive_ && hasMatch ) {
 22673472          foreach (string fileName in names) {
 473            try {
 11332474               if ( fileName != null ) {
 5475                OnProcessFile(fileName);
 4476                 if ( !alive_ ) {
 0477                  break;
 478                }
 479              }
 11331480            }
 1481            catch (Exception e) {
 1482                             if (!OnFileFailure(fileName, e)) {
 1483                                throw;
 484                            }
 0485            }
 486          }
 487        }
 4488      }
 2489      catch (Exception e) {
 2490                 if (!OnDirectoryFailure(directory, e)) {
 2491                    throw;
 492                }
 0493      }
 494
 4495       if ( alive_ && recurse ) {
 496        try {
 0497          string[] names = System.IO.Directory.GetDirectories(directory);
 0498          foreach (string fulldir in names) {
 0499             if ((directoryFilter_ == null) || (directoryFilter_.IsMatch(fulldir))) {
 0500              ScanDir(fulldir, true);
 0501               if ( !alive_ ) {
 502                break;
 503              }
 504            }
 505          }
 0506        }
 0507        catch (Exception e) {
 0508                     if (!OnDirectoryFailure(directory, e)) {
 0509                        throw;
 510                    }
 0511        }
 512      }
 4513    }
 514
 515    #region Instance Fields
 516    /// <summary>
 517    /// The file filter currently in use.
 518    /// </summary>
 519    IScanFilter fileFilter_;
 520    /// <summary>
 521    /// The directory filter currently in use.
 522    /// </summary>
 523    IScanFilter directoryFilter_;
 524    /// <summary>
 525    /// Flag indicating if scanning should continue running.
 526    /// </summary>
 527    bool alive_;
 528    #endregion
 529  }
 530}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_GZipConstants.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_GZipConstants.htm new file mode 100644 index 000000000..cb15e974a --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_GZipConstants.htm @@ -0,0 +1,138 @@ + + + + +ICSharpCode.SharpZipLib.GZip.GZipConstants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.GZip.GZipConstants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZipConstants.cs
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:97
Line coverage:0%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZipConstants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// GZipConstants.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39namespace ICSharpCode.SharpZipLib.GZip
 40{
 41
 42  /// <summary>
 43  /// This class contains constants used for gzip.
 44  /// </summary>
 45  sealed public class GZipConstants
 46  {
 47    /// <summary>
 48    /// Magic number found at start of GZIP header
 49    /// </summary>
 50    public const int GZIP_MAGIC = 0x1F8B;
 51
 52    /*  The flag byte is divided into individual bits as follows:
 53
 54      bit 0   FTEXT
 55      bit 1   FHCRC
 56      bit 2   FEXTRA
 57      bit 3   FNAME
 58      bit 4   FCOMMENT
 59      bit 5   reserved
 60      bit 6   reserved
 61      bit 7   reserved
 62     */
 63
 64    /// <summary>
 65    /// Flag bit mask for text
 66    /// </summary>
 67    public const int FTEXT    = 0x1;
 68
 69    /// <summary>
 70    /// Flag bitmask for Crc
 71    /// </summary>
 72    public const int FHCRC    = 0x2;
 73
 74    /// <summary>
 75    /// Flag bit mask for extra
 76    /// </summary>
 77    public const int FEXTRA   = 0x4;
 78
 79    /// <summary>
 80    /// flag bitmask for name
 81    /// </summary>
 82    public const int FNAME    = 0x8;
 83
 84    /// <summary>
 85    /// flag bit mask indicating comment is present
 86    /// </summary>
 87    public const int FCOMMENT = 0x10;
 88
 89    /// <summary>
 90    /// Initialise default instance.
 91    /// </summary>
 92    /// <remarks>Constructor is private to prevent instances being created.</remarks>
 093    GZipConstants()
 94    {
 095    }
 96  }
 97}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_GZipException.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_GZipException.htm new file mode 100644 index 000000000..1d384066f --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_GZipException.htm @@ -0,0 +1,135 @@ + + + + +ICSharpCode.SharpZipLib.GZip.GZipException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.GZip.GZipException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZipException.cs
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:91
Line coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZipException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// GZipException.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37
 38#if !NETCF_1_0 && !NETCF_2_0
 39using System.Runtime.Serialization;
 40#endif
 41
 42namespace ICSharpCode.SharpZipLib.GZip
 43{
 44  /// <summary>
 45  /// GZipException represents a Gzip specific exception
 46  /// </summary>
 47#if !NETCF_1_0 && !NETCF_2_0
 48  [Serializable]
 49#endif
 50  public class GZipException : SharpZipBaseException
 51  {
 52#if !NETCF_1_0 && !NETCF_2_0
 53    /// <summary>
 54    /// Deserialization constructor
 55    /// </summary>
 56    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 57    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 58    protected GZipException(SerializationInfo info, StreamingContext context)
 059      : base(info, context)
 60
 61    {
 062    }
 63#endif
 64
 65    /// <summary>
 66    /// Initialise a new instance of GZipException
 67    /// </summary>
 068    public GZipException()
 69    {
 070    }
 71
 72    /// <summary>
 73    /// Initialise a new instance of GZipException with its message string.
 74    /// </summary>
 75    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 76    public GZipException(string message)
 077      : base(message)
 78    {
 079    }
 80
 81    /// <summary>
 82    /// Initialise a new instance of <see cref="GZipException"></see>.
 83    /// </summary>
 84    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 85    /// <param name="innerException">The <see cref="Exception"/> that caused this exception.</param>
 86    public GZipException(string message, Exception innerException)
 087      : base (message, innerException)
 88    {
 089    }
 90  }
 91}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_GZipInputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_GZipInputStream.htm new file mode 100644 index 000000000..76738cb91 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_GZipInputStream.htm @@ -0,0 +1,420 @@ + + + + +ICSharpCode.SharpZipLib.GZip.GZipInputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.GZip.GZipInputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GzipInputStream.cs
Covered lines:65
Uncovered lines:43
Coverable lines:108
Total lines:374
Line coverage:60.1%
Branch coverage:45.8%
+

Metrics

+ + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)1100100
Read(...)5100100
ReadHeader()2844.7434.55
ReadFooter()583.3366.67
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GzipInputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// GzipInputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-08-11  T9121  Geoff Hart Added Multi-member gzip support
 41//  2012-06-03  Z-1802  Incorrect endianness and subfield in FEXTRA handling.
 42
 43using System;
 44using System.IO;
 45
 46using ICSharpCode.SharpZipLib.Checksums;
 47using ICSharpCode.SharpZipLib.Zip.Compression;
 48using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 49
 50namespace ICSharpCode.SharpZipLib.GZip
 51{
 52
 53  /// <summary>
 54  /// This filter stream is used to decompress a "GZIP" format stream.
 55  /// The "GZIP" format is described baseInputStream RFC 1952.
 56  ///
 57  /// author of the original java version : John Leuner
 58  /// </summary>
 59  /// <example> This sample shows how to unzip a gzipped file
 60  /// <code>
 61  /// using System;
 62  /// using System.IO;
 63  ///
 64  /// using ICSharpCode.SharpZipLib.Core;
 65  /// using ICSharpCode.SharpZipLib.GZip;
 66  ///
 67  /// class MainClass
 68  /// {
 69  ///   public static void Main(string[] args)
 70  ///   {
 71  ///      using (Stream inStream = new GZipInputStream(File.OpenRead(args[0])))
 72  ///      using (FileStream outStream = File.Create(Path.GetFileNameWithoutExtension(args[0]))) {
 73  ///        byte[] buffer = new byte[4096];
 74  ///        StreamUtils.Copy(inStream, outStream, buffer);
 75  ///     }
 76  ///   }
 77  /// }
 78  /// </code>
 79  /// </example>
 80  public class GZipInputStream : InflaterInputStream
 81  {
 82    #region Instance Fields
 83    /// <summary>
 84    /// CRC-32 value for uncompressed data
 85    /// </summary>
 86        protected Crc32 crc;
 87
 88        /// <summary>
 89        /// Flag to indicate if we've read the GZIP header yet for the current member (block of compressed data).
 90        /// This is tracked per-block as the file is parsed.
 91        /// </summary>
 92    bool readGZIPHeader;
 93    #endregion
 94
 95    #region Constructors
 96    /// <summary>
 97    /// Creates a GZipInputStream with the default buffer size
 98    /// </summary>
 99    /// <param name="baseInputStream">
 100    /// The stream to read compressed data from (baseInputStream GZIP format)
 101    /// </param>
 102    public GZipInputStream(Stream baseInputStream)
 4103      : this(baseInputStream, 4096)
 104    {
 4105    }
 106
 107    /// <summary>
 108    /// Creates a GZIPInputStream with the specified buffer size
 109    /// </summary>
 110    /// <param name="baseInputStream">
 111    /// The stream to read compressed data from (baseInputStream GZIP format)
 112    /// </param>
 113    /// <param name="size">
 114    /// Size of the buffer to use
 115    /// </param>
 116    public GZipInputStream(Stream baseInputStream, int size)
 4117      : base(baseInputStream, new Inflater(true), size)
 118    {
 4119    }
 120    #endregion
 121
 122    #region Stream overrides
 123    /// <summary>
 124    /// Reads uncompressed data into an array of bytes
 125    /// </summary>
 126    /// <param name="buffer">
 127    /// The buffer to read uncompressed data into
 128    /// </param>
 129    /// <param name="offset">
 130    /// The offset indicating where the data should be placed
 131    /// </param>
 132    /// <param name="count">
 133    /// The number of uncompressed bytes to be read
 134    /// </param>
 135    /// <returns>Returns the number of bytes actually read.</returns>
 136    public override int Read(byte[] buffer, int offset, int count)
 137    {
 138      // A GZIP file can contain multiple blocks of compressed data, although this is quite rare.
 139      // A compressed block could potentially be empty, so we need to loop until we reach EOF or
 140      // we find data.
 141      while (true) {
 142
 143        // If we haven't read the header for this block, read it
 4144         if (! readGZIPHeader) {
 145
 146          // Try to read header. If there is no header (0 bytes available), this is EOF. If there is
 147          // an incomplete header, this will throw an exception.
 3148           if (! ReadHeader()) {
 2149            return 0;
 150          }
 151        }
 152
 153        // Try to read compressed data
 2154        int bytesRead = base.Read(buffer, offset, count);
 2155         if (bytesRead > 0) {
 1156          crc.Update(buffer, offset, bytesRead);
 157        }
 158
 159        // If this is the end of stream, read the footer
 2160         if (inf.IsFinished) {
 1161          ReadFooter();
 162        }
 163
 2164         if (bytesRead > 0) {
 1165          return bytesRead;
 166        }
 167      }
 168    }
 169    #endregion
 170
 171    #region Support routines
 172    bool ReadHeader()
 173    {
 174      // Initialize CRC for this block
 3175      crc = new Crc32();
 176
 177      // Make sure there is data in file. We can't rely on ReadLeByte() to fill the buffer, as this could be EOF,
 178      // which is fine, but ReadLeByte() throws an exception if it doesn't find data, so we do this part ourselves.
 3179       if (inputBuffer.Available <= 0) {
 3180        inputBuffer.Fill();
 3181         if (inputBuffer.Available <= 0) {
 182          // No header, EOF.
 2183          return false;
 184        }
 185      }
 186
 187      // 1. Check the two magic bytes
 1188      var headCRC = new Crc32();
 1189      int magic = inputBuffer.ReadLeByte();
 190
 1191       if (magic < 0) {
 0192        throw new EndOfStreamException("EOS reading GZIP header");
 193      }
 194
 1195      headCRC.Update(magic);
 1196       if (magic != (GZipConstants.GZIP_MAGIC >> 8)) {
 0197        throw new GZipException("Error GZIP header, first magic byte doesn't match");
 198      }
 199
 200      //magic = baseInputStream.ReadByte();
 1201      magic = inputBuffer.ReadLeByte();
 202
 1203       if (magic < 0) {
 0204        throw new EndOfStreamException("EOS reading GZIP header");
 205      }
 206
 1207       if (magic != (GZipConstants.GZIP_MAGIC & 0xFF)) {
 0208        throw new GZipException("Error GZIP header,  second magic byte doesn't match");
 209      }
 210
 1211      headCRC.Update(magic);
 212
 213      // 2. Check the compression type (must be 8)
 1214      int compressionType = inputBuffer.ReadLeByte();
 215
 1216       if ( compressionType < 0 ) {
 0217        throw new EndOfStreamException("EOS reading GZIP header");
 218      }
 219
 1220       if ( compressionType != 8 ) {
 0221        throw new GZipException("Error GZIP header, data not in deflate format");
 222      }
 1223      headCRC.Update(compressionType);
 224
 225      // 3. Check the flags
 1226      int flags = inputBuffer.ReadLeByte();
 1227       if (flags < 0) {
 0228        throw new EndOfStreamException("EOS reading GZIP header");
 229      }
 1230      headCRC.Update(flags);
 231
 232      /*    This flag byte is divided into individual bits as follows:
 233
 234      bit 0   FTEXT
 235      bit 1   FHCRC
 236      bit 2   FEXTRA
 237      bit 3   FNAME
 238      bit 4   FCOMMENT
 239      bit 5   reserved
 240      bit 6   reserved
 241      bit 7   reserved
 242      */
 243
 244      // 3.1 Check the reserved bits are zero
 245
 1246       if ((flags & 0xE0) != 0) {
 0247        throw new GZipException("Reserved flag bits in GZIP header != 0");
 248      }
 249
 250      // 4.-6. Skip the modification time, extra flags, and OS type
 14251       for (int i=0; i< 6; i++) {
 6252        int readByte = inputBuffer.ReadLeByte();
 6253         if (readByte < 0) {
 0254          throw new EndOfStreamException("EOS reading GZIP header");
 255        }
 6256        headCRC.Update(readByte);
 257      }
 258
 259      // 7. Read extra field
 1260       if ((flags & GZipConstants.FEXTRA) != 0) {
 261
 262        // XLEN is total length of extra subfields, we will skip them all
 263        int len1, len2;
 0264        len1 = inputBuffer.ReadLeByte();
 0265        len2 = inputBuffer.ReadLeByte();
 0266         if ((len1 < 0) || (len2 < 0)) {
 0267          throw new EndOfStreamException("EOS reading GZIP header");
 268        }
 0269        headCRC.Update(len1);
 0270        headCRC.Update(len2);
 271
 0272        int extraLen = (len2 << 8) | len1;    // gzip is LSB first
 0273         for (int i = 0; i < extraLen;i++) {
 0274          int readByte = inputBuffer.ReadLeByte();
 0275           if (readByte < 0)
 276          {
 0277            throw new EndOfStreamException("EOS reading GZIP header");
 278          }
 0279          headCRC.Update(readByte);
 280        }
 281      }
 282
 283      // 8. Read file name
 1284       if ((flags & GZipConstants.FNAME) != 0) {
 285        int readByte;
 0286         while ( (readByte = inputBuffer.ReadLeByte()) > 0) {
 0287          headCRC.Update(readByte);
 288        }
 289
 0290         if (readByte < 0) {
 0291          throw new EndOfStreamException("EOS reading GZIP header");
 292        }
 0293        headCRC.Update(readByte);
 294      }
 295
 296      // 9. Read comment
 1297       if ((flags & GZipConstants.FCOMMENT) != 0) {
 298        int readByte;
 0299         while ( (readByte = inputBuffer.ReadLeByte()) > 0) {
 0300          headCRC.Update(readByte);
 301        }
 302
 0303         if (readByte < 0) {
 0304          throw new EndOfStreamException("EOS reading GZIP header");
 305        }
 306
 0307        headCRC.Update(readByte);
 308      }
 309
 310      // 10. Read header CRC
 1311       if ((flags & GZipConstants.FHCRC) != 0) {
 312        int tempByte;
 0313        int crcval = inputBuffer.ReadLeByte();
 0314         if (crcval < 0) {
 0315          throw new EndOfStreamException("EOS reading GZIP header");
 316        }
 317
 0318        tempByte = inputBuffer.ReadLeByte();
 0319         if (tempByte < 0) {
 0320          throw new EndOfStreamException("EOS reading GZIP header");
 321        }
 322
 0323        crcval = (crcval << 8) | tempByte;
 0324         if (crcval != ((int) headCRC.Value & 0xffff)) {
 0325          throw new GZipException("Header CRC value mismatch");
 326        }
 327      }
 328
 1329      readGZIPHeader = true;
 1330      return true;
 331    }
 332
 333    void ReadFooter()
 334    {
 1335      byte[] footer = new byte[8];
 336
 337      // End of stream; reclaim all bytes from inf, read the final byte count, and reset the inflator
 1338      long bytesRead = inf.TotalOut & 0xffffffff;
 1339      inputBuffer.Available += inf.RemainingInput;
 1340      inf.Reset();
 341
 342      // Read footer from inputBuffer
 1343      int needed = 8;
 2344       while (needed > 0) {
 1345        int count = inputBuffer.ReadClearTextBuffer(footer, 8 - needed, needed);
 1346         if (count <= 0) {
 0347          throw new EndOfStreamException("EOS reading GZIP footer");
 348        }
 1349        needed -= count; // Jewel Jan 16
 350      }
 351
 352      // Calculate CRC
 1353      int crcval = (footer[0] & 0xff) | ((footer[1] & 0xff) << 8) | ((footer[2] & 0xff) << 16) | (footer[3] << 24);
 1354       if (crcval != (int) crc.Value) {
 0355        throw new GZipException("GZIP crc sum mismatch, theirs \"" + crcval + "\" and ours \"" + (int) crc.Value);
 356      }
 357
 358      // NOTE The total here is the original total modulo 2 ^ 32.
 1359      uint total =
 1360        (uint)((uint)footer[4] & 0xff) |
 1361        (uint)(((uint)footer[5] & 0xff) << 8) |
 1362        (uint)(((uint)footer[6] & 0xff) << 16) |
 1363        (uint)((uint)footer[7] << 24);
 364
 1365       if (bytesRead != total) {
 0366        throw new GZipException("Number of bytes mismatch in footer");
 367      }
 368
 369      // Mark header read as false so if another header exists, we'll continue reading through the file
 1370      readGZIPHeader = false;
 1371    }
 372    #endregion
 373  }
 374}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_GZipOutputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_GZipOutputStream.htm new file mode 100644 index 000000000..bb0bbabf5 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_GZipOutputStream.htm @@ -0,0 +1,310 @@ + + + + +ICSharpCode.SharpZipLib.GZip.GZipOutputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.GZip.GZipOutputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GzipOutputStream.cs
Covered lines:61
Uncovered lines:5
Coverable lines:66
Total lines:261
Line coverage:92.4%
Branch coverage:81.2%
+

Metrics

+ + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)1100100
SetLevel(...)200
GetLevel()100
Write(...)3100100
Close()3100100
Finish()3100100
WriteHeader()210066.67
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GzipOutputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// GZipOutputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40using System.IO;
 41
 42using ICSharpCode.SharpZipLib.Checksums;
 43using ICSharpCode.SharpZipLib.Zip.Compression;
 44using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 45
 46namespace ICSharpCode.SharpZipLib.GZip
 47{
 48
 49  /// <summary>
 50  /// This filter stream is used to compress a stream into a "GZIP" stream.
 51  /// The "GZIP" format is described in RFC 1952.
 52  ///
 53  /// author of the original java version : John Leuner
 54  /// </summary>
 55  /// <example> This sample shows how to gzip a file
 56  /// <code>
 57  /// using System;
 58  /// using System.IO;
 59  ///
 60  /// using ICSharpCode.SharpZipLib.GZip;
 61  /// using ICSharpCode.SharpZipLib.Core;
 62  ///
 63  /// class MainClass
 64  /// {
 65  ///   public static void Main(string[] args)
 66  ///   {
 67  ///       using (Stream s = new GZipOutputStream(File.Create(args[0] + ".gz")))
 68  ///       using (FileStream fs = File.OpenRead(args[0])) {
 69  ///         byte[] writeData = new byte[4096];
 70  ///         Streamutils.Copy(s, fs, writeData);
 71  ///       }
 72  ///     }
 73  ///   }
 74  /// }
 75  /// </code>
 76  /// </example>
 77  public class GZipOutputStream : DeflaterOutputStream
 78  {
 79        enum OutputState
 80        {
 81            Header,
 82            Footer,
 83            Finished,
 84            Closed,
 85        };
 86
 87    #region Instance Fields
 88    /// <summary>
 89    /// CRC-32 value for uncompressed data
 90    /// </summary>
 1091    protected Crc32 crc = new Crc32();
 92        OutputState state_ = OutputState.Header;
 93    #endregion
 94
 95    #region Constructors
 96    /// <summary>
 97    /// Creates a GzipOutputStream with the default buffer size
 98    /// </summary>
 99    /// <param name="baseOutputStream">
 100    /// The stream to read data (to be compressed) from
 101    /// </param>
 102    public GZipOutputStream(Stream baseOutputStream)
 10103      : this(baseOutputStream, 4096)
 104    {
 10105    }
 106
 107    /// <summary>
 108    /// Creates a GZipOutputStream with the specified buffer size
 109    /// </summary>
 110    /// <param name="baseOutputStream">
 111    /// The stream to read data (to be compressed) from
 112    /// </param>
 113    /// <param name="size">
 114    /// Size of the buffer to use
 115    /// </param>
 10116    public GZipOutputStream(Stream baseOutputStream, int size) : base(baseOutputStream, new Deflater(Deflater.DEFAULT_CO
 117    {
 10118    }
 119    #endregion
 120
 121    #region Public API
 122    /// <summary>
 123    /// Sets the active compression level (1-9).  The new level will be activated
 124    /// immediately.
 125    /// </summary>
 126    /// <param name="level">The compression level to set.</param>
 127    /// <exception cref="ArgumentOutOfRangeException">
 128    /// Level specified is not supported.
 129    /// </exception>
 130    /// <see cref="Deflater"/>
 131    public void SetLevel(int level)
 132    {
 0133       if (level < Deflater.BEST_SPEED) {
 0134        throw new ArgumentOutOfRangeException(nameof(level));
 135      }
 0136      deflater_.SetLevel(level);
 0137    }
 138
 139    /// <summary>
 140    /// Get the current compression level.
 141    /// </summary>
 142    /// <returns>The current compression level.</returns>
 143    public int GetLevel()
 144    {
 0145      return deflater_.GetLevel();
 146    }
 147    #endregion
 148
 149    #region Stream overrides
 150    /// <summary>
 151    /// Write given buffer to output updating crc
 152    /// </summary>
 153    /// <param name="buffer">Buffer to write</param>
 154    /// <param name="offset">Offset of first byte in buf to write</param>
 155    /// <param name="count">Number of bytes to write</param>
 156    public override void Write(byte[] buffer, int offset, int count)
 157    {
 4158       if ( state_ == OutputState.Header ) {
 2159        WriteHeader();
 160      }
 161
 4162             if( state_!=OutputState.Footer )
 163            {
 2164                throw new InvalidOperationException("Write not permitted in current state");
 165            }
 166
 2167      crc.Update(buffer, offset, count);
 2168      base.Write(buffer, offset, count);
 2169    }
 170
 171    /// <summary>
 172    /// Writes remaining compressed output data to the output stream
 173    /// and closes it.
 174    /// </summary>
 175    public override void Close()
 176    {
 177      try {
 10178        Finish();
 10179      }
 180      finally {
 10181                 if ( state_ != OutputState.Closed ) {
 8182                    state_ = OutputState.Closed;
 8183             if( IsStreamOwner ) {
 7184              baseOutputStream_.Close();
 185            }
 186                }
 10187      }
 10188    }
 189    #endregion
 190
 191    #region DeflaterOutputStream overrides
 192    /// <summary>
 193    /// Finish compression and write any footer information required to stream
 194    /// </summary>
 195    public override void Finish()
 196    {
 197      // If no data has been written a header should be added.
 14198       if ( state_ == OutputState.Header ) {
 8199        WriteHeader();
 200      }
 201
 14202             if( state_ == OutputState.Footer)
 203            {
 10204                state_=OutputState.Finished;
 10205                base.Finish();
 206
 10207                var totalin=(uint)(deflater_.TotalIn&0xffffffff);
 10208                var crcval=(uint)(crc.Value&0xffffffff);
 209
 210                byte[] gzipFooter;
 211
 212                unchecked
 213                {
 10214                    gzipFooter=new byte[] {
 10215          (byte) crcval, (byte) (crcval >> 8),
 10216          (byte) (crcval >> 16), (byte) (crcval >> 24),
 10217
 10218          (byte) totalin, (byte) (totalin >> 8),
 10219          (byte) (totalin >> 16), (byte) (totalin >> 24)
 10220        };
 221                }
 222
 10223                baseOutputStream_.Write(gzipFooter, 0, gzipFooter.Length);
 224            }
 14225    }
 226    #endregion
 227
 228    #region Support Routines
 229    void WriteHeader()
 230    {
 10231       if ( state_ == OutputState.Header )
 232      {
 10233                state_=OutputState.Footer;
 234
 10235        var mod_time = (int)((DateTime.Now.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000L);  // Ticks give back 100
 10236        byte[] gzipHeader = {
 10237          // The two magic bytes
 10238          (byte) (GZipConstants.GZIP_MAGIC >> 8), (byte) (GZipConstants.GZIP_MAGIC & 0xff),
 10239
 10240          // The compression type
 10241          (byte) Deflater.DEFLATED,
 10242
 10243          // The flags (not set)
 10244          0,
 10245
 10246          // The modification time
 10247          (byte) mod_time, (byte) (mod_time >> 8),
 10248          (byte) (mod_time >> 16), (byte) (mod_time >> 24),
 10249
 10250          // The extra flags
 10251          0,
 10252
 10253          // The OS type (unknown)
 10254          (byte) 255
 10255        };
 10256        baseOutputStream_.Write(gzipHeader, 0, gzipHeader.Length);
 257      }
 10258    }
 259    #endregion
 260  }
 261}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_Inflater.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_Inflater.htm new file mode 100644 index 000000000..3408e0e1c --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_Inflater.htm @@ -0,0 +1,916 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Inflater - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Inflater
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Inflater.cs
Covered lines:173
Uncovered lines:59
Coverable lines:232
Total lines:860
Line coverage:74.5%
Branch coverage:59.8%
+

Metrics

+ + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)3100100
Reset()310066.67
DecodeHeader()573.3366.67
DecodeDict()300
DecodeHuffman()1477.0861.54
DecodeChksum()481.8271.43
Decode()2487.2771.43
SetDictionary(...)100
SetDictionary(...)600
SetInput(...)100
SetInput(...)1100100
Inflate(...)200
Inflate(...)138480
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Inflater.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// Inflater.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41using ICSharpCode.SharpZipLib.Checksums;
 42using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 43
 44namespace ICSharpCode.SharpZipLib.Zip.Compression
 45{
 46  /// <summary>
 47  /// Inflater is used to decompress data that has been compressed according
 48  /// to the "deflate" standard described in rfc1951.
 49  ///
 50  /// By default Zlib (rfc1950) headers and footers are expected in the input.
 51  /// You can use constructor <code> public Inflater(bool noHeader)</code> passing true
 52  /// if there is no Zlib header information
 53  ///
 54  /// The usage is as following.  First you have to set some input with
 55  /// <code>SetInput()</code>, then Inflate() it.  If inflate doesn't
 56  /// inflate any bytes there may be three reasons:
 57  /// <ul>
 58  /// <li>IsNeedingInput() returns true because the input buffer is empty.
 59  /// You have to provide more input with <code>SetInput()</code>.
 60  /// NOTE: IsNeedingInput() also returns true when, the stream is finished.
 61  /// </li>
 62  /// <li>IsNeedingDictionary() returns true, you have to provide a preset
 63  ///    dictionary with <code>SetDictionary()</code>.</li>
 64  /// <li>IsFinished returns true, the inflater has finished.</li>
 65  /// </ul>
 66  /// Once the first output byte is produced, a dictionary will not be
 67  /// needed at a later stage.
 68  ///
 69  /// author of the original java version : John Leuner, Jochen Hoenicke
 70  /// </summary>
 71  public class Inflater
 72  {
 73    #region Constants/Readonly
 74    /// <summary>
 75    /// Copy lengths for literal codes 257..285
 76    /// </summary>
 177    static readonly int[] CPLENS = {
 178                  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
 179                  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258
 180                };
 81
 82    /// <summary>
 83    /// Extra bits for literal codes 257..285
 84    /// </summary>
 185    static readonly int[] CPLEXT = {
 186                  0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
 187                  3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0
 188                };
 89
 90    /// <summary>
 91    /// Copy offsets for distance codes 0..29
 92    /// </summary>
 193    static readonly int[] CPDIST = {
 194                1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
 195                257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
 196                8193, 12289, 16385, 24577
 197                };
 98
 99    /// <summary>
 100    /// Extra bits for distance codes
 101    /// </summary>
 1102    static readonly int[] CPDEXT = {
 1103                0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
 1104                7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
 1105                12, 12, 13, 13
 1106                };
 107
 108    /// <summary>
 109    /// These are the possible states for an inflater
 110    /// </summary>
 111    const int DECODE_HEADER           = 0;
 112    const int DECODE_DICT             = 1;
 113    const int DECODE_BLOCKS           = 2;
 114    const int DECODE_STORED_LEN1      = 3;
 115    const int DECODE_STORED_LEN2      = 4;
 116    const int DECODE_STORED           = 5;
 117    const int DECODE_DYN_HEADER       = 6;
 118    const int DECODE_HUFFMAN          = 7;
 119    const int DECODE_HUFFMAN_LENBITS  = 8;
 120    const int DECODE_HUFFMAN_DIST     = 9;
 121    const int DECODE_HUFFMAN_DISTBITS = 10;
 122    const int DECODE_CHKSUM           = 11;
 123    const int FINISHED                = 12;
 124    #endregion
 125
 126    #region Instance Fields
 127    /// <summary>
 128    /// This variable contains the current state.
 129    /// </summary>
 130    int mode;
 131
 132    /// <summary>
 133    /// The adler checksum of the dictionary or of the decompressed
 134    /// stream, as it is written in the header resp. footer of the
 135    /// compressed stream.
 136    /// Only valid if mode is DECODE_DICT or DECODE_CHKSUM.
 137    /// </summary>
 138    int readAdler;
 139
 140    /// <summary>
 141    /// The number of bits needed to complete the current state.  This
 142    /// is valid, if mode is DECODE_DICT, DECODE_CHKSUM,
 143    /// DECODE_HUFFMAN_LENBITS or DECODE_HUFFMAN_DISTBITS.
 144    /// </summary>
 145    int neededBits;
 146    int repLength;
 147    int repDist;
 148    int uncomprLen;
 149
 150    /// <summary>
 151    /// True, if the last block flag was set in the last block of the
 152    /// inflated stream.  This means that the stream ends after the
 153    /// current block.
 154    /// </summary>
 155    bool isLastBlock;
 156
 157    /// <summary>
 158    /// The total number of inflated bytes.
 159    /// </summary>
 160    long totalOut;
 161
 162    /// <summary>
 163    /// The total number of bytes set with setInput().  This is not the
 164    /// value returned by the TotalIn property, since this also includes the
 165    /// unprocessed input.
 166    /// </summary>
 167    long totalIn;
 168
 169    /// <summary>
 170    /// This variable stores the noHeader flag that was given to the constructor.
 171    /// True means, that the inflated stream doesn't contain a Zlib header or
 172    /// footer.
 173    /// </summary>
 174    bool noHeader;
 175    readonly StreamManipulator input;
 176    OutputWindow outputWindow;
 177    InflaterDynHeader dynHeader;
 178    InflaterHuffmanTree litlenTree, distTree;
 179    Adler32 adler;
 180    #endregion
 181
 182    #region Constructors
 183    /// <summary>
 184    /// Creates a new inflater or RFC1951 decompressor
 185    /// RFC1950/Zlib headers and footers will be expected in the input data
 186    /// </summary>
 3187    public Inflater() : this(false)
 188    {
 3189    }
 190
 191    /// <summary>
 192    /// Creates a new inflater.
 193    /// </summary>
 194    /// <param name="noHeader">
 195    /// True if no RFC1950/Zlib header and footer fields are expected in the input data
 196    ///
 197    /// This is used for GZIPed/Zipped input.
 198    ///
 199    /// For compatibility with
 200    /// Sun JDK you should provide one byte of input more than needed in
 201    /// this case.
 202    /// </param>
 441203    public Inflater(bool noHeader)
 204    {
 441205      this.noHeader = noHeader;
 441206      this.adler = new Adler32();
 441207      input = new StreamManipulator();
 441208      outputWindow = new OutputWindow();
 441209       mode = noHeader ? DECODE_BLOCKS : DECODE_HEADER;
 441210    }
 211    #endregion
 212
 213    /// <summary>
 214    /// Resets the inflater so that a new stream can be decompressed.  All
 215    /// pending input and output will be discarded.
 216    /// </summary>
 217    public void Reset()
 218    {
 44219       mode = noHeader ? DECODE_BLOCKS : DECODE_HEADER;
 44220      totalIn = 0;
 44221      totalOut = 0;
 44222      input.Reset();
 44223      outputWindow.Reset();
 44224      dynHeader = null;
 44225      litlenTree = null;
 44226      distTree = null;
 44227      isLastBlock = false;
 44228      adler.Reset();
 44229    }
 230
 231    /// <summary>
 232    /// Decodes a zlib/RFC1950 header.
 233    /// </summary>
 234    /// <returns>
 235    /// False if more input is needed.
 236    /// </returns>
 237    /// <exception cref="SharpZipBaseException">
 238    /// The header is invalid.
 239    /// </exception>
 240    private bool DecodeHeader()
 241    {
 22242      int header = input.PeekBits(16);
 22243       if (header < 0) {
 11244        return false;
 245      }
 11246      input.DropBits(16);
 247
 248      // The header is written in "wrong" byte order
 11249      header = ((header << 8) | (header >> 8)) & 0xffff;
 11250       if (header % 31 != 0) {
 0251        throw new SharpZipBaseException("Header checksum illegal");
 252      }
 253
 11254       if ((header & 0x0f00) != (Deflater.DEFLATED << 8)) {
 0255        throw new SharpZipBaseException("Compression Method unknown");
 256      }
 257
 258      /* Maximum size of the backwards window in bits.
 259      * We currently ignore this, but we could use it to make the
 260      * inflater window more space efficient. On the other hand the
 261      * full window (15 bits) is needed most times, anyway.
 262      int max_wbits = ((header & 0x7000) >> 12) + 8;
 263      */
 264
 11265       if ((header & 0x0020) == 0) { // Dictionary flag?
 11266        mode = DECODE_BLOCKS;
 11267      } else {
 0268        mode = DECODE_DICT;
 0269        neededBits = 32;
 270      }
 11271      return true;
 272    }
 273
 274    /// <summary>
 275    /// Decodes the dictionary checksum after the deflate header.
 276    /// </summary>
 277    /// <returns>
 278    /// False if more input is needed.
 279    /// </returns>
 280    private bool DecodeDict()
 281    {
 0282       while (neededBits > 0) {
 0283        int dictByte = input.PeekBits(8);
 0284         if (dictByte < 0) {
 0285          return false;
 286        }
 0287        input.DropBits(8);
 0288        readAdler = (readAdler << 8) | dictByte;
 0289        neededBits -= 8;
 290      }
 0291      return false;
 292    }
 293
 294    /// <summary>
 295    /// Decodes the huffman encoded symbols in the input stream.
 296    /// </summary>
 297    /// <returns>
 298    /// false if more input is needed, true if output window is
 299    /// full or the current block ends.
 300    /// </returns>
 301    /// <exception cref="SharpZipBaseException">
 302    /// if deflated stream is invalid.
 303    /// </exception>
 304    private bool DecodeHuffman()
 305    {
 373306      int free = outputWindow.GetFreeSpace();
 474307       while (free >= 258)
 308      {
 309        int symbol;
 474310         switch (mode)
 311        {
 312          case DECODE_HUFFMAN:
 313            // This is the inner loop so it is optimized a bit
 9713314             while (((symbol = litlenTree.GetSymbol(input)) & ~0xff) == 0)
 315            {
 9239316              outputWindow.Write(symbol);
 9239317               if (--free < 258)
 318              {
 0319                return true;
 320              }
 321            }
 322
 474323             if (symbol < 257)
 324            {
 373325               if (symbol < 0)
 326              {
 0327                return false;
 328              }
 329              else
 330              {
 331                // symbol == 256: end of block
 373332                distTree = null;
 373333                litlenTree = null;
 373334                mode = DECODE_BLOCKS;
 373335                return true;
 336              }
 337            }
 338
 339            try
 340            {
 101341              repLength = CPLENS[symbol - 257];
 101342              neededBits = CPLEXT[symbol - 257];
 101343            }
 0344            catch (Exception)
 345            {
 0346              throw new SharpZipBaseException("Illegal rep length code");
 347            }
 348            goto case DECODE_HUFFMAN_LENBITS; // fall through
 349
 350          case DECODE_HUFFMAN_LENBITS:
 101351             if (neededBits > 0)
 352            {
 25353              mode = DECODE_HUFFMAN_LENBITS;
 25354              int i = input.PeekBits(neededBits);
 25355               if (i < 0)
 356              {
 0357                return false;
 358              }
 25359              input.DropBits(neededBits);
 25360              repLength += i;
 361            }
 101362            mode = DECODE_HUFFMAN_DIST;
 363            goto case DECODE_HUFFMAN_DIST; // fall through
 364
 365          case DECODE_HUFFMAN_DIST:
 101366            symbol = distTree.GetSymbol(input);
 101367             if (symbol < 0)
 368            {
 0369              return false;
 370            }
 371
 372            try
 373            {
 101374              repDist = CPDIST[symbol];
 101375              neededBits = CPDEXT[symbol];
 101376            }
 0377            catch (Exception)
 378            {
 0379              throw new SharpZipBaseException("Illegal rep dist code");
 380            }
 381
 382            goto case DECODE_HUFFMAN_DISTBITS; // fall through
 383
 384          case DECODE_HUFFMAN_DISTBITS:
 101385             if (neededBits > 0)
 386            {
 70387              mode = DECODE_HUFFMAN_DISTBITS;
 70388              int i = input.PeekBits(neededBits);
 70389               if (i < 0)
 390              {
 0391                return false;
 392              }
 70393              input.DropBits(neededBits);
 70394              repDist += i;
 395            }
 396
 101397            outputWindow.Repeat(repLength, repDist);
 101398            free -= repLength;
 101399            mode = DECODE_HUFFMAN;
 101400            break;
 401
 402          default:
 0403            throw new SharpZipBaseException("Inflater unknown mode");
 404        }
 405      }
 0406      return true;
 407    }
 408
 409    /// <summary>
 410    /// Decodes the adler checksum after the deflate stream.
 411    /// </summary>
 412    /// <returns>
 413    /// false if more input is needed.
 414    /// </returns>
 415    /// <exception cref="SharpZipBaseException">
 416    /// If checksum doesn't match.
 417    /// </exception>
 418    private bool DecodeChksum()
 419    {
 5420       while (neededBits > 0) {
 4421        int chkByte = input.PeekBits(8);
 4422         if (chkByte < 0) {
 0423          return false;
 424        }
 4425        input.DropBits(8);
 4426        readAdler = (readAdler << 8) | chkByte;
 4427        neededBits -= 8;
 428      }
 429
 1430       if ((int) adler.Value != readAdler) {
 0431        throw new SharpZipBaseException("Adler chksum doesn't match: " + (int)adler.Value + " vs. " + readAdler);
 432      }
 433
 1434      mode = FINISHED;
 1435      return false;
 436    }
 437
 438    /// <summary>
 439    /// Decodes the deflated stream.
 440    /// </summary>
 441    /// <returns>
 442    /// false if more input is needed, or if finished.
 443    /// </returns>
 444    /// <exception cref="SharpZipBaseException">
 445    /// if deflated stream is invalid.
 446    /// </exception>
 447    private bool Decode()
 448    {
 4491449       switch (mode) {
 450        case DECODE_HEADER:
 22451          return DecodeHeader();
 452
 453        case DECODE_DICT:
 0454          return DecodeDict();
 455
 456        case DECODE_CHKSUM:
 1457          return DecodeChksum();
 458
 459        case DECODE_BLOCKS:
 1424460           if (isLastBlock) {
 389461             if (noHeader) {
 378462              mode = FINISHED;
 378463              return false;
 464            } else {
 11465              input.SkipToByteBoundary();
 11466              neededBits = 32;
 11467              mode = DECODE_CHKSUM;
 11468              return true;
 469            }
 470          }
 471
 1035472          int type = input.PeekBits(3);
 1035473           if (type < 0) {
 363474            return false;
 475          }
 672476          input.DropBits(3);
 477
 672478          isLastBlock |= (type & 1) != 0;
 672479           switch (type >> 1){
 480            case DeflaterConstants.STORED_BLOCK:
 299481              input.SkipToByteBoundary();
 299482              mode = DECODE_STORED_LEN1;
 299483              break;
 484            case DeflaterConstants.STATIC_TREES:
 372485              litlenTree = InflaterHuffmanTree.defLitLenTree;
 372486              distTree = InflaterHuffmanTree.defDistTree;
 372487              mode = DECODE_HUFFMAN;
 372488              break;
 489            case DeflaterConstants.DYN_TREES:
 1490              dynHeader = new InflaterDynHeader();
 1491              mode = DECODE_DYN_HEADER;
 1492              break;
 493            default:
 0494              throw new SharpZipBaseException("Unknown block type " + type);
 495          }
 672496          return true;
 497
 498        case DECODE_STORED_LEN1:
 499        {
 299500           if ((uncomprLen = input.PeekBits(16)) < 0) {
 0501            return false;
 502          }
 299503          input.DropBits(16);
 299504          mode = DECODE_STORED_LEN2;
 505        }
 506          goto case DECODE_STORED_LEN2; // fall through
 507
 508        case DECODE_STORED_LEN2:
 509        {
 299510          int nlen = input.PeekBits(16);
 299511           if (nlen < 0) {
 0512            return false;
 513          }
 299514          input.DropBits(16);
 299515           if (nlen != (uncomprLen ^ 0xffff)) {
 0516            throw new SharpZipBaseException("broken uncompressed block");
 517          }
 299518          mode = DECODE_STORED;
 519        }
 520          goto case DECODE_STORED; // fall through
 521
 522        case DECODE_STORED:
 523        {
 2335524          int more = outputWindow.CopyStored(input, uncomprLen);
 2335525          uncomprLen -= more;
 2335526           if (uncomprLen == 0) {
 299527            mode = DECODE_BLOCKS;
 299528            return true;
 529          }
 2036530          return !input.IsNeedingInput;
 531        }
 532
 533        case DECODE_DYN_HEADER:
 1534           if (!dynHeader.Decode(input)) {
 0535            return false;
 536          }
 537
 1538          litlenTree = dynHeader.BuildLitLenTree();
 1539          distTree = dynHeader.BuildDistTree();
 1540          mode = DECODE_HUFFMAN;
 541          goto case DECODE_HUFFMAN; // fall through
 542
 543        case DECODE_HUFFMAN:
 544        case DECODE_HUFFMAN_LENBITS:
 545        case DECODE_HUFFMAN_DIST:
 546        case DECODE_HUFFMAN_DISTBITS:
 373547          return DecodeHuffman();
 548
 549        case FINISHED:
 336550          return false;
 551
 552        default:
 0553          throw new SharpZipBaseException("Inflater.Decode unknown mode");
 554      }
 555    }
 556
 557    /// <summary>
 558    /// Sets the preset dictionary.  This should only be called, if
 559    /// needsDictionary() returns true and it should set the same
 560    /// dictionary, that was used for deflating.  The getAdler()
 561    /// function returns the checksum of the dictionary needed.
 562    /// </summary>
 563    /// <param name="buffer">
 564    /// The dictionary.
 565    /// </param>
 566    public void SetDictionary(byte[] buffer)
 567    {
 0568      SetDictionary(buffer, 0, buffer.Length);
 0569    }
 570
 571    /// <summary>
 572    /// Sets the preset dictionary.  This should only be called, if
 573    /// needsDictionary() returns true and it should set the same
 574    /// dictionary, that was used for deflating.  The getAdler()
 575    /// function returns the checksum of the dictionary needed.
 576    /// </summary>
 577    /// <param name="buffer">
 578    /// The dictionary.
 579    /// </param>
 580    /// <param name="index">
 581    /// The index into buffer where the dictionary starts.
 582    /// </param>
 583    /// <param name="count">
 584    /// The number of bytes in the dictionary.
 585    /// </param>
 586    /// <exception cref="System.InvalidOperationException">
 587    /// No dictionary is needed.
 588    /// </exception>
 589    /// <exception cref="SharpZipBaseException">
 590    /// The adler checksum for the buffer is invalid
 591    /// </exception>
 592    public void SetDictionary(byte[] buffer, int index, int count)
 593    {
 0594       if ( buffer == null ) {
 0595        throw new ArgumentNullException(nameof(buffer));
 596      }
 597
 0598       if ( index < 0 ) {
 0599        throw new ArgumentOutOfRangeException(nameof(index));
 600      }
 601
 0602       if ( count < 0 ) {
 0603        throw new ArgumentOutOfRangeException(nameof(count));
 604      }
 605
 0606       if (!IsNeedingDictionary) {
 0607        throw new InvalidOperationException("Dictionary is not needed");
 608      }
 609
 0610      adler.Update(buffer, index, count);
 611
 0612       if ((int)adler.Value != readAdler) {
 0613        throw new SharpZipBaseException("Wrong adler checksum");
 614      }
 0615      adler.Reset();
 0616      outputWindow.CopyDict(buffer, index, count);
 0617      mode = DECODE_BLOCKS;
 0618    }
 619
 620    /// <summary>
 621    /// Sets the input.  This should only be called, if needsInput()
 622    /// returns true.
 623    /// </summary>
 624    /// <param name="buffer">
 625    /// the input.
 626    /// </param>
 627    public void SetInput(byte[] buffer)
 628    {
 0629      SetInput(buffer, 0, buffer.Length);
 0630    }
 631
 632    /// <summary>
 633    /// Sets the input.  This should only be called, if needsInput()
 634    /// returns true.
 635    /// </summary>
 636    /// <param name="buffer">
 637    /// The source of input data
 638    /// </param>
 639    /// <param name="index">
 640    /// The index into buffer where the input starts.
 641    /// </param>
 642    /// <param name="count">
 643    /// The number of bytes of input to use.
 644    /// </param>
 645    /// <exception cref="System.InvalidOperationException">
 646    /// No input is needed.
 647    /// </exception>
 648    /// <exception cref="System.ArgumentOutOfRangeException">
 649    /// The index and/or count are wrong.
 650    /// </exception>
 651    public void SetInput(byte[] buffer, int index, int count)
 652    {
 1460653      input.SetInput(buffer, index, count);
 1460654      totalIn += (long)count;
 1460655    }
 656
 657    /// <summary>
 658    /// Inflates the compressed stream to the output buffer.  If this
 659    /// returns 0, you should check, whether IsNeedingDictionary(),
 660    /// IsNeedingInput() or IsFinished() returns true, to determine why no
 661    /// further output is produced.
 662    /// </summary>
 663    /// <param name="buffer">
 664    /// the output buffer.
 665    /// </param>
 666    /// <returns>
 667    /// The number of bytes written to the buffer, 0 if no further
 668    /// output can be produced.
 669    /// </returns>
 670    /// <exception cref="System.ArgumentOutOfRangeException">
 671    /// if buffer has length 0.
 672    /// </exception>
 673    /// <exception cref="System.FormatException">
 674    /// if deflated stream is invalid.
 675    /// </exception>
 676    public int Inflate(byte[] buffer)
 677    {
 0678       if ( buffer == null )
 679      {
 0680        throw new ArgumentNullException(nameof(buffer));
 681      }
 682
 0683      return Inflate(buffer, 0, buffer.Length);
 684    }
 685
 686    /// <summary>
 687    /// Inflates the compressed stream to the output buffer.  If this
 688    /// returns 0, you should check, whether needsDictionary(),
 689    /// needsInput() or finished() returns true, to determine why no
 690    /// further output is produced.
 691    /// </summary>
 692    /// <param name="buffer">
 693    /// the output buffer.
 694    /// </param>
 695    /// <param name="offset">
 696    /// the offset in buffer where storing starts.
 697    /// </param>
 698    /// <param name="count">
 699    /// the maximum number of bytes to output.
 700    /// </param>
 701    /// <returns>
 702    /// the number of bytes written to the buffer, 0 if no further output can be produced.
 703    /// </returns>
 704    /// <exception cref="System.ArgumentOutOfRangeException">
 705    /// if count is less than 0.
 706    /// </exception>
 707    /// <exception cref="System.ArgumentOutOfRangeException">
 708    /// if the index and / or count are wrong.
 709    /// </exception>
 710    /// <exception cref="System.FormatException">
 711    /// if deflated stream is invalid.
 712    /// </exception>
 713    public int Inflate(byte[] buffer, int offset, int count)
 714    {
 2247715       if ( buffer == null )
 716      {
 0717        throw new ArgumentNullException(nameof(buffer));
 718      }
 719
 2247720       if ( count < 0 ) {
 721#if NETCF_1_0
 722        throw new ArgumentOutOfRangeException("count");
 723#else
 0724        throw new ArgumentOutOfRangeException(nameof(count), "count cannot be negative");
 725#endif
 726      }
 727
 2247728       if ( offset < 0 ) {
 729#if NETCF_1_0
 730        throw new ArgumentOutOfRangeException("offset");
 731#else
 0732        throw new ArgumentOutOfRangeException(nameof(offset), "offset cannot be negative");
 733#endif
 734      }
 735
 2247736       if ( offset + count > buffer.Length ) {
 0737        throw new ArgumentException("count exceeds buffer bounds");
 738      }
 739
 740      // Special case: count may be zero
 2247741       if (count == 0)
 742      {
 21743         if (!IsFinished) { // -jr- 08-Nov-2003 INFLATE_BUG fix..
 21744          Decode();
 745        }
 21746        return 0;
 747      }
 748
 2226749      int bytesCopied = 0;
 750
 751      do {
 4600752         if (mode != DECODE_CHKSUM) {
 753          /* Don't give away any output, if we are waiting for the
 754          * checksum in the input stream.
 755          *
 756          * With this trick we have always:
 757          *   IsNeedingInput() and not IsFinished()
 758          *   implies more output can be produced.
 759          */
 4599760          int more = outputWindow.CopyOutput(buffer, offset, count);
 4599761           if ( more > 0 ) {
 1717762            adler.Update(buffer, offset, more);
 1717763            offset += more;
 1717764            bytesCopied += more;
 1717765            totalOut += (long)more;
 1717766            count -= more;
 1717767             if (count == 0) {
 130768              return bytesCopied;
 769            }
 770          }
 771        }
 4470772       } while (Decode() || ((outputWindow.GetAvailable() > 0) && (mode != DECODE_CHKSUM)));
 2096773      return bytesCopied;
 774    }
 775
 776    /// <summary>
 777    /// Returns true, if the input buffer is empty.
 778    /// You should then call setInput().
 779    /// NOTE: This method also returns true when the stream is finished.
 780    /// </summary>
 781    public bool IsNeedingInput {
 782      get {
 1392783        return input.IsNeedingInput;
 784      }
 785    }
 786
 787    /// <summary>
 788    /// Returns true, if a preset dictionary is needed to inflate the input.
 789    /// </summary>
 790    public bool IsNeedingDictionary {
 791      get {
 855792        return mode == DECODE_DICT && neededBits == 0;
 793      }
 794    }
 795
 796    /// <summary>
 797    /// Returns true, if the inflater has finished.  This means, that no
 798    /// input is needed and no output can be produced.
 799    /// </summary>
 800    public bool IsFinished {
 801      get {
 2136802        return mode == FINISHED && outputWindow.GetAvailable() == 0;
 803      }
 804    }
 805
 806    /// <summary>
 807    /// Gets the adler checksum.  This is either the checksum of all
 808    /// uncompressed bytes returned by inflate(), or if needsDictionary()
 809    /// returns true (and thus no output was yet produced) this is the
 810    /// adler checksum of the expected dictionary.
 811    /// </summary>
 812    /// <returns>
 813    /// the adler checksum.
 814    /// </returns>
 815    public int Adler {
 816      get {
 0817        return IsNeedingDictionary ? readAdler : (int) adler.Value;
 818      }
 819    }
 820
 821    /// <summary>
 822    /// Gets the total number of output bytes returned by Inflate().
 823    /// </summary>
 824    /// <returns>
 825    /// the total number of output bytes.
 826    /// </returns>
 827    public long TotalOut {
 828      get {
 14829        return totalOut;
 830      }
 831    }
 832
 833    /// <summary>
 834    /// Gets the total number of processed compressed input bytes.
 835    /// </summary>
 836    /// <returns>
 837    /// The total number of bytes of processed input bytes.
 838    /// </returns>
 839    public long TotalIn {
 840      get {
 22841        return totalIn - (long)RemainingInput;
 842      }
 843    }
 844
 845    /// <summary>
 846    /// Gets the number of unprocessed input bytes.  Useful, if the end of the
 847    /// stream is reached and you want to further process the bytes after
 848    /// the deflate stream.
 849    /// </summary>
 850    /// <returns>
 851    /// The number of bytes of the input which have not been processed.
 852    /// </returns>
 853    public int RemainingInput {
 854      // TODO: This should be a long?
 855      get {
 49856        return input.AvailableBytes;
 857      }
 858    }
 859  }
 860}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterDynHeader.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterDynHeader.htm new file mode 100644 index 000000000..6fd8d0774 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterDynHeader.htm @@ -0,0 +1,256 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\InflaterDynHeader.cs
Covered lines:63
Uncovered lines:10
Coverable lines:73
Total lines:211
Line coverage:86.3%
Branch coverage:54.2%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
Decode(...)2184.1355.56
BuildLitLenTree()1100100
BuildDistTree()1100100
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\InflaterDynHeader.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// InflaterDynHeader.cs
 2// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 3//
 4// This file was translated from java, it was part of the GNU Classpath
 5// Copyright (C) 2001 Free Software Foundation, Inc.
 6//
 7// This program is free software; you can redistribute it and/or
 8// modify it under the terms of the GNU General Public License
 9// as published by the Free Software Foundation; either version 2
 10// of the License, or (at your option) any later version.
 11//
 12// This program is distributed in the hope that it will be useful,
 13// but WITHOUT ANY WARRANTY; without even the implied warranty of
 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 15// GNU General Public License for more details.
 16//
 17// You should have received a copy of the GNU General Public License
 18// along with this program; if not, write to the Free Software
 19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 20//
 21// Linking this library statically or dynamically with other modules is
 22// making a combined work based on this library.  Thus, the terms and
 23// conditions of the GNU General Public License cover the whole
 24// combination.
 25//
 26// As a special exception, the copyright holders of this library give you
 27// permission to link this library with independent modules to produce an
 28// executable, regardless of the license terms of these independent
 29// modules, and to copy and distribute the resulting executable under
 30// terms of your choice, provided that you also meet, for each linked
 31// independent module, the terms and conditions of the license of that
 32// module.  An independent module is a module which is not derived from
 33// or based on this library.  If you modify this library, you may extend
 34// this exception to your version of the library, but you are not
 35// obligated to do so.  If you do not wish to do so, delete this
 36// exception statement from your version.
 37
 38using System;
 39
 40using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 41
 42namespace ICSharpCode.SharpZipLib.Zip.Compression
 43{
 44
 45  class InflaterDynHeader
 46  {
 47    #region Constants
 48    const int LNUM   = 0;
 49    const int DNUM   = 1;
 50    const int BLNUM  = 2;
 51    const int BLLENS = 3;
 52    const int LENS   = 4;
 53    const int REPS   = 5;
 54
 155    static readonly int[] repMin  = { 3, 3, 11 };
 156    static readonly int[] repBits = { 2, 3,  7 };
 57
 158    static readonly int[] BL_ORDER =
 159    { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
 60    #endregion
 61
 62    public bool Decode(StreamManipulator input)
 63    {
 64      decode_loop:
 65        for (;;) {
 1066           switch (mode) {
 67            case LNUM:
 168              lnum = input.PeekBits(5);
 169               if (lnum < 0) {
 070                return false;
 71              }
 172              lnum += 257;
 173              input.DropBits(5);
 74              //        System.err.println("LNUM: "+lnum);
 175              mode = DNUM;
 76              goto case DNUM; // fall through
 77            case DNUM:
 178              dnum = input.PeekBits(5);
 179               if (dnum < 0) {
 080                return false;
 81              }
 182              dnum++;
 183              input.DropBits(5);
 84              //        System.err.println("DNUM: "+dnum);
 185              num = lnum+dnum;
 186              litdistLens = new byte[num];
 187              mode = BLNUM;
 88              goto case BLNUM; // fall through
 89            case BLNUM:
 190              blnum = input.PeekBits(4);
 191               if (blnum < 0) {
 092                return false;
 93              }
 194              blnum += 4;
 195              input.DropBits(4);
 196              blLens = new byte[19];
 197              ptr = 0;
 98              //        System.err.println("BLNUM: "+blnum);
 199              mode = BLLENS;
 1100              goto case BLLENS; // fall through
 101            case BLLENS:
 19102               while (ptr < blnum) {
 18103                int len = input.PeekBits(3);
 18104                 if (len < 0) {
 0105                  return false;
 106                }
 18107                input.DropBits(3);
 108                //      System.err.println("blLens["+BL_ORDER[ptr]+"]: "+len);
 18109                blLens[BL_ORDER[ptr]] = (byte) len;
 18110                ptr++;
 111              }
 1112              blTree = new InflaterHuffmanTree(blLens);
 1113              blLens = null;
 1114              ptr = 0;
 1115              mode = LENS;
 1116              goto case LENS; // fall through
 117            case LENS:
 118            {
 119              int symbol;
 45120               while (((symbol = blTree.GetSymbol(input)) & ~15) == 0) {
 121                /* Normal case: symbol in [0..15] */
 122
 123                //        System.err.println("litdistLens["+ptr+"]: "+symbol);
 36124                litdistLens[ptr++] = lastLen = (byte)symbol;
 125
 36126                 if (ptr == num) {
 127                  /* Finished */
 1128                  return true;
 129                }
 130              }
 131
 132              /* need more input ? */
 9133               if (symbol < 0) {
 0134                return false;
 135              }
 136
 137              /* otherwise repeat code */
 9138               if (symbol >= 17) {
 139                /* repeat zero */
 140                //        System.err.println("repeating zero");
 9141                lastLen = 0;
 9142              } else {
 0143                 if (ptr == 0) {
 0144                  throw new SharpZipBaseException();
 145                }
 146              }
 9147              repSymbol = symbol-16;
 148            }
 9149              mode = REPS;
 150              goto case REPS; // fall through
 151            case REPS:
 152            {
 9153              int bits = repBits[repSymbol];
 9154              int count = input.PeekBits(bits);
 9155               if (count < 0) {
 0156                return false;
 157              }
 9158              input.DropBits(bits);
 9159              count += repMin[repSymbol];
 160              //          System.err.println("litdistLens repeated: "+count);
 161
 9162               if (ptr + count > num) {
 0163                throw new SharpZipBaseException();
 164              }
 239165               while (count-- > 0) {
 230166                litdistLens[ptr++] = lastLen;
 167              }
 168
 9169               if (ptr == num) {
 170                /* Finished */
 0171                return true;
 172              }
 173            }
 9174            mode = LENS;
 9175            goto decode_loop;
 176          }
 177        }
 178    }
 179
 180    public InflaterHuffmanTree BuildLitLenTree()
 181    {
 1182      byte[] litlenLens = new byte[lnum];
 1183      Array.Copy(litdistLens, 0, litlenLens, 0, lnum);
 1184      return new InflaterHuffmanTree(litlenLens);
 185    }
 186
 187    public InflaterHuffmanTree BuildDistTree()
 188    {
 1189      byte[] distLens = new byte[dnum];
 1190      Array.Copy(litdistLens, lnum, distLens, 0, dnum);
 1191      return new InflaterHuffmanTree(distLens);
 192    }
 193
 194    #region Instance Fields
 195    byte[] blLens;
 196    byte[] litdistLens;
 197
 198    InflaterHuffmanTree blTree;
 199
 200        /// <summary>
 201        /// The current decode mode
 202        /// </summary>
 203    int mode;
 204    int lnum, dnum, blnum, num;
 205    int repSymbol;
 206    byte lastLen;
 207    int ptr;
 208    #endregion
 209
 210  }
 211}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterHuffmanTree.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterHuffmanTree.htm new file mode 100644 index 000000000..c2be3b45f --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterHuffmanTree.htm @@ -0,0 +1,277 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\InflaterHuffmanTree.cs
Covered lines:65
Uncovered lines:23
Coverable lines:88
Total lines:232
Line coverage:73.8%
Branch coverage:75%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.cctor()690100
.ctor(...)1100100
BuildTree(...)1282.6982.61
GetSymbol(...)741.6746.15
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\InflaterHuffmanTree.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// InflaterHuffmanTree.cs
 2// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 3//
 4// This file was translated from java, it was part of the GNU Classpath
 5// Copyright (C) 2001 Free Software Foundation, Inc.
 6//
 7// This program is free software; you can redistribute it and/or
 8// modify it under the terms of the GNU General Public License
 9// as published by the Free Software Foundation; either version 2
 10// of the License, or (at your option) any later version.
 11//
 12// This program is distributed in the hope that it will be useful,
 13// but WITHOUT ANY WARRANTY; without even the implied warranty of
 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 15// GNU General Public License for more details.
 16//
 17// You should have received a copy of the GNU General Public License
 18// along with this program; if not, write to the Free Software
 19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 20//
 21// Linking this library statically or dynamically with other modules is
 22// making a combined work based on this library.  Thus, the terms and
 23// conditions of the GNU General Public License cover the whole
 24// combination.
 25//
 26// As a special exception, the copyright holders of this library give you
 27// permission to link this library with independent modules to produce an
 28// executable, regardless of the license terms of these independent
 29// modules, and to copy and distribute the resulting executable under
 30// terms of your choice, provided that you also meet, for each linked
 31// independent module, the terms and conditions of the license of that
 32// module.  An independent module is a module which is not derived from
 33// or based on this library.  If you modify this library, you may extend
 34// this exception to your version of the library, but you are not
 35// obligated to do so.  If you do not wish to do so, delete this
 36// exception statement from your version.
 37
 38using System;
 39
 40using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 41
 42namespace ICSharpCode.SharpZipLib.Zip.Compression
 43{
 44
 45  /// <summary>
 46  /// Huffman tree used for inflation
 47  /// </summary>
 48  public class InflaterHuffmanTree
 49  {
 50    #region Constants
 51    const int MAX_BITLEN = 15;
 52    #endregion
 53
 54    #region Instance Fields
 55    short[] tree;
 56    #endregion
 57
 58    /// <summary>
 59    /// Literal length tree
 60    /// </summary>
 61    public static InflaterHuffmanTree defLitLenTree;
 62
 63    /// <summary>
 64    /// Distance tree
 65    /// </summary>
 66    public static InflaterHuffmanTree defDistTree;
 67
 68    static InflaterHuffmanTree()
 69    {
 70      try {
 171        byte[] codeLengths = new byte[288];
 172        int i = 0;
 14573         while (i < 144) {
 14474          codeLengths[i++] = 8;
 75        }
 11376         while (i < 256) {
 11277          codeLengths[i++] = 9;
 78        }
 2579         while (i < 280) {
 2480          codeLengths[i++] = 7;
 81        }
 982         while (i < 288) {
 883          codeLengths[i++] = 8;
 84        }
 185        defLitLenTree = new InflaterHuffmanTree(codeLengths);
 86
 187        codeLengths = new byte[32];
 188        i = 0;
 3389         while (i < 32) {
 3290          codeLengths[i++] = 5;
 91        }
 192        defDistTree = new InflaterHuffmanTree(codeLengths);
 193      } catch (Exception) {
 094        throw new SharpZipBaseException("InflaterHuffmanTree: static tree length illegal");
 95      }
 196    }
 97
 98    #region Constructors
 99    /// <summary>
 100    /// Constructs a Huffman tree from the array of code lengths.
 101    /// </summary>
 102    /// <param name = "codeLengths">
 103    /// the array of code lengths
 104    /// </param>
 5105    public InflaterHuffmanTree(byte[] codeLengths)
 106    {
 5107      BuildTree(codeLengths);
 5108    }
 109    #endregion
 110
 111    void BuildTree(byte[] codeLengths)
 112    {
 5113      int[] blCount  = new int[MAX_BITLEN + 1];
 5114      int[] nextCode = new int[MAX_BITLEN + 1];
 115
 1220116       for (int i = 0; i < codeLengths.Length; i++) {
 605117        int bits = codeLengths[i];
 605118         if (bits > 0) {
 358119          blCount[bits]++;
 120        }
 121      }
 122
 5123      int code = 0;
 5124      int treeSize = 512;
 160125       for (int bits = 1; bits <= MAX_BITLEN; bits++) {
 75126        nextCode[bits] = code;
 75127        code += blCount[bits] << (16 - bits);
 75128         if (bits >= 10) {
 129          /* We need an extra table for bit lengths >= 10. */
 30130          int start = nextCode[bits] & 0x1ff80;
 30131          int end   = code & 0x1ff80;
 30132          treeSize += (end - start) >> (16 - bits);
 133        }
 134      }
 135
 136/* -jr comment this out! doesnt work for dynamic trees and pkzip 2.04g
 137      if (code != 65536)
 138      {
 139        throw new SharpZipBaseException("Code lengths don't add up properly.");
 140      }
 141*/
 142      /* Now create and fill the extra tables from longest to shortest
 143      * bit len.  This way the sub trees will be aligned.
 144      */
 5145      tree = new short[treeSize];
 5146      int treePtr = 512;
 70147       for (int bits = MAX_BITLEN; bits >= 10; bits--) {
 30148        int end   = code & 0x1ff80;
 30149        code -= blCount[bits] << (16 - bits);
 30150        int start = code & 0x1ff80;
 60151         for (int i = start; i < end; i += 1 << 7) {
 0152          tree[DeflaterHuffman.BitReverse(i)] = (short) ((-treePtr << 4) | bits);
 0153          treePtr += 1 << (bits-9);
 154        }
 155      }
 156
 1220157       for (int i = 0; i < codeLengths.Length; i++) {
 605158        int bits = codeLengths[i];
 605159         if (bits == 0) {
 160          continue;
 161        }
 358162        code = nextCode[bits];
 358163        int revcode = DeflaterHuffman.BitReverse(code);
 358164         if (bits <= 9) {
 165          do {
 2560166            tree[revcode] = (short) ((i << 4) | bits);
 2560167            revcode += 1 << bits;
 2560168           } while (revcode < 512);
 358169        } else {
 0170          int subTree = tree[revcode & 511];
 0171          int treeLen = 1 << (subTree & 15);
 0172          subTree = -(subTree >> 4);
 173          do {
 0174            tree[subTree | (revcode >> 9)] = (short) ((i << 4) | bits);
 0175            revcode += 1 << bits;
 0176           } while (revcode < treeLen);
 177        }
 358178        nextCode[bits] = code + (1 << (16 - bits));
 179      }
 180
 5181    }
 182
 183    /// <summary>
 184    /// Reads the next symbol from input.  The symbol is encoded using the
 185    /// huffman tree.
 186    /// </summary>
 187    /// <param name="input">
 188    /// input the input source.
 189    /// </param>
 190    /// <returns>
 191    /// the next symbol, or -1 if not enough input is available.
 192    /// </returns>
 193    public int GetSymbol(StreamManipulator input)
 194    {
 195      int lookahead, symbol;
 9859196       if ((lookahead = input.PeekBits(9)) >= 0) {
 9836197         if ((symbol = tree[lookahead]) >= 0) {
 9836198          input.DropBits(symbol & 15);
 9836199          return symbol >> 4;
 200        }
 0201        int subtree = -(symbol >> 4);
 0202        int bitlen = symbol & 15;
 0203         if ((lookahead = input.PeekBits(bitlen)) >= 0) {
 0204          symbol = tree[subtree | (lookahead >> 9)];
 0205          input.DropBits(symbol & 15);
 0206          return symbol >> 4;
 207        } else {
 0208          int bits = input.AvailableBits;
 0209          lookahead = input.PeekBits(bits);
 0210          symbol = tree[subtree | (lookahead >> 9)];
 0211           if ((symbol & 15) <= bits) {
 0212            input.DropBits(symbol & 15);
 0213            return symbol >> 4;
 214          } else {
 0215            return -1;
 216          }
 217        }
 218      } else {
 23219        int bits = input.AvailableBits;
 23220        lookahead = input.PeekBits(bits);
 23221        symbol = tree[lookahead];
 23222         if (symbol >= 0 && (symbol & 15) <= bits) {
 23223          input.DropBits(symbol & 15);
 23224          return symbol >> 4;
 225        } else {
 0226          return -1;
 227        }
 228      }
 229    }
 230  }
 231}
 232
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputBuffer.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputBuffer.htm new file mode 100644 index 000000000..519b72362 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputBuffer.htm @@ -0,0 +1,783 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\InflaterInputStream.cs
Covered lines:72
Uncovered lines:14
Coverable lines:86
Total lines:731
Line coverage:83.7%
Branch coverage:71%
+

Metrics

+ + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor(...)285.7166.67
SetInflaterInput(...)210066.67
Fill()4100100
ReadRawBuffer(...)1100100
ReadRawBuffer(...)573.3355.56
ReadClearTextBuffer(...)586.6777.78
ReadLeByte()385.7180
ReadLeShort()1100100
ReadLeInt()1100100
ReadLeLong()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\InflaterInputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// InflaterInputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  11-08-2009  GeoffHart  T9121  Added Multi-member gzip support
 41
 42using System;
 43using System.IO;
 44
 45#if !NETCF_1_0
 46using System.Security.Cryptography;
 47#endif
 48
 49namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams
 50{
 51
 52  /// <summary>
 53  /// An input buffer customised for use by <see cref="InflaterInputStream"/>
 54  /// </summary>
 55  /// <remarks>
 56  /// The buffer supports decryption of incoming data.
 57  /// </remarks>
 58  public class InflaterInputBuffer
 59  {
 60    #region Constructors
 61    /// <summary>
 62    /// Initialise a new instance of <see cref="InflaterInputBuffer"/> with a default buffer size
 63    /// </summary>
 64    /// <param name="stream">The stream to buffer.</param>
 065    public InflaterInputBuffer(Stream stream) : this(stream , 4096)
 66    {
 067    }
 68
 69    /// <summary>
 70    /// Initialise a new instance of <see cref="InflaterInputBuffer"/>
 71    /// </summary>
 72    /// <param name="stream">The stream to buffer.</param>
 73    /// <param name="bufferSize">The size to use for the buffer</param>
 74    /// <remarks>A minimum buffer size of 1KB is permitted.  Lower sizes are treated as 1KB.</remarks>
 44175    public InflaterInputBuffer(Stream stream, int bufferSize)
 76    {
 44177      inputStream = stream;
 44178       if ( bufferSize < 1024 ) {
 079        bufferSize = 1024;
 80      }
 44181      rawData = new byte[bufferSize];
 44182      clearText = rawData;
 44183    }
 84    #endregion
 85
 86    /// <summary>
 87    /// Get the length of bytes bytes in the <see cref="RawData"/>
 88    /// </summary>
 89    public int RawLength
 90    {
 91      get {
 092        return rawLength;
 93      }
 94    }
 95
 96    /// <summary>
 97    /// Get the contents of the raw data buffer.
 98    /// </summary>
 99    /// <remarks>This may contain encrypted data.</remarks>
 100    public byte[] RawData
 101    {
 102      get {
 0103        return rawData;
 104      }
 105    }
 106
 107    /// <summary>
 108    /// Get the number of useable bytes in <see cref="ClearText"/>
 109    /// </summary>
 110    public int ClearTextLength
 111    {
 112      get {
 0113        return clearTextLength;
 114      }
 115    }
 116
 117    /// <summary>
 118    /// Get the contents of the clear text buffer.
 119    /// </summary>
 120    public byte[] ClearText
 121    {
 122      get {
 0123        return clearText;
 124      }
 125    }
 126
 127    /// <summary>
 128    /// Get/set the number of bytes available
 129    /// </summary>
 130    public int Available
 131    {
 2895132      get { return available; }
 82133      set { available = value; }
 134    }
 135
 136    /// <summary>
 137    /// Call <see cref="Inflater.SetInput(byte[], int, int)"/> passing the current clear text buffer contents.
 138    /// </summary>
 139    /// <param name="inflater">The inflater to set input for.</param>
 140    public void SetInflaterInput(Inflater inflater)
 141    {
 1460142       if ( available > 0 ) {
 1460143        inflater.SetInput(clearText, clearTextLength - available, available);
 1460144        available = 0;
 145      }
 1460146    }
 147
 148    /// <summary>
 149    /// Fill the buffer from the underlying input stream.
 150    /// </summary>
 151    public void Fill()
 152    {
 1479153      rawLength = 0;
 1479154      int toRead = rawData.Length;
 155
 2956156       while (toRead > 0) {
 1913157        int count = inputStream.Read(rawData, rawLength, toRead);
 1913158         if ( count <= 0 ) {
 159          break;
 160        }
 1477161        rawLength += count;
 1477162        toRead -= count;
 163      }
 164
 165#if !NETCF_1_0
 1479166       if ( cryptoTransform != null ) {
 264167        clearTextLength = cryptoTransform.TransformBlock(rawData, 0, rawLength, clearText, 0);
 264168      }
 169      else
 170#endif
 171      {
 1215172        clearTextLength = rawLength;
 173      }
 174
 1479175      available = clearTextLength;
 1479176    }
 177
 178    /// <summary>
 179    /// Read a buffer directly from the input stream
 180    /// </summary>
 181    /// <param name="buffer">The buffer to fill</param>
 182    /// <returns>Returns the number of bytes read.</returns>
 183    public int ReadRawBuffer(byte[] buffer)
 184    {
 167185      return ReadRawBuffer(buffer, 0, buffer.Length);
 186    }
 187
 188    /// <summary>
 189    /// Read a buffer directly from the input stream
 190    /// </summary>
 191    /// <param name="outBuffer">The buffer to read into</param>
 192    /// <param name="offset">The offset to start reading data into.</param>
 193    /// <param name="length">The number of bytes to read.</param>
 194    /// <returns>Returns the number of bytes read.</returns>
 195    public int ReadRawBuffer(byte[] outBuffer, int offset, int length)
 196    {
 167197       if ( length < 0 ) {
 0198        throw new ArgumentOutOfRangeException(nameof(length));
 199      }
 200
 167201      int currentOffset = offset;
 167202      int currentLength = length;
 203
 334204       while ( currentLength > 0 ) {
 167205         if ( available <= 0 ) {
 0206          Fill();
 0207           if (available <= 0) {
 0208            return 0;
 209          }
 210        }
 167211        int toCopy = Math.Min(currentLength, available);
 167212        System.Array.Copy(rawData, rawLength - (int)available, outBuffer, currentOffset, toCopy);
 167213        currentOffset += toCopy;
 167214        currentLength -= toCopy;
 167215        available -= toCopy;
 216      }
 167217      return length;
 218    }
 219
 220    /// <summary>
 221    /// Read clear text data from the input stream.
 222    /// </summary>
 223    /// <param name="outBuffer">The buffer to add data to.</param>
 224    /// <param name="offset">The offset to start adding data at.</param>
 225    /// <param name="length">The number of bytes to read.</param>
 226    /// <returns>Returns the number of bytes actually read.</returns>
 227    public int ReadClearTextBuffer(byte[] outBuffer, int offset, int length)
 228    {
 31229       if ( length < 0 ) {
 0230        throw new ArgumentOutOfRangeException(nameof(length));
 231      }
 232
 31233      int currentOffset = offset;
 31234      int currentLength = length;
 235
 86236       while ( currentLength > 0 ) {
 55237         if ( available <= 0 ) {
 24238          Fill();
 24239           if (available <= 0) {
 0240            return 0;
 241          }
 242        }
 243
 55244        int toCopy = Math.Min(currentLength, available);
 55245        Array.Copy(clearText, clearTextLength - (int)available, outBuffer, currentOffset, toCopy);
 55246        currentOffset += toCopy;
 55247        currentLength -= toCopy;
 55248        available -= toCopy;
 249      }
 31250      return length;
 251    }
 252
 253    /// <summary>
 254    /// Read a <see cref="byte"/> from the input stream.
 255    /// </summary>
 256    /// <returns>Returns the byte read.</returns>
 257    public int ReadLeByte()
 258    {
 2728259       if (available <= 0) {
 61260        Fill();
 61261         if (available <= 0) {
 0262          throw new ZipException("EOF in header");
 263        }
 264      }
 2728265      byte result = rawData[rawLength - available];
 2728266      available -= 1;
 2728267      return result;
 268    }
 269
 270    /// <summary>
 271    /// Read an <see cref="short"/> in little endian byte order.
 272    /// </summary>
 273    /// <returns>The short value read case to an int.</returns>
 274    public int ReadLeShort()
 275    {
 1359276      return ReadLeByte() | (ReadLeByte() << 8);
 277    }
 278
 279    /// <summary>
 280    /// Read an <see cref="int"/> in little endian byte order.
 281    /// </summary>
 282    /// <returns>The int value read.</returns>
 283    public int ReadLeInt()
 284    {
 467285      return ReadLeShort() | (ReadLeShort() << 16);
 286    }
 287
 288    /// <summary>
 289    /// Read a <see cref="long"/> in little endian byte order.
 290    /// </summary>
 291    /// <returns>The long value read.</returns>
 292    public long ReadLeLong()
 293    {
 12294      return (uint)ReadLeInt() | ((long)ReadLeInt() << 32);
 295    }
 296
 297#if !NETCF_1_0
 298    /// <summary>
 299    /// Get/set the <see cref="ICryptoTransform"/> to apply to any data.
 300    /// </summary>
 301    /// <remarks>Set this value to null to have no transform applied.</remarks>
 302    public ICryptoTransform CryptoTransform
 303    {
 304      set {
 107305        cryptoTransform = value;
 107306         if ( cryptoTransform != null ) {
 27307           if ( rawData == clearText ) {
 27308             if ( internalClearText == null ) {
 26309              internalClearText = new byte[rawData.Length];
 310            }
 27311            clearText = internalClearText;
 312          }
 27313          clearTextLength = rawLength;
 27314           if ( available > 0 ) {
 27315            cryptoTransform.TransformBlock(rawData, rawLength - available, available, clearText, rawLength - available);
 316          }
 27317        } else {
 80318          clearText = rawData;
 80319          clearTextLength = rawLength;
 320        }
 80321      }
 322    }
 323#endif
 324
 325    #region Instance Fields
 326    int rawLength;
 327    byte[] rawData;
 328
 329    int clearTextLength;
 330    byte[] clearText;
 331#if !NETCF_1_0
 332    byte[] internalClearText;
 333#endif
 334
 335    int available;
 336
 337#if !NETCF_1_0
 338    ICryptoTransform cryptoTransform;
 339#endif
 340    Stream inputStream;
 341    #endregion
 342  }
 343
 344  /// <summary>
 345  /// This filter stream is used to decompress data compressed using the "deflate"
 346  /// format. The "deflate" format is described in RFC 1951.
 347  ///
 348  /// This stream may form the basis for other decompression filters, such
 349  /// as the <see cref="ICSharpCode.SharpZipLib.GZip.GZipInputStream">GZipInputStream</see>.
 350  ///
 351  /// Author of the original java version : John Leuner.
 352  /// </summary>
 353  public class InflaterInputStream : Stream
 354  {
 355    #region Constructors
 356    /// <summary>
 357    /// Create an InflaterInputStream with the default decompressor
 358    /// and a default buffer size of 4KB.
 359    /// </summary>
 360    /// <param name = "baseInputStream">
 361    /// The InputStream to read bytes from
 362    /// </param>
 363    public InflaterInputStream(Stream baseInputStream)
 364      : this(baseInputStream, new Inflater(), 4096)
 365    {
 366    }
 367
 368    /// <summary>
 369    /// Create an InflaterInputStream with the specified decompressor
 370    /// and a default buffer size of 4KB.
 371    /// </summary>
 372    /// <param name = "baseInputStream">
 373    /// The source of input data
 374    /// </param>
 375    /// <param name = "inf">
 376    /// The decompressor used to decompress data read from baseInputStream
 377    /// </param>
 378    public InflaterInputStream(Stream baseInputStream, Inflater inf)
 379      : this(baseInputStream, inf, 4096)
 380    {
 381    }
 382
 383    /// <summary>
 384    /// Create an InflaterInputStream with the specified decompressor
 385    /// and the specified buffer size.
 386    /// </summary>
 387    /// <param name = "baseInputStream">
 388    /// The InputStream to read bytes from
 389    /// </param>
 390    /// <param name = "inflater">
 391    /// The decompressor to use
 392    /// </param>
 393    /// <param name = "bufferSize">
 394    /// Size of the buffer to use
 395    /// </param>
 396    public InflaterInputStream(Stream baseInputStream, Inflater inflater, int bufferSize)
 397    {
 398      if (baseInputStream == null) {
 399        throw new ArgumentNullException(nameof(baseInputStream));
 400      }
 401
 402      if (inflater == null) {
 403        throw new ArgumentNullException(nameof(inflater));
 404      }
 405
 406      if (bufferSize <= 0) {
 407        throw new ArgumentOutOfRangeException(nameof(bufferSize));
 408      }
 409
 410      this.baseInputStream = baseInputStream;
 411      this.inf = inflater;
 412
 413      inputBuffer = new InflaterInputBuffer(baseInputStream, bufferSize);
 414    }
 415
 416    #endregion
 417
 418    /// <summary>
 419    /// Get/set flag indicating ownership of underlying stream.
 420    /// When the flag is true <see cref="Close"/> will close the underlying stream also.
 421    /// </summary>
 422    /// <remarks>
 423    /// The default value is true.
 424    /// </remarks>
 425    public bool IsStreamOwner
 426    {
 427      get { return isStreamOwner; }
 428      set { isStreamOwner = value; }
 429    }
 430
 431    /// <summary>
 432    /// Skip specified number of bytes of uncompressed data
 433    /// </summary>
 434    /// <param name ="count">
 435    /// Number of bytes to skip
 436    /// </param>
 437    /// <returns>
 438    /// The number of bytes skipped, zero if the end of
 439    /// stream has been reached
 440    /// </returns>
 441    /// <exception cref="ArgumentOutOfRangeException">
 442    /// <paramref name="count">The number of bytes</paramref> to skip is less than or equal to zero.
 443    /// </exception>
 444    public long Skip(long count)
 445    {
 446      if (count <= 0) {
 447        throw new ArgumentOutOfRangeException(nameof(count));
 448      }
 449
 450      // v0.80 Skip by seeking if underlying stream supports it...
 451      if (baseInputStream.CanSeek) {
 452        baseInputStream.Seek(count, SeekOrigin.Current);
 453        return count;
 454      }
 455      else {
 456        int length = 2048;
 457        if (count < length) {
 458          length = (int) count;
 459        }
 460
 461        byte[] tmp = new byte[length];
 462        int readCount = 1;
 463        long toSkip = count;
 464
 465        while ((toSkip > 0) && (readCount > 0) ) {
 466          if (toSkip < length) {
 467            length = (int)toSkip;
 468          }
 469
 470          readCount = baseInputStream.Read(tmp, 0, length);
 471          toSkip -= readCount;
 472        }
 473
 474        return count - toSkip;
 475      }
 476    }
 477
 478    /// <summary>
 479    /// Clear any cryptographic state.
 480    /// </summary>
 481    protected void StopDecrypting()
 482    {
 483#if !NETCF_1_0
 484      inputBuffer.CryptoTransform = null;
 485#endif
 486    }
 487
 488    /// <summary>
 489    /// Returns 0 once the end of the stream (EOF) has been reached.
 490    /// Otherwise returns 1.
 491    /// </summary>
 492    public virtual int Available
 493    {
 494      get {
 495        return inf.IsFinished ? 0 : 1;
 496      }
 497    }
 498
 499    /// <summary>
 500    /// Fills the buffer with more data to decompress.
 501    /// </summary>
 502    /// <exception cref="SharpZipBaseException">
 503    /// Stream ends early
 504    /// </exception>
 505    protected void Fill()
 506    {
 507      // Protect against redundant calls
 508      if (inputBuffer.Available <= 0) {
 509        inputBuffer.Fill();
 510        if (inputBuffer.Available <= 0) {
 511          throw new SharpZipBaseException("Unexpected EOF");
 512        }
 513      }
 514      inputBuffer.SetInflaterInput(inf);
 515    }
 516
 517    #region Stream Overrides
 518    /// <summary>
 519    /// Gets a value indicating whether the current stream supports reading
 520    /// </summary>
 521    public override bool CanRead
 522    {
 523      get {
 524        return baseInputStream.CanRead;
 525      }
 526    }
 527
 528    /// <summary>
 529    /// Gets a value of false indicating seeking is not supported for this stream.
 530    /// </summary>
 531    public override bool CanSeek {
 532      get {
 533        return false;
 534      }
 535    }
 536
 537    /// <summary>
 538    /// Gets a value of false indicating that this stream is not writeable.
 539    /// </summary>
 540    public override bool CanWrite {
 541      get {
 542        return false;
 543      }
 544    }
 545
 546    /// <summary>
 547    /// A value representing the length of the stream in bytes.
 548    /// </summary>
 549    public override long Length {
 550      get {
 551        return inputBuffer.RawLength;
 552      }
 553    }
 554
 555    /// <summary>
 556    /// The current position within the stream.
 557    /// Throws a NotSupportedException when attempting to set the position
 558    /// </summary>
 559    /// <exception cref="NotSupportedException">Attempting to set the position</exception>
 560    public override long Position {
 561      get {
 562        return baseInputStream.Position;
 563      }
 564      set {
 565        throw new NotSupportedException("InflaterInputStream Position not supported");
 566      }
 567    }
 568
 569    /// <summary>
 570    /// Flushes the baseInputStream
 571    /// </summary>
 572    public override void Flush()
 573    {
 574      baseInputStream.Flush();
 575    }
 576
 577    /// <summary>
 578    /// Sets the position within the current stream
 579    /// Always throws a NotSupportedException
 580    /// </summary>
 581    /// <param name="offset">The relative offset to seek to.</param>
 582    /// <param name="origin">The <see cref="SeekOrigin"/> defining where to seek from.</param>
 583    /// <returns>The new position in the stream.</returns>
 584    /// <exception cref="NotSupportedException">Any access</exception>
 585    public override long Seek(long offset, SeekOrigin origin)
 586    {
 587      throw new NotSupportedException("Seek not supported");
 588    }
 589
 590    /// <summary>
 591    /// Set the length of the current stream
 592    /// Always throws a NotSupportedException
 593    /// </summary>
 594    /// <param name="value">The new length value for the stream.</param>
 595    /// <exception cref="NotSupportedException">Any access</exception>
 596    public override void SetLength(long value)
 597    {
 598      throw new NotSupportedException("InflaterInputStream SetLength not supported");
 599    }
 600
 601    /// <summary>
 602    /// Writes a sequence of bytes to stream and advances the current position
 603    /// This method always throws a NotSupportedException
 604    /// </summary>
 605    /// <param name="buffer">Thew buffer containing data to write.</param>
 606    /// <param name="offset">The offset of the first byte to write.</param>
 607    /// <param name="count">The number of bytes to write.</param>
 608    /// <exception cref="NotSupportedException">Any access</exception>
 609    public override void Write(byte[] buffer, int offset, int count)
 610    {
 611      throw new NotSupportedException("InflaterInputStream Write not supported");
 612    }
 613
 614    /// <summary>
 615    /// Writes one byte to the current stream and advances the current position
 616    /// Always throws a NotSupportedException
 617    /// </summary>
 618    /// <param name="value">The byte to write.</param>
 619    /// <exception cref="NotSupportedException">Any access</exception>
 620    public override void WriteByte(byte value)
 621    {
 622      throw new NotSupportedException("InflaterInputStream WriteByte not supported");
 623    }
 624
 625    /// <summary>
 626    /// Entry point to begin an asynchronous write.  Always throws a NotSupportedException.
 627    /// </summary>
 628    /// <param name="buffer">The buffer to write data from</param>
 629    /// <param name="offset">Offset of first byte to write</param>
 630    /// <param name="count">The maximum number of bytes to write</param>
 631    /// <param name="callback">The method to be called when the asynchronous write operation is completed</param>
 632    /// <param name="state">A user-provided object that distinguishes this particular asynchronous write request from ot
 633    /// <returns>An <see cref="System.IAsyncResult">IAsyncResult</see> that references the asynchronous write</returns>
 634    /// <exception cref="NotSupportedException">Any access</exception>
 635    public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
 636    {
 637      throw new NotSupportedException("InflaterInputStream BeginWrite not supported");
 638    }
 639
 640    /// <summary>
 641    /// Closes the input stream.  When <see cref="IsStreamOwner"></see>
 642    /// is true the underlying stream is also closed.
 643    /// </summary>
 644    public override void Close()
 645    {
 646      if ( !isClosed ) {
 647        isClosed = true;
 648        if ( isStreamOwner ) {
 649          baseInputStream.Close();
 650        }
 651      }
 652    }
 653
 654    /// <summary>
 655    /// Reads decompressed data into the provided buffer byte array
 656    /// </summary>
 657    /// <param name ="buffer">
 658    /// The array to read and decompress data into
 659    /// </param>
 660    /// <param name ="offset">
 661    /// The offset indicating where the data should be placed
 662    /// </param>
 663    /// <param name ="count">
 664    /// The number of bytes to decompress
 665    /// </param>
 666    /// <returns>The number of bytes read.  Zero signals the end of stream</returns>
 667    /// <exception cref="SharpZipBaseException">
 668    /// Inflater needs a dictionary
 669    /// </exception>
 670    public override int Read(byte[] buffer, int offset, int count)
 671    {
 672      if (inf.IsNeedingDictionary)
 673      {
 674        throw new SharpZipBaseException("Need a dictionary");
 675      }
 676
 677      int remainingBytes = count;
 678      while (true) {
 679        int bytesRead = inf.Inflate(buffer, offset, remainingBytes);
 680        offset += bytesRead;
 681        remainingBytes -= bytesRead;
 682
 683        if (remainingBytes == 0 || inf.IsFinished) {
 684          break;
 685        }
 686
 687        if ( inf.IsNeedingInput ) {
 688          Fill();
 689        }
 690        else if ( bytesRead == 0 ) {
 691          throw new ZipException("Dont know what to do");
 692        }
 693      }
 694      return count - remainingBytes;
 695    }
 696    #endregion
 697
 698    #region Instance Fields
 699    /// <summary>
 700    /// Decompressor for this stream
 701    /// </summary>
 702    protected Inflater inf;
 703
 704    /// <summary>
 705    /// <see cref="InflaterInputBuffer">Input buffer</see> for this stream.
 706    /// </summary>
 707    protected InflaterInputBuffer inputBuffer;
 708
 709    /// <summary>
 710    /// Base stream the inflater reads from.
 711    /// </summary>
 712    private Stream baseInputStream;
 713
 714    /// <summary>
 715    /// The compressed size
 716    /// </summary>
 717    protected long csize;
 718
 719    /// <summary>
 720    /// Flag indicating wether this instance has been closed or not.
 721    /// </summary>
 722    bool isClosed;
 723
 724    /// <summary>
 725    /// Flag indicating wether this instance is designated the stream owner.
 726    /// When closing if this flag is true the underlying stream is closed.
 727    /// </summary>
 728    bool isStreamOwner = true;
 729    #endregion
 730  }
 731}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputStream.htm new file mode 100644 index 000000000..86550a7c1 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputStream.htm @@ -0,0 +1,786 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\InflaterInputStream.cs
Covered lines:38
Uncovered lines:37
Coverable lines:75
Total lines:731
Line coverage:50.6%
Branch coverage:42.1%
+

Metrics

+ + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)1100100
.ctor(...)47557.14
Skip(...)700
StopDecrypting()1100100
Fill()383.3380
Flush()100
Seek(...)100
SetLength(...)100
Write(...)100
WriteByte(...)100
BeginWrite(...)100
Close()3100100
Read(...)676.9263.64
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\InflaterInputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// InflaterInputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  11-08-2009  GeoffHart  T9121  Added Multi-member gzip support
 41
 42using System;
 43using System.IO;
 44
 45#if !NETCF_1_0
 46using System.Security.Cryptography;
 47#endif
 48
 49namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams
 50{
 51
 52  /// <summary>
 53  /// An input buffer customised for use by <see cref="InflaterInputStream"/>
 54  /// </summary>
 55  /// <remarks>
 56  /// The buffer supports decryption of incoming data.
 57  /// </remarks>
 58  public class InflaterInputBuffer
 59  {
 60    #region Constructors
 61    /// <summary>
 62    /// Initialise a new instance of <see cref="InflaterInputBuffer"/> with a default buffer size
 63    /// </summary>
 64    /// <param name="stream">The stream to buffer.</param>
 65    public InflaterInputBuffer(Stream stream) : this(stream , 4096)
 66    {
 67    }
 68
 69    /// <summary>
 70    /// Initialise a new instance of <see cref="InflaterInputBuffer"/>
 71    /// </summary>
 72    /// <param name="stream">The stream to buffer.</param>
 73    /// <param name="bufferSize">The size to use for the buffer</param>
 74    /// <remarks>A minimum buffer size of 1KB is permitted.  Lower sizes are treated as 1KB.</remarks>
 75    public InflaterInputBuffer(Stream stream, int bufferSize)
 76    {
 77      inputStream = stream;
 78      if ( bufferSize < 1024 ) {
 79        bufferSize = 1024;
 80      }
 81      rawData = new byte[bufferSize];
 82      clearText = rawData;
 83    }
 84    #endregion
 85
 86    /// <summary>
 87    /// Get the length of bytes bytes in the <see cref="RawData"/>
 88    /// </summary>
 89    public int RawLength
 90    {
 91      get {
 92        return rawLength;
 93      }
 94    }
 95
 96    /// <summary>
 97    /// Get the contents of the raw data buffer.
 98    /// </summary>
 99    /// <remarks>This may contain encrypted data.</remarks>
 100    public byte[] RawData
 101    {
 102      get {
 103        return rawData;
 104      }
 105    }
 106
 107    /// <summary>
 108    /// Get the number of useable bytes in <see cref="ClearText"/>
 109    /// </summary>
 110    public int ClearTextLength
 111    {
 112      get {
 113        return clearTextLength;
 114      }
 115    }
 116
 117    /// <summary>
 118    /// Get the contents of the clear text buffer.
 119    /// </summary>
 120    public byte[] ClearText
 121    {
 122      get {
 123        return clearText;
 124      }
 125    }
 126
 127    /// <summary>
 128    /// Get/set the number of bytes available
 129    /// </summary>
 130    public int Available
 131    {
 132      get { return available; }
 133      set { available = value; }
 134    }
 135
 136    /// <summary>
 137    /// Call <see cref="Inflater.SetInput(byte[], int, int)"/> passing the current clear text buffer contents.
 138    /// </summary>
 139    /// <param name="inflater">The inflater to set input for.</param>
 140    public void SetInflaterInput(Inflater inflater)
 141    {
 142      if ( available > 0 ) {
 143        inflater.SetInput(clearText, clearTextLength - available, available);
 144        available = 0;
 145      }
 146    }
 147
 148    /// <summary>
 149    /// Fill the buffer from the underlying input stream.
 150    /// </summary>
 151    public void Fill()
 152    {
 153      rawLength = 0;
 154      int toRead = rawData.Length;
 155
 156      while (toRead > 0) {
 157        int count = inputStream.Read(rawData, rawLength, toRead);
 158        if ( count <= 0 ) {
 159          break;
 160        }
 161        rawLength += count;
 162        toRead -= count;
 163      }
 164
 165#if !NETCF_1_0
 166      if ( cryptoTransform != null ) {
 167        clearTextLength = cryptoTransform.TransformBlock(rawData, 0, rawLength, clearText, 0);
 168      }
 169      else
 170#endif
 171      {
 172        clearTextLength = rawLength;
 173      }
 174
 175      available = clearTextLength;
 176    }
 177
 178    /// <summary>
 179    /// Read a buffer directly from the input stream
 180    /// </summary>
 181    /// <param name="buffer">The buffer to fill</param>
 182    /// <returns>Returns the number of bytes read.</returns>
 183    public int ReadRawBuffer(byte[] buffer)
 184    {
 185      return ReadRawBuffer(buffer, 0, buffer.Length);
 186    }
 187
 188    /// <summary>
 189    /// Read a buffer directly from the input stream
 190    /// </summary>
 191    /// <param name="outBuffer">The buffer to read into</param>
 192    /// <param name="offset">The offset to start reading data into.</param>
 193    /// <param name="length">The number of bytes to read.</param>
 194    /// <returns>Returns the number of bytes read.</returns>
 195    public int ReadRawBuffer(byte[] outBuffer, int offset, int length)
 196    {
 197      if ( length < 0 ) {
 198        throw new ArgumentOutOfRangeException(nameof(length));
 199      }
 200
 201      int currentOffset = offset;
 202      int currentLength = length;
 203
 204      while ( currentLength > 0 ) {
 205        if ( available <= 0 ) {
 206          Fill();
 207          if (available <= 0) {
 208            return 0;
 209          }
 210        }
 211        int toCopy = Math.Min(currentLength, available);
 212        System.Array.Copy(rawData, rawLength - (int)available, outBuffer, currentOffset, toCopy);
 213        currentOffset += toCopy;
 214        currentLength -= toCopy;
 215        available -= toCopy;
 216      }
 217      return length;
 218    }
 219
 220    /// <summary>
 221    /// Read clear text data from the input stream.
 222    /// </summary>
 223    /// <param name="outBuffer">The buffer to add data to.</param>
 224    /// <param name="offset">The offset to start adding data at.</param>
 225    /// <param name="length">The number of bytes to read.</param>
 226    /// <returns>Returns the number of bytes actually read.</returns>
 227    public int ReadClearTextBuffer(byte[] outBuffer, int offset, int length)
 228    {
 229      if ( length < 0 ) {
 230        throw new ArgumentOutOfRangeException(nameof(length));
 231      }
 232
 233      int currentOffset = offset;
 234      int currentLength = length;
 235
 236      while ( currentLength > 0 ) {
 237        if ( available <= 0 ) {
 238          Fill();
 239          if (available <= 0) {
 240            return 0;
 241          }
 242        }
 243
 244        int toCopy = Math.Min(currentLength, available);
 245        Array.Copy(clearText, clearTextLength - (int)available, outBuffer, currentOffset, toCopy);
 246        currentOffset += toCopy;
 247        currentLength -= toCopy;
 248        available -= toCopy;
 249      }
 250      return length;
 251    }
 252
 253    /// <summary>
 254    /// Read a <see cref="byte"/> from the input stream.
 255    /// </summary>
 256    /// <returns>Returns the byte read.</returns>
 257    public int ReadLeByte()
 258    {
 259      if (available <= 0) {
 260        Fill();
 261        if (available <= 0) {
 262          throw new ZipException("EOF in header");
 263        }
 264      }
 265      byte result = rawData[rawLength - available];
 266      available -= 1;
 267      return result;
 268    }
 269
 270    /// <summary>
 271    /// Read an <see cref="short"/> in little endian byte order.
 272    /// </summary>
 273    /// <returns>The short value read case to an int.</returns>
 274    public int ReadLeShort()
 275    {
 276      return ReadLeByte() | (ReadLeByte() << 8);
 277    }
 278
 279    /// <summary>
 280    /// Read an <see cref="int"/> in little endian byte order.
 281    /// </summary>
 282    /// <returns>The int value read.</returns>
 283    public int ReadLeInt()
 284    {
 285      return ReadLeShort() | (ReadLeShort() << 16);
 286    }
 287
 288    /// <summary>
 289    /// Read a <see cref="long"/> in little endian byte order.
 290    /// </summary>
 291    /// <returns>The long value read.</returns>
 292    public long ReadLeLong()
 293    {
 294      return (uint)ReadLeInt() | ((long)ReadLeInt() << 32);
 295    }
 296
 297#if !NETCF_1_0
 298    /// <summary>
 299    /// Get/set the <see cref="ICryptoTransform"/> to apply to any data.
 300    /// </summary>
 301    /// <remarks>Set this value to null to have no transform applied.</remarks>
 302    public ICryptoTransform CryptoTransform
 303    {
 304      set {
 305        cryptoTransform = value;
 306        if ( cryptoTransform != null ) {
 307          if ( rawData == clearText ) {
 308            if ( internalClearText == null ) {
 309              internalClearText = new byte[rawData.Length];
 310            }
 311            clearText = internalClearText;
 312          }
 313          clearTextLength = rawLength;
 314          if ( available > 0 ) {
 315            cryptoTransform.TransformBlock(rawData, rawLength - available, available, clearText, rawLength - available);
 316          }
 317        } else {
 318          clearText = rawData;
 319          clearTextLength = rawLength;
 320        }
 321      }
 322    }
 323#endif
 324
 325    #region Instance Fields
 326    int rawLength;
 327    byte[] rawData;
 328
 329    int clearTextLength;
 330    byte[] clearText;
 331#if !NETCF_1_0
 332    byte[] internalClearText;
 333#endif
 334
 335    int available;
 336
 337#if !NETCF_1_0
 338    ICryptoTransform cryptoTransform;
 339#endif
 340    Stream inputStream;
 341    #endregion
 342  }
 343
 344  /// <summary>
 345  /// This filter stream is used to decompress data compressed using the "deflate"
 346  /// format. The "deflate" format is described in RFC 1951.
 347  ///
 348  /// This stream may form the basis for other decompression filters, such
 349  /// as the <see cref="ICSharpCode.SharpZipLib.GZip.GZipInputStream">GZipInputStream</see>.
 350  ///
 351  /// Author of the original java version : John Leuner.
 352  /// </summary>
 353  public class InflaterInputStream : Stream
 354  {
 355    #region Constructors
 356    /// <summary>
 357    /// Create an InflaterInputStream with the default decompressor
 358    /// and a default buffer size of 4KB.
 359    /// </summary>
 360    /// <param name = "baseInputStream">
 361    /// The InputStream to read bytes from
 362    /// </param>
 363    public InflaterInputStream(Stream baseInputStream)
 3364      : this(baseInputStream, new Inflater(), 4096)
 365    {
 3366    }
 367
 368    /// <summary>
 369    /// Create an InflaterInputStream with the specified decompressor
 370    /// and a default buffer size of 4KB.
 371    /// </summary>
 372    /// <param name = "baseInputStream">
 373    /// The source of input data
 374    /// </param>
 375    /// <param name = "inf">
 376    /// The decompressor used to decompress data read from baseInputStream
 377    /// </param>
 378    public InflaterInputStream(Stream baseInputStream, Inflater inf)
 434379      : this(baseInputStream, inf, 4096)
 380    {
 434381    }
 382
 383    /// <summary>
 384    /// Create an InflaterInputStream with the specified decompressor
 385    /// and the specified buffer size.
 386    /// </summary>
 387    /// <param name = "baseInputStream">
 388    /// The InputStream to read bytes from
 389    /// </param>
 390    /// <param name = "inflater">
 391    /// The decompressor to use
 392    /// </param>
 393    /// <param name = "bufferSize">
 394    /// Size of the buffer to use
 395    /// </param>
 441396    public InflaterInputStream(Stream baseInputStream, Inflater inflater, int bufferSize)
 397    {
 441398       if (baseInputStream == null) {
 0399        throw new ArgumentNullException(nameof(baseInputStream));
 400      }
 401
 441402       if (inflater == null) {
 0403        throw new ArgumentNullException(nameof(inflater));
 404      }
 405
 441406       if (bufferSize <= 0) {
 0407        throw new ArgumentOutOfRangeException(nameof(bufferSize));
 408      }
 409
 441410      this.baseInputStream = baseInputStream;
 441411      this.inf = inflater;
 412
 441413      inputBuffer = new InflaterInputBuffer(baseInputStream, bufferSize);
 441414    }
 415
 416    #endregion
 417
 418    /// <summary>
 419    /// Get/set flag indicating ownership of underlying stream.
 420    /// When the flag is true <see cref="Close"/> will close the underlying stream also.
 421    /// </summary>
 422    /// <remarks>
 423    /// The default value is true.
 424    /// </remarks>
 425    public bool IsStreamOwner
 426    {
 0427      get { return isStreamOwner; }
 4428      set { isStreamOwner = value; }
 429    }
 430
 431    /// <summary>
 432    /// Skip specified number of bytes of uncompressed data
 433    /// </summary>
 434    /// <param name ="count">
 435    /// Number of bytes to skip
 436    /// </param>
 437    /// <returns>
 438    /// The number of bytes skipped, zero if the end of
 439    /// stream has been reached
 440    /// </returns>
 441    /// <exception cref="ArgumentOutOfRangeException">
 442    /// <paramref name="count">The number of bytes</paramref> to skip is less than or equal to zero.
 443    /// </exception>
 444    public long Skip(long count)
 445    {
 0446       if (count <= 0) {
 0447        throw new ArgumentOutOfRangeException(nameof(count));
 448      }
 449
 450      // v0.80 Skip by seeking if underlying stream supports it...
 0451       if (baseInputStream.CanSeek) {
 0452        baseInputStream.Seek(count, SeekOrigin.Current);
 0453        return count;
 454      }
 455      else {
 0456        int length = 2048;
 0457         if (count < length) {
 0458          length = (int) count;
 459        }
 460
 0461        byte[] tmp = new byte[length];
 0462        int readCount = 1;
 0463        long toSkip = count;
 464
 0465         while ((toSkip > 0) && (readCount > 0) ) {
 0466           if (toSkip < length) {
 0467            length = (int)toSkip;
 468          }
 469
 0470          readCount = baseInputStream.Read(tmp, 0, length);
 0471          toSkip -= readCount;
 472        }
 473
 0474        return count - toSkip;
 475      }
 476    }
 477
 478    /// <summary>
 479    /// Clear any cryptographic state.
 480    /// </summary>
 481    protected void StopDecrypting()
 482    {
 483#if !NETCF_1_0
 33484      inputBuffer.CryptoTransform = null;
 485#endif
 33486    }
 487
 488    /// <summary>
 489    /// Returns 0 once the end of the stream (EOF) has been reached.
 490    /// Otherwise returns 1.
 491    /// </summary>
 492    public virtual int Available
 493    {
 494      get {
 0495         return inf.IsFinished ? 0 : 1;
 496      }
 497    }
 498
 499    /// <summary>
 500    /// Fills the buffer with more data to decompress.
 501    /// </summary>
 502    /// <exception cref="SharpZipBaseException">
 503    /// Stream ends early
 504    /// </exception>
 505    protected void Fill()
 506    {
 507      // Protect against redundant calls
 1392508       if (inputBuffer.Available <= 0) {
 1391509        inputBuffer.Fill();
 1391510         if (inputBuffer.Available <= 0) {
 0511          throw new SharpZipBaseException("Unexpected EOF");
 512        }
 513      }
 1392514      inputBuffer.SetInflaterInput(inf);
 1392515    }
 516
 517    #region Stream Overrides
 518    /// <summary>
 519    /// Gets a value indicating whether the current stream supports reading
 520    /// </summary>
 521    public override bool CanRead
 522    {
 523      get {
 9524        return baseInputStream.CanRead;
 525      }
 526    }
 527
 528    /// <summary>
 529    /// Gets a value of false indicating seeking is not supported for this stream.
 530    /// </summary>
 531    public override bool CanSeek {
 532      get {
 3533        return false;
 534      }
 535    }
 536
 537    /// <summary>
 538    /// Gets a value of false indicating that this stream is not writeable.
 539    /// </summary>
 540    public override bool CanWrite {
 541      get {
 0542        return false;
 543      }
 544    }
 545
 546    /// <summary>
 547    /// A value representing the length of the stream in bytes.
 548    /// </summary>
 549    public override long Length {
 550      get {
 0551        return inputBuffer.RawLength;
 552      }
 553    }
 554
 555    /// <summary>
 556    /// The current position within the stream.
 557    /// Throws a NotSupportedException when attempting to set the position
 558    /// </summary>
 559    /// <exception cref="NotSupportedException">Attempting to set the position</exception>
 560    public override long Position {
 561      get {
 0562        return baseInputStream.Position;
 563      }
 564      set {
 0565        throw new NotSupportedException("InflaterInputStream Position not supported");
 566      }
 567    }
 568
 569    /// <summary>
 570    /// Flushes the baseInputStream
 571    /// </summary>
 572    public override void Flush()
 573    {
 0574      baseInputStream.Flush();
 0575    }
 576
 577    /// <summary>
 578    /// Sets the position within the current stream
 579    /// Always throws a NotSupportedException
 580    /// </summary>
 581    /// <param name="offset">The relative offset to seek to.</param>
 582    /// <param name="origin">The <see cref="SeekOrigin"/> defining where to seek from.</param>
 583    /// <returns>The new position in the stream.</returns>
 584    /// <exception cref="NotSupportedException">Any access</exception>
 585    public override long Seek(long offset, SeekOrigin origin)
 586    {
 0587      throw new NotSupportedException("Seek not supported");
 588    }
 589
 590    /// <summary>
 591    /// Set the length of the current stream
 592    /// Always throws a NotSupportedException
 593    /// </summary>
 594    /// <param name="value">The new length value for the stream.</param>
 595    /// <exception cref="NotSupportedException">Any access</exception>
 596    public override void SetLength(long value)
 597    {
 0598      throw new NotSupportedException("InflaterInputStream SetLength not supported");
 599    }
 600
 601    /// <summary>
 602    /// Writes a sequence of bytes to stream and advances the current position
 603    /// This method always throws a NotSupportedException
 604    /// </summary>
 605    /// <param name="buffer">Thew buffer containing data to write.</param>
 606    /// <param name="offset">The offset of the first byte to write.</param>
 607    /// <param name="count">The number of bytes to write.</param>
 608    /// <exception cref="NotSupportedException">Any access</exception>
 609    public override void Write(byte[] buffer, int offset, int count)
 610    {
 0611      throw new NotSupportedException("InflaterInputStream Write not supported");
 612    }
 613
 614    /// <summary>
 615    /// Writes one byte to the current stream and advances the current position
 616    /// Always throws a NotSupportedException
 617    /// </summary>
 618    /// <param name="value">The byte to write.</param>
 619    /// <exception cref="NotSupportedException">Any access</exception>
 620    public override void WriteByte(byte value)
 621    {
 0622      throw new NotSupportedException("InflaterInputStream WriteByte not supported");
 623    }
 624
 625    /// <summary>
 626    /// Entry point to begin an asynchronous write.  Always throws a NotSupportedException.
 627    /// </summary>
 628    /// <param name="buffer">The buffer to write data from</param>
 629    /// <param name="offset">Offset of first byte to write</param>
 630    /// <param name="count">The maximum number of bytes to write</param>
 631    /// <param name="callback">The method to be called when the asynchronous write operation is completed</param>
 632    /// <param name="state">A user-provided object that distinguishes this particular asynchronous write request from ot
 633    /// <returns>An <see cref="System.IAsyncResult">IAsyncResult</see> that references the asynchronous write</returns>
 634    /// <exception cref="NotSupportedException">Any access</exception>
 635    public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
 636    {
 0637      throw new NotSupportedException("InflaterInputStream BeginWrite not supported");
 638    }
 639
 640    /// <summary>
 641    /// Closes the input stream.  When <see cref="IsStreamOwner"></see>
 642    /// is true the underlying stream is also closed.
 643    /// </summary>
 644    public override void Close()
 645    {
 395646       if ( !isClosed ) {
 385647        isClosed = true;
 385648         if ( isStreamOwner ) {
 383649          baseInputStream.Close();
 650        }
 651      }
 395652    }
 653
 654    /// <summary>
 655    /// Reads decompressed data into the provided buffer byte array
 656    /// </summary>
 657    /// <param name ="buffer">
 658    /// The array to read and decompress data into
 659    /// </param>
 660    /// <param name ="offset">
 661    /// The offset indicating where the data should be placed
 662    /// </param>
 663    /// <param name ="count">
 664    /// The number of bytes to decompress
 665    /// </param>
 666    /// <returns>The number of bytes read.  Zero signals the end of stream</returns>
 667    /// <exception cref="SharpZipBaseException">
 668    /// Inflater needs a dictionary
 669    /// </exception>
 670    public override int Read(byte[] buffer, int offset, int count)
 671    {
 855672       if (inf.IsNeedingDictionary)
 673      {
 0674        throw new SharpZipBaseException("Need a dictionary");
 675      }
 676
 855677      int remainingBytes = count;
 678      while (true) {
 2247679        int bytesRead = inf.Inflate(buffer, offset, remainingBytes);
 2247680        offset += bytesRead;
 2247681        remainingBytes -= bytesRead;
 682
 2247683         if (remainingBytes == 0 || inf.IsFinished) {
 684          break;
 685        }
 686
 1392687         if ( inf.IsNeedingInput ) {
 1392688          Fill();
 1392689        }
 0690         else if ( bytesRead == 0 ) {
 0691          throw new ZipException("Dont know what to do");
 692        }
 693      }
 855694      return count - remainingBytes;
 695    }
 696    #endregion
 697
 698    #region Instance Fields
 699    /// <summary>
 700    /// Decompressor for this stream
 701    /// </summary>
 702    protected Inflater inf;
 703
 704    /// <summary>
 705    /// <see cref="InflaterInputBuffer">Input buffer</see> for this stream.
 706    /// </summary>
 707    protected InflaterInputBuffer inputBuffer;
 708
 709    /// <summary>
 710    /// Base stream the inflater reads from.
 711    /// </summary>
 712    private Stream baseInputStream;
 713
 714    /// <summary>
 715    /// The compressed size
 716    /// </summary>
 717    protected long csize;
 718
 719    /// <summary>
 720    /// Flag indicating wether this instance has been closed or not.
 721    /// </summary>
 722    bool isClosed;
 723
 724    /// <summary>
 725    /// Flag indicating wether this instance is designated the stream owner.
 726    /// When closing if this flag is true the underlying stream is closed.
 727    /// </summary>
 441728    bool isStreamOwner = true;
 729    #endregion
 730  }
 731}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_InvalidHeaderException.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_InvalidHeaderException.htm new file mode 100644 index 000000000..47252f573 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_InvalidHeaderException.htm @@ -0,0 +1,153 @@ + + + + +ICSharpCode.SharpZipLib.Tar.InvalidHeaderException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.InvalidHeaderException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\InvalidHeaderException.cs
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:109
Line coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\InvalidHeaderException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// InvalidHeaderException.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37
 38#if !NETCF_1_0 && !NETCF_2_0
 39using System.Runtime.Serialization;
 40#endif
 41
 42namespace ICSharpCode.SharpZipLib.Tar {
 43
 44  /// <summary>
 45  /// This exception is used to indicate that there is a problem
 46  /// with a TAR archive header.
 47  /// </summary>
 48#if !NETCF_1_0 && !NETCF_2_0
 49  [Serializable]
 50#endif
 51  public class InvalidHeaderException : TarException
 52  {
 53
 54#if !NETCF_1_0 && !NETCF_2_0
 55    /// <summary>
 56    /// Deserialization constructor
 57    /// </summary>
 58    /// <param name="information"><see cref="SerializationInfo"/> for this constructor</param>
 59    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 60    protected InvalidHeaderException(SerializationInfo information, StreamingContext context)
 061      : base(information, context)
 62
 63    {
 064    }
 65#endif
 66
 67    /// <summary>
 68    /// Initialise a new instance of the InvalidHeaderException class.
 69    /// </summary>
 070    public InvalidHeaderException()
 71    {
 072    }
 73
 74    /// <summary>
 75    /// Initialises a new instance of the InvalidHeaderException class with a specified message.
 76    /// </summary>
 77    /// <param name="message">Message describing the exception cause.</param>
 78    public InvalidHeaderException(string message)
 079      : base(message)
 80    {
 081    }
 82
 83    /// <summary>
 84    /// Initialise a new instance of InvalidHeaderException
 85    /// </summary>
 86    /// <param name="message">Message describing the problem.</param>
 87    /// <param name="exception">The exception that is the cause of the current exception.</param>
 88    public InvalidHeaderException(string message, Exception exception)
 089      : base(message, exception)
 90    {
 091    }
 92  }
 93}
 94
 95/* The original Java file had this header:
 96** Authored by Timothy Gerard Endres
 97** <mailto:time@gjt.org>  <http://www.trustice.com>
 98**
 99** This work has been placed into the public domain.
 100** You may use this work in any way and for any purpose you wish.
 101**
 102** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
 103** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
 104** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
 105** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
 106** REDISTRIBUTION OF THIS SOFTWARE.
 107**
 108*/
 109
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_KeysRequiredEventArgs.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_KeysRequiredEventArgs.htm new file mode 100644 index 000000000..fae085340 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_KeysRequiredEventArgs.htm @@ -0,0 +1,4518 @@ + + + + +ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs
Covered lines:0
Uncovered lines:10
Coverable lines:10
Total lines:4476
Line coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipFile.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-03-02  Z-1650  Fixed updating ODT archives in memory. Exposed exceptions in updating.
 42//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 43//  2012-11-29  Z-1684  Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp
 44
 45using System;
 46using System.Collections;
 47using System.IO;
 48using System.Text;
 49using System.Globalization;
 50
 51#if !NETCF_1_0
 52using System.Security.Cryptography;
 53using ICSharpCode.SharpZipLib.Encryption;
 54#endif
 55
 56using ICSharpCode.SharpZipLib.Core;
 57using ICSharpCode.SharpZipLib.Checksums;
 58using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 59using ICSharpCode.SharpZipLib.Zip.Compression;
 60
 61namespace ICSharpCode.SharpZipLib.Zip
 62{
 63  #region Keys Required Event Args
 64  /// <summary>
 65  /// Arguments used with KeysRequiredEvent
 66  /// </summary>
 67  public class KeysRequiredEventArgs : EventArgs
 68  {
 69    #region Constructors
 70    /// <summary>
 71    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 72    /// </summary>
 73    /// <param name="name">The name of the file for which keys are required.</param>
 074    public KeysRequiredEventArgs(string name)
 75    {
 076      fileName = name;
 077    }
 78
 79    /// <summary>
 80    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 81    /// </summary>
 82    /// <param name="name">The name of the file for which keys are required.</param>
 83    /// <param name="keyValue">The current key value.</param>
 084    public KeysRequiredEventArgs(string name, byte[] keyValue)
 85    {
 086      fileName = name;
 087      key = keyValue;
 088    }
 89
 90    #endregion
 91    #region Properties
 92    /// <summary>
 93    /// Gets the name of the file for which keys are required.
 94    /// </summary>
 95    public string FileName
 96    {
 097      get { return fileName; }
 98    }
 99
 100    /// <summary>
 101    /// Gets or sets the key value
 102    /// </summary>
 103    public byte[] Key
 104    {
 0105      get { return key; }
 0106      set { key = value; }
 107    }
 108    #endregion
 109
 110    #region Instance Fields
 111    string fileName;
 112    byte[] key;
 113    #endregion
 114  }
 115  #endregion
 116
 117  #region Test Definitions
 118  /// <summary>
 119  /// The strategy to apply to testing.
 120  /// </summary>
 121  public enum TestStrategy
 122  {
 123    /// <summary>
 124    /// Find the first error only.
 125    /// </summary>
 126    FindFirstError,
 127    /// <summary>
 128    /// Find all possible errors.
 129    /// </summary>
 130    FindAllErrors,
 131  }
 132
 133  /// <summary>
 134  /// The operation in progress reported by a <see cref="ZipTestResultHandler"/> during testing.
 135  /// </summary>
 136  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 137  public enum TestOperation
 138  {
 139    /// <summary>
 140    /// Setting up testing.
 141    /// </summary>
 142    Initialising,
 143
 144    /// <summary>
 145    /// Testing an individual entries header
 146    /// </summary>
 147    EntryHeader,
 148
 149    /// <summary>
 150    /// Testing an individual entries data
 151    /// </summary>
 152    EntryData,
 153
 154    /// <summary>
 155    /// Testing an individual entry has completed.
 156    /// </summary>
 157    EntryComplete,
 158
 159    /// <summary>
 160    /// Running miscellaneous tests
 161    /// </summary>
 162    MiscellaneousTests,
 163
 164    /// <summary>
 165    /// Testing is complete
 166    /// </summary>
 167    Complete,
 168  }
 169
 170  /// <summary>
 171  /// Status returned returned by <see cref="ZipTestResultHandler"/> during testing.
 172  /// </summary>
 173  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 174  public class TestStatus
 175  {
 176    #region Constructors
 177    /// <summary>
 178    /// Initialise a new instance of <see cref="TestStatus"/>
 179    /// </summary>
 180    /// <param name="file">The <see cref="ZipFile"/> this status applies to.</param>
 181    public TestStatus(ZipFile file)
 182    {
 183      file_ = file;
 184    }
 185    #endregion
 186
 187    #region Properties
 188
 189    /// <summary>
 190    /// Get the current <see cref="TestOperation"/> in progress.
 191    /// </summary>
 192    public TestOperation Operation
 193    {
 194      get { return operation_; }
 195    }
 196
 197    /// <summary>
 198    /// Get the <see cref="ZipFile"/> this status is applicable to.
 199    /// </summary>
 200    public ZipFile File
 201    {
 202      get { return file_; }
 203    }
 204
 205    /// <summary>
 206    /// Get the current/last entry tested.
 207    /// </summary>
 208    public ZipEntry Entry
 209    {
 210      get { return entry_; }
 211    }
 212
 213    /// <summary>
 214    /// Get the number of errors detected so far.
 215    /// </summary>
 216    public int ErrorCount
 217    {
 218      get { return errorCount_; }
 219    }
 220
 221    /// <summary>
 222    /// Get the number of bytes tested so far for the current entry.
 223    /// </summary>
 224    public long BytesTested
 225    {
 226      get { return bytesTested_; }
 227    }
 228
 229    /// <summary>
 230    /// Get a value indicating wether the last entry test was valid.
 231    /// </summary>
 232    public bool EntryValid
 233    {
 234      get { return entryValid_; }
 235    }
 236    #endregion
 237
 238    #region Internal API
 239    internal void AddError()
 240    {
 241      errorCount_++;
 242      entryValid_ = false;
 243    }
 244
 245    internal void SetOperation(TestOperation operation)
 246    {
 247      operation_ = operation;
 248    }
 249
 250    internal void SetEntry(ZipEntry entry)
 251    {
 252      entry_ = entry;
 253      entryValid_ = true;
 254      bytesTested_ = 0;
 255    }
 256
 257    internal void SetBytesTested(long value)
 258    {
 259      bytesTested_ = value;
 260    }
 261    #endregion
 262
 263    #region Instance Fields
 264    ZipFile file_;
 265    ZipEntry entry_;
 266    bool entryValid_;
 267    int errorCount_;
 268    long bytesTested_;
 269    TestOperation operation_;
 270    #endregion
 271  }
 272
 273  /// <summary>
 274  /// Delegate invoked during <see cref="ZipFile.TestArchive(bool, TestStrategy, ZipTestResultHandler)">testing</see> if
 275  /// </summary>
 276  /// <remarks>If the message is non-null an error has occured.  If the message is null
 277  /// the operation as found in <see cref="TestStatus">status</see> has started.</remarks>
 278  public delegate void ZipTestResultHandler(TestStatus status, string message);
 279  #endregion
 280
 281  #region Update Definitions
 282  /// <summary>
 283  /// The possible ways of <see cref="ZipFile.CommitUpdate()">applying updates</see> to an archive.
 284  /// </summary>
 285  public enum FileUpdateMode
 286  {
 287    /// <summary>
 288    /// Perform all updates on temporary files ensuring that the original file is saved.
 289    /// </summary>
 290    Safe,
 291    /// <summary>
 292    /// Update the archive directly, which is faster but less safe.
 293    /// </summary>
 294    Direct,
 295  }
 296  #endregion
 297
 298  #region ZipFile Class
 299  /// <summary>
 300  /// This class represents a Zip archive.  You can ask for the contained
 301  /// entries, or get an input stream for a file entry.  The entry is
 302  /// automatically decompressed.
 303  ///
 304  /// You can also update the archive adding or deleting entries.
 305  ///
 306  /// This class is thread safe for input:  You can open input streams for arbitrary
 307  /// entries in different threads.
 308  /// <br/>
 309  /// <br/>Author of the original java version : Jochen Hoenicke
 310  /// </summary>
 311  /// <example>
 312  /// <code>
 313  /// using System;
 314  /// using System.Text;
 315  /// using System.Collections;
 316  /// using System.IO;
 317  ///
 318  /// using ICSharpCode.SharpZipLib.Zip;
 319  ///
 320  /// class MainClass
 321  /// {
 322  ///   static public void Main(string[] args)
 323  ///   {
 324  ///     using (ZipFile zFile = new ZipFile(args[0])) {
 325  ///       Console.WriteLine("Listing of : " + zFile.Name);
 326  ///       Console.WriteLine("");
 327  ///       Console.WriteLine("Raw Size    Size      Date     Time     Name");
 328  ///       Console.WriteLine("--------  --------  --------  ------  ---------");
 329  ///       foreach (ZipEntry e in zFile) {
 330  ///         if ( e.IsFile ) {
 331  ///           DateTime d = e.DateTime;
 332  ///           Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
 333  ///             d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
 334  ///             e.Name);
 335  ///         }
 336  ///       }
 337  ///     }
 338  ///   }
 339  /// }
 340  /// </code>
 341  /// </example>
 342  public class ZipFile : IEnumerable, IDisposable
 343  {
 344    #region KeyHandling
 345
 346    /// <summary>
 347    /// Delegate for handling keys/password setting during compresion/decompression.
 348    /// </summary>
 349    public delegate void KeysRequiredEventHandler(
 350      object sender,
 351      KeysRequiredEventArgs e
 352    );
 353
 354    /// <summary>
 355    /// Event handler for handling encryption keys.
 356    /// </summary>
 357    public KeysRequiredEventHandler KeysRequired;
 358
 359    /// <summary>
 360    /// Handles getting of encryption keys when required.
 361    /// </summary>
 362    /// <param name="fileName">The file for which encryption keys are required.</param>
 363    void OnKeysRequired(string fileName)
 364    {
 365      if (KeysRequired != null) {
 366        var krea = new KeysRequiredEventArgs(fileName, key);
 367        KeysRequired(this, krea);
 368        key = krea.Key;
 369      }
 370    }
 371
 372    /// <summary>
 373    /// Get/set the encryption key value.
 374    /// </summary>
 375    byte[] Key
 376    {
 377      get { return key; }
 378      set { key = value; }
 379    }
 380
 381#if !NETCF_1_0
 382    /// <summary>
 383    /// Password to be used for encrypting/decrypting files.
 384    /// </summary>
 385    /// <remarks>Set to null if no password is required.</remarks>
 386    public string Password
 387    {
 388      set
 389      {
 390        if ( string.IsNullOrEmpty(value)) {
 391          key = null;
 392        }
 393        else {
 394          rawPassword_ = value;
 395          key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value));
 396        }
 397      }
 398    }
 399#endif
 400
 401    /// <summary>
 402    /// Get a value indicating wether encryption keys are currently available.
 403    /// </summary>
 404    bool HaveKeys
 405    {
 406      get { return key != null; }
 407    }
 408    #endregion
 409
 410    #region Constructors
 411    /// <summary>
 412    /// Opens a Zip file with the given name for reading.
 413    /// </summary>
 414    /// <param name="name">The name of the file to open.</param>
 415    /// <exception cref="ArgumentNullException">The argument supplied is null.</exception>
 416    /// <exception cref="IOException">
 417    /// An i/o error occurs
 418    /// </exception>
 419    /// <exception cref="ZipException">
 420    /// The file doesn't contain a valid zip archive.
 421    /// </exception>
 422    public ZipFile(string name)
 423    {
 424      if ( name == null ) {
 425        throw new ArgumentNullException(nameof(name));
 426      }
 427
 428      name_ = name;
 429
 430      baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 431      isStreamOwner = true;
 432
 433      try {
 434        ReadEntries();
 435      }
 436      catch {
 437        DisposeInternal(true);
 438        throw;
 439      }
 440    }
 441
 442    /// <summary>
 443    /// Opens a Zip file reading the given <see cref="FileStream"/>.
 444    /// </summary>
 445    /// <param name="file">The <see cref="FileStream"/> to read archive data from.</param>
 446    /// <exception cref="ArgumentNullException">The supplied argument is null.</exception>
 447    /// <exception cref="IOException">
 448    /// An i/o error occurs.
 449    /// </exception>
 450    /// <exception cref="ZipException">
 451    /// The file doesn't contain a valid zip archive.
 452    /// </exception>
 453    public ZipFile(FileStream file)
 454    {
 455      if ( file == null ) {
 456        throw new ArgumentNullException(nameof(file));
 457      }
 458
 459      if ( !file.CanSeek ) {
 460        throw new ArgumentException("Stream is not seekable", nameof(file));
 461      }
 462
 463      baseStream_  = file;
 464      name_ = file.Name;
 465      isStreamOwner = true;
 466
 467      try {
 468        ReadEntries();
 469      }
 470      catch {
 471        DisposeInternal(true);
 472        throw;
 473      }
 474    }
 475
 476    /// <summary>
 477    /// Opens a Zip file reading the given <see cref="Stream"/>.
 478    /// </summary>
 479    /// <param name="stream">The <see cref="Stream"/> to read archive data from.</param>
 480    /// <exception cref="IOException">
 481    /// An i/o error occurs
 482    /// </exception>
 483    /// <exception cref="ZipException">
 484    /// The stream doesn't contain a valid zip archive.<br/>
 485    /// </exception>
 486    /// <exception cref="ArgumentException">
 487    /// The <see cref="Stream">stream</see> doesnt support seeking.
 488    /// </exception>
 489    /// <exception cref="ArgumentNullException">
 490    /// The <see cref="Stream">stream</see> argument is null.
 491    /// </exception>
 492    public ZipFile(Stream stream)
 493    {
 494      if ( stream == null ) {
 495        throw new ArgumentNullException(nameof(stream));
 496      }
 497
 498      if ( !stream.CanSeek ) {
 499        throw new ArgumentException("Stream is not seekable", nameof(stream));
 500      }
 501
 502      baseStream_  = stream;
 503      isStreamOwner = true;
 504
 505      if ( baseStream_.Length > 0 ) {
 506        try {
 507          ReadEntries();
 508        }
 509        catch {
 510          DisposeInternal(true);
 511          throw;
 512        }
 513      } else {
 514        entries_ = new ZipEntry[0];
 515        isNewArchive_ = true;
 516      }
 517    }
 518
 519    /// <summary>
 520    /// Initialises a default <see cref="ZipFile"/> instance with no entries and no file storage.
 521    /// </summary>
 522    internal ZipFile()
 523    {
 524      entries_ = new ZipEntry[0];
 525      isNewArchive_ = true;
 526    }
 527
 528    #endregion
 529
 530    #region Destructors and Closing
 531    /// <summary>
 532    /// Finalize this instance.
 533    /// </summary>
 534    ~ZipFile()
 535    {
 536      Dispose(false);
 537    }
 538
 539    /// <summary>
 540    /// Closes the ZipFile.  If the stream is <see cref="IsStreamOwner">owned</see> then this also closes the underlying
 541    /// Once closed, no further instance methods should be called.
 542    /// </summary>
 543    /// <exception cref="System.IO.IOException">
 544    /// An i/o error occurs.
 545    /// </exception>
 546    public void Close()
 547    {
 548      DisposeInternal(true);
 549      GC.SuppressFinalize(this);
 550    }
 551
 552    #endregion
 553
 554    #region Creators
 555    /// <summary>
 556    /// Create a new <see cref="ZipFile"/> whose data will be stored in a file.
 557    /// </summary>
 558    /// <param name="fileName">The name of the archive to create.</param>
 559    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 560    /// <exception cref="ArgumentNullException"><paramref name="fileName"></paramref> is null</exception>
 561    public static ZipFile Create(string fileName)
 562    {
 563      if ( fileName == null ) {
 564        throw new ArgumentNullException(nameof(fileName));
 565      }
 566
 567      FileStream fs = File.Create(fileName);
 568
 569      var result = new ZipFile();
 570      result.name_ = fileName;
 571      result.baseStream_ = fs;
 572      result.isStreamOwner = true;
 573      return result;
 574    }
 575
 576    /// <summary>
 577    /// Create a new <see cref="ZipFile"/> whose data will be stored on a stream.
 578    /// </summary>
 579    /// <param name="outStream">The stream providing data storage.</param>
 580    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 581    /// <exception cref="ArgumentNullException"><paramref name="outStream"> is null</paramref></exception>
 582    /// <exception cref="ArgumentException"><paramref name="outStream"> doesnt support writing.</paramref></exception>
 583    public static ZipFile Create(Stream outStream)
 584    {
 585      if ( outStream == null ) {
 586        throw new ArgumentNullException(nameof(outStream));
 587      }
 588
 589      if ( !outStream.CanWrite ) {
 590        throw new ArgumentException("Stream is not writeable", nameof(outStream));
 591      }
 592
 593      if ( !outStream.CanSeek ) {
 594        throw new ArgumentException("Stream is not seekable", nameof(outStream));
 595      }
 596
 597      var result = new ZipFile();
 598      result.baseStream_ = outStream;
 599      return result;
 600    }
 601
 602    #endregion
 603
 604    #region Properties
 605    /// <summary>
 606    /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance.
 607    /// If the flag is true then the stream will be closed when <see cref="Close">Close</see> is called.
 608    /// </summary>
 609    /// <remarks>
 610    /// The default value is true in all cases.
 611    /// </remarks>
 612    public bool IsStreamOwner
 613    {
 614      get { return isStreamOwner; }
 615      set { isStreamOwner = value; }
 616    }
 617
 618    /// <summary>
 619    /// Get a value indicating wether
 620    /// this archive is embedded in another file or not.
 621    /// </summary>
 622    public bool IsEmbeddedArchive
 623    {
 624      // Not strictly correct in all circumstances currently
 625      get { return offsetOfFirstEntry > 0; }
 626    }
 627
 628    /// <summary>
 629    /// Get a value indicating that this archive is a new one.
 630    /// </summary>
 631    public bool IsNewArchive
 632    {
 633      get { return isNewArchive_; }
 634    }
 635
 636    /// <summary>
 637    /// Gets the comment for the zip file.
 638    /// </summary>
 639    public string ZipFileComment
 640    {
 641      get { return comment_; }
 642    }
 643
 644    /// <summary>
 645    /// Gets the name of this zip file.
 646    /// </summary>
 647    public string Name
 648    {
 649      get { return name_; }
 650    }
 651
 652    /// <summary>
 653    /// Gets the number of entries in this zip file.
 654    /// </summary>
 655    /// <exception cref="InvalidOperationException">
 656    /// The Zip file has been closed.
 657    /// </exception>
 658    [Obsolete("Use the Count property instead")]
 659    public int Size
 660    {
 661      get
 662      {
 663        return entries_.Length;
 664      }
 665    }
 666
 667    /// <summary>
 668    /// Get the number of entries contained in this <see cref="ZipFile"/>.
 669    /// </summary>
 670    public long Count
 671    {
 672      get
 673      {
 674        return entries_.Length;
 675      }
 676    }
 677
 678    /// <summary>
 679    /// Indexer property for ZipEntries
 680    /// </summary>
 681    [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")]
 682    public ZipEntry this[int index]
 683    {
 684      get {
 685        return (ZipEntry) entries_[index].Clone();
 686      }
 687    }
 688
 689    #endregion
 690
 691    #region Input Handling
 692    /// <summary>
 693    /// Gets an enumerator for the Zip entries in this Zip file.
 694    /// </summary>
 695    /// <returns>Returns an <see cref="IEnumerator"/> for this archive.</returns>
 696    /// <exception cref="ObjectDisposedException">
 697    /// The Zip file has been closed.
 698    /// </exception>
 699    public IEnumerator GetEnumerator()
 700    {
 701      if (isDisposed_) {
 702        throw new ObjectDisposedException("ZipFile");
 703      }
 704
 705      return new ZipEntryEnumerator(entries_);
 706    }
 707
 708    /// <summary>
 709    /// Return the index of the entry with a matching name
 710    /// </summary>
 711    /// <param name="name">Entry name to find</param>
 712    /// <param name="ignoreCase">If true the comparison is case insensitive</param>
 713    /// <returns>The index position of the matching entry or -1 if not found</returns>
 714    /// <exception cref="ObjectDisposedException">
 715    /// The Zip file has been closed.
 716    /// </exception>
 717    public int FindEntry(string name, bool ignoreCase)
 718    {
 719      if (isDisposed_) {
 720        throw new ObjectDisposedException("ZipFile");
 721      }
 722
 723      // TODO: This will be slow as the next ice age for huge archives!
 724      for (int i = 0; i < entries_.Length; i++) {
 725        if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) {
 726          return i;
 727        }
 728      }
 729      return -1;
 730    }
 731
 732    /// <summary>
 733    /// Searches for a zip entry in this archive with the given name.
 734    /// String comparisons are case insensitive
 735    /// </summary>
 736    /// <param name="name">
 737    /// The name to find. May contain directory components separated by slashes ('/').
 738    /// </param>
 739    /// <returns>
 740    /// A clone of the zip entry, or null if no entry with that name exists.
 741    /// </returns>
 742    /// <exception cref="ObjectDisposedException">
 743    /// The Zip file has been closed.
 744    /// </exception>
 745    public ZipEntry GetEntry(string name)
 746    {
 747      if (isDisposed_) {
 748        throw new ObjectDisposedException("ZipFile");
 749      }
 750
 751      int index = FindEntry(name, true);
 752      return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null;
 753    }
 754
 755    /// <summary>
 756    /// Gets an input stream for reading the given zip entry data in an uncompressed form.
 757    /// Normally the <see cref="ZipEntry"/> should be an entry returned by GetEntry().
 758    /// </summary>
 759    /// <param name="entry">The <see cref="ZipEntry"/> to obtain a data <see cref="Stream"/> for</param>
 760    /// <returns>An input <see cref="Stream"/> containing data for this <see cref="ZipEntry"/></returns>
 761    /// <exception cref="ObjectDisposedException">
 762    /// The ZipFile has already been closed
 763    /// </exception>
 764    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 765    /// The compression method for the entry is unknown
 766    /// </exception>
 767    /// <exception cref="IndexOutOfRangeException">
 768    /// The entry is not found in the ZipFile
 769    /// </exception>
 770    public Stream GetInputStream(ZipEntry entry)
 771    {
 772      if ( entry == null ) {
 773        throw new ArgumentNullException(nameof(entry));
 774      }
 775
 776      if ( isDisposed_ ) {
 777        throw new ObjectDisposedException("ZipFile");
 778      }
 779
 780      long index = entry.ZipFileIndex;
 781      if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) {
 782        index = FindEntry(entry.Name, true);
 783        if (index < 0) {
 784          throw new ZipException("Entry cannot be found");
 785        }
 786      }
 787      return GetInputStream(index);
 788    }
 789
 790    /// <summary>
 791    /// Creates an input stream reading a zip entry
 792    /// </summary>
 793    /// <param name="entryIndex">The index of the entry to obtain an input stream for.</param>
 794    /// <returns>
 795    /// An input <see cref="Stream"/> containing data for this <paramref name="entryIndex"/>
 796    /// </returns>
 797    /// <exception cref="ObjectDisposedException">
 798    /// The ZipFile has already been closed
 799    /// </exception>
 800    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 801    /// The compression method for the entry is unknown
 802    /// </exception>
 803    /// <exception cref="IndexOutOfRangeException">
 804    /// The entry is not found in the ZipFile
 805    /// </exception>
 806    public Stream GetInputStream(long entryIndex)
 807    {
 808      if ( isDisposed_ ) {
 809        throw new ObjectDisposedException("ZipFile");
 810      }
 811
 812      long start = LocateEntry(entries_[entryIndex]);
 813      CompressionMethod method = entries_[entryIndex].CompressionMethod;
 814      Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize);
 815
 816      if (entries_[entryIndex].IsCrypted == true) {
 817#if NETCF_1_0
 818        throw new ZipException("decryption not supported for Compact Framework 1.0");
 819#else
 820        result = CreateAndInitDecryptionStream(result, entries_[entryIndex]);
 821        if (result == null) {
 822          throw new ZipException("Unable to decrypt this entry");
 823        }
 824#endif
 825      }
 826
 827      switch (method) {
 828        case CompressionMethod.Stored:
 829          // read as is.
 830          break;
 831
 832        case CompressionMethod.Deflated:
 833          // No need to worry about ownership and closing as underlying stream close does nothing.
 834          result = new InflaterInputStream(result, new Inflater(true));
 835          break;
 836
 837        default:
 838          throw new ZipException("Unsupported compression method " + method);
 839      }
 840
 841      return result;
 842    }
 843
 844    #endregion
 845
 846    #region Archive Testing
 847    /// <summary>
 848    /// Test an archive for integrity/validity
 849    /// </summary>
 850    /// <param name="testData">Perform low level data Crc check</param>
 851    /// <returns>true if all tests pass, false otherwise</returns>
 852    /// <remarks>Testing will terminate on the first error found.</remarks>
 853    public bool TestArchive(bool testData)
 854    {
 855      return TestArchive(testData, TestStrategy.FindFirstError, null);
 856    }
 857
 858    /// <summary>
 859    /// Test an archive for integrity/validity
 860    /// </summary>
 861    /// <param name="testData">Perform low level data Crc check</param>
 862    /// <param name="strategy">The <see cref="TestStrategy"></see> to apply.</param>
 863    /// <param name="resultHandler">The <see cref="ZipTestResultHandler"></see> handler to call during testing.</param>
 864    /// <returns>true if all tests pass, false otherwise</returns>
 865    /// <exception cref="ObjectDisposedException">The object has already been closed.</exception>
 866    public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
 867    {
 868      if (isDisposed_) {
 869        throw new ObjectDisposedException("ZipFile");
 870      }
 871
 872      var status = new TestStatus(this);
 873
 874      if ( resultHandler != null ) {
 875        resultHandler(status, null);
 876      }
 877
 878      HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header;
 879
 880      bool testing = true;
 881
 882      try {
 883        int entryIndex = 0;
 884
 885        while ( testing && (entryIndex < Count) ) {
 886          if ( resultHandler != null ) {
 887            status.SetEntry(this[entryIndex]);
 888            status.SetOperation(TestOperation.EntryHeader);
 889            resultHandler(status, null);
 890          }
 891
 892          try  {
 893            TestLocalHeader(this[entryIndex], test);
 894          }
 895          catch(ZipException ex) {
 896            status.AddError();
 897
 898            if ( resultHandler != null ) {
 899              resultHandler(status,
 900                string.Format("Exception during test - '{0}'", ex.Message));
 901            }
 902
 903            testing &= strategy != TestStrategy.FindFirstError;
 904          }
 905
 906          if ( testing && testData && this[entryIndex].IsFile ) {
 907            if ( resultHandler != null ) {
 908              status.SetOperation(TestOperation.EntryData);
 909              resultHandler(status, null);
 910            }
 911
 912                        var crc = new Crc32();
 913
 914                        using (Stream entryStream = this.GetInputStream(this[entryIndex]))
 915                        {
 916
 917                            byte[] buffer = new byte[4096];
 918                            long totalBytes = 0;
 919                            int bytesRead;
 920                            while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0)
 921                            {
 922                                crc.Update(buffer, 0, bytesRead);
 923
 924                                if (resultHandler != null)
 925                                {
 926                                    totalBytes += bytesRead;
 927                                    status.SetBytesTested(totalBytes);
 928                                    resultHandler(status, null);
 929                                }
 930                            }
 931                        }
 932
 933            if (this[entryIndex].Crc != crc.Value) {
 934              status.AddError();
 935
 936              if ( resultHandler != null ) {
 937                resultHandler(status, "CRC mismatch");
 938              }
 939
 940              testing &= strategy != TestStrategy.FindFirstError;
 941            }
 942
 943            if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) {
 944              var helper = new ZipHelperStream(baseStream_);
 945              var data = new DescriptorData();
 946              helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data);
 947              if (this[entryIndex].Crc != data.Crc) {
 948                status.AddError();
 949              }
 950
 951              if (this[entryIndex].CompressedSize != data.CompressedSize) {
 952                status.AddError();
 953              }
 954
 955              if (this[entryIndex].Size != data.Size) {
 956                status.AddError();
 957              }
 958            }
 959          }
 960
 961          if ( resultHandler != null ) {
 962            status.SetOperation(TestOperation.EntryComplete);
 963            resultHandler(status, null);
 964          }
 965
 966          entryIndex += 1;
 967        }
 968
 969        if ( resultHandler != null ) {
 970          status.SetOperation(TestOperation.MiscellaneousTests);
 971          resultHandler(status, null);
 972        }
 973
 974        // TODO: the 'Corrina Johns' test where local headers are missing from
 975        // the central directory.  They are therefore invisible to many archivers.
 976      }
 977      catch (Exception ex) {
 978        status.AddError();
 979
 980        if ( resultHandler != null ) {
 981          resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message));
 982        }
 983      }
 984
 985      if ( resultHandler != null ) {
 986        status.SetOperation(TestOperation.Complete);
 987        status.SetEntry(null);
 988        resultHandler(status, null);
 989      }
 990
 991      return (status.ErrorCount == 0);
 992    }
 993
 994    [Flags]
 995    enum HeaderTest
 996    {
 997      Extract = 0x01,     // Check that this header represents an entry whose data can be extracted
 998      Header  = 0x02,     // Check that this header contents are valid
 999    }
 1000
 1001    /// <summary>
 1002    /// Test a local header against that provided from the central directory
 1003    /// </summary>
 1004    /// <param name="entry">
 1005    /// The entry to test against
 1006    /// </param>
 1007    /// <param name="tests">The type of <see cref="HeaderTest">tests</see> to carry out.</param>
 1008    /// <returns>The offset of the entries data in the file</returns>
 1009    long TestLocalHeader(ZipEntry entry, HeaderTest tests)
 1010    {
 1011      lock(baseStream_)
 1012      {
 1013        bool testHeader = (tests & HeaderTest.Header) != 0;
 1014        bool testData = (tests & HeaderTest.Extract) != 0;
 1015
 1016        baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin);
 1017        if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) {
 1018          throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)
 1019        }
 1020
 1021        var extractVersion = ( short ) (ReadLEUshort() & 0x00ff);
 1022        var localFlags = ( short )ReadLEUshort();
 1023        var compressionMethod = ( short )ReadLEUshort();
 1024        var fileTime = ( short )ReadLEUshort();
 1025        var fileDate = ( short )ReadLEUshort();
 1026        uint crcValue = ReadLEUint();
 1027        long compressedSize = ReadLEUint();
 1028        long size = ReadLEUint();
 1029        int storedNameLength = ReadLEUshort();
 1030        int extraDataLength = ReadLEUshort();
 1031
 1032        byte[] nameData = new byte[storedNameLength];
 1033        StreamUtils.ReadFully(baseStream_, nameData);
 1034
 1035        byte[] extraData = new byte[extraDataLength];
 1036        StreamUtils.ReadFully(baseStream_, extraData);
 1037
 1038        var localExtraData = new ZipExtraData(extraData);
 1039
 1040        // Extra data / zip64 checks
 1041        if (localExtraData.Find(1))
 1042        {
 1043          // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64
 1044          // and size or compressedSize = MaxValue, due to rogue creators.
 1045
 1046          size = localExtraData.ReadLong();
 1047          compressedSize = localExtraData.ReadLong();
 1048
 1049                    if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0)
 1050                    {
 1051                        // These may be valid if patched later
 1052                        if ( (size != -1) && (size != entry.Size)) {
 1053                            throw new ZipException("Size invalid for descriptor");
 1054                        }
 1055
 1056                        if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) {
 1057                            throw new ZipException("Compressed size invalid for descriptor");
 1058                        }
 1059                    }
 1060                }
 1061        else
 1062        {
 1063          // No zip64 extra data but entry requires it.
 1064          if ((extractVersion >= ZipConstants.VersionZip64) &&
 1065            (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue)))
 1066          {
 1067            throw new ZipException("Required Zip64 extended information missing");
 1068          }
 1069        }
 1070
 1071        if ( testData ) {
 1072          if ( entry.IsFile ) {
 1073            if ( !entry.IsCompressionMethodSupported() ) {
 1074              throw new ZipException("Compression method not supported");
 1075            }
 1076
 1077            if ( (extractVersion > ZipConstants.VersionMadeBy)
 1078              || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) {
 1079              throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extract
 1080            }
 1081
 1082            if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.Enha
 1083              throw new ZipException("The library does not support the zip version required to extract this entry");
 1084            }
 1085          }
 1086        }
 1087
 1088                if (testHeader)
 1089                {
 1090                    if ((extractVersion <= 63) &&  // Ignore later versions as we dont know about them..
 1091                        (extractVersion != 10) &&
 1092                        (extractVersion != 11) &&
 1093                        (extractVersion != 20) &&
 1094                        (extractVersion != 21) &&
 1095                        (extractVersion != 25) &&
 1096                        (extractVersion != 27) &&
 1097                        (extractVersion != 45) &&
 1098                        (extractVersion != 46) &&
 1099                        (extractVersion != 50) &&
 1100                        (extractVersion != 51) &&
 1101                        (extractVersion != 52) &&
 1102                        (extractVersion != 61) &&
 1103                        (extractVersion != 62) &&
 1104                        (extractVersion != 63)
 1105                        )
 1106                    {
 1107                        throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", 
 1108                    }
 1109
 1110                    // Local entry flags dont have reserved bit set on.
 1111                    if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | General
 1112                    {
 1113                        throw new ZipException("Reserved bit flags cannot be set.");
 1114                    }
 1115
 1116                    // Encryption requires extract version >= 20
 1117                    if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20))
 1118                    {
 1119                        throw new ZipException(string.Format("Version required to extract this entry is too low for encr
 1120                    }
 1121
 1122                    // Strong encryption requires encryption flag to be set and extract version >= 50.
 1123                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1124                    {
 1125                        if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0)
 1126                        {
 1127                            throw new ZipException("Strong encryption flag set but encryption flag is not set");
 1128                        }
 1129
 1130                        if (extractVersion < 50)
 1131                        {
 1132                            throw new ZipException(string.Format("Version required to extract this entry is too low for 
 1133                        }
 1134                    }
 1135
 1136                    // Patched entries require extract version >= 27
 1137                    if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27))
 1138                    {
 1139                        throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractV
 1140                    }
 1141
 1142                    // Central header flags match local entry flags.
 1143                    if (localFlags != entry.Flags)
 1144                    {
 1145                        throw new ZipException("Central header/local header flags mismatch");
 1146                    }
 1147
 1148                    // Central header compression method matches local entry
 1149                    if (entry.CompressionMethod != (CompressionMethod)compressionMethod)
 1150                    {
 1151                        throw new ZipException("Central header/local header compression method mismatch");
 1152                    }
 1153
 1154                    if (entry.Version != extractVersion)
 1155                    {
 1156                        throw new ZipException("Extract version mismatch");
 1157                    }
 1158
 1159                    // Strong encryption and extract version match
 1160                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1161                    {
 1162                        if (extractVersion < 62)
 1163                        {
 1164                            throw new ZipException("Strong encryption flag set but version not high enough");
 1165                        }
 1166                    }
 1167
 1168                    if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0)
 1169                    {
 1170                        if ((fileTime != 0) || (fileDate != 0))
 1171                        {
 1172                            throw new ZipException("Header masked set but date/time values non-zero");
 1173                        }
 1174                    }
 1175
 1176                    if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0)
 1177                    {
 1178                        if (crcValue != (uint)entry.Crc)
 1179                        {
 1180                            throw new ZipException("Central header/local header crc mismatch");
 1181                        }
 1182                    }
 1183
 1184                    // Crc valid for empty entry.
 1185                    // This will also apply to streamed entries where size isnt known and the header cant be patched
 1186                    if ((size == 0) && (compressedSize == 0))
 1187                    {
 1188                        if (crcValue != 0)
 1189                        {
 1190                            throw new ZipException("Invalid CRC for empty entry");
 1191                        }
 1192                    }
 1193
 1194                    // TODO: make test more correct...  can't compare lengths as was done originally as this can fail fo
 1195                    // Assuming a code page at this point is not valid?  Best is to store the name length in the ZipEntr
 1196                    if (entry.Name.Length > storedNameLength)
 1197                    {
 1198                        throw new ZipException("File name length mismatch");
 1199                    }
 1200
 1201                    // Name data has already been read convert it and compare.
 1202                    string localName = ZipConstants.ConvertToStringExt(localFlags, nameData);
 1203
 1204                    // Central directory and local entry name match
 1205                    if (localName != entry.Name)
 1206                    {
 1207                        throw new ZipException("Central header and local header file name mismatch");
 1208                    }
 1209
 1210                    // Directories have zero actual size but can have compressed size
 1211                    if (entry.IsDirectory)
 1212                    {
 1213                        if (size > 0)
 1214                        {
 1215                            throw new ZipException("Directory cannot have size");
 1216                        }
 1217
 1218                        // There may be other cases where the compressed size can be greater than this?
 1219                        // If so until details are known we will be strict.
 1220                        if (entry.IsCrypted)
 1221                        {
 1222                            if (compressedSize > ZipConstants.CryptoHeaderSize + 2)
 1223                            {
 1224                                throw new ZipException("Directory compressed size invalid");
 1225                            }
 1226                        }
 1227                        else if (compressedSize > 2)
 1228                        {
 1229                            // When not compressed the directory size can validly be 2 bytes
 1230                            // if the true size wasnt known when data was originally being written.
 1231                            // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes
 1232                            throw new ZipException("Directory compressed size invalid");
 1233                        }
 1234                    }
 1235
 1236                    if (!ZipNameTransform.IsValidName(localName, true))
 1237                    {
 1238                        throw new ZipException("Name is invalid");
 1239                    }
 1240                }
 1241
 1242        // Tests that apply to both data and header.
 1243
 1244        // Size can be verified only if it is known in the local header.
 1245        // it will always be known in the central header.
 1246        if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) ||
 1247          ((size > 0) || (compressedSize > 0))) {
 1248
 1249          if (size != entry.Size) {
 1250            throw new ZipException(
 1251              string.Format("Size mismatch between central header({0}) and local header({1})",
 1252                entry.Size, size));
 1253          }
 1254
 1255          if (compressedSize != entry.CompressedSize &&
 1256            compressedSize != 0xFFFFFFFF && compressedSize != -1) {
 1257            throw new ZipException(
 1258              string.Format("Compressed size mismatch between central header({0}) and local header({1})",
 1259              entry.CompressedSize, compressedSize));
 1260          }
 1261        }
 1262
 1263        int extraLength = storedNameLength + extraDataLength;
 1264        return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength;
 1265      }
 1266    }
 1267
 1268    #endregion
 1269
 1270    #region Updating
 1271
 1272    const int DefaultBufferSize = 4096;
 1273
 1274    /// <summary>
 1275    /// The kind of update to apply.
 1276    /// </summary>
 1277    enum UpdateCommand
 1278    {
 1279      Copy,       // Copy original file contents.
 1280      Modify,     // Change encryption, compression, attributes, name, time etc, of an existing file.
 1281      Add,        // Add a new file to the archive.
 1282    }
 1283
 1284    #region Properties
 1285    /// <summary>
 1286    /// Get / set the <see cref="INameTransform"/> to apply to names when updating.
 1287    /// </summary>
 1288    public INameTransform NameTransform
 1289    {
 1290      get {
 1291        return updateEntryFactory_.NameTransform;
 1292      }
 1293
 1294      set {
 1295        updateEntryFactory_.NameTransform = value;
 1296      }
 1297    }
 1298
 1299    /// <summary>
 1300    /// Get/set the <see cref="IEntryFactory"/> used to generate <see cref="ZipEntry"/> values
 1301    /// during updates.
 1302    /// </summary>
 1303    public IEntryFactory EntryFactory
 1304    {
 1305      get {
 1306        return updateEntryFactory_;
 1307      }
 1308
 1309      set {
 1310        if (value == null) {
 1311          updateEntryFactory_ = new ZipEntryFactory();
 1312        }
 1313        else {
 1314          updateEntryFactory_ = value;
 1315        }
 1316      }
 1317    }
 1318
 1319    /// <summary>
 1320    /// Get /set the buffer size to be used when updating this zip file.
 1321    /// </summary>
 1322    public int BufferSize
 1323    {
 1324      get { return bufferSize_; }
 1325      set {
 1326        if ( value < 1024 ) {
 1327#if NETCF_1_0
 1328          throw new ArgumentOutOfRangeException("value");
 1329#else
 1330          throw new ArgumentOutOfRangeException(nameof(value), "cannot be below 1024");
 1331#endif
 1332        }
 1333
 1334        if ( bufferSize_ != value ) {
 1335          bufferSize_ = value;
 1336          copyBuffer_ = null;
 1337        }
 1338      }
 1339    }
 1340
 1341    /// <summary>
 1342    /// Get a value indicating an update has <see cref="BeginUpdate()">been started</see>.
 1343    /// </summary>
 1344    public bool IsUpdating
 1345    {
 1346      get { return updates_ != null; }
 1347    }
 1348
 1349    /// <summary>
 1350    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 1351    /// </summary>
 1352    public UseZip64 UseZip64
 1353    {
 1354      get { return useZip64_; }
 1355      set { useZip64_ = value; }
 1356    }
 1357
 1358    #endregion
 1359
 1360    #region Immediate updating
 1361//    TBD: Direct form of updating
 1362//
 1363//    public void Update(IEntryMatcher deleteMatcher)
 1364//    {
 1365//    }
 1366//
 1367//    public void Update(IScanner addScanner)
 1368//    {
 1369//    }
 1370    #endregion
 1371
 1372    #region Deferred Updating
 1373    /// <summary>
 1374    /// Begin updating this <see cref="ZipFile"/> archive.
 1375    /// </summary>
 1376    /// <param name="archiveStorage">The <see cref="IArchiveStorage">archive storage</see> for use during the update.</p
 1377    /// <param name="dataSource">The <see cref="IDynamicDataSource">data source</see> to utilise during updating.</param
 1378    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1379    /// <exception cref="ArgumentNullException">One of the arguments provided is null</exception>
 1380    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1381    public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
 1382    {
 1383      if ( archiveStorage == null ) {
 1384        throw new ArgumentNullException(nameof(archiveStorage));
 1385      }
 1386
 1387      if ( dataSource == null ) {
 1388        throw new ArgumentNullException(nameof(dataSource));
 1389      }
 1390
 1391      if ( isDisposed_ ) {
 1392        throw new ObjectDisposedException("ZipFile");
 1393      }
 1394
 1395      if ( IsEmbeddedArchive ) {
 1396        throw new ZipException ("Cannot update embedded/SFX archives");
 1397      }
 1398
 1399      archiveStorage_ = archiveStorage;
 1400      updateDataSource_ = dataSource;
 1401
 1402      // NOTE: the baseStream_ may not currently support writing or seeking.
 1403
 1404      updateIndex_ = new Hashtable();
 1405
 1406      updates_ = new ArrayList(entries_.Length);
 1407      foreach(ZipEntry entry in entries_) {
 1408        int index = updates_.Add(new ZipUpdate(entry));
 1409        updateIndex_.Add(entry.Name, index);
 1410      }
 1411
 1412      // We must sort by offset before using offset's calculated sizes
 1413      updates_.Sort(new UpdateComparer());
 1414
 1415      int idx = 0;
 1416      foreach (ZipUpdate update in updates_) {
 1417        //If last entry, there is no next entry offset to use
 1418        if (idx == updates_.Count - 1)
 1419          break;
 1420
 1421        update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset;
 1422        idx++;
 1423      }
 1424      updateCount_ = updates_.Count;
 1425
 1426      contentsEdited_ = false;
 1427      commentEdited_ = false;
 1428      newComment_ = null;
 1429    }
 1430
 1431    /// <summary>
 1432    /// Begin updating to this <see cref="ZipFile"/> archive.
 1433    /// </summary>
 1434    /// <param name="archiveStorage">The storage to use during the update.</param>
 1435    public void BeginUpdate(IArchiveStorage archiveStorage)
 1436    {
 1437      BeginUpdate(archiveStorage, new DynamicDiskDataSource());
 1438    }
 1439
 1440    /// <summary>
 1441    /// Begin updating this <see cref="ZipFile"/> archive.
 1442    /// </summary>
 1443    /// <seealso cref="BeginUpdate(IArchiveStorage)"/>
 1444    /// <seealso cref="CommitUpdate"></seealso>
 1445    /// <seealso cref="AbortUpdate"></seealso>
 1446    public void BeginUpdate()
 1447    {
 1448      if ( Name == null ) {
 1449        BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource());
 1450      }
 1451      else {
 1452        BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource());
 1453      }
 1454    }
 1455
 1456    /// <summary>
 1457    /// Commit current updates, updating this archive.
 1458    /// </summary>
 1459    /// <seealso cref="BeginUpdate()"></seealso>
 1460    /// <seealso cref="AbortUpdate"></seealso>
 1461    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1462    public void CommitUpdate()
 1463    {
 1464      if ( isDisposed_ ) {
 1465        throw new ObjectDisposedException("ZipFile");
 1466      }
 1467
 1468      CheckUpdating();
 1469
 1470      try {
 1471        updateIndex_.Clear();
 1472        updateIndex_=null;
 1473
 1474        if( contentsEdited_ ) {
 1475          RunUpdates();
 1476        }
 1477        else if( commentEdited_ ) {
 1478          UpdateCommentOnly();
 1479        }
 1480        else {
 1481          // Create an empty archive if none existed originally.
 1482          if( entries_.Length==0 ) {
 1483            byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_);
 1484            using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) {
 1485              zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment);
 1486            }
 1487          }
 1488        }
 1489
 1490      }
 1491      finally {
 1492        PostUpdateCleanup();
 1493      }
 1494    }
 1495
 1496    /// <summary>
 1497    /// Abort updating leaving the archive unchanged.
 1498    /// </summary>
 1499    /// <seealso cref="BeginUpdate()"></seealso>
 1500    /// <seealso cref="CommitUpdate"></seealso>
 1501    public void AbortUpdate()
 1502    {
 1503      PostUpdateCleanup();
 1504    }
 1505
 1506    /// <summary>
 1507    /// Set the file comment to be recorded when the current update is <see cref="CommitUpdate">commited</see>.
 1508    /// </summary>
 1509    /// <param name="comment">The comment to record.</param>
 1510    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1511    public void SetComment(string comment)
 1512    {
 1513      if ( isDisposed_ ) {
 1514        throw new ObjectDisposedException("ZipFile");
 1515      }
 1516
 1517      CheckUpdating();
 1518
 1519      newComment_ = new ZipString(comment);
 1520
 1521      if ( newComment_.RawLength  > 0xffff ) {
 1522        newComment_ = null;
 1523        throw new ZipException("Comment length exceeds maximum - 65535");
 1524      }
 1525
 1526      // We dont take account of the original and current comment appearing to be the same
 1527      // as encoding may be different.
 1528      commentEdited_ = true;
 1529    }
 1530
 1531    #endregion
 1532
 1533    #region Adding Entries
 1534
 1535    void AddUpdate(ZipUpdate update)
 1536    {
 1537      contentsEdited_ = true;
 1538
 1539      int index = FindExistingUpdate(update.Entry.Name);
 1540
 1541      if (index >= 0) {
 1542        if ( updates_[index] == null ) {
 1543          updateCount_ += 1;
 1544        }
 1545
 1546        // Direct replacement is faster than delete and add.
 1547        updates_[index] = update;
 1548      }
 1549      else {
 1550        index = updates_.Add(update);
 1551        updateCount_ += 1;
 1552        updateIndex_.Add(update.Entry.Name, index);
 1553      }
 1554    }
 1555
 1556    /// <summary>
 1557    /// Add a new entry to the archive.
 1558    /// </summary>
 1559    /// <param name="fileName">The name of the file to add.</param>
 1560    /// <param name="compressionMethod">The compression method to use.</param>
 1561    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comment for this entry.</param>
 1562    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1563    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1564    /// <exception cref="ArgumentOutOfRangeException">Compression method is not supported.</exception>
 1565    public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText )
 1566    {
 1567      if (fileName == null) {
 1568        throw new ArgumentNullException(nameof(fileName));
 1569      }
 1570
 1571      if ( isDisposed_ ) {
 1572        throw new ObjectDisposedException("ZipFile");
 1573      }
 1574
 1575      if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) {
 1576        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1577      }
 1578
 1579      CheckUpdating();
 1580      contentsEdited_ = true;
 1581
 1582      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1583      entry.IsUnicodeText = useUnicodeText;
 1584      entry.CompressionMethod = compressionMethod;
 1585
 1586      AddUpdate(new ZipUpdate(fileName, entry));
 1587    }
 1588
 1589    /// <summary>
 1590    /// Add a new entry to the archive.
 1591    /// </summary>
 1592    /// <param name="fileName">The name of the file to add.</param>
 1593    /// <param name="compressionMethod">The compression method to use.</param>
 1594    /// <exception cref="ArgumentNullException">ZipFile has been closed.</exception>
 1595    /// <exception cref="ArgumentOutOfRangeException">The compression method is not supported.</exception>
 1596    public void Add(string fileName, CompressionMethod compressionMethod)
 1597    {
 1598      if ( fileName == null ) {
 1599        throw new ArgumentNullException(nameof(fileName));
 1600      }
 1601
 1602      if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) {
 1603        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1604      }
 1605
 1606      CheckUpdating();
 1607      contentsEdited_ = true;
 1608
 1609      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1610      entry.CompressionMethod = compressionMethod;
 1611      AddUpdate(new ZipUpdate(fileName, entry));
 1612    }
 1613
 1614    /// <summary>
 1615    /// Add a file to the archive.
 1616    /// </summary>
 1617    /// <param name="fileName">The name of the file to add.</param>
 1618    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1619    public void Add(string fileName)
 1620    {
 1621      if ( fileName == null ) {
 1622        throw new ArgumentNullException(nameof(fileName));
 1623      }
 1624
 1625      CheckUpdating();
 1626      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName)));
 1627    }
 1628
 1629    /// <summary>
 1630    /// Add a file to the archive.
 1631    /// </summary>
 1632    /// <param name="fileName">The name of the file to add.</param>
 1633    /// <param name="entryName">The name to use for the <see cref="ZipEntry"/> on the Zip file created.</param>
 1634    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1635    public void Add(string fileName, string entryName)
 1636    {
 1637      if (fileName == null) {
 1638        throw new ArgumentNullException(nameof(fileName));
 1639      }
 1640
 1641      if ( entryName == null ) {
 1642        throw new ArgumentNullException(nameof(entryName));
 1643      }
 1644
 1645      CheckUpdating();
 1646      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true)));
 1647    }
 1648
 1649
 1650    /// <summary>
 1651    /// Add a file entry with data.
 1652    /// </summary>
 1653    /// <param name="dataSource">The source of the data for this entry.</param>
 1654    /// <param name="entryName">The name to give to the entry.</param>
 1655    public void Add(IStaticDataSource dataSource, string entryName)
 1656    {
 1657      if ( dataSource == null ) {
 1658        throw new ArgumentNullException(nameof(dataSource));
 1659      }
 1660
 1661      if ( entryName == null ) {
 1662        throw new ArgumentNullException(nameof(entryName));
 1663      }
 1664
 1665      CheckUpdating();
 1666      AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false)));
 1667    }
 1668
 1669    /// <summary>
 1670    /// Add a file entry with data.
 1671    /// </summary>
 1672    /// <param name="dataSource">The source of the data for this entry.</param>
 1673    /// <param name="entryName">The name to give to the entry.</param>
 1674    /// <param name="compressionMethod">The compression method to use.</param>
 1675    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 1676    {
 1677      if ( dataSource == null ) {
 1678        throw new ArgumentNullException(nameof(dataSource));
 1679      }
 1680
 1681      if ( entryName == null ) {
 1682        throw new ArgumentNullException(nameof(entryName));
 1683      }
 1684
 1685      CheckUpdating();
 1686
 1687      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1688      entry.CompressionMethod = compressionMethod;
 1689
 1690      AddUpdate(new ZipUpdate(dataSource, entry));
 1691    }
 1692
 1693    /// <summary>
 1694    /// Add a file entry with data.
 1695    /// </summary>
 1696    /// <param name="dataSource">The source of the data for this entry.</param>
 1697    /// <param name="entryName">The name to give to the entry.</param>
 1698    /// <param name="compressionMethod">The compression method to use.</param>
 1699    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comments for this entry.</param>
 1700    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicode
 1701    {
 1702      if (dataSource == null) {
 1703        throw new ArgumentNullException(nameof(dataSource));
 1704      }
 1705
 1706      if ( entryName == null ) {
 1707        throw new ArgumentNullException(nameof(entryName));
 1708      }
 1709
 1710      CheckUpdating();
 1711
 1712      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1713      entry.IsUnicodeText = useUnicodeText;
 1714      entry.CompressionMethod = compressionMethod;
 1715
 1716      AddUpdate(new ZipUpdate(dataSource, entry));
 1717    }
 1718
 1719    /// <summary>
 1720    /// Add a <see cref="ZipEntry"/> that contains no data.
 1721    /// </summary>
 1722    /// <param name="entry">The entry to add.</param>
 1723    /// <remarks>This can be used to add directories, volume labels, or empty file entries.</remarks>
 1724    public void Add(ZipEntry entry)
 1725    {
 1726      if ( entry == null ) {
 1727        throw new ArgumentNullException(nameof(entry));
 1728      }
 1729
 1730      CheckUpdating();
 1731
 1732      if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) {
 1733        throw new ZipException("Entry cannot have any data");
 1734      }
 1735
 1736      AddUpdate(new ZipUpdate(UpdateCommand.Add, entry));
 1737    }
 1738
 1739    /// <summary>
 1740    /// Add a directory entry to the archive.
 1741    /// </summary>
 1742    /// <param name="directoryName">The directory to add.</param>
 1743    public void AddDirectory(string directoryName)
 1744    {
 1745      if ( directoryName == null ) {
 1746        throw new ArgumentNullException(nameof(directoryName));
 1747      }
 1748
 1749      CheckUpdating();
 1750
 1751      ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName);
 1752      AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry));
 1753    }
 1754
 1755    #endregion
 1756
 1757    #region Modifying Entries
 1758/* Modify not yet ready for public consumption.
 1759   Direct modification of an entry should not overwrite original data before its read.
 1760   Safe mode is trivial in this sense.
 1761    public void Modify(ZipEntry original, ZipEntry updated)
 1762    {
 1763      if ( original == null ) {
 1764        throw new ArgumentNullException("original");
 1765      }
 1766
 1767      if ( updated == null ) {
 1768        throw new ArgumentNullException("updated");
 1769      }
 1770
 1771      CheckUpdating();
 1772      contentsEdited_ = true;
 1773      updates_.Add(new ZipUpdate(original, updated));
 1774    }
 1775*/
 1776    #endregion
 1777
 1778    #region Deleting Entries
 1779    /// <summary>
 1780    /// Delete an entry by name
 1781    /// </summary>
 1782    /// <param name="fileName">The filename to delete</param>
 1783    /// <returns>True if the entry was found and deleted; false otherwise.</returns>
 1784    public bool Delete(string fileName)
 1785    {
 1786      if ( fileName == null ) {
 1787        throw new ArgumentNullException(nameof(fileName));
 1788      }
 1789
 1790      CheckUpdating();
 1791
 1792      bool result = false;
 1793      int index = FindExistingUpdate(fileName);
 1794      if ( (index >= 0) && (updates_[index] != null) ) {
 1795        result = true;
 1796        contentsEdited_ = true;
 1797        updates_[index] = null;
 1798        updateCount_ -= 1;
 1799      }
 1800      else {
 1801        throw new ZipException("Cannot find entry to delete");
 1802      }
 1803      return result;
 1804    }
 1805
 1806    /// <summary>
 1807    /// Delete a <see cref="ZipEntry"/> from the archive.
 1808    /// </summary>
 1809    /// <param name="entry">The entry to delete.</param>
 1810    public void Delete(ZipEntry entry)
 1811    {
 1812      if ( entry == null ) {
 1813        throw new ArgumentNullException(nameof(entry));
 1814      }
 1815
 1816      CheckUpdating();
 1817
 1818      int index = FindExistingUpdate(entry);
 1819      if ( index >= 0 ) {
 1820        contentsEdited_ = true;
 1821        updates_[index] = null;
 1822        updateCount_ -= 1;
 1823      }
 1824      else {
 1825        throw new ZipException("Cannot find entry to delete");
 1826      }
 1827    }
 1828
 1829    #endregion
 1830
 1831    #region Update Support
 1832
 1833    #region Writing Values/Headers
 1834    void WriteLEShort(int value)
 1835    {
 1836      baseStream_.WriteByte(( byte )(value & 0xff));
 1837      baseStream_.WriteByte(( byte )((value >> 8) & 0xff));
 1838    }
 1839
 1840    /// <summary>
 1841    /// Write an unsigned short in little endian byte order.
 1842    /// </summary>
 1843    void WriteLEUshort(ushort value)
 1844    {
 1845      baseStream_.WriteByte(( byte )(value & 0xff));
 1846      baseStream_.WriteByte(( byte )(value >> 8));
 1847    }
 1848
 1849    /// <summary>
 1850    /// Write an int in little endian byte order.
 1851    /// </summary>
 1852    void WriteLEInt(int value)
 1853    {
 1854      WriteLEShort(value & 0xffff);
 1855      WriteLEShort(value >> 16);
 1856    }
 1857
 1858    /// <summary>
 1859    /// Write an unsigned int in little endian byte order.
 1860    /// </summary>
 1861    void WriteLEUint(uint value)
 1862    {
 1863      WriteLEUshort((ushort)(value & 0xffff));
 1864      WriteLEUshort((ushort)(value >> 16));
 1865    }
 1866
 1867    /// <summary>
 1868    /// Write a long in little endian byte order.
 1869    /// </summary>
 1870    void WriteLeLong(long value)
 1871    {
 1872      WriteLEInt(( int )(value & 0xffffffff));
 1873      WriteLEInt(( int )(value >> 32));
 1874    }
 1875
 1876    void WriteLEUlong(ulong value)
 1877    {
 1878      WriteLEUint(( uint )(value & 0xffffffff));
 1879      WriteLEUint(( uint )(value >> 32));
 1880    }
 1881
 1882    void WriteLocalEntryHeader(ZipUpdate update)
 1883    {
 1884      ZipEntry entry = update.OutEntry;
 1885
 1886      // TODO: Local offset will require adjusting for multi-disk zip files.
 1887      entry.Offset = baseStream_.Position;
 1888
 1889      // TODO: Need to clear any entry flags that dont make sense or throw an exception here.
 1890      if (update.Command != UpdateCommand.Copy) {
 1891        if (entry.CompressionMethod == CompressionMethod.Deflated) {
 1892          if (entry.Size == 0) {
 1893            // No need to compress - no data.
 1894            entry.CompressedSize = entry.Size;
 1895            entry.Crc = 0;
 1896            entry.CompressionMethod = CompressionMethod.Stored;
 1897          }
 1898        }
 1899        else if (entry.CompressionMethod == CompressionMethod.Stored) {
 1900          entry.Flags &= ~(int)GeneralBitFlags.Descriptor;
 1901        }
 1902
 1903        if (HaveKeys) {
 1904          entry.IsCrypted = true;
 1905          if (entry.Crc < 0) {
 1906            entry.Flags |= (int)GeneralBitFlags.Descriptor;
 1907          }
 1908        }
 1909        else {
 1910          entry.IsCrypted = false;
 1911        }
 1912
 1913        switch (useZip64_) {
 1914          case UseZip64.Dynamic:
 1915            if (entry.Size < 0) {
 1916              entry.ForceZip64();
 1917            }
 1918            break;
 1919
 1920          case UseZip64.On:
 1921            entry.ForceZip64();
 1922            break;
 1923
 1924          case UseZip64.Off:
 1925            // Do nothing.  The entry itself may be using Zip64 independantly.
 1926            break;
 1927        }
 1928      }
 1929
 1930      // Write the local file header
 1931      WriteLEInt(ZipConstants.LocalHeaderSignature);
 1932
 1933      WriteLEShort(entry.Version);
 1934      WriteLEShort(entry.Flags);
 1935
 1936      WriteLEShort((byte)entry.CompressionMethod);
 1937      WriteLEInt(( int )entry.DosTime);
 1938
 1939      if ( !entry.HasCrc ) {
 1940        // Note patch address for updating CRC later.
 1941        update.CrcPatchOffset = baseStream_.Position;
 1942        WriteLEInt(( int )0);
 1943      }
 1944      else {
 1945        WriteLEInt(unchecked(( int )entry.Crc));
 1946      }
 1947
 1948      if (entry.LocalHeaderRequiresZip64) {
 1949        WriteLEInt(-1);
 1950        WriteLEInt(-1);
 1951      }
 1952      else {
 1953        if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) {
 1954          update.SizePatchOffset = baseStream_.Position;
 1955        }
 1956
 1957        WriteLEInt(( int )entry.CompressedSize);
 1958        WriteLEInt(( int )entry.Size);
 1959      }
 1960
 1961      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 1962
 1963      if ( name.Length > 0xFFFF ) {
 1964        throw new ZipException("Entry name too long.");
 1965      }
 1966
 1967      var ed = new ZipExtraData(entry.ExtraData);
 1968
 1969      if ( entry.LocalHeaderRequiresZip64 ) {
 1970        ed.StartNewEntry();
 1971
 1972        // Local entry header always includes size and compressed size.
 1973        // NOTE the order of these fields is reversed when compared to the normal headers!
 1974        ed.AddLeLong(entry.Size);
 1975        ed.AddLeLong(entry.CompressedSize);
 1976        ed.AddNewEntry(1);
 1977      }
 1978      else {
 1979        ed.Delete(1);
 1980      }
 1981
 1982      entry.ExtraData = ed.GetEntryData();
 1983
 1984      WriteLEShort(name.Length);
 1985      WriteLEShort(entry.ExtraData.Length);
 1986
 1987      if ( name.Length > 0 ) {
 1988        baseStream_.Write(name, 0, name.Length);
 1989      }
 1990
 1991      if ( entry.LocalHeaderRequiresZip64 ) {
 1992        if ( !ed.Find(1) ) {
 1993          throw new ZipException("Internal error cannot find extra data");
 1994        }
 1995
 1996        update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex;
 1997      }
 1998
 1999      if ( entry.ExtraData.Length > 0 ) {
 2000        baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length);
 2001      }
 2002    }
 2003
 2004    int WriteCentralDirectoryHeader(ZipEntry entry)
 2005    {
 2006      if ( entry.CompressedSize < 0 ) {
 2007        throw new ZipException("Attempt to write central directory entry with unknown csize");
 2008      }
 2009
 2010      if ( entry.Size < 0 ) {
 2011        throw new ZipException("Attempt to write central directory entry with unknown size");
 2012      }
 2013
 2014      if ( entry.Crc < 0 ) {
 2015        throw new ZipException("Attempt to write central directory entry with unknown crc");
 2016      }
 2017
 2018      // Write the central file header
 2019      WriteLEInt(ZipConstants.CentralHeaderSignature);
 2020
 2021      // Version made by
 2022      WriteLEShort(ZipConstants.VersionMadeBy);
 2023
 2024      // Version required to extract
 2025      WriteLEShort(entry.Version);
 2026
 2027      WriteLEShort(entry.Flags);
 2028
 2029      unchecked {
 2030        WriteLEShort((byte)entry.CompressionMethod);
 2031        WriteLEInt((int)entry.DosTime);
 2032        WriteLEInt((int)entry.Crc);
 2033      }
 2034
 2035      if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) {
 2036        WriteLEInt(-1);
 2037      }
 2038      else {
 2039        WriteLEInt((int)(entry.CompressedSize & 0xffffffff));
 2040      }
 2041
 2042      if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) {
 2043        WriteLEInt(-1);
 2044      }
 2045      else {
 2046        WriteLEInt((int)entry.Size);
 2047      }
 2048
 2049      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 2050
 2051      if ( name.Length > 0xFFFF ) {
 2052        throw new ZipException("Entry name is too long.");
 2053      }
 2054
 2055      WriteLEShort(name.Length);
 2056
 2057      // Central header extra data is different to local header version so regenerate.
 2058      var ed = new ZipExtraData(entry.ExtraData);
 2059
 2060      if ( entry.CentralHeaderRequiresZip64 ) {
 2061        ed.StartNewEntry();
 2062
 2063        if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2064        {
 2065          ed.AddLeLong(entry.Size);
 2066        }
 2067
 2068        if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2069        {
 2070          ed.AddLeLong(entry.CompressedSize);
 2071        }
 2072
 2073        if ( entry.Offset >= 0xffffffff ) {
 2074          ed.AddLeLong(entry.Offset);
 2075        }
 2076
 2077        // Number of disk on which this file starts isnt supported and is never written here.
 2078        ed.AddNewEntry(1);
 2079      }
 2080      else {
 2081        // Should have already be done when local header was added.
 2082        ed.Delete(1);
 2083      }
 2084
 2085      byte[] centralExtraData = ed.GetEntryData();
 2086
 2087      WriteLEShort(centralExtraData.Length);
 2088      WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0);
 2089
 2090      WriteLEShort(0);  // disk number
 2091      WriteLEShort(0);  // internal file attributes
 2092
 2093      // External file attributes...
 2094      if ( entry.ExternalFileAttributes != -1 ) {
 2095        WriteLEInt(entry.ExternalFileAttributes);
 2096      }
 2097      else {
 2098        if ( entry.IsDirectory ) {
 2099          WriteLEUint(16);
 2100        }
 2101        else {
 2102          WriteLEUint(0);
 2103        }
 2104      }
 2105
 2106      if ( entry.Offset >= 0xffffffff ) {
 2107        WriteLEUint(0xffffffff);
 2108      }
 2109      else {
 2110        WriteLEUint((uint)(int)entry.Offset);
 2111      }
 2112
 2113      if ( name.Length > 0 ) {
 2114        baseStream_.Write(name, 0, name.Length);
 2115      }
 2116
 2117      if ( centralExtraData.Length > 0 ) {
 2118        baseStream_.Write(centralExtraData, 0, centralExtraData.Length);
 2119      }
 2120
 2121      byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0];
 2122
 2123      if ( rawComment.Length > 0 ) {
 2124        baseStream_.Write(rawComment, 0, rawComment.Length);
 2125      }
 2126
 2127      return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length;
 2128    }
 2129    #endregion
 2130
 2131    void PostUpdateCleanup()
 2132    {
 2133            updateDataSource_ = null;
 2134            updates_ = null;
 2135            updateIndex_ = null;
 2136
 2137            if (archiveStorage_ != null)
 2138            {
 2139        archiveStorage_.Dispose();
 2140        archiveStorage_=null;
 2141      }
 2142    }
 2143
 2144    string GetTransformedFileName(string name)
 2145    {
 2146            INameTransform transform = NameTransform;
 2147      return (transform != null) ?
 2148        transform.TransformFile(name) :
 2149        name;
 2150    }
 2151
 2152    string GetTransformedDirectoryName(string name)
 2153    {
 2154            INameTransform transform = NameTransform;
 2155            return (transform != null) ?
 2156        transform.TransformDirectory(name) :
 2157        name;
 2158    }
 2159
 2160    /// <summary>
 2161    /// Get a raw memory buffer.
 2162    /// </summary>
 2163    /// <returns>Returns a raw memory buffer.</returns>
 2164    byte[] GetBuffer()
 2165    {
 2166      if ( copyBuffer_ == null ) {
 2167        copyBuffer_ = new byte[bufferSize_];
 2168      }
 2169      return copyBuffer_;
 2170    }
 2171
 2172    void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
 2173    {
 2174      int bytesToCopy = GetDescriptorSize(update);
 2175
 2176      if ( bytesToCopy > 0 ) {
 2177        byte[] buffer = GetBuffer();
 2178
 2179        while ( bytesToCopy > 0 ) {
 2180          int readSize = Math.Min(buffer.Length, bytesToCopy);
 2181
 2182          int bytesRead = source.Read(buffer, 0, readSize);
 2183          if ( bytesRead > 0 ) {
 2184            dest.Write(buffer, 0, bytesRead);
 2185            bytesToCopy -= bytesRead;
 2186          }
 2187          else {
 2188            throw new ZipException("Unxpected end of stream");
 2189          }
 2190        }
 2191      }
 2192    }
 2193
 2194    void CopyBytes(ZipUpdate update, Stream destination, Stream source,
 2195      long bytesToCopy, bool updateCrc)
 2196    {
 2197      if ( destination == source ) {
 2198        throw new InvalidOperationException("Destination and source are the same");
 2199      }
 2200
 2201      // NOTE: Compressed size is updated elsewhere.
 2202      var crc = new Crc32();
 2203      byte[] buffer = GetBuffer();
 2204
 2205      long targetBytes = bytesToCopy;
 2206      long totalBytesRead = 0;
 2207
 2208      int bytesRead;
 2209      do {
 2210        int readSize = buffer.Length;
 2211
 2212        if ( bytesToCopy < readSize ) {
 2213          readSize = (int)bytesToCopy;
 2214        }
 2215
 2216        bytesRead = source.Read(buffer, 0, readSize);
 2217        if ( bytesRead > 0 ) {
 2218          if ( updateCrc ) {
 2219            crc.Update(buffer, 0, bytesRead);
 2220          }
 2221          destination.Write(buffer, 0, bytesRead);
 2222          bytesToCopy -= bytesRead;
 2223          totalBytesRead += bytesRead;
 2224        }
 2225      }
 2226      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2227
 2228      if ( totalBytesRead != targetBytes ) {
 2229        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2230      }
 2231
 2232      if ( updateCrc ) {
 2233        update.OutEntry.Crc = crc.Value;
 2234      }
 2235    }
 2236
 2237    /// <summary>
 2238    /// Get the size of the source descriptor for a <see cref="ZipUpdate"/>.
 2239    /// </summary>
 2240    /// <param name="update">The update to get the size for.</param>
 2241    /// <returns>The descriptor size, zero if there isnt one.</returns>
 2242    int GetDescriptorSize(ZipUpdate update)
 2243    {
 2244      int result = 0;
 2245      if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) {
 2246        result = ZipConstants.DataDescriptorSize - 4;
 2247        if ( update.Entry.LocalHeaderRequiresZip64 ) {
 2248          result = ZipConstants.Zip64DataDescriptorSize - 4;
 2249        }
 2250      }
 2251      return result;
 2252    }
 2253
 2254    void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition)
 2255    {
 2256      int bytesToCopy = GetDescriptorSize(update);
 2257
 2258      while ( bytesToCopy > 0 ) {
 2259        var readSize = (int)bytesToCopy;
 2260        byte[] buffer = GetBuffer();
 2261
 2262        stream.Position = sourcePosition;
 2263        int bytesRead = stream.Read(buffer, 0, readSize);
 2264        if ( bytesRead > 0 ) {
 2265          stream.Position = destinationPosition;
 2266          stream.Write(buffer, 0, bytesRead);
 2267          bytesToCopy -= bytesRead;
 2268          destinationPosition += bytesRead;
 2269          sourcePosition += bytesRead;
 2270        }
 2271        else {
 2272          throw new ZipException("Unxpected end of stream");
 2273        }
 2274      }
 2275    }
 2276
 2277    void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sou
 2278    {
 2279      long bytesToCopy = update.Entry.CompressedSize;
 2280
 2281      // NOTE: Compressed size is updated elsewhere.
 2282      var crc = new Crc32();
 2283      byte[] buffer = GetBuffer();
 2284
 2285      long targetBytes = bytesToCopy;
 2286      long totalBytesRead = 0;
 2287
 2288      int bytesRead;
 2289      do
 2290      {
 2291        int readSize = buffer.Length;
 2292
 2293        if ( bytesToCopy < readSize ) {
 2294          readSize = (int)bytesToCopy;
 2295        }
 2296
 2297        stream.Position = sourcePosition;
 2298        bytesRead = stream.Read(buffer, 0, readSize);
 2299        if ( bytesRead > 0 ) {
 2300          if ( updateCrc ) {
 2301            crc.Update(buffer, 0, bytesRead);
 2302          }
 2303          stream.Position = destinationPosition;
 2304          stream.Write(buffer, 0, bytesRead);
 2305
 2306          destinationPosition += bytesRead;
 2307          sourcePosition += bytesRead;
 2308          bytesToCopy -= bytesRead;
 2309          totalBytesRead += bytesRead;
 2310        }
 2311      }
 2312      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2313
 2314      if ( totalBytesRead != targetBytes ) {
 2315        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2316      }
 2317
 2318      if ( updateCrc ) {
 2319        update.OutEntry.Crc = crc.Value;
 2320      }
 2321    }
 2322
 2323    int FindExistingUpdate(ZipEntry entry)
 2324    {
 2325      int result = -1;
 2326      string convertedName = GetTransformedFileName(entry.Name);
 2327
 2328      if (updateIndex_.ContainsKey(convertedName)) {
 2329        result = (int)updateIndex_[convertedName];
 2330      }
 2331/*
 2332      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2333      // for CF?
 2334      for (int index = 0; index < updates_.Count; ++index)
 2335      {
 2336        ZipUpdate zu = ( ZipUpdate )updates_[index];
 2337        if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) &&
 2338          (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) {
 2339          result = index;
 2340          break;
 2341        }
 2342      }
 2343 */
 2344      return result;
 2345    }
 2346
 2347    int FindExistingUpdate(string fileName)
 2348    {
 2349      int result = -1;
 2350
 2351      string convertedName = GetTransformedFileName(fileName);
 2352
 2353      if (updateIndex_.ContainsKey(convertedName)) {
 2354        result = (int)updateIndex_[convertedName];
 2355      }
 2356
 2357/*
 2358      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2359      // for CF?
 2360      for ( int index = 0; index < updates_.Count; ++index ) {
 2361        if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name,
 2362          true, CultureInfo.InvariantCulture) == 0 ) {
 2363          result = index;
 2364          break;
 2365        }
 2366      }
 2367 */
 2368
 2369      return result;
 2370    }
 2371
 2372    /// <summary>
 2373    /// Get an output stream for the specified <see cref="ZipEntry"/>
 2374    /// </summary>
 2375    /// <param name="entry">The entry to get an output stream for.</param>
 2376    /// <returns>The output stream obtained for the entry.</returns>
 2377    Stream GetOutputStream(ZipEntry entry)
 2378    {
 2379      Stream result = baseStream_;
 2380
 2381      if ( entry.IsCrypted == true ) {
 2382#if NETCF_1_0
 2383        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 2384#else
 2385        result = CreateAndInitEncryptionStream(result, entry);
 2386#endif
 2387      }
 2388
 2389      switch ( entry.CompressionMethod ) {
 2390        case CompressionMethod.Stored:
 2391          result = new UncompressedStream(result);
 2392          break;
 2393
 2394        case CompressionMethod.Deflated:
 2395          var dos = new DeflaterOutputStream(result, new Deflater(9, true));
 2396          dos.IsStreamOwner = false;
 2397          result = dos;
 2398          break;
 2399
 2400        default:
 2401          throw new ZipException("Unknown compression method " + entry.CompressionMethod);
 2402      }
 2403      return result;
 2404    }
 2405
 2406    void AddEntry(ZipFile workFile, ZipUpdate update)
 2407    {
 2408      Stream source = null;
 2409
 2410      if ( update.Entry.IsFile ) {
 2411        source = update.GetSource();
 2412
 2413        if ( source == null ) {
 2414          source = updateDataSource_.GetSource(update.Entry, update.Filename);
 2415        }
 2416      }
 2417
 2418      if ( source != null ) {
 2419        using ( source ) {
 2420          long sourceStreamLength = source.Length;
 2421          if ( update.OutEntry.Size < 0 ) {
 2422            update.OutEntry.Size = sourceStreamLength;
 2423          }
 2424          else {
 2425            // Check for errant entries.
 2426            if ( update.OutEntry.Size != sourceStreamLength ) {
 2427              throw new ZipException("Entry size/stream size mismatch");
 2428            }
 2429          }
 2430
 2431          workFile.WriteLocalEntryHeader(update);
 2432
 2433          long dataStart = workFile.baseStream_.Position;
 2434
 2435          using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2436            CopyBytes(update, output, source, sourceStreamLength, true);
 2437          }
 2438
 2439          long dataEnd = workFile.baseStream_.Position;
 2440          update.OutEntry.CompressedSize = dataEnd - dataStart;
 2441
 2442          if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor)
 2443          {
 2444            var helper = new ZipHelperStream(workFile.baseStream_);
 2445            helper.WriteDataDescriptor(update.OutEntry);
 2446          }
 2447        }
 2448      }
 2449      else {
 2450        workFile.WriteLocalEntryHeader(update);
 2451        update.OutEntry.CompressedSize = 0;
 2452      }
 2453
 2454    }
 2455
 2456    void ModifyEntry(ZipFile workFile, ZipUpdate update)
 2457    {
 2458      workFile.WriteLocalEntryHeader(update);
 2459      long dataStart = workFile.baseStream_.Position;
 2460
 2461      // TODO: This is slow if the changes don't effect the data!!
 2462      if ( update.Entry.IsFile && (update.Filename != null) ) {
 2463        using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2464          using ( Stream source = this.GetInputStream(update.Entry) ) {
 2465            CopyBytes(update, output, source, source.Length, true);
 2466          }
 2467        }
 2468      }
 2469
 2470      long dataEnd = workFile.baseStream_.Position;
 2471      update.Entry.CompressedSize = dataEnd - dataStart;
 2472    }
 2473
 2474    void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition)
 2475    {
 2476      bool skipOver = false || update.Entry.Offset == destinationPosition;
 2477
 2478      if ( !skipOver ) {
 2479        baseStream_.Position = destinationPosition;
 2480        workFile.WriteLocalEntryHeader(update);
 2481        destinationPosition = baseStream_.Position;
 2482      }
 2483
 2484      long sourcePosition = 0;
 2485
 2486      const int NameLengthOffset = 26;
 2487
 2488      // TODO: Add base for SFX friendly handling
 2489      long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2490
 2491      baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2492
 2493      // Clumsy way of handling retrieving the original name and extra data length for now.
 2494      // TODO: Stop re-reading name and data length in CopyEntryDirect.
 2495      uint nameLength = ReadLEUshort();
 2496      uint extraLength = ReadLEUshort();
 2497
 2498      sourcePosition = baseStream_.Position + nameLength + extraLength;
 2499
 2500      if (skipOver) {
 2501        if (update.OffsetBasedSize != -1)
 2502          destinationPosition += update.OffsetBasedSize;
 2503        else
 2504          // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) ar
 2505          // WinZip produces a warning on these entries:
 2506          // "caution: value of lrec.csize (compressed size) changed from ..."
 2507          destinationPosition +=
 2508            (sourcePosition - entryDataOffset) + NameLengthOffset +  // Header size
 2509            update.Entry.CompressedSize + GetDescriptorSize(update);
 2510      }
 2511      else {
 2512        if ( update.Entry.CompressedSize > 0 ) {
 2513          CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition );
 2514        }
 2515        CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition);
 2516      }
 2517    }
 2518
 2519    void CopyEntry(ZipFile workFile, ZipUpdate update)
 2520    {
 2521      workFile.WriteLocalEntryHeader(update);
 2522
 2523      if ( update.Entry.CompressedSize > 0 ) {
 2524        const int NameLengthOffset = 26;
 2525
 2526        long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2527
 2528        // TODO: This wont work for SFX files!
 2529        baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2530
 2531        uint nameLength = ReadLEUshort();
 2532        uint extraLength = ReadLEUshort();
 2533
 2534        baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current);
 2535
 2536        CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false);
 2537      }
 2538      CopyDescriptorBytes(update, workFile.baseStream_, baseStream_);
 2539    }
 2540
 2541    void Reopen(Stream source)
 2542    {
 2543      if ( source == null ) {
 2544        throw new ZipException("Failed to reopen archive - no source");
 2545      }
 2546
 2547      isNewArchive_ = false;
 2548      baseStream_ = source;
 2549      ReadEntries();
 2550    }
 2551
 2552    void Reopen()
 2553    {
 2554      if (Name == null) {
 2555        throw new InvalidOperationException("Name is not known cannot Reopen");
 2556      }
 2557
 2558      Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read));
 2559    }
 2560
 2561    void UpdateCommentOnly()
 2562    {
 2563      long baseLength = baseStream_.Length;
 2564
 2565      ZipHelperStream updateFile = null;
 2566
 2567      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2568        Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_);
 2569        updateFile = new ZipHelperStream(copyStream);
 2570        updateFile.IsStreamOwner = true;
 2571
 2572        baseStream_.Close();
 2573        baseStream_ = null;
 2574      }
 2575      else {
 2576        if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) {
 2577          // TODO: archiveStorage wasnt originally intended for this use.
 2578          // Need to revisit this to tidy up handling as archive storage currently doesnt
 2579          // handle the original stream well.
 2580          // The problem is when using an existing zip archive with an in memory archive storage.
 2581          // The open stream wont support writing but the memory storage should open the same file not an in memory one.
 2582
 2583          // Need to tidy up the archive storage interface and contract basically.
 2584          baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_);
 2585          updateFile = new ZipHelperStream(baseStream_);
 2586        }
 2587        else {
 2588          baseStream_.Close();
 2589          baseStream_ = null;
 2590          updateFile = new ZipHelperStream(Name);
 2591        }
 2592      }
 2593
 2594      using ( updateFile ) {
 2595        long locatedCentralDirOffset =
 2596          updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 2597                            baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 2598        if ( locatedCentralDirOffset < 0 ) {
 2599          throw new ZipException("Cannot find central directory");
 2600        }
 2601
 2602        const int CentralHeaderCommentSizeOffset = 16;
 2603        updateFile.Position += CentralHeaderCommentSizeOffset;
 2604
 2605        byte[] rawComment = newComment_.RawComment;
 2606
 2607        updateFile.WriteLEShort(rawComment.Length);
 2608        updateFile.Write(rawComment, 0, rawComment.Length);
 2609        updateFile.SetLength(updateFile.Position);
 2610      }
 2611
 2612      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2613        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2614      }
 2615      else {
 2616        ReadEntries();
 2617      }
 2618    }
 2619
 2620    /// <summary>
 2621    /// Class used to sort updates.
 2622    /// </summary>
 2623    class UpdateComparer : IComparer
 2624    {
 2625      /// <summary>
 2626      /// Compares two objects and returns a value indicating whether one is
 2627      /// less than, equal to or greater than the other.
 2628      /// </summary>
 2629      /// <param name="x">First object to compare</param>
 2630      /// <param name="y">Second object to compare.</param>
 2631      /// <returns>Compare result.</returns>
 2632      public int Compare(
 2633        object x,
 2634        object y)
 2635      {
 2636        var zx = x as ZipUpdate;
 2637        var zy = y as ZipUpdate;
 2638
 2639        int result;
 2640
 2641        if (zx == null) {
 2642          if (zy == null) {
 2643            result = 0;
 2644          }
 2645          else {
 2646            result = -1;
 2647          }
 2648        }
 2649        else if (zy == null) {
 2650          result = 1;
 2651        }
 2652        else {
 2653          int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1;
 2654          int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1;
 2655
 2656          result = xCmdValue - yCmdValue;
 2657          if (result == 0) {
 2658            long offsetDiff = zx.Entry.Offset - zy.Entry.Offset;
 2659            if (offsetDiff < 0) {
 2660              result = -1;
 2661            }
 2662            else if (offsetDiff == 0) {
 2663              result = 0;
 2664            }
 2665            else {
 2666              result = 1;
 2667            }
 2668          }
 2669        }
 2670        return result;
 2671      }
 2672    }
 2673
 2674    void RunUpdates()
 2675    {
 2676      long sizeEntries = 0;
 2677      long endOfStream = 0;
 2678      bool directUpdate = false;
 2679      long destinationPosition = 0; // NOT SFX friendly
 2680
 2681      ZipFile workFile;
 2682
 2683      if ( IsNewArchive ) {
 2684        workFile = this;
 2685        workFile.baseStream_.Position = 0;
 2686        directUpdate = true;
 2687      }
 2688      else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) {
 2689        workFile = this;
 2690        workFile.baseStream_.Position = 0;
 2691        directUpdate = true;
 2692
 2693        // Sort the updates by offset within copies/modifies, then adds.
 2694        // This ensures that data required by copies will not be overwritten.
 2695        updates_.Sort(new UpdateComparer());
 2696      }
 2697      else {
 2698        workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput());
 2699        workFile.UseZip64 = UseZip64;
 2700
 2701        if (key != null) {
 2702          workFile.key = (byte[])key.Clone();
 2703        }
 2704      }
 2705
 2706      try {
 2707        foreach ( ZipUpdate update in updates_ ) {
 2708          if (update != null) {
 2709            switch (update.Command) {
 2710              case UpdateCommand.Copy:
 2711                if (directUpdate) {
 2712                  CopyEntryDirect(workFile, update, ref destinationPosition);
 2713                }
 2714                else {
 2715                  CopyEntry(workFile, update);
 2716                }
 2717                break;
 2718
 2719              case UpdateCommand.Modify:
 2720                // TODO: Direct modifying of an entry will take some legwork.
 2721                ModifyEntry(workFile, update);
 2722                break;
 2723
 2724              case UpdateCommand.Add:
 2725                if (!IsNewArchive && directUpdate) {
 2726                  workFile.baseStream_.Position = destinationPosition;
 2727                }
 2728
 2729                AddEntry(workFile, update);
 2730
 2731                if (directUpdate) {
 2732                  destinationPosition = workFile.baseStream_.Position;
 2733                }
 2734                break;
 2735            }
 2736          }
 2737        }
 2738
 2739        if ( !IsNewArchive && directUpdate ) {
 2740          workFile.baseStream_.Position = destinationPosition;
 2741        }
 2742
 2743        long centralDirOffset = workFile.baseStream_.Position;
 2744
 2745        foreach ( ZipUpdate update in updates_ ) {
 2746          if (update != null) {
 2747            sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry);
 2748          }
 2749        }
 2750
 2751        byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_);
 2752        using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) {
 2753          zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment);
 2754        }
 2755
 2756        endOfStream = workFile.baseStream_.Position;
 2757
 2758        // And now patch entries...
 2759        foreach ( ZipUpdate update in updates_ ) {
 2760          if (update != null)
 2761          {
 2762            // If the size of the entry is zero leave the crc as 0 as well.
 2763            // The calculated crc will be all bits on...
 2764            if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) {
 2765              workFile.baseStream_.Position = update.CrcPatchOffset;
 2766              workFile.WriteLEInt((int)update.OutEntry.Crc);
 2767            }
 2768
 2769            if (update.SizePatchOffset > 0) {
 2770              workFile.baseStream_.Position = update.SizePatchOffset;
 2771              if (update.OutEntry.LocalHeaderRequiresZip64) {
 2772                workFile.WriteLeLong(update.OutEntry.Size);
 2773                workFile.WriteLeLong(update.OutEntry.CompressedSize);
 2774              }
 2775              else {
 2776                workFile.WriteLEInt((int)update.OutEntry.CompressedSize);
 2777                workFile.WriteLEInt((int)update.OutEntry.Size);
 2778              }
 2779            }
 2780          }
 2781        }
 2782      }
 2783      catch {
 2784        workFile.Close();
 2785        if (!directUpdate && (workFile.Name != null)) {
 2786          File.Delete(workFile.Name);
 2787        }
 2788        throw;
 2789      }
 2790
 2791      if (directUpdate) {
 2792        workFile.baseStream_.SetLength(endOfStream);
 2793        workFile.baseStream_.Flush();
 2794        isNewArchive_ = false;
 2795        ReadEntries();
 2796      }
 2797      else {
 2798        baseStream_.Close();
 2799        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2800      }
 2801    }
 2802
 2803    void CheckUpdating()
 2804    {
 2805      if ( updates_ == null ) {
 2806        throw new InvalidOperationException("BeginUpdate has not been called");
 2807      }
 2808    }
 2809
 2810    #endregion
 2811
 2812    #region ZipUpdate class
 2813    /// <summary>
 2814    /// Represents a pending update to a Zip file.
 2815    /// </summary>
 2816    class ZipUpdate
 2817    {
 2818      #region Constructors
 2819      public ZipUpdate(string fileName, ZipEntry entry)
 2820      {
 2821        command_ = UpdateCommand.Add;
 2822        entry_ = entry;
 2823        filename_ = fileName;
 2824      }
 2825
 2826      [Obsolete]
 2827      public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod)
 2828      {
 2829        command_ = UpdateCommand.Add;
 2830        entry_ = new ZipEntry(entryName);
 2831        entry_.CompressionMethod = compressionMethod;
 2832        filename_ = fileName;
 2833      }
 2834
 2835      [Obsolete]
 2836      public ZipUpdate(string fileName, string entryName)
 2837        : this(fileName, entryName, CompressionMethod.Deflated)
 2838      {
 2839        // Do nothing.
 2840      }
 2841
 2842      [Obsolete]
 2843      public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 2844      {
 2845        command_ = UpdateCommand.Add;
 2846        entry_ = new ZipEntry(entryName);
 2847        entry_.CompressionMethod = compressionMethod;
 2848        dataSource_ = dataSource;
 2849      }
 2850
 2851      public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry)
 2852      {
 2853        command_ = UpdateCommand.Add;
 2854        entry_ = entry;
 2855        dataSource_ = dataSource;
 2856      }
 2857
 2858      public ZipUpdate(ZipEntry original, ZipEntry updated)
 2859      {
 2860        throw new ZipException("Modify not currently supported");
 2861      /*
 2862        command_ = UpdateCommand.Modify;
 2863        entry_ = ( ZipEntry )original.Clone();
 2864        outEntry_ = ( ZipEntry )updated.Clone();
 2865      */
 2866      }
 2867
 2868      public ZipUpdate(UpdateCommand command, ZipEntry entry)
 2869      {
 2870        command_ = command;
 2871        entry_ = ( ZipEntry )entry.Clone();
 2872      }
 2873
 2874
 2875      /// <summary>
 2876      /// Copy an existing entry.
 2877      /// </summary>
 2878      /// <param name="entry">The existing entry to copy.</param>
 2879      public ZipUpdate(ZipEntry entry)
 2880        : this(UpdateCommand.Copy, entry)
 2881      {
 2882        // Do nothing.
 2883      }
 2884      #endregion
 2885
 2886      /// <summary>
 2887      /// Get the <see cref="ZipEntry"/> for this update.
 2888      /// </summary>
 2889      /// <remarks>This is the source or original entry.</remarks>
 2890      public ZipEntry Entry
 2891      {
 2892        get { return entry_; }
 2893      }
 2894
 2895      /// <summary>
 2896      /// Get the <see cref="ZipEntry"/> that will be written to the updated/new file.
 2897      /// </summary>
 2898      public ZipEntry OutEntry
 2899      {
 2900        get {
 2901          if ( outEntry_ == null ) {
 2902            outEntry_ = (ZipEntry)entry_.Clone();
 2903          }
 2904
 2905          return outEntry_;
 2906        }
 2907      }
 2908
 2909      /// <summary>
 2910      /// Get the command for this update.
 2911      /// </summary>
 2912      public UpdateCommand Command
 2913      {
 2914        get { return command_; }
 2915      }
 2916
 2917      /// <summary>
 2918      /// Get the filename if any for this update.  Null if none exists.
 2919      /// </summary>
 2920      public string Filename
 2921      {
 2922        get { return filename_; }
 2923      }
 2924
 2925      /// <summary>
 2926      /// Get/set the location of the size patch for this update.
 2927      /// </summary>
 2928      public long SizePatchOffset
 2929      {
 2930        get { return sizePatchOffset_; }
 2931        set { sizePatchOffset_ = value; }
 2932      }
 2933
 2934      /// <summary>
 2935      /// Get /set the location of the crc patch for this update.
 2936      /// </summary>
 2937      public long CrcPatchOffset
 2938      {
 2939        get { return crcPatchOffset_; }
 2940        set { crcPatchOffset_ = value; }
 2941      }
 2942
 2943      /// <summary>
 2944      /// Get/set the size calculated by offset.
 2945      /// Specifically, the difference between this and next entry's starting offset.
 2946      /// </summary>
 2947      public long OffsetBasedSize
 2948      {
 2949        get { return _offsetBasedSize; }
 2950        set { _offsetBasedSize = value; }
 2951      }
 2952
 2953      public Stream GetSource()
 2954      {
 2955        Stream result = null;
 2956        if ( dataSource_ != null ) {
 2957          result = dataSource_.GetSource();
 2958        }
 2959
 2960        return result;
 2961      }
 2962
 2963      #region Instance Fields
 2964      ZipEntry entry_;
 2965      ZipEntry outEntry_;
 2966      UpdateCommand command_;
 2967      IStaticDataSource dataSource_;
 2968      string filename_;
 2969      long sizePatchOffset_ = -1;
 2970      long crcPatchOffset_ = -1;
 2971      long _offsetBasedSize = -1;
 2972      #endregion
 2973    }
 2974
 2975    #endregion
 2976    #endregion
 2977
 2978    #region Disposing
 2979
 2980    #region IDisposable Members
 2981    void IDisposable.Dispose()
 2982    {
 2983      Close();
 2984    }
 2985    #endregion
 2986
 2987    void DisposeInternal(bool disposing)
 2988    {
 2989      if ( !isDisposed_ ) {
 2990        isDisposed_ = true;
 2991        entries_ = new ZipEntry[0];
 2992
 2993        if ( IsStreamOwner && (baseStream_ != null) ) {
 2994          lock(baseStream_) {
 2995            baseStream_.Close();
 2996          }
 2997        }
 2998
 2999        PostUpdateCleanup();
 3000      }
 3001    }
 3002
 3003    /// <summary>
 3004    /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
 3005    /// </summary>
 3006    /// <param name="disposing">true to release both managed and unmanaged resources;
 3007    /// false to release only unmanaged resources.</param>
 3008    protected virtual void Dispose(bool disposing)
 3009    {
 3010      DisposeInternal(disposing);
 3011    }
 3012
 3013    #endregion
 3014
 3015    #region Internal routines
 3016    #region Reading
 3017    /// <summary>
 3018    /// Read an unsigned short in little endian byte order.
 3019    /// </summary>
 3020    /// <returns>Returns the value read.</returns>
 3021    /// <exception cref="EndOfStreamException">
 3022    /// The stream ends prematurely
 3023    /// </exception>
 3024    ushort ReadLEUshort()
 3025    {
 3026      int data1 = baseStream_.ReadByte();
 3027
 3028      if ( data1 < 0 ) {
 3029        throw new EndOfStreamException("End of stream");
 3030      }
 3031
 3032      int data2 = baseStream_.ReadByte();
 3033
 3034      if ( data2 < 0 ) {
 3035        throw new EndOfStreamException("End of stream");
 3036      }
 3037
 3038
 3039      return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8)));
 3040    }
 3041
 3042    /// <summary>
 3043    /// Read a uint in little endian byte order.
 3044    /// </summary>
 3045    /// <returns>Returns the value read.</returns>
 3046    /// <exception cref="IOException">
 3047    /// An i/o error occurs.
 3048    /// </exception>
 3049    /// <exception cref="System.IO.EndOfStreamException">
 3050    /// The file ends prematurely
 3051    /// </exception>
 3052    uint ReadLEUint()
 3053    {
 3054      return (uint)(ReadLEUshort() | (ReadLEUshort() << 16));
 3055    }
 3056
 3057    ulong ReadLEUlong()
 3058    {
 3059      return ReadLEUint() | ((ulong)ReadLEUint() << 32);
 3060    }
 3061
 3062    #endregion
 3063    // NOTE this returns the offset of the first byte after the signature.
 3064    long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 3065    {
 3066      using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) {
 3067        return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData);
 3068      }
 3069    }
 3070
 3071    /// <summary>
 3072    /// Search for and read the central directory of a zip file filling the entries array.
 3073    /// </summary>
 3074    /// <exception cref="System.IO.IOException">
 3075    /// An i/o error occurs.
 3076    /// </exception>
 3077    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3078    /// The central directory is malformed or cannot be found
 3079    /// </exception>
 3080    void ReadEntries()
 3081    {
 3082      // Search for the End Of Central Directory.  When a zip comment is
 3083      // present the directory will start earlier
 3084      //
 3085      // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed.
 3086      // This should be compatible with both SFX and ZIP files but has only been tested for Zip files
 3087      // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then
 3088      // this could be invalid.
 3089      // Could also speed this up by reading memory in larger blocks.
 3090
 3091      if (baseStream_.CanSeek == false) {
 3092        throw new ZipException("ZipFile stream must be seekable");
 3093      }
 3094
 3095      long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 3096        baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 3097
 3098      if (locatedEndOfCentralDir < 0) {
 3099        throw new ZipException("Cannot find central directory");
 3100      }
 3101
 3102      // Read end of central directory record
 3103      ushort thisDiskNumber           = ReadLEUshort();
 3104      ushort startCentralDirDisk      = ReadLEUshort();
 3105      ulong entriesForThisDisk        = ReadLEUshort();
 3106      ulong entriesForWholeCentralDir = ReadLEUshort();
 3107      ulong centralDirSize            = ReadLEUint();
 3108      long offsetOfCentralDir         = ReadLEUint();
 3109      uint commentSize                = ReadLEUshort();
 3110
 3111      if ( commentSize > 0 ) {
 3112        byte[] comment = new byte[commentSize];
 3113
 3114        StreamUtils.ReadFully(baseStream_, comment);
 3115        comment_ = ZipConstants.ConvertToString(comment);
 3116      }
 3117      else {
 3118        comment_ = string.Empty;
 3119      }
 3120
 3121      bool isZip64 = false;
 3122
 3123      // Check if zip64 header information is required.
 3124      if ( (thisDiskNumber == 0xffff) ||
 3125        (startCentralDirDisk == 0xffff) ||
 3126        (entriesForThisDisk == 0xffff) ||
 3127        (entriesForWholeCentralDir == 0xffff) ||
 3128        (centralDirSize == 0xffffffff) ||
 3129        (offsetOfCentralDir == 0xffffffff) ) {
 3130        isZip64 = true;
 3131
 3132        long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 
 3133        if ( offset < 0 ) {
 3134          throw new ZipException("Cannot find Zip64 locator");
 3135        }
 3136
 3137        // number of the disk with the start of the zip64 end of central directory 4 bytes
 3138        // relative offset of the zip64 end of central directory record 8 bytes
 3139        // total number of disks 4 bytes
 3140        ReadLEUint(); // startDisk64 is not currently used
 3141        ulong offset64 = ReadLEUlong();
 3142        uint totalDisks = ReadLEUint();
 3143
 3144        baseStream_.Position = (long)offset64;
 3145        long sig64 = ReadLEUint();
 3146
 3147        if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) {
 3148          throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64));
 3149        }
 3150
 3151        // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12.
 3152        ulong recordSize = ReadLEUlong();
 3153        int versionMadeBy = ReadLEUshort();
 3154        int versionToExtract = ReadLEUshort();
 3155        uint thisDisk = ReadLEUint();
 3156        uint centralDirDisk = ReadLEUint();
 3157        entriesForThisDisk = ReadLEUlong();
 3158        entriesForWholeCentralDir = ReadLEUlong();
 3159        centralDirSize = ReadLEUlong();
 3160        offsetOfCentralDir = (long)ReadLEUlong();
 3161
 3162        // NOTE: zip64 extensible data sector (variable size) is ignored.
 3163      }
 3164
 3165      entries_ = new ZipEntry[entriesForThisDisk];
 3166
 3167      // SFX/embedded support, find the offset of the first entry vis the start of the stream
 3168      // This applies to Zip files that are appended to the end of an SFX stub.
 3169      // Or are appended as a resource to an executable.
 3170      // Zip files created by some archivers have the offsets altered to reflect the true offsets
 3171      // and so dont require any adjustment here...
 3172      // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths?
 3173      if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) {
 3174        offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir);
 3175        if (offsetOfFirstEntry <= 0) {
 3176          throw new ZipException("Invalid embedded zip archive");
 3177        }
 3178      }
 3179
 3180      baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin);
 3181
 3182      for (ulong i = 0; i < entriesForThisDisk; i++) {
 3183        if (ReadLEUint() != ZipConstants.CentralHeaderSignature) {
 3184          throw new ZipException("Wrong Central Directory signature");
 3185        }
 3186
 3187        int versionMadeBy      = ReadLEUshort();
 3188        int versionToExtract   = ReadLEUshort();
 3189        int bitFlags           = ReadLEUshort();
 3190        int method             = ReadLEUshort();
 3191        uint dostime           = ReadLEUint();
 3192        uint crc               = ReadLEUint();
 3193        var csize             = (long)ReadLEUint();
 3194        var size              = (long)ReadLEUint();
 3195        int nameLen            = ReadLEUshort();
 3196        int extraLen           = ReadLEUshort();
 3197        int commentLen         = ReadLEUshort();
 3198
 3199        int diskStartNo        = ReadLEUshort();  // Not currently used
 3200        int internalAttributes = ReadLEUshort();  // Not currently used
 3201
 3202        uint externalAttributes = ReadLEUint();
 3203        long offset             = ReadLEUint();
 3204
 3205        byte[] buffer = new byte[Math.Max(nameLen, commentLen)];
 3206
 3207        StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen);
 3208        string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen);
 3209
 3210        var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method);
 3211        entry.Crc = crc & 0xffffffffL;
 3212        entry.Size = size & 0xffffffffL;
 3213        entry.CompressedSize = csize & 0xffffffffL;
 3214        entry.Flags = bitFlags;
 3215        entry.DosTime = (uint)dostime;
 3216        entry.ZipFileIndex = (long)i;
 3217        entry.Offset = offset;
 3218        entry.ExternalFileAttributes = (int)externalAttributes;
 3219
 3220        if ((bitFlags & 8) == 0) {
 3221          entry.CryptoCheckValue = (byte)(crc >> 24);
 3222        }
 3223        else {
 3224          entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 3225        }
 3226
 3227        if (extraLen > 0) {
 3228          byte[] extra = new byte[extraLen];
 3229          StreamUtils.ReadFully(baseStream_, extra);
 3230          entry.ExtraData = extra;
 3231        }
 3232
 3233        entry.ProcessExtraData(false);
 3234
 3235        if (commentLen > 0) {
 3236          StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen);
 3237          entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen);
 3238        }
 3239
 3240        entries_[i] = entry;
 3241      }
 3242    }
 3243
 3244    /// <summary>
 3245    /// Locate the data for a given entry.
 3246    /// </summary>
 3247    /// <returns>
 3248    /// The start offset of the data.
 3249    /// </returns>
 3250    /// <exception cref="System.IO.EndOfStreamException">
 3251    /// The stream ends prematurely
 3252    /// </exception>
 3253    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3254    /// The local header signature is invalid, the entry and central header file name lengths are different
 3255    /// or the local and entry compression methods dont match
 3256    /// </exception>
 3257    long LocateEntry(ZipEntry entry)
 3258    {
 3259      return TestLocalHeader(entry, HeaderTest.Extract);
 3260    }
 3261
 3262#if !NETCF_1_0
 3263    Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry)
 3264    {
 3265      CryptoStream result = null;
 3266
 3267      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3268        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3269        var classicManaged = new PkzipClassicManaged();
 3270
 3271        OnKeysRequired(entry.Name);
 3272        if (HaveKeys == false) {
 3273          throw new ZipException("No password available for encrypted stream");
 3274        }
 3275
 3276        result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read);
 3277        CheckClassicPassword(result, entry);
 3278      }
 3279      else {
 3280#if !NET_1_1 && !NETCF_2_0
 3281        if (entry.Version == ZipConstants.VERSION_AES) {
 3282          //
 3283          OnKeysRequired(entry.Name);
 3284          if (HaveKeys == false) {
 3285            throw new ZipException("No password available for AES encrypted stream");
 3286          }
 3287          int saltLen = entry.AESSaltLen;
 3288          byte[] saltBytes = new byte[saltLen];
 3289          int saltIn = baseStream.Read(saltBytes, 0, saltLen);
 3290          if (saltIn != saltLen)
 3291            throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn);
 3292          //
 3293          byte[] pwdVerifyRead = new byte[2];
 3294          baseStream.Read(pwdVerifyRead, 0, 2);
 3295          int blockSize = entry.AESKeySize / 8;  // bits to bytes
 3296
 3297          var decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false);
 3298          byte[] pwdVerifyCalc = decryptor.PwdVerifier;
 3299          if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1])
 3300            throw new Exception("Invalid password for AES");
 3301          result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read);
 3302        }
 3303        else
 3304#endif
 3305        {
 3306          throw new ZipException("Decryption method not supported");
 3307        }
 3308      }
 3309
 3310      return result;
 3311    }
 3312
 3313    Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry)
 3314    {
 3315      CryptoStream result = null;
 3316      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3317        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3318        var classicManaged = new PkzipClassicManaged();
 3319
 3320        OnKeysRequired(entry.Name);
 3321        if (HaveKeys == false) {
 3322          throw new ZipException("No password available for encrypted stream");
 3323        }
 3324
 3325        // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
 3326        // which doesnt do this.
 3327        result = new CryptoStream(new UncompressedStream(baseStream),
 3328          classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
 3329
 3330        if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) {
 3331          WriteEncryptionHeader(result, entry.DosTime << 16);
 3332        }
 3333        else {
 3334          WriteEncryptionHeader(result, entry.Crc);
 3335        }
 3336      }
 3337      return result;
 3338    }
 3339
 3340    static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry)
 3341    {
 3342      byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 3343      StreamUtils.ReadFully(classicCryptoStream, cryptbuffer);
 3344      if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 3345        throw new ZipException("Invalid password");
 3346      }
 3347    }
 3348#endif
 3349
 3350    static void WriteEncryptionHeader(Stream stream, long crcValue)
 3351    {
 3352      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 3353      var rnd = new Random();
 3354      rnd.NextBytes(cryptBuffer);
 3355      cryptBuffer[11] = (byte)(crcValue >> 24);
 3356      stream.Write(cryptBuffer, 0, cryptBuffer.Length);
 3357    }
 3358
 3359    #endregion
 3360
 3361    #region Instance Fields
 3362    bool       isDisposed_;
 3363    string     name_;
 3364    string     comment_;
 3365    string     rawPassword_;
 3366    Stream     baseStream_;
 3367    bool       isStreamOwner;
 3368    long       offsetOfFirstEntry;
 3369    ZipEntry[] entries_;
 3370    byte[] key;
 3371    bool isNewArchive_;
 3372
 3373    // Default is dynamic which is not backwards compatible and can cause problems
 3374    // with XP's built in compression which cant read Zip64 archives.
 3375    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 3376    // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed.
 3377    UseZip64 useZip64_ = UseZip64.Dynamic ;
 3378
 3379    #region Zip Update Instance Fields
 3380    ArrayList updates_;
 3381    long updateCount_; // Count is managed manually as updates_ can contain nulls!
 3382    Hashtable updateIndex_;
 3383    IArchiveStorage archiveStorage_;
 3384    IDynamicDataSource updateDataSource_;
 3385    bool contentsEdited_;
 3386    int bufferSize_ = DefaultBufferSize;
 3387    byte[] copyBuffer_;
 3388    ZipString newComment_;
 3389    bool commentEdited_;
 3390    IEntryFactory updateEntryFactory_ = new ZipEntryFactory();
 3391    #endregion
 3392    #endregion
 3393
 3394    #region Support Classes
 3395    /// <summary>
 3396    /// Represents a string from a <see cref="ZipFile"/> which is stored as an array of bytes.
 3397    /// </summary>
 3398    class ZipString
 3399    {
 3400      #region Constructors
 3401      /// <summary>
 3402      /// Initialise a <see cref="ZipString"/> with a string.
 3403      /// </summary>
 3404      /// <param name="comment">The textual string form.</param>
 3405      public ZipString(string comment)
 3406      {
 3407        comment_ = comment;
 3408        isSourceString_ = true;
 3409      }
 3410
 3411      /// <summary>
 3412      /// Initialise a <see cref="ZipString"/> using a string in its binary 'raw' form.
 3413      /// </summary>
 3414      /// <param name="rawString"></param>
 3415      public ZipString(byte[] rawString)
 3416      {
 3417        rawComment_ = rawString;
 3418      }
 3419      #endregion
 3420
 3421      /// <summary>
 3422      /// Get a value indicating the original source of data for this instance.
 3423      /// True if the source was a string; false if the source was binary data.
 3424      /// </summary>
 3425      public bool IsSourceString
 3426      {
 3427        get { return isSourceString_; }
 3428      }
 3429
 3430      /// <summary>
 3431      /// Get the length of the comment when represented as raw bytes.
 3432      /// </summary>
 3433      public int RawLength
 3434      {
 3435        get {
 3436          MakeBytesAvailable();
 3437          return rawComment_.Length;
 3438        }
 3439      }
 3440
 3441      /// <summary>
 3442      /// Get the comment in its 'raw' form as plain bytes.
 3443      /// </summary>
 3444      public byte[] RawComment
 3445      {
 3446        get {
 3447          MakeBytesAvailable();
 3448          return (byte[])rawComment_.Clone();
 3449        }
 3450      }
 3451
 3452      /// <summary>
 3453      /// Reset the comment to its initial state.
 3454      /// </summary>
 3455      public void Reset()
 3456      {
 3457        if ( isSourceString_ ) {
 3458          rawComment_ = null;
 3459        }
 3460        else {
 3461          comment_ = null;
 3462        }
 3463      }
 3464
 3465      void MakeTextAvailable()
 3466      {
 3467        if ( comment_ == null ) {
 3468          comment_ = ZipConstants.ConvertToString(rawComment_);
 3469        }
 3470      }
 3471
 3472      void MakeBytesAvailable()
 3473      {
 3474        if ( rawComment_ == null ) {
 3475          rawComment_ = ZipConstants.ConvertToArray(comment_);
 3476        }
 3477      }
 3478
 3479      /// <summary>
 3480      /// Implicit conversion of comment to a string.
 3481      /// </summary>
 3482      /// <param name="zipString">The <see cref="ZipString"/> to convert to a string.</param>
 3483      /// <returns>The textual equivalent for the input value.</returns>
 3484      static public implicit operator string(ZipString zipString)
 3485      {
 3486        zipString.MakeTextAvailable();
 3487        return zipString.comment_;
 3488      }
 3489
 3490      #region Instance Fields
 3491      string comment_;
 3492      byte[] rawComment_;
 3493      bool isSourceString_;
 3494      #endregion
 3495    }
 3496
 3497    /// <summary>
 3498    /// An <see cref="IEnumerator">enumerator</see> for <see cref="ZipEntry">Zip entries</see>
 3499    /// </summary>
 3500    class ZipEntryEnumerator : IEnumerator
 3501    {
 3502      #region Constructors
 3503      public ZipEntryEnumerator(ZipEntry[] entries)
 3504      {
 3505        array = entries;
 3506      }
 3507
 3508      #endregion
 3509      #region IEnumerator Members
 3510      public object Current
 3511      {
 3512        get {
 3513          return array[index];
 3514        }
 3515      }
 3516
 3517      public void Reset()
 3518      {
 3519        index = -1;
 3520      }
 3521
 3522      public bool MoveNext()
 3523      {
 3524        return (++index < array.Length);
 3525      }
 3526      #endregion
 3527      #region Instance Fields
 3528      ZipEntry[] array;
 3529      int index = -1;
 3530      #endregion
 3531    }
 3532
 3533    /// <summary>
 3534    /// An <see cref="UncompressedStream"/> is a stream that you can write uncompressed data
 3535    /// to and flush, but cannot read, seek or do anything else to.
 3536    /// </summary>
 3537    class UncompressedStream : Stream
 3538    {
 3539      #region Constructors
 3540      public UncompressedStream(Stream baseStream)
 3541      {
 3542        baseStream_ = baseStream;
 3543      }
 3544
 3545      #endregion
 3546
 3547      /// <summary>
 3548      /// Close this stream instance.
 3549      /// </summary>
 3550      public override void Close()
 3551      {
 3552        // Do nothing
 3553      }
 3554
 3555      /// <summary>
 3556      /// Gets a value indicating whether the current stream supports reading.
 3557      /// </summary>
 3558      public override bool CanRead
 3559      {
 3560        get {
 3561          return false;
 3562        }
 3563      }
 3564
 3565      /// <summary>
 3566      /// Write any buffered data to underlying storage.
 3567      /// </summary>
 3568      public override void Flush()
 3569      {
 3570        baseStream_.Flush();
 3571      }
 3572
 3573      /// <summary>
 3574      /// Gets a value indicating whether the current stream supports writing.
 3575      /// </summary>
 3576      public override bool CanWrite
 3577      {
 3578        get {
 3579          return baseStream_.CanWrite;
 3580        }
 3581      }
 3582
 3583      /// <summary>
 3584      /// Gets a value indicating whether the current stream supports seeking.
 3585      /// </summary>
 3586      public override bool CanSeek
 3587      {
 3588        get {
 3589          return false;
 3590        }
 3591      }
 3592
 3593      /// <summary>
 3594      /// Get the length in bytes of the stream.
 3595      /// </summary>
 3596      public override long Length
 3597      {
 3598        get {
 3599          return 0;
 3600        }
 3601      }
 3602
 3603      /// <summary>
 3604      /// Gets or sets the position within the current stream.
 3605      /// </summary>
 3606      public override long Position
 3607      {
 3608        get  {
 3609          return baseStream_.Position;
 3610        }
 3611                set {
 3612                    throw new NotImplementedException();
 3613                }
 3614            }
 3615
 3616            /// <summary>
 3617            /// Reads a sequence of bytes from the current stream and advances the position within the stream by the num
 3618            /// </summary>
 3619            /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte
 3620            /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from t
 3621            /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3622            /// <returns>
 3623            /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if t
 3624            /// </returns>
 3625            /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer lengt
 3626            /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </ex
 3627            /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3628            /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3629            /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3630            /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3631            public override int Read(byte[] buffer, int offset, int count)
 3632      {
 3633        return 0;
 3634      }
 3635
 3636      /// <summary>
 3637      /// Sets the position within the current stream.
 3638      /// </summary>
 3639      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3640      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3641      /// <returns>
 3642      /// The new position within the current stream.
 3643      /// </returns>
 3644      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3645      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3646      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3647      public override long Seek(long offset, SeekOrigin origin)
 3648      {
 3649        return 0;
 3650      }
 3651
 3652      /// <summary>
 3653      /// Sets the length of the current stream.
 3654      /// </summary>
 3655      /// <param name="value">The desired length of the current stream in bytes.</param>
 3656      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3657      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3658      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3659      public override void SetLength(long value)
 3660      {
 3661      }
 3662
 3663      /// <summary>
 3664      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3665      /// </summary>
 3666      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3667      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3668      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3669      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3670      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3671      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3672      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3673      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3674      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3675      public override void Write(byte[] buffer, int offset, int count)
 3676      {
 3677        baseStream_.Write(buffer, offset, count);
 3678      }
 3679
 3680      readonly
 3681
 3682      #region Instance Fields
 3683      Stream baseStream_;
 3684      #endregion
 3685    }
 3686
 3687    /// <summary>
 3688    /// A <see cref="PartialInputStream"/> is an <see cref="InflaterInputStream"/>
 3689    /// whose data is only a part or subsection of a file.
 3690    /// </summary>
 3691    class PartialInputStream : Stream
 3692    {
 3693      #region Constructors
 3694      /// <summary>
 3695      /// Initialise a new instance of the <see cref="PartialInputStream"/> class.
 3696      /// </summary>
 3697      /// <param name="zipFile">The <see cref="ZipFile"/> containing the underlying stream to use for IO.</param>
 3698      /// <param name="start">The start of the partial data.</param>
 3699      /// <param name="length">The length of the partial data.</param>
 3700      public PartialInputStream(ZipFile zipFile, long start, long length)
 3701      {
 3702        start_ = start;
 3703        length_ = length;
 3704
 3705        // Although this is the only time the zipfile is used
 3706        // keeping a reference here prevents premature closure of
 3707        // this zip file and thus the baseStream_.
 3708
 3709        // Code like this will cause apparently random failures depending
 3710        // on the size of the files and when garbage is collected.
 3711        //
 3712        // ZipFile z = new ZipFile (stream);
 3713        // Stream reader = z.GetInputStream(0);
 3714        // uses reader here....
 3715        zipFile_ = zipFile;
 3716        baseStream_ = zipFile_.baseStream_;
 3717        readPos_ = start;
 3718        end_ = start + length;
 3719      }
 3720      #endregion
 3721
 3722      /// <summary>
 3723      /// Read a byte from this stream.
 3724      /// </summary>
 3725      /// <returns>Returns the byte read or -1 on end of stream.</returns>
 3726      public override int ReadByte()
 3727      {
 3728        if (readPos_ >= end_) {
 3729           // -1 is the correct value at end of stream.
 3730          return -1;
 3731        }
 3732
 3733        lock( baseStream_ ) {
 3734          baseStream_.Seek(readPos_++, SeekOrigin.Begin);
 3735          return baseStream_.ReadByte();
 3736        }
 3737      }
 3738
 3739      /// <summary>
 3740      /// Close this <see cref="PartialInputStream">partial input stream</see>.
 3741      /// </summary>
 3742      /// <remarks>
 3743      /// The underlying stream is not closed.  Close the parent ZipFile class to do that.
 3744      /// </remarks>
 3745      public override void Close()
 3746      {
 3747        // Do nothing at all!
 3748      }
 3749
 3750      /// <summary>
 3751      /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of
 3752      /// </summary>
 3753      /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte array
 3754      /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the cur
 3755      /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3756      /// <returns>
 3757      /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that ma
 3758      /// </returns>
 3759      /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer length. </e
 3760      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3761      /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3762      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3763      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3764      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3765      public override int Read(byte[] buffer, int offset, int count)
 3766      {
 3767        lock(baseStream_) {
 3768          if (count > end_ - readPos_) {
 3769            count = (int) (end_ - readPos_);
 3770            if (count == 0) {
 3771              return 0;
 3772            }
 3773          }
 3774
 3775          baseStream_.Seek(readPos_, SeekOrigin.Begin);
 3776          int readCount = baseStream_.Read(buffer, offset, count);
 3777          if (readCount > 0) {
 3778            readPos_ += readCount;
 3779          }
 3780          return readCount;
 3781        }
 3782      }
 3783
 3784      /// <summary>
 3785      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3786      /// </summary>
 3787      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3788      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3789      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3790      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3791      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3792      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3793      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3794      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3795      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3796      public override void Write(byte[] buffer, int offset, int count)
 3797      {
 3798        throw new NotSupportedException();
 3799      }
 3800
 3801      /// <summary>
 3802      /// When overridden in a derived class, sets the length of the current stream.
 3803      /// </summary>
 3804      /// <param name="value">The desired length of the current stream in bytes.</param>
 3805      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3806      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3807      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3808      public override void SetLength(long value)
 3809      {
 3810        throw new NotSupportedException();
 3811      }
 3812
 3813      /// <summary>
 3814      /// When overridden in a derived class, sets the position within the current stream.
 3815      /// </summary>
 3816      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3817      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3818      /// <returns>
 3819      /// The new position within the current stream.
 3820      /// </returns>
 3821      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3822      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3823      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3824      public override long Seek(long offset, SeekOrigin origin)
 3825      {
 3826        long newPos = readPos_;
 3827
 3828        switch ( origin )
 3829        {
 3830          case SeekOrigin.Begin:
 3831            newPos = start_ + offset;
 3832            break;
 3833
 3834          case SeekOrigin.Current:
 3835            newPos = readPos_ + offset;
 3836            break;
 3837
 3838          case SeekOrigin.End:
 3839            newPos = end_ + offset;
 3840            break;
 3841        }
 3842
 3843        if ( newPos < start_ ) {
 3844          throw new ArgumentException("Negative position is invalid");
 3845        }
 3846
 3847        if ( newPos >= end_ ) {
 3848          throw new IOException("Cannot seek past end");
 3849        }
 3850        readPos_ = newPos;
 3851        return readPos_;
 3852      }
 3853
 3854      /// <summary>
 3855      /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device.
 3856      /// </summary>
 3857      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3858      public override void Flush()
 3859      {
 3860        // Nothing to do.
 3861      }
 3862
 3863      /// <summary>
 3864      /// Gets or sets the position within the current stream.
 3865      /// </summary>
 3866      /// <value></value>
 3867      /// <returns>The current position within the stream.</returns>
 3868      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3869      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking. </exception>
 3870      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3871      public override long Position {
 3872        get { return readPos_ - start_; }
 3873        set {
 3874          long newPos = start_ + value;
 3875
 3876          if ( newPos < start_ ) {
 3877            throw new ArgumentException("Negative position is invalid");
 3878          }
 3879
 3880          if ( newPos >= end_ ) {
 3881            throw new InvalidOperationException("Cannot seek past end");
 3882          }
 3883          readPos_ = newPos;
 3884        }
 3885      }
 3886
 3887      /// <summary>
 3888      /// Gets the length in bytes of the stream.
 3889      /// </summary>
 3890      /// <value></value>
 3891      /// <returns>A long value representing the length of the stream in bytes.</returns>
 3892      /// <exception cref="T:System.NotSupportedException">A class derived from Stream does not support seeking. </excep
 3893      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3894      public override long Length {
 3895        get { return length_; }
 3896      }
 3897
 3898      /// <summary>
 3899      /// Gets a value indicating whether the current stream supports writing.
 3900      /// </summary>
 3901      /// <value>false</value>
 3902      /// <returns>true if the stream supports writing; otherwise, false.</returns>
 3903      public override bool CanWrite {
 3904        get { return false; }
 3905      }
 3906
 3907      /// <summary>
 3908      /// Gets a value indicating whether the current stream supports seeking.
 3909      /// </summary>
 3910      /// <value>true</value>
 3911      /// <returns>true if the stream supports seeking; otherwise, false.</returns>
 3912      public override bool CanSeek {
 3913        get { return true; }
 3914      }
 3915
 3916      /// <summary>
 3917      /// Gets a value indicating whether the current stream supports reading.
 3918      /// </summary>
 3919      /// <value>true.</value>
 3920      /// <returns>true if the stream supports reading; otherwise, false.</returns>
 3921      public override bool CanRead {
 3922        get { return true; }
 3923      }
 3924
 3925#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 3926      /// <summary>
 3927      /// Gets a value that determines whether the current stream can time out.
 3928      /// </summary>
 3929      /// <value></value>
 3930      /// <returns>A value that determines whether the current stream can time out.</returns>
 3931      public override bool CanTimeout {
 3932        get { return baseStream_.CanTimeout; }
 3933      }
 3934#endif
 3935      #region Instance Fields
 3936      ZipFile zipFile_;
 3937      Stream baseStream_;
 3938      long start_;
 3939      long length_;
 3940      long readPos_;
 3941      long end_;
 3942      #endregion
 3943    }
 3944    #endregion
 3945  }
 3946
 3947  #endregion
 3948
 3949  #region DataSources
 3950  /// <summary>
 3951  /// Provides a static way to obtain a source of data for an entry.
 3952  /// </summary>
 3953  public interface IStaticDataSource
 3954  {
 3955    /// <summary>
 3956    /// Get a source of data by creating a new stream.
 3957    /// </summary>
 3958    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3959    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3960    Stream GetSource();
 3961  }
 3962
 3963  /// <summary>
 3964  /// Represents a source of data that can dynamically provide
 3965  /// multiple <see cref="Stream">data sources</see> based on the parameters passed.
 3966  /// </summary>
 3967  public interface IDynamicDataSource
 3968  {
 3969    /// <summary>
 3970    /// Get a data source.
 3971    /// </summary>
 3972    /// <param name="entry">The <see cref="ZipEntry"/> to get a source for.</param>
 3973    /// <param name="name">The name for data if known.</param>
 3974    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3975    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3976    Stream GetSource(ZipEntry entry, string name);
 3977  }
 3978
 3979  /// <summary>
 3980  /// Default implementation of a <see cref="IStaticDataSource"/> for use with files stored on disk.
 3981  /// </summary>
 3982  public class StaticDiskDataSource : IStaticDataSource
 3983  {
 3984    /// <summary>
 3985    /// Initialise a new instnace of <see cref="StaticDiskDataSource"/>
 3986    /// </summary>
 3987    /// <param name="fileName">The name of the file to obtain data from.</param>
 3988    public StaticDiskDataSource(string fileName)
 3989    {
 3990      fileName_ = fileName;
 3991    }
 3992
 3993    #region IDataSource Members
 3994
 3995    /// <summary>
 3996    /// Get a <see cref="Stream"/> providing data.
 3997    /// </summary>
 3998    /// <returns>Returns a <see cref="Stream"/> provising data.</returns>
 3999    public Stream GetSource()
 4000    {
 4001      return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4002    }
 4003
 4004    readonly
 4005
 4006    #endregion
 4007    #region Instance Fields
 4008    string fileName_;
 4009    #endregion
 4010  }
 4011
 4012
 4013  /// <summary>
 4014  /// Default implementation of <see cref="IDynamicDataSource"/> for files stored on disk.
 4015  /// </summary>
 4016  public class DynamicDiskDataSource : IDynamicDataSource
 4017  {
 4018
 4019    #region IDataSource Members
 4020    /// <summary>
 4021    /// Get a <see cref="Stream"/> providing data for an entry.
 4022    /// </summary>
 4023    /// <param name="entry">The entry to provide data for.</param>
 4024    /// <param name="name">The file name for data if known.</param>
 4025    /// <returns>Returns a stream providing data; or null if not available</returns>
 4026    public Stream GetSource(ZipEntry entry, string name)
 4027    {
 4028      Stream result = null;
 4029
 4030      if ( name != null ) {
 4031        result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 4032      }
 4033
 4034      return result;
 4035    }
 4036
 4037    #endregion
 4038  }
 4039
 4040  #endregion
 4041
 4042  #region Archive Storage
 4043  /// <summary>
 4044  /// Defines facilities for data storage when updating Zip Archives.
 4045  /// </summary>
 4046  public interface IArchiveStorage
 4047  {
 4048    /// <summary>
 4049    /// Get the <see cref="FileUpdateMode"/> to apply during updates.
 4050    /// </summary>
 4051    FileUpdateMode UpdateMode { get; }
 4052
 4053    /// <summary>
 4054    /// Get an empty <see cref="Stream"/> that can be used for temporary output.
 4055    /// </summary>
 4056    /// <returns>Returns a temporary output <see cref="Stream"/></returns>
 4057    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4058    Stream GetTemporaryOutput();
 4059
 4060    /// <summary>
 4061    /// Convert a temporary output stream to a final stream.
 4062    /// </summary>
 4063    /// <returns>The resulting final <see cref="Stream"/></returns>
 4064    /// <seealso cref="GetTemporaryOutput"/>
 4065    Stream ConvertTemporaryToFinal();
 4066
 4067    /// <summary>
 4068    /// Make a temporary copy of the original stream.
 4069    /// </summary>
 4070    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4071    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4072    Stream MakeTemporaryCopy(Stream stream);
 4073
 4074    /// <summary>
 4075    /// Return a stream suitable for performing direct updates on the original source.
 4076    /// </summary>
 4077    /// <param name="stream">The current stream.</param>
 4078    /// <returns>Returns a stream suitable for direct updating.</returns>
 4079    /// <remarks>This may be the current stream passed.</remarks>
 4080    Stream OpenForDirectUpdate(Stream stream);
 4081
 4082    /// <summary>
 4083    /// Dispose of this instance.
 4084    /// </summary>
 4085    void Dispose();
 4086  }
 4087
 4088  /// <summary>
 4089  /// An abstract <see cref="IArchiveStorage"/> suitable for extension by inheritance.
 4090  /// </summary>
 4091  abstract public class BaseArchiveStorage : IArchiveStorage
 4092  {
 4093    #region Constructors
 4094    /// <summary>
 4095    /// Initializes a new instance of the <see cref="BaseArchiveStorage"/> class.
 4096    /// </summary>
 4097    /// <param name="updateMode">The update mode.</param>
 4098    protected BaseArchiveStorage(FileUpdateMode updateMode)
 4099    {
 4100      updateMode_ = updateMode;
 4101    }
 4102    #endregion
 4103
 4104    #region IArchiveStorage Members
 4105
 4106    /// <summary>
 4107    /// Gets a temporary output <see cref="Stream"/>
 4108    /// </summary>
 4109    /// <returns>Returns the temporary output stream.</returns>
 4110    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4111    public abstract Stream GetTemporaryOutput();
 4112
 4113    /// <summary>
 4114    /// Converts the temporary <see cref="Stream"/> to its final form.
 4115    /// </summary>
 4116    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4117    /// the final storage for the archive.</returns>
 4118    /// <seealso cref="GetTemporaryOutput"/>
 4119    public abstract Stream ConvertTemporaryToFinal();
 4120
 4121    /// <summary>
 4122    /// Make a temporary copy of a <see cref="Stream"/>.
 4123    /// </summary>
 4124    /// <param name="stream">The <see cref="Stream"/> to make a copy of.</param>
 4125    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4126    public abstract Stream MakeTemporaryCopy(Stream stream);
 4127
 4128    /// <summary>
 4129    /// Return a stream suitable for performing direct updates on the original source.
 4130    /// </summary>
 4131    /// <param name="stream">The <see cref="Stream"/> to open for direct update.</param>
 4132    /// <returns>Returns a stream suitable for direct updating.</returns>
 4133    public abstract Stream OpenForDirectUpdate(Stream stream);
 4134
 4135    /// <summary>
 4136    /// Disposes this instance.
 4137    /// </summary>
 4138    public abstract void Dispose();
 4139
 4140    /// <summary>
 4141    /// Gets the update mode applicable.
 4142    /// </summary>
 4143    /// <value>The update mode.</value>
 4144    public FileUpdateMode UpdateMode
 4145    {
 4146      get {
 4147        return updateMode_;
 4148      }
 4149    }
 4150
 4151    #endregion
 4152
 4153    #region Instance Fields
 4154    FileUpdateMode updateMode_;
 4155    #endregion
 4156  }
 4157
 4158  /// <summary>
 4159  /// An <see cref="IArchiveStorage"/> implementation suitable for hard disks.
 4160  /// </summary>
 4161  public class DiskArchiveStorage : BaseArchiveStorage
 4162  {
 4163    #region Constructors
 4164    /// <summary>
 4165    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4166    /// </summary>
 4167    /// <param name="file">The file.</param>
 4168    /// <param name="updateMode">The update mode.</param>
 4169    public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode)
 4170      : base(updateMode)
 4171    {
 4172      if ( file.Name == null ) {
 4173        throw new ZipException("Cant handle non file archives");
 4174      }
 4175
 4176      fileName_ = file.Name;
 4177    }
 4178
 4179    /// <summary>
 4180    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4181    /// </summary>
 4182    /// <param name="file">The file.</param>
 4183    public DiskArchiveStorage(ZipFile file)
 4184      : this(file, FileUpdateMode.Safe)
 4185    {
 4186    }
 4187    #endregion
 4188
 4189    #region IArchiveStorage Members
 4190
 4191    /// <summary>
 4192    /// Gets a temporary output <see cref="Stream"/> for performing updates on.
 4193    /// </summary>
 4194    /// <returns>Returns the temporary output stream.</returns>
 4195    public override Stream GetTemporaryOutput()
 4196    {
 4197      if ( temporaryName_ != null ) {
 4198        temporaryName_ = GetTempFileName(temporaryName_, true);
 4199        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4200      }
 4201      else {
 4202        // Determine where to place files based on internal strategy.
 4203        // Currently this is always done in system temp directory.
 4204        temporaryName_ = Path.GetTempFileName();
 4205        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4206      }
 4207
 4208      return temporaryStream_;
 4209    }
 4210
 4211    /// <summary>
 4212    /// Converts a temporary <see cref="Stream"/> to its final form.
 4213    /// </summary>
 4214    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4215    /// the final storage for the archive.</returns>
 4216    public override Stream ConvertTemporaryToFinal()
 4217    {
 4218      if ( temporaryStream_ == null ) {
 4219        throw new ZipException("No temporary stream has been created");
 4220      }
 4221
 4222      Stream result = null;
 4223
 4224      string moveTempName = GetTempFileName(fileName_, false);
 4225      bool newFileCreated = false;
 4226
 4227      try  {
 4228        temporaryStream_.Close();
 4229        File.Move(fileName_, moveTempName);
 4230        File.Move(temporaryName_, fileName_);
 4231        newFileCreated = true;
 4232        File.Delete(moveTempName);
 4233
 4234        result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4235      }
 4236      catch(Exception) {
 4237        result  = null;
 4238
 4239        // Try to roll back changes...
 4240        if ( !newFileCreated ) {
 4241          File.Move(moveTempName, fileName_);
 4242          File.Delete(temporaryName_);
 4243        }
 4244
 4245        throw;
 4246      }
 4247
 4248      return result;
 4249    }
 4250
 4251    /// <summary>
 4252    /// Make a temporary copy of a stream.
 4253    /// </summary>
 4254    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4255    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4256    public override Stream MakeTemporaryCopy(Stream stream)
 4257    {
 4258      stream.Close();
 4259
 4260      temporaryName_ = GetTempFileName(fileName_, true);
 4261      File.Copy(fileName_, temporaryName_, true);
 4262
 4263      temporaryStream_ = new FileStream(temporaryName_,
 4264        FileMode.Open,
 4265        FileAccess.ReadWrite);
 4266      return temporaryStream_;
 4267    }
 4268
 4269    /// <summary>
 4270    /// Return a stream suitable for performing direct updates on the original source.
 4271    /// </summary>
 4272    /// <param name="stream">The current stream.</param>
 4273    /// <returns>Returns a stream suitable for direct updating.</returns>
 4274    /// <remarks>If the <paramref name="stream"/> is not null this is used as is.</remarks>
 4275    public override Stream OpenForDirectUpdate(Stream stream)
 4276    {
 4277      Stream result;
 4278      if ((stream == null) || !stream.CanWrite)
 4279      {
 4280        if (stream != null) {
 4281          stream.Close();
 4282        }
 4283
 4284        result = new FileStream(fileName_,
 4285            FileMode.Open,
 4286            FileAccess.ReadWrite);
 4287      }
 4288      else
 4289      {
 4290        result = stream;
 4291      }
 4292
 4293      return result;
 4294    }
 4295
 4296    /// <summary>
 4297    /// Disposes this instance.
 4298    /// </summary>
 4299    public override void Dispose()
 4300    {
 4301      if ( temporaryStream_ != null ) {
 4302        temporaryStream_.Close();
 4303      }
 4304    }
 4305
 4306    #endregion
 4307
 4308    #region Internal routines
 4309    static string GetTempFileName(string original, bool makeTempFile)
 4310    {
 4311      string result = null;
 4312
 4313      if ( original == null ) {
 4314        result = Path.GetTempFileName();
 4315      }
 4316      else {
 4317        int counter = 0;
 4318        int suffixSeed = DateTime.Now.Second;
 4319
 4320        while ( result == null ) {
 4321          counter += 1;
 4322          string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter);
 4323          if ( !File.Exists(newName) ) {
 4324            if ( makeTempFile) {
 4325              try  {
 4326                // Try and create the file.
 4327                using ( FileStream stream = File.Create(newName) ) {
 4328                }
 4329                result = newName;
 4330              }
 4331              catch {
 4332                suffixSeed = DateTime.Now.Second;
 4333              }
 4334            }
 4335            else {
 4336              result = newName;
 4337            }
 4338          }
 4339        }
 4340      }
 4341      return result;
 4342    }
 4343    #endregion
 4344
 4345    #region Instance Fields
 4346    Stream temporaryStream_;
 4347    string fileName_;
 4348    string temporaryName_;
 4349    #endregion
 4350  }
 4351
 4352  /// <summary>
 4353  /// An <see cref="IArchiveStorage"/> implementation suitable for in memory streams.
 4354  /// </summary>
 4355  public class MemoryArchiveStorage : BaseArchiveStorage
 4356  {
 4357    #region Constructors
 4358    /// <summary>
 4359    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4360    /// </summary>
 4361    public MemoryArchiveStorage()
 4362      : base(FileUpdateMode.Direct)
 4363    {
 4364    }
 4365
 4366    /// <summary>
 4367    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4368    /// </summary>
 4369    /// <param name="updateMode">The <see cref="FileUpdateMode"/> to use</param>
 4370    /// <remarks>This constructor is for testing as memory streams dont really require safe mode.</remarks>
 4371    public MemoryArchiveStorage(FileUpdateMode updateMode)
 4372      : base(updateMode)
 4373    {
 4374    }
 4375
 4376    #endregion
 4377
 4378    #region Properties
 4379    /// <summary>
 4380    /// Get the stream returned by <see cref="ConvertTemporaryToFinal"/> if this was in fact called.
 4381    /// </summary>
 4382    public MemoryStream FinalStream
 4383    {
 4384      get { return finalStream_; }
 4385    }
 4386
 4387    #endregion
 4388
 4389    #region IArchiveStorage Members
 4390
 4391    /// <summary>
 4392    /// Gets the temporary output <see cref="Stream"/>
 4393    /// </summary>
 4394    /// <returns>Returns the temporary output stream.</returns>
 4395    public override Stream GetTemporaryOutput()
 4396    {
 4397      temporaryStream_ = new MemoryStream();
 4398      return temporaryStream_;
 4399    }
 4400
 4401    /// <summary>
 4402    /// Converts the temporary <see cref="Stream"/> to its final form.
 4403    /// </summary>
 4404    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4405    /// the final storage for the archive.</returns>
 4406    public override Stream ConvertTemporaryToFinal()
 4407    {
 4408      if ( temporaryStream_ == null ) {
 4409        throw new ZipException("No temporary stream has been created");
 4410      }
 4411
 4412      finalStream_ = new MemoryStream(temporaryStream_.ToArray());
 4413      return finalStream_;
 4414    }
 4415
 4416    /// <summary>
 4417    /// Make a temporary copy of the original stream.
 4418    /// </summary>
 4419    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4420    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4421    public override Stream MakeTemporaryCopy(Stream stream)
 4422    {
 4423      temporaryStream_ = new MemoryStream();
 4424      stream.Position = 0;
 4425      StreamUtils.Copy(stream, temporaryStream_, new byte[4096]);
 4426      return temporaryStream_;
 4427    }
 4428
 4429    /// <summary>
 4430    /// Return a stream suitable for performing direct updates on the original source.
 4431    /// </summary>
 4432    /// <param name="stream">The original source stream</param>
 4433    /// <returns>Returns a stream suitable for direct updating.</returns>
 4434    /// <remarks>If the <paramref name="stream"/> passed is not null this is used;
 4435    /// otherwise a new <see cref="MemoryStream"/> is returned.</remarks>
 4436    public override Stream OpenForDirectUpdate(Stream stream)
 4437    {
 4438      Stream result;
 4439      if ((stream == null) || !stream.CanWrite) {
 4440
 4441        result = new MemoryStream();
 4442
 4443        if (stream != null) {
 4444          stream.Position = 0;
 4445          StreamUtils.Copy(stream, result, new byte[4096]);
 4446
 4447          stream.Close();
 4448        }
 4449      }
 4450      else {
 4451        result = stream;
 4452      }
 4453
 4454      return result;
 4455    }
 4456
 4457    /// <summary>
 4458    /// Disposes this instance.
 4459    /// </summary>
 4460    public override void Dispose()
 4461    {
 4462      if ( temporaryStream_ != null ) {
 4463        temporaryStream_.Close();
 4464      }
 4465    }
 4466
 4467    #endregion
 4468
 4469    #region Instance Fields
 4470    MemoryStream temporaryStream_;
 4471    MemoryStream finalStream_;
 4472    #endregion
 4473  }
 4474
 4475  #endregion
 4476}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_LzwConstants.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_LzwConstants.htm new file mode 100644 index 000000000..50b5f8764 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_LzwConstants.htm @@ -0,0 +1,135 @@ + + + + +ICSharpCode.SharpZipLib.LZW.LzwConstants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.LZW.LzwConstants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwConstants.cs
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:94
Line coverage:0%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwConstants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// LzwConstants.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36namespace ICSharpCode.SharpZipLib.LZW {
 37
 38    /// <summary>
 39    /// This class contains constants used for LZW
 40    /// </summary>
 41    sealed public class LzwConstants {
 42        /// <summary>
 43        /// Magic number found at start of LZW header: 0x1f 0x9d
 44        /// </summary>
 45        public const int MAGIC = 0x1f9d;
 46
 47        /// <summary>
 48        /// Maximum number of bits per code
 49        /// </summary>
 50        public const int MAX_BITS = 16;
 51
 52        /* 3rd header byte:
 53         * bit 0..4 Number of compression bits
 54         * bit 5    Extended header
 55         * bit 6    Free
 56         * bit 7    Block mode
 57         */
 58
 59        /// <summary>
 60        /// Mask for 'number of compression bits'
 61        /// </summary>
 62        public const int BIT_MASK       = 0x1f;
 63
 64        /// <summary>
 65        /// Indicates the presence of a fourth header byte
 66        /// </summary>
 67        public const int EXTENDED_MASK  = 0x20;
 68        //public const int FREE_MASK      = 0x40;
 69
 70        /// <summary>
 71        /// Reserved bits
 72        /// </summary>
 73        public const int RESERVED_MASK  = 0x60;
 74
 75        /// <summary>
 76        /// Block compression: if table is full and compression rate is dropping,
 77        /// clear the dictionary.
 78        /// </summary>
 79        public const int BLOCK_MODE_MASK = 0x80;
 80
 81        /// <summary>
 82        /// LZW file header size (in bytes)
 83        /// </summary>
 84        public const int HDR_SIZE = 3;
 85
 86        /// <summary>
 87        /// Initial number of bits per code
 88        /// </summary>
 89        public const int INIT_BITS = 9;
 90
 091        LzwConstants() {
 092        }
 93    }
 94}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_LzwException.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_LzwException.htm new file mode 100644 index 000000000..5676f3d75 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_LzwException.htm @@ -0,0 +1,132 @@ + + + + +ICSharpCode.SharpZipLib.LZW.LzwException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.LZW.LzwException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwException.cs
Covered lines:2
Uncovered lines:6
Coverable lines:8
Total lines:88
Line coverage:25%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)1100100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// LzwException.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37
 38#if !NETCF_1_0 && !NETCF_2_0
 39using System.Runtime.Serialization;
 40#endif
 41
 42namespace ICSharpCode.SharpZipLib.LZW
 43{
 44
 45    /// <summary>
 46    /// LzwException represents a LZW specific exception
 47    /// </summary>
 48#if !NETCF_1_0 && !NETCF_2_0
 49    [Serializable]
 50#endif
 51    public class LzwException : SharpZipBaseException
 52    {
 53
 54#if !NETCF_1_0 && !NETCF_2_0
 55        /// <summary>
 56        /// Deserialization constructor
 57        /// </summary>
 58        /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 59        /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 60        protected LzwException(SerializationInfo info, StreamingContext context)
 061            : base(info, context) {
 062        }
 63#endif
 64
 65        /// <summary>
 66        /// Initialise a new instance of LzwException
 67        /// </summary>
 068        public LzwException() {
 069        }
 70
 71        /// <summary>
 72        /// Initialise a new instance of LzwException with its message string.
 73        /// </summary>
 74        /// <param name="message">A <see cref="string"/> that describes the error.</param>
 75        public LzwException(string message)
 176            : base(message) {
 177        }
 78
 79        /// <summary>
 80        /// Initialise a new instance of <see cref="LzwException"></see>.
 81        /// </summary>
 82        /// <param name="message">A <see cref="string"/> that describes the error.</param>
 83        /// <param name="innerException">The <see cref="Exception"/> that caused this exception.</param>
 84        public LzwException(string message, Exception innerException)
 085            : base(message, innerException) {
 086        }
 87    }
 88}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_LzwInputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_LzwInputStream.htm new file mode 100644 index 000000000..cab6e9522 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_LzwInputStream.htm @@ -0,0 +1,653 @@ + + + + +ICSharpCode.SharpZipLib.LZW.LzwInputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.LZW.LzwInputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwInputStream.cs
Covered lines:23
Uncovered lines:168
Coverable lines:191
Total lines:599
Line coverage:12%
Branch coverage:11.2%
+

Metrics

+ + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
ReadByte()22533.33
Read(...)251.714.88
ResetBuf(...)100
Fill()200
ParseHeader()920.6926.67
Flush()100
Seek(...)100
SetLength(...)100
Write(...)100
WriteByte(...)100
BeginWrite(...)100
Close()310080
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwInputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// LzwInputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38
 39namespace ICSharpCode.SharpZipLib.LZW
 40{
 41
 42    /// <summary>
 43    /// This filter stream is used to decompress a LZW format stream.
 44    /// Specifically, a stream that uses the LZC compression method.
 45    /// This file format is usually associated with the .Z file extension.
 46    ///
 47    /// See http://en.wikipedia.org/wiki/Compress
 48    /// See http://wiki.wxwidgets.org/Development:_Z_File_Format
 49    ///
 50    /// The file header consists of 3 (or optionally 4) bytes. The first two bytes
 51    /// contain the magic marker "0x1f 0x9d", followed by a byte of flags.
 52    ///
 53    /// Based on Java code by Ronald Tschalar, which in turn was based on the unlzw.c
 54    /// code in the gzip package.
 55    /// </summary>
 56    /// <example> This sample shows how to unzip a compressed file
 57    /// <code>
 58    /// using System;
 59    /// using System.IO;
 60    ///
 61    /// using ICSharpCode.SharpZipLib.Core;
 62    /// using ICSharpCode.SharpZipLib.LZW;
 63    ///
 64    /// class MainClass
 65    /// {
 66    ///   public static void Main(string[] args)
 67    ///   {
 68    ///      using (Stream inStream = new LzwInputStream(File.OpenRead(args[0])))
 69    ///      using (FileStream outStream = File.Create(Path.GetFileNameWithoutExtension(args[0]))) {
 70    ///        byte[] buffer = new byte[4096];
 71    ///        StreamUtils.Copy(inStream, outStream, buffer);
 72    ///                         // OR
 73    ///                         inStream.Read(buffer, 0, buffer.Length);
 74    ///                         // now do something with the buffer
 75    ///     }
 76    ///   }
 77    /// }
 78    /// </code>
 79    /// </example>
 80    public class LzwInputStream : Stream
 81    {
 82        /// <summary>
 83        /// Get/set flag indicating ownership of underlying stream.
 84        /// When the flag is true <see cref="Close"/> will close the underlying stream also.
 85        /// </summary>
 86        /// <remarks>
 87        /// The default value is true.
 88        /// </remarks>
 89        public bool IsStreamOwner
 90        {
 091            get { return isStreamOwner; }
 292            set { isStreamOwner = value; }
 93        }
 94
 95        /// <summary>
 96        /// Creates a LzwInputStream
 97        /// </summary>
 98        /// <param name="baseInputStream">
 99        /// The stream to read compressed data from (baseInputStream LZW format)
 100        /// </param>
 3101        public LzwInputStream(Stream baseInputStream) {
 3102            this.baseInputStream = baseInputStream;
 3103        }
 104
 105        /// <summary>
 106        /// See <see cref="System.IO.Stream.ReadByte"/>
 107        /// </summary>
 108        /// <returns></returns>
 109        public override int ReadByte() {
 1110            int b = Read(one, 0, 1);
 0111             if (b == 1)
 0112                return (one[0] & 0xff);
 0113            return -1;
 114        }
 115
 116        /// <summary>
 117        /// Reads decompressed data into the provided buffer byte array
 118        /// </summary>
 119        /// <param name ="buffer">
 120        /// The array to read and decompress data into
 121        /// </param>
 122        /// <param name ="offset">
 123        /// The offset indicating where the data should be placed
 124        /// </param>
 125        /// <param name ="count">
 126        /// The number of bytes to decompress
 127        /// </param>
 128        /// <returns>The number of bytes read. Zero signals the end of stream</returns>
 129        public override int Read(byte[] buffer, int offset, int count) {
 2130             if (!headerParsed) ParseHeader();
 131
 0132             if (eof) return 0;
 133
 0134            int start = offset;
 135
 136            /* Using local copies of various variables speeds things up by as
 137           * much as 30% in Java! Performance not tested in C#.
 138           */
 0139            int[] lTabPrefix = tabPrefix;
 0140            byte[] lTabSuffix = tabSuffix;
 0141            byte[] lStack = stack;
 0142            int lNBits = nBits;
 0143            int lMaxCode = maxCode;
 0144            int lMaxMaxCode = maxMaxCode;
 0145            int lBitMask = bitMask;
 0146            int lOldCode = oldCode;
 0147            byte lFinChar = finChar;
 0148            int lStackP = stackP;
 0149            int lFreeEnt = freeEnt;
 0150            byte[] lData = data;
 0151            int lBitPos = bitPos;
 152
 153
 154            // empty stack if stuff still left
 0155            int sSize = lStack.Length - lStackP;
 0156             if (sSize > 0) {
 0157                 int num = (sSize >= count) ? count : sSize;
 0158                Array.Copy(lStack, lStackP, buffer, offset, num);
 0159                offset += num;
 0160                count -= num;
 0161                lStackP += num;
 162            }
 163
 0164             if (count == 0) {
 0165                stackP = lStackP;
 0166                return offset - start;
 167            }
 168
 169
 170            // loop, filling local buffer until enough data has been decompressed
 171            MainLoop: do {
 0172                 if (end < EXTRA) {
 0173                    Fill();
 174                }
 175
 0176                int bitIn = (got > 0) ? (end - end % lNBits) << 3 :
 0177                                        (end << 3) - (lNBits - 1);
 178
 0179                 while (lBitPos < bitIn) {
 180                    #region A
 181                    // handle 1-byte reads correctly
 0182                     if (count == 0) {
 0183                        nBits = lNBits;
 0184                        maxCode = lMaxCode;
 0185                        maxMaxCode = lMaxMaxCode;
 0186                        bitMask = lBitMask;
 0187                        oldCode = lOldCode;
 0188                        finChar = lFinChar;
 0189                        stackP = lStackP;
 0190                        freeEnt = lFreeEnt;
 0191                        bitPos = lBitPos;
 192
 0193                        return offset - start;
 194                    }
 195
 196                    // check for code-width expansion
 0197                     if (lFreeEnt > lMaxCode) {
 0198                        int nBytes = lNBits << 3;
 0199                        lBitPos = (lBitPos - 1) +
 0200                        nBytes - (lBitPos - 1 + nBytes) % nBytes;
 201
 0202                        lNBits++;
 0203                        lMaxCode = (lNBits == maxBits) ? lMaxMaxCode :
 0204                                                        (1 << lNBits) - 1;
 205
 0206                        lBitMask = (1 << lNBits) - 1;
 0207                        lBitPos = ResetBuf(lBitPos);
 0208                        goto MainLoop;
 209                    }
 210                    #endregion
 211
 212                    #region B
 213                    // read next code
 0214                    int pos = lBitPos >> 3;
 0215                    int code = (((lData[pos] & 0xFF) |
 0216                        ((lData[pos + 1] & 0xFF) << 8) |
 0217                        ((lData[pos + 2] & 0xFF) << 16)) >>
 0218                        (lBitPos & 0x7)) & lBitMask;
 219
 0220                        lBitPos += lNBits;
 221
 222                    // handle first iteration
 0223                     if (lOldCode == -1) {
 0224                         if (code >= 256) throw new LzwException("corrupt input: " + code + " > 255");
 225
 0226                        lFinChar = (byte) (lOldCode = code);
 0227                        buffer[offset++] = lFinChar;
 0228                        count--;
 0229                        continue;
 230                    }
 231
 232                    // handle CLEAR code
 0233                     if (code == TBL_CLEAR && blockMode) {
 0234                        Array.Copy(zeros, 0, lTabPrefix, 0, zeros.Length);
 0235                        lFreeEnt = TBL_FIRST - 1;
 236
 0237                        int nBytes = lNBits << 3;
 0238                        lBitPos = (lBitPos - 1) + nBytes - (lBitPos - 1 + nBytes) % nBytes;
 0239                        lNBits = LzwConstants.INIT_BITS;
 0240                        lMaxCode = (1 << lNBits) - 1;
 0241                        lBitMask = lMaxCode;
 242
 243                        // Code tables reset
 244
 0245                        lBitPos = ResetBuf(lBitPos);
 0246                        goto MainLoop;
 247                    }
 248                    #endregion
 249
 250                    #region C
 251                    // setup
 0252                    int inCode = code;
 0253                    lStackP = lStack.Length;
 254
 255                    // Handle KwK case
 0256                     if (code >= lFreeEnt) {
 0257                         if (code > lFreeEnt) {
 0258                            throw new LzwException("corrupt input: code=" + code +
 0259                                ", freeEnt=" + lFreeEnt);
 260                        }
 261
 0262                        lStack[--lStackP] = lFinChar;
 0263                        code = lOldCode;
 264                    }
 265
 266                    // Generate output characters in reverse order
 0267                     while (code >= 256) {
 0268                        lStack[--lStackP] = lTabSuffix[code];
 0269                        code = lTabPrefix[code];
 270                    }
 271
 0272                    lFinChar = lTabSuffix[code];
 0273                    buffer[offset++] = lFinChar;
 0274                    count--;
 275
 276                    // And put them out in forward order
 0277                    sSize = lStack.Length - lStackP;
 0278                     int num = (sSize >= count) ? count : sSize;
 0279                    Array.Copy(lStack, lStackP, buffer, offset, num);
 0280                    offset += num;
 0281                    count -= num;
 0282                    lStackP += num;
 283                    #endregion
 284
 285                    #region D
 286                    // generate new entry in table
 0287                     if (lFreeEnt < lMaxMaxCode) {
 0288                        lTabPrefix[lFreeEnt] = lOldCode;
 0289                        lTabSuffix[lFreeEnt] = lFinChar;
 0290                        lFreeEnt++;
 291                    }
 292
 293                    // Remember previous code
 0294                    lOldCode = inCode;
 295
 296                    // if output buffer full, then return
 0297                     if (count == 0) {
 0298                        nBits = lNBits;
 0299                        maxCode = lMaxCode;
 0300                        bitMask = lBitMask;
 0301                        oldCode = lOldCode;
 0302                        finChar = lFinChar;
 0303                        stackP = lStackP;
 0304                        freeEnt = lFreeEnt;
 0305                        bitPos = lBitPos;
 306
 0307                        return offset - start;
 308                    }
 309                    #endregion
 310                }   // while
 311
 0312                lBitPos = ResetBuf(lBitPos);
 313
 0314             } while (got > 0);  // do..while
 315
 0316            nBits = lNBits;
 0317            maxCode = lMaxCode;
 0318            bitMask = lBitMask;
 0319            oldCode = lOldCode;
 0320            finChar = lFinChar;
 0321            stackP = lStackP;
 0322            freeEnt = lFreeEnt;
 0323            bitPos = lBitPos;
 324
 0325            eof = true;
 0326            return offset - start;
 327        }
 328
 329        /// <summary>
 330        /// Moves the unread data in the buffer to the beginning and resets
 331        /// the pointers.
 332        /// </summary>
 333        /// <param name="bitPosition"></param>
 334        /// <returns></returns>
 335        private int ResetBuf(int bitPosition) {
 0336            int pos = bitPosition >> 3;
 0337            Array.Copy(data, pos, data, 0, end - pos);
 0338            end -= pos;
 0339            return 0;
 340        }
 341
 342
 343        private void Fill() {
 0344            got = baseInputStream.Read(data, end, data.Length - 1 - end);
 0345             if (got > 0) {
 0346                end += got;
 347            }
 0348        }
 349
 350
 351        private void ParseHeader() {
 1352            headerParsed = true;
 353
 1354            byte[] hdr = new byte[LzwConstants.HDR_SIZE];
 355
 1356            int result = baseInputStream.Read(hdr, 0, hdr.Length);
 357
 358            // Check the magic marker
 1359             if (result < 0)
 0360                throw new LzwException("Failed to read LZW header");
 361
 1362             if (hdr[0] != (LzwConstants.MAGIC >> 8) || hdr[1] != (LzwConstants.MAGIC & 0xff)) {
 1363                throw new LzwException(String.Format(
 1364                    "Wrong LZW header. Magic bytes don't match. 0x{0:x2} 0x{1:x2}",
 1365                    hdr[0], hdr[1]));
 366            }
 367
 368            // Check the 3rd header byte
 0369            blockMode = (hdr[2] & LzwConstants.BLOCK_MODE_MASK) > 0;
 0370            maxBits = hdr[2] & LzwConstants.BIT_MASK;
 371
 0372             if (maxBits > LzwConstants.MAX_BITS) {
 0373                throw new LzwException("Stream compressed with " + maxBits +
 0374                    " bits, but decompression can only handle " +
 0375                    LzwConstants.MAX_BITS + " bits.");
 376            }
 377
 0378             if ((hdr[2] & LzwConstants.RESERVED_MASK) > 0) {
 0379                throw new LzwException("Unsupported bits set in the header.");
 380            }
 381
 382            // Initialize variables
 0383            maxMaxCode = 1 << maxBits;
 0384            nBits = LzwConstants.INIT_BITS;
 0385            maxCode = (1 << nBits) - 1;
 0386            bitMask = maxCode;
 0387            oldCode = -1;
 0388            finChar = 0;
 0389             freeEnt = blockMode ? TBL_FIRST : 256;
 390
 0391            tabPrefix = new int[1 << maxBits];
 0392            tabSuffix = new byte[1 << maxBits];
 0393            stack = new byte[1 << maxBits];
 0394            stackP = stack.Length;
 395
 0396             for (int idx = 255; idx >= 0; idx--)
 0397                tabSuffix[idx] = (byte)idx;
 0398        }
 399
 400        #region Stream Overrides
 401        /// <summary>
 402        /// Gets a value indicating whether the current stream supports reading
 403        /// </summary>
 404        public override bool CanRead
 405        {
 406            get
 407            {
 0408                return baseInputStream.CanRead;
 409            }
 410        }
 411
 412        /// <summary>
 413        /// Gets a value of false indicating seeking is not supported for this stream.
 414        /// </summary>
 415        public override bool CanSeek
 416        {
 417            get
 418            {
 0419                return false;
 420            }
 421        }
 422
 423        /// <summary>
 424        /// Gets a value of false indicating that this stream is not writeable.
 425        /// </summary>
 426        public override bool CanWrite
 427        {
 428            get
 429            {
 0430                return false;
 431            }
 432        }
 433
 434        /// <summary>
 435        /// A value representing the length of the stream in bytes.
 436        /// </summary>
 437        public override long Length
 438        {
 439            get
 440            {
 0441                return got;
 442            }
 443        }
 444
 445        /// <summary>
 446        /// The current position within the stream.
 447        /// Throws a NotSupportedException when attempting to set the position
 448        /// </summary>
 449        /// <exception cref="NotSupportedException">Attempting to set the position</exception>
 450        public override long Position
 451        {
 452            get
 453            {
 0454                return baseInputStream.Position;
 455            }
 456            set
 457            {
 0458                throw new NotSupportedException("InflaterInputStream Position not supported");
 459            }
 460        }
 461
 462        /// <summary>
 463        /// Flushes the baseInputStream
 464        /// </summary>
 465        public override void Flush()
 466        {
 0467            baseInputStream.Flush();
 0468        }
 469
 470        /// <summary>
 471        /// Sets the position within the current stream
 472        /// Always throws a NotSupportedException
 473        /// </summary>
 474        /// <param name="offset">The relative offset to seek to.</param>
 475        /// <param name="origin">The <see cref="SeekOrigin"/> defining where to seek from.</param>
 476        /// <returns>The new position in the stream.</returns>
 477        /// <exception cref="NotSupportedException">Any access</exception>
 478        public override long Seek(long offset, SeekOrigin origin)
 479        {
 0480            throw new NotSupportedException("Seek not supported");
 481        }
 482
 483        /// <summary>
 484        /// Set the length of the current stream
 485        /// Always throws a NotSupportedException
 486        /// </summary>
 487        /// <param name="value">The new length value for the stream.</param>
 488        /// <exception cref="NotSupportedException">Any access</exception>
 489        public override void SetLength(long value)
 490        {
 0491            throw new NotSupportedException("InflaterInputStream SetLength not supported");
 492        }
 493
 494        /// <summary>
 495        /// Writes a sequence of bytes to stream and advances the current position
 496        /// This method always throws a NotSupportedException
 497        /// </summary>
 498        /// <param name="buffer">Thew buffer containing data to write.</param>
 499        /// <param name="offset">The offset of the first byte to write.</param>
 500        /// <param name="count">The number of bytes to write.</param>
 501        /// <exception cref="NotSupportedException">Any access</exception>
 502        public override void Write(byte[] buffer, int offset, int count)
 503        {
 0504            throw new NotSupportedException("InflaterInputStream Write not supported");
 505        }
 506
 507        /// <summary>
 508        /// Writes one byte to the current stream and advances the current position
 509        /// Always throws a NotSupportedException
 510        /// </summary>
 511        /// <param name="value">The byte to write.</param>
 512        /// <exception cref="NotSupportedException">Any access</exception>
 513        public override void WriteByte(byte value)
 514        {
 0515            throw new NotSupportedException("InflaterInputStream WriteByte not supported");
 516        }
 517
 518        /// <summary>
 519        /// Entry point to begin an asynchronous write.  Always throws a NotSupportedException.
 520        /// </summary>
 521        /// <param name="buffer">The buffer to write data from</param>
 522        /// <param name="offset">Offset of first byte to write</param>
 523        /// <param name="count">The maximum number of bytes to write</param>
 524        /// <param name="callback">The method to be called when the asynchronous write operation is completed</param>
 525        /// <param name="state">A user-provided object that distinguishes this particular asynchronous write request fro
 526        /// <returns>An <see cref="System.IAsyncResult">IAsyncResult</see> that references the asynchronous write</retur
 527        /// <exception cref="NotSupportedException">Any access</exception>
 528        public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object sta
 529        {
 0530            throw new NotSupportedException("InflaterInputStream BeginWrite not supported");
 531        }
 532
 533        /// <summary>
 534        /// Closes the input stream.  When <see cref="IsStreamOwner"></see>
 535        /// is true the underlying stream is also closed.
 536        /// </summary>
 537        public override void Close()
 538        {
 2539             if (!isClosed)
 540            {
 2541                isClosed = true;
 2542                 if (isStreamOwner)
 543                {
 1544                    baseInputStream.Close();
 545                }
 546            }
 2547        }
 548
 549        #endregion
 550
 551        #region Instance Fields
 552
 553        Stream baseInputStream;
 554
 555        /// <summary>
 556        /// Flag indicating wether this instance is designated the stream owner.
 557        /// When closing if this flag is true the underlying stream is closed.
 558        /// </summary>
 3559        bool isStreamOwner = true;
 560
 561        /// <summary>
 562        /// Flag indicating wether this instance has been closed or not.
 563        /// </summary>
 564        bool isClosed;
 565
 3566        readonly byte[] one = new byte[1];
 567        bool headerParsed;
 568
 569        // string table stuff
 570        private const int TBL_CLEAR = 0x100;
 571        private const int TBL_FIRST = TBL_CLEAR + 1;
 572
 573        private int[] tabPrefix;
 574        private byte[] tabSuffix;
 3575        private readonly int[] zeros = new int[256];
 576        private byte[] stack;
 577
 578        // various state
 579        private bool blockMode;
 580        private int nBits;
 581        private int maxBits;
 582        private int maxMaxCode;
 583        private int maxCode;
 584        private int bitMask;
 585        private int oldCode;
 586        private byte finChar;
 587        private int stackP;
 588        private int freeEnt;
 589
 590        // input buffer
 3591        private readonly byte[] data = new byte[1024 * 8];
 592        private int bitPos;
 593        private int end;
 594        int got;
 595        private bool eof;
 596        private const int EXTRA = 64;
 597        #endregion
 598    }
 599}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_MemoryArchiveStorage.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_MemoryArchiveStorage.htm new file mode 100644 index 000000000..61b4efc4a --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_MemoryArchiveStorage.htm @@ -0,0 +1,4524 @@ + + + + +ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs
Covered lines:15
Uncovered lines:12
Coverable lines:27
Total lines:4476
Line coverage:55.5%
Branch coverage:50%
+

Metrics

+ + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)1100100
GetTemporaryOutput()1100100
ConvertTemporaryToFinal()27566.67
MakeTemporaryCopy(...)100
OpenForDirectUpdate(...)433.3342.86
Dispose()2100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipFile.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-03-02  Z-1650  Fixed updating ODT archives in memory. Exposed exceptions in updating.
 42//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 43//  2012-11-29  Z-1684  Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp
 44
 45using System;
 46using System.Collections;
 47using System.IO;
 48using System.Text;
 49using System.Globalization;
 50
 51#if !NETCF_1_0
 52using System.Security.Cryptography;
 53using ICSharpCode.SharpZipLib.Encryption;
 54#endif
 55
 56using ICSharpCode.SharpZipLib.Core;
 57using ICSharpCode.SharpZipLib.Checksums;
 58using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 59using ICSharpCode.SharpZipLib.Zip.Compression;
 60
 61namespace ICSharpCode.SharpZipLib.Zip
 62{
 63  #region Keys Required Event Args
 64  /// <summary>
 65  /// Arguments used with KeysRequiredEvent
 66  /// </summary>
 67  public class KeysRequiredEventArgs : EventArgs
 68  {
 69    #region Constructors
 70    /// <summary>
 71    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 72    /// </summary>
 73    /// <param name="name">The name of the file for which keys are required.</param>
 74    public KeysRequiredEventArgs(string name)
 75    {
 76      fileName = name;
 77    }
 78
 79    /// <summary>
 80    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 81    /// </summary>
 82    /// <param name="name">The name of the file for which keys are required.</param>
 83    /// <param name="keyValue">The current key value.</param>
 84    public KeysRequiredEventArgs(string name, byte[] keyValue)
 85    {
 86      fileName = name;
 87      key = keyValue;
 88    }
 89
 90    #endregion
 91    #region Properties
 92    /// <summary>
 93    /// Gets the name of the file for which keys are required.
 94    /// </summary>
 95    public string FileName
 96    {
 97      get { return fileName; }
 98    }
 99
 100    /// <summary>
 101    /// Gets or sets the key value
 102    /// </summary>
 103    public byte[] Key
 104    {
 105      get { return key; }
 106      set { key = value; }
 107    }
 108    #endregion
 109
 110    #region Instance Fields
 111    string fileName;
 112    byte[] key;
 113    #endregion
 114  }
 115  #endregion
 116
 117  #region Test Definitions
 118  /// <summary>
 119  /// The strategy to apply to testing.
 120  /// </summary>
 121  public enum TestStrategy
 122  {
 123    /// <summary>
 124    /// Find the first error only.
 125    /// </summary>
 126    FindFirstError,
 127    /// <summary>
 128    /// Find all possible errors.
 129    /// </summary>
 130    FindAllErrors,
 131  }
 132
 133  /// <summary>
 134  /// The operation in progress reported by a <see cref="ZipTestResultHandler"/> during testing.
 135  /// </summary>
 136  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 137  public enum TestOperation
 138  {
 139    /// <summary>
 140    /// Setting up testing.
 141    /// </summary>
 142    Initialising,
 143
 144    /// <summary>
 145    /// Testing an individual entries header
 146    /// </summary>
 147    EntryHeader,
 148
 149    /// <summary>
 150    /// Testing an individual entries data
 151    /// </summary>
 152    EntryData,
 153
 154    /// <summary>
 155    /// Testing an individual entry has completed.
 156    /// </summary>
 157    EntryComplete,
 158
 159    /// <summary>
 160    /// Running miscellaneous tests
 161    /// </summary>
 162    MiscellaneousTests,
 163
 164    /// <summary>
 165    /// Testing is complete
 166    /// </summary>
 167    Complete,
 168  }
 169
 170  /// <summary>
 171  /// Status returned returned by <see cref="ZipTestResultHandler"/> during testing.
 172  /// </summary>
 173  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 174  public class TestStatus
 175  {
 176    #region Constructors
 177    /// <summary>
 178    /// Initialise a new instance of <see cref="TestStatus"/>
 179    /// </summary>
 180    /// <param name="file">The <see cref="ZipFile"/> this status applies to.</param>
 181    public TestStatus(ZipFile file)
 182    {
 183      file_ = file;
 184    }
 185    #endregion
 186
 187    #region Properties
 188
 189    /// <summary>
 190    /// Get the current <see cref="TestOperation"/> in progress.
 191    /// </summary>
 192    public TestOperation Operation
 193    {
 194      get { return operation_; }
 195    }
 196
 197    /// <summary>
 198    /// Get the <see cref="ZipFile"/> this status is applicable to.
 199    /// </summary>
 200    public ZipFile File
 201    {
 202      get { return file_; }
 203    }
 204
 205    /// <summary>
 206    /// Get the current/last entry tested.
 207    /// </summary>
 208    public ZipEntry Entry
 209    {
 210      get { return entry_; }
 211    }
 212
 213    /// <summary>
 214    /// Get the number of errors detected so far.
 215    /// </summary>
 216    public int ErrorCount
 217    {
 218      get { return errorCount_; }
 219    }
 220
 221    /// <summary>
 222    /// Get the number of bytes tested so far for the current entry.
 223    /// </summary>
 224    public long BytesTested
 225    {
 226      get { return bytesTested_; }
 227    }
 228
 229    /// <summary>
 230    /// Get a value indicating wether the last entry test was valid.
 231    /// </summary>
 232    public bool EntryValid
 233    {
 234      get { return entryValid_; }
 235    }
 236    #endregion
 237
 238    #region Internal API
 239    internal void AddError()
 240    {
 241      errorCount_++;
 242      entryValid_ = false;
 243    }
 244
 245    internal void SetOperation(TestOperation operation)
 246    {
 247      operation_ = operation;
 248    }
 249
 250    internal void SetEntry(ZipEntry entry)
 251    {
 252      entry_ = entry;
 253      entryValid_ = true;
 254      bytesTested_ = 0;
 255    }
 256
 257    internal void SetBytesTested(long value)
 258    {
 259      bytesTested_ = value;
 260    }
 261    #endregion
 262
 263    #region Instance Fields
 264    ZipFile file_;
 265    ZipEntry entry_;
 266    bool entryValid_;
 267    int errorCount_;
 268    long bytesTested_;
 269    TestOperation operation_;
 270    #endregion
 271  }
 272
 273  /// <summary>
 274  /// Delegate invoked during <see cref="ZipFile.TestArchive(bool, TestStrategy, ZipTestResultHandler)">testing</see> if
 275  /// </summary>
 276  /// <remarks>If the message is non-null an error has occured.  If the message is null
 277  /// the operation as found in <see cref="TestStatus">status</see> has started.</remarks>
 278  public delegate void ZipTestResultHandler(TestStatus status, string message);
 279  #endregion
 280
 281  #region Update Definitions
 282  /// <summary>
 283  /// The possible ways of <see cref="ZipFile.CommitUpdate()">applying updates</see> to an archive.
 284  /// </summary>
 285  public enum FileUpdateMode
 286  {
 287    /// <summary>
 288    /// Perform all updates on temporary files ensuring that the original file is saved.
 289    /// </summary>
 290    Safe,
 291    /// <summary>
 292    /// Update the archive directly, which is faster but less safe.
 293    /// </summary>
 294    Direct,
 295  }
 296  #endregion
 297
 298  #region ZipFile Class
 299  /// <summary>
 300  /// This class represents a Zip archive.  You can ask for the contained
 301  /// entries, or get an input stream for a file entry.  The entry is
 302  /// automatically decompressed.
 303  ///
 304  /// You can also update the archive adding or deleting entries.
 305  ///
 306  /// This class is thread safe for input:  You can open input streams for arbitrary
 307  /// entries in different threads.
 308  /// <br/>
 309  /// <br/>Author of the original java version : Jochen Hoenicke
 310  /// </summary>
 311  /// <example>
 312  /// <code>
 313  /// using System;
 314  /// using System.Text;
 315  /// using System.Collections;
 316  /// using System.IO;
 317  ///
 318  /// using ICSharpCode.SharpZipLib.Zip;
 319  ///
 320  /// class MainClass
 321  /// {
 322  ///   static public void Main(string[] args)
 323  ///   {
 324  ///     using (ZipFile zFile = new ZipFile(args[0])) {
 325  ///       Console.WriteLine("Listing of : " + zFile.Name);
 326  ///       Console.WriteLine("");
 327  ///       Console.WriteLine("Raw Size    Size      Date     Time     Name");
 328  ///       Console.WriteLine("--------  --------  --------  ------  ---------");
 329  ///       foreach (ZipEntry e in zFile) {
 330  ///         if ( e.IsFile ) {
 331  ///           DateTime d = e.DateTime;
 332  ///           Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
 333  ///             d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
 334  ///             e.Name);
 335  ///         }
 336  ///       }
 337  ///     }
 338  ///   }
 339  /// }
 340  /// </code>
 341  /// </example>
 342  public class ZipFile : IEnumerable, IDisposable
 343  {
 344    #region KeyHandling
 345
 346    /// <summary>
 347    /// Delegate for handling keys/password setting during compresion/decompression.
 348    /// </summary>
 349    public delegate void KeysRequiredEventHandler(
 350      object sender,
 351      KeysRequiredEventArgs e
 352    );
 353
 354    /// <summary>
 355    /// Event handler for handling encryption keys.
 356    /// </summary>
 357    public KeysRequiredEventHandler KeysRequired;
 358
 359    /// <summary>
 360    /// Handles getting of encryption keys when required.
 361    /// </summary>
 362    /// <param name="fileName">The file for which encryption keys are required.</param>
 363    void OnKeysRequired(string fileName)
 364    {
 365      if (KeysRequired != null) {
 366        var krea = new KeysRequiredEventArgs(fileName, key);
 367        KeysRequired(this, krea);
 368        key = krea.Key;
 369      }
 370    }
 371
 372    /// <summary>
 373    /// Get/set the encryption key value.
 374    /// </summary>
 375    byte[] Key
 376    {
 377      get { return key; }
 378      set { key = value; }
 379    }
 380
 381#if !NETCF_1_0
 382    /// <summary>
 383    /// Password to be used for encrypting/decrypting files.
 384    /// </summary>
 385    /// <remarks>Set to null if no password is required.</remarks>
 386    public string Password
 387    {
 388      set
 389      {
 390        if ( string.IsNullOrEmpty(value)) {
 391          key = null;
 392        }
 393        else {
 394          rawPassword_ = value;
 395          key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value));
 396        }
 397      }
 398    }
 399#endif
 400
 401    /// <summary>
 402    /// Get a value indicating wether encryption keys are currently available.
 403    /// </summary>
 404    bool HaveKeys
 405    {
 406      get { return key != null; }
 407    }
 408    #endregion
 409
 410    #region Constructors
 411    /// <summary>
 412    /// Opens a Zip file with the given name for reading.
 413    /// </summary>
 414    /// <param name="name">The name of the file to open.</param>
 415    /// <exception cref="ArgumentNullException">The argument supplied is null.</exception>
 416    /// <exception cref="IOException">
 417    /// An i/o error occurs
 418    /// </exception>
 419    /// <exception cref="ZipException">
 420    /// The file doesn't contain a valid zip archive.
 421    /// </exception>
 422    public ZipFile(string name)
 423    {
 424      if ( name == null ) {
 425        throw new ArgumentNullException(nameof(name));
 426      }
 427
 428      name_ = name;
 429
 430      baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 431      isStreamOwner = true;
 432
 433      try {
 434        ReadEntries();
 435      }
 436      catch {
 437        DisposeInternal(true);
 438        throw;
 439      }
 440    }
 441
 442    /// <summary>
 443    /// Opens a Zip file reading the given <see cref="FileStream"/>.
 444    /// </summary>
 445    /// <param name="file">The <see cref="FileStream"/> to read archive data from.</param>
 446    /// <exception cref="ArgumentNullException">The supplied argument is null.</exception>
 447    /// <exception cref="IOException">
 448    /// An i/o error occurs.
 449    /// </exception>
 450    /// <exception cref="ZipException">
 451    /// The file doesn't contain a valid zip archive.
 452    /// </exception>
 453    public ZipFile(FileStream file)
 454    {
 455      if ( file == null ) {
 456        throw new ArgumentNullException(nameof(file));
 457      }
 458
 459      if ( !file.CanSeek ) {
 460        throw new ArgumentException("Stream is not seekable", nameof(file));
 461      }
 462
 463      baseStream_  = file;
 464      name_ = file.Name;
 465      isStreamOwner = true;
 466
 467      try {
 468        ReadEntries();
 469      }
 470      catch {
 471        DisposeInternal(true);
 472        throw;
 473      }
 474    }
 475
 476    /// <summary>
 477    /// Opens a Zip file reading the given <see cref="Stream"/>.
 478    /// </summary>
 479    /// <param name="stream">The <see cref="Stream"/> to read archive data from.</param>
 480    /// <exception cref="IOException">
 481    /// An i/o error occurs
 482    /// </exception>
 483    /// <exception cref="ZipException">
 484    /// The stream doesn't contain a valid zip archive.<br/>
 485    /// </exception>
 486    /// <exception cref="ArgumentException">
 487    /// The <see cref="Stream">stream</see> doesnt support seeking.
 488    /// </exception>
 489    /// <exception cref="ArgumentNullException">
 490    /// The <see cref="Stream">stream</see> argument is null.
 491    /// </exception>
 492    public ZipFile(Stream stream)
 493    {
 494      if ( stream == null ) {
 495        throw new ArgumentNullException(nameof(stream));
 496      }
 497
 498      if ( !stream.CanSeek ) {
 499        throw new ArgumentException("Stream is not seekable", nameof(stream));
 500      }
 501
 502      baseStream_  = stream;
 503      isStreamOwner = true;
 504
 505      if ( baseStream_.Length > 0 ) {
 506        try {
 507          ReadEntries();
 508        }
 509        catch {
 510          DisposeInternal(true);
 511          throw;
 512        }
 513      } else {
 514        entries_ = new ZipEntry[0];
 515        isNewArchive_ = true;
 516      }
 517    }
 518
 519    /// <summary>
 520    /// Initialises a default <see cref="ZipFile"/> instance with no entries and no file storage.
 521    /// </summary>
 522    internal ZipFile()
 523    {
 524      entries_ = new ZipEntry[0];
 525      isNewArchive_ = true;
 526    }
 527
 528    #endregion
 529
 530    #region Destructors and Closing
 531    /// <summary>
 532    /// Finalize this instance.
 533    /// </summary>
 534    ~ZipFile()
 535    {
 536      Dispose(false);
 537    }
 538
 539    /// <summary>
 540    /// Closes the ZipFile.  If the stream is <see cref="IsStreamOwner">owned</see> then this also closes the underlying
 541    /// Once closed, no further instance methods should be called.
 542    /// </summary>
 543    /// <exception cref="System.IO.IOException">
 544    /// An i/o error occurs.
 545    /// </exception>
 546    public void Close()
 547    {
 548      DisposeInternal(true);
 549      GC.SuppressFinalize(this);
 550    }
 551
 552    #endregion
 553
 554    #region Creators
 555    /// <summary>
 556    /// Create a new <see cref="ZipFile"/> whose data will be stored in a file.
 557    /// </summary>
 558    /// <param name="fileName">The name of the archive to create.</param>
 559    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 560    /// <exception cref="ArgumentNullException"><paramref name="fileName"></paramref> is null</exception>
 561    public static ZipFile Create(string fileName)
 562    {
 563      if ( fileName == null ) {
 564        throw new ArgumentNullException(nameof(fileName));
 565      }
 566
 567      FileStream fs = File.Create(fileName);
 568
 569      var result = new ZipFile();
 570      result.name_ = fileName;
 571      result.baseStream_ = fs;
 572      result.isStreamOwner = true;
 573      return result;
 574    }
 575
 576    /// <summary>
 577    /// Create a new <see cref="ZipFile"/> whose data will be stored on a stream.
 578    /// </summary>
 579    /// <param name="outStream">The stream providing data storage.</param>
 580    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 581    /// <exception cref="ArgumentNullException"><paramref name="outStream"> is null</paramref></exception>
 582    /// <exception cref="ArgumentException"><paramref name="outStream"> doesnt support writing.</paramref></exception>
 583    public static ZipFile Create(Stream outStream)
 584    {
 585      if ( outStream == null ) {
 586        throw new ArgumentNullException(nameof(outStream));
 587      }
 588
 589      if ( !outStream.CanWrite ) {
 590        throw new ArgumentException("Stream is not writeable", nameof(outStream));
 591      }
 592
 593      if ( !outStream.CanSeek ) {
 594        throw new ArgumentException("Stream is not seekable", nameof(outStream));
 595      }
 596
 597      var result = new ZipFile();
 598      result.baseStream_ = outStream;
 599      return result;
 600    }
 601
 602    #endregion
 603
 604    #region Properties
 605    /// <summary>
 606    /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance.
 607    /// If the flag is true then the stream will be closed when <see cref="Close">Close</see> is called.
 608    /// </summary>
 609    /// <remarks>
 610    /// The default value is true in all cases.
 611    /// </remarks>
 612    public bool IsStreamOwner
 613    {
 614      get { return isStreamOwner; }
 615      set { isStreamOwner = value; }
 616    }
 617
 618    /// <summary>
 619    /// Get a value indicating wether
 620    /// this archive is embedded in another file or not.
 621    /// </summary>
 622    public bool IsEmbeddedArchive
 623    {
 624      // Not strictly correct in all circumstances currently
 625      get { return offsetOfFirstEntry > 0; }
 626    }
 627
 628    /// <summary>
 629    /// Get a value indicating that this archive is a new one.
 630    /// </summary>
 631    public bool IsNewArchive
 632    {
 633      get { return isNewArchive_; }
 634    }
 635
 636    /// <summary>
 637    /// Gets the comment for the zip file.
 638    /// </summary>
 639    public string ZipFileComment
 640    {
 641      get { return comment_; }
 642    }
 643
 644    /// <summary>
 645    /// Gets the name of this zip file.
 646    /// </summary>
 647    public string Name
 648    {
 649      get { return name_; }
 650    }
 651
 652    /// <summary>
 653    /// Gets the number of entries in this zip file.
 654    /// </summary>
 655    /// <exception cref="InvalidOperationException">
 656    /// The Zip file has been closed.
 657    /// </exception>
 658    [Obsolete("Use the Count property instead")]
 659    public int Size
 660    {
 661      get
 662      {
 663        return entries_.Length;
 664      }
 665    }
 666
 667    /// <summary>
 668    /// Get the number of entries contained in this <see cref="ZipFile"/>.
 669    /// </summary>
 670    public long Count
 671    {
 672      get
 673      {
 674        return entries_.Length;
 675      }
 676    }
 677
 678    /// <summary>
 679    /// Indexer property for ZipEntries
 680    /// </summary>
 681    [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")]
 682    public ZipEntry this[int index]
 683    {
 684      get {
 685        return (ZipEntry) entries_[index].Clone();
 686      }
 687    }
 688
 689    #endregion
 690
 691    #region Input Handling
 692    /// <summary>
 693    /// Gets an enumerator for the Zip entries in this Zip file.
 694    /// </summary>
 695    /// <returns>Returns an <see cref="IEnumerator"/> for this archive.</returns>
 696    /// <exception cref="ObjectDisposedException">
 697    /// The Zip file has been closed.
 698    /// </exception>
 699    public IEnumerator GetEnumerator()
 700    {
 701      if (isDisposed_) {
 702        throw new ObjectDisposedException("ZipFile");
 703      }
 704
 705      return new ZipEntryEnumerator(entries_);
 706    }
 707
 708    /// <summary>
 709    /// Return the index of the entry with a matching name
 710    /// </summary>
 711    /// <param name="name">Entry name to find</param>
 712    /// <param name="ignoreCase">If true the comparison is case insensitive</param>
 713    /// <returns>The index position of the matching entry or -1 if not found</returns>
 714    /// <exception cref="ObjectDisposedException">
 715    /// The Zip file has been closed.
 716    /// </exception>
 717    public int FindEntry(string name, bool ignoreCase)
 718    {
 719      if (isDisposed_) {
 720        throw new ObjectDisposedException("ZipFile");
 721      }
 722
 723      // TODO: This will be slow as the next ice age for huge archives!
 724      for (int i = 0; i < entries_.Length; i++) {
 725        if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) {
 726          return i;
 727        }
 728      }
 729      return -1;
 730    }
 731
 732    /// <summary>
 733    /// Searches for a zip entry in this archive with the given name.
 734    /// String comparisons are case insensitive
 735    /// </summary>
 736    /// <param name="name">
 737    /// The name to find. May contain directory components separated by slashes ('/').
 738    /// </param>
 739    /// <returns>
 740    /// A clone of the zip entry, or null if no entry with that name exists.
 741    /// </returns>
 742    /// <exception cref="ObjectDisposedException">
 743    /// The Zip file has been closed.
 744    /// </exception>
 745    public ZipEntry GetEntry(string name)
 746    {
 747      if (isDisposed_) {
 748        throw new ObjectDisposedException("ZipFile");
 749      }
 750
 751      int index = FindEntry(name, true);
 752      return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null;
 753    }
 754
 755    /// <summary>
 756    /// Gets an input stream for reading the given zip entry data in an uncompressed form.
 757    /// Normally the <see cref="ZipEntry"/> should be an entry returned by GetEntry().
 758    /// </summary>
 759    /// <param name="entry">The <see cref="ZipEntry"/> to obtain a data <see cref="Stream"/> for</param>
 760    /// <returns>An input <see cref="Stream"/> containing data for this <see cref="ZipEntry"/></returns>
 761    /// <exception cref="ObjectDisposedException">
 762    /// The ZipFile has already been closed
 763    /// </exception>
 764    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 765    /// The compression method for the entry is unknown
 766    /// </exception>
 767    /// <exception cref="IndexOutOfRangeException">
 768    /// The entry is not found in the ZipFile
 769    /// </exception>
 770    public Stream GetInputStream(ZipEntry entry)
 771    {
 772      if ( entry == null ) {
 773        throw new ArgumentNullException(nameof(entry));
 774      }
 775
 776      if ( isDisposed_ ) {
 777        throw new ObjectDisposedException("ZipFile");
 778      }
 779
 780      long index = entry.ZipFileIndex;
 781      if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) {
 782        index = FindEntry(entry.Name, true);
 783        if (index < 0) {
 784          throw new ZipException("Entry cannot be found");
 785        }
 786      }
 787      return GetInputStream(index);
 788    }
 789
 790    /// <summary>
 791    /// Creates an input stream reading a zip entry
 792    /// </summary>
 793    /// <param name="entryIndex">The index of the entry to obtain an input stream for.</param>
 794    /// <returns>
 795    /// An input <see cref="Stream"/> containing data for this <paramref name="entryIndex"/>
 796    /// </returns>
 797    /// <exception cref="ObjectDisposedException">
 798    /// The ZipFile has already been closed
 799    /// </exception>
 800    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 801    /// The compression method for the entry is unknown
 802    /// </exception>
 803    /// <exception cref="IndexOutOfRangeException">
 804    /// The entry is not found in the ZipFile
 805    /// </exception>
 806    public Stream GetInputStream(long entryIndex)
 807    {
 808      if ( isDisposed_ ) {
 809        throw new ObjectDisposedException("ZipFile");
 810      }
 811
 812      long start = LocateEntry(entries_[entryIndex]);
 813      CompressionMethod method = entries_[entryIndex].CompressionMethod;
 814      Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize);
 815
 816      if (entries_[entryIndex].IsCrypted == true) {
 817#if NETCF_1_0
 818        throw new ZipException("decryption not supported for Compact Framework 1.0");
 819#else
 820        result = CreateAndInitDecryptionStream(result, entries_[entryIndex]);
 821        if (result == null) {
 822          throw new ZipException("Unable to decrypt this entry");
 823        }
 824#endif
 825      }
 826
 827      switch (method) {
 828        case CompressionMethod.Stored:
 829          // read as is.
 830          break;
 831
 832        case CompressionMethod.Deflated:
 833          // No need to worry about ownership and closing as underlying stream close does nothing.
 834          result = new InflaterInputStream(result, new Inflater(true));
 835          break;
 836
 837        default:
 838          throw new ZipException("Unsupported compression method " + method);
 839      }
 840
 841      return result;
 842    }
 843
 844    #endregion
 845
 846    #region Archive Testing
 847    /// <summary>
 848    /// Test an archive for integrity/validity
 849    /// </summary>
 850    /// <param name="testData">Perform low level data Crc check</param>
 851    /// <returns>true if all tests pass, false otherwise</returns>
 852    /// <remarks>Testing will terminate on the first error found.</remarks>
 853    public bool TestArchive(bool testData)
 854    {
 855      return TestArchive(testData, TestStrategy.FindFirstError, null);
 856    }
 857
 858    /// <summary>
 859    /// Test an archive for integrity/validity
 860    /// </summary>
 861    /// <param name="testData">Perform low level data Crc check</param>
 862    /// <param name="strategy">The <see cref="TestStrategy"></see> to apply.</param>
 863    /// <param name="resultHandler">The <see cref="ZipTestResultHandler"></see> handler to call during testing.</param>
 864    /// <returns>true if all tests pass, false otherwise</returns>
 865    /// <exception cref="ObjectDisposedException">The object has already been closed.</exception>
 866    public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
 867    {
 868      if (isDisposed_) {
 869        throw new ObjectDisposedException("ZipFile");
 870      }
 871
 872      var status = new TestStatus(this);
 873
 874      if ( resultHandler != null ) {
 875        resultHandler(status, null);
 876      }
 877
 878      HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header;
 879
 880      bool testing = true;
 881
 882      try {
 883        int entryIndex = 0;
 884
 885        while ( testing && (entryIndex < Count) ) {
 886          if ( resultHandler != null ) {
 887            status.SetEntry(this[entryIndex]);
 888            status.SetOperation(TestOperation.EntryHeader);
 889            resultHandler(status, null);
 890          }
 891
 892          try  {
 893            TestLocalHeader(this[entryIndex], test);
 894          }
 895          catch(ZipException ex) {
 896            status.AddError();
 897
 898            if ( resultHandler != null ) {
 899              resultHandler(status,
 900                string.Format("Exception during test - '{0}'", ex.Message));
 901            }
 902
 903            testing &= strategy != TestStrategy.FindFirstError;
 904          }
 905
 906          if ( testing && testData && this[entryIndex].IsFile ) {
 907            if ( resultHandler != null ) {
 908              status.SetOperation(TestOperation.EntryData);
 909              resultHandler(status, null);
 910            }
 911
 912                        var crc = new Crc32();
 913
 914                        using (Stream entryStream = this.GetInputStream(this[entryIndex]))
 915                        {
 916
 917                            byte[] buffer = new byte[4096];
 918                            long totalBytes = 0;
 919                            int bytesRead;
 920                            while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0)
 921                            {
 922                                crc.Update(buffer, 0, bytesRead);
 923
 924                                if (resultHandler != null)
 925                                {
 926                                    totalBytes += bytesRead;
 927                                    status.SetBytesTested(totalBytes);
 928                                    resultHandler(status, null);
 929                                }
 930                            }
 931                        }
 932
 933            if (this[entryIndex].Crc != crc.Value) {
 934              status.AddError();
 935
 936              if ( resultHandler != null ) {
 937                resultHandler(status, "CRC mismatch");
 938              }
 939
 940              testing &= strategy != TestStrategy.FindFirstError;
 941            }
 942
 943            if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) {
 944              var helper = new ZipHelperStream(baseStream_);
 945              var data = new DescriptorData();
 946              helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data);
 947              if (this[entryIndex].Crc != data.Crc) {
 948                status.AddError();
 949              }
 950
 951              if (this[entryIndex].CompressedSize != data.CompressedSize) {
 952                status.AddError();
 953              }
 954
 955              if (this[entryIndex].Size != data.Size) {
 956                status.AddError();
 957              }
 958            }
 959          }
 960
 961          if ( resultHandler != null ) {
 962            status.SetOperation(TestOperation.EntryComplete);
 963            resultHandler(status, null);
 964          }
 965
 966          entryIndex += 1;
 967        }
 968
 969        if ( resultHandler != null ) {
 970          status.SetOperation(TestOperation.MiscellaneousTests);
 971          resultHandler(status, null);
 972        }
 973
 974        // TODO: the 'Corrina Johns' test where local headers are missing from
 975        // the central directory.  They are therefore invisible to many archivers.
 976      }
 977      catch (Exception ex) {
 978        status.AddError();
 979
 980        if ( resultHandler != null ) {
 981          resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message));
 982        }
 983      }
 984
 985      if ( resultHandler != null ) {
 986        status.SetOperation(TestOperation.Complete);
 987        status.SetEntry(null);
 988        resultHandler(status, null);
 989      }
 990
 991      return (status.ErrorCount == 0);
 992    }
 993
 994    [Flags]
 995    enum HeaderTest
 996    {
 997      Extract = 0x01,     // Check that this header represents an entry whose data can be extracted
 998      Header  = 0x02,     // Check that this header contents are valid
 999    }
 1000
 1001    /// <summary>
 1002    /// Test a local header against that provided from the central directory
 1003    /// </summary>
 1004    /// <param name="entry">
 1005    /// The entry to test against
 1006    /// </param>
 1007    /// <param name="tests">The type of <see cref="HeaderTest">tests</see> to carry out.</param>
 1008    /// <returns>The offset of the entries data in the file</returns>
 1009    long TestLocalHeader(ZipEntry entry, HeaderTest tests)
 1010    {
 1011      lock(baseStream_)
 1012      {
 1013        bool testHeader = (tests & HeaderTest.Header) != 0;
 1014        bool testData = (tests & HeaderTest.Extract) != 0;
 1015
 1016        baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin);
 1017        if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) {
 1018          throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)
 1019        }
 1020
 1021        var extractVersion = ( short ) (ReadLEUshort() & 0x00ff);
 1022        var localFlags = ( short )ReadLEUshort();
 1023        var compressionMethod = ( short )ReadLEUshort();
 1024        var fileTime = ( short )ReadLEUshort();
 1025        var fileDate = ( short )ReadLEUshort();
 1026        uint crcValue = ReadLEUint();
 1027        long compressedSize = ReadLEUint();
 1028        long size = ReadLEUint();
 1029        int storedNameLength = ReadLEUshort();
 1030        int extraDataLength = ReadLEUshort();
 1031
 1032        byte[] nameData = new byte[storedNameLength];
 1033        StreamUtils.ReadFully(baseStream_, nameData);
 1034
 1035        byte[] extraData = new byte[extraDataLength];
 1036        StreamUtils.ReadFully(baseStream_, extraData);
 1037
 1038        var localExtraData = new ZipExtraData(extraData);
 1039
 1040        // Extra data / zip64 checks
 1041        if (localExtraData.Find(1))
 1042        {
 1043          // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64
 1044          // and size or compressedSize = MaxValue, due to rogue creators.
 1045
 1046          size = localExtraData.ReadLong();
 1047          compressedSize = localExtraData.ReadLong();
 1048
 1049                    if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0)
 1050                    {
 1051                        // These may be valid if patched later
 1052                        if ( (size != -1) && (size != entry.Size)) {
 1053                            throw new ZipException("Size invalid for descriptor");
 1054                        }
 1055
 1056                        if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) {
 1057                            throw new ZipException("Compressed size invalid for descriptor");
 1058                        }
 1059                    }
 1060                }
 1061        else
 1062        {
 1063          // No zip64 extra data but entry requires it.
 1064          if ((extractVersion >= ZipConstants.VersionZip64) &&
 1065            (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue)))
 1066          {
 1067            throw new ZipException("Required Zip64 extended information missing");
 1068          }
 1069        }
 1070
 1071        if ( testData ) {
 1072          if ( entry.IsFile ) {
 1073            if ( !entry.IsCompressionMethodSupported() ) {
 1074              throw new ZipException("Compression method not supported");
 1075            }
 1076
 1077            if ( (extractVersion > ZipConstants.VersionMadeBy)
 1078              || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) {
 1079              throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extract
 1080            }
 1081
 1082            if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.Enha
 1083              throw new ZipException("The library does not support the zip version required to extract this entry");
 1084            }
 1085          }
 1086        }
 1087
 1088                if (testHeader)
 1089                {
 1090                    if ((extractVersion <= 63) &&  // Ignore later versions as we dont know about them..
 1091                        (extractVersion != 10) &&
 1092                        (extractVersion != 11) &&
 1093                        (extractVersion != 20) &&
 1094                        (extractVersion != 21) &&
 1095                        (extractVersion != 25) &&
 1096                        (extractVersion != 27) &&
 1097                        (extractVersion != 45) &&
 1098                        (extractVersion != 46) &&
 1099                        (extractVersion != 50) &&
 1100                        (extractVersion != 51) &&
 1101                        (extractVersion != 52) &&
 1102                        (extractVersion != 61) &&
 1103                        (extractVersion != 62) &&
 1104                        (extractVersion != 63)
 1105                        )
 1106                    {
 1107                        throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", 
 1108                    }
 1109
 1110                    // Local entry flags dont have reserved bit set on.
 1111                    if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | General
 1112                    {
 1113                        throw new ZipException("Reserved bit flags cannot be set.");
 1114                    }
 1115
 1116                    // Encryption requires extract version >= 20
 1117                    if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20))
 1118                    {
 1119                        throw new ZipException(string.Format("Version required to extract this entry is too low for encr
 1120                    }
 1121
 1122                    // Strong encryption requires encryption flag to be set and extract version >= 50.
 1123                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1124                    {
 1125                        if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0)
 1126                        {
 1127                            throw new ZipException("Strong encryption flag set but encryption flag is not set");
 1128                        }
 1129
 1130                        if (extractVersion < 50)
 1131                        {
 1132                            throw new ZipException(string.Format("Version required to extract this entry is too low for 
 1133                        }
 1134                    }
 1135
 1136                    // Patched entries require extract version >= 27
 1137                    if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27))
 1138                    {
 1139                        throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractV
 1140                    }
 1141
 1142                    // Central header flags match local entry flags.
 1143                    if (localFlags != entry.Flags)
 1144                    {
 1145                        throw new ZipException("Central header/local header flags mismatch");
 1146                    }
 1147
 1148                    // Central header compression method matches local entry
 1149                    if (entry.CompressionMethod != (CompressionMethod)compressionMethod)
 1150                    {
 1151                        throw new ZipException("Central header/local header compression method mismatch");
 1152                    }
 1153
 1154                    if (entry.Version != extractVersion)
 1155                    {
 1156                        throw new ZipException("Extract version mismatch");
 1157                    }
 1158
 1159                    // Strong encryption and extract version match
 1160                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1161                    {
 1162                        if (extractVersion < 62)
 1163                        {
 1164                            throw new ZipException("Strong encryption flag set but version not high enough");
 1165                        }
 1166                    }
 1167
 1168                    if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0)
 1169                    {
 1170                        if ((fileTime != 0) || (fileDate != 0))
 1171                        {
 1172                            throw new ZipException("Header masked set but date/time values non-zero");
 1173                        }
 1174                    }
 1175
 1176                    if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0)
 1177                    {
 1178                        if (crcValue != (uint)entry.Crc)
 1179                        {
 1180                            throw new ZipException("Central header/local header crc mismatch");
 1181                        }
 1182                    }
 1183
 1184                    // Crc valid for empty entry.
 1185                    // This will also apply to streamed entries where size isnt known and the header cant be patched
 1186                    if ((size == 0) && (compressedSize == 0))
 1187                    {
 1188                        if (crcValue != 0)
 1189                        {
 1190                            throw new ZipException("Invalid CRC for empty entry");
 1191                        }
 1192                    }
 1193
 1194                    // TODO: make test more correct...  can't compare lengths as was done originally as this can fail fo
 1195                    // Assuming a code page at this point is not valid?  Best is to store the name length in the ZipEntr
 1196                    if (entry.Name.Length > storedNameLength)
 1197                    {
 1198                        throw new ZipException("File name length mismatch");
 1199                    }
 1200
 1201                    // Name data has already been read convert it and compare.
 1202                    string localName = ZipConstants.ConvertToStringExt(localFlags, nameData);
 1203
 1204                    // Central directory and local entry name match
 1205                    if (localName != entry.Name)
 1206                    {
 1207                        throw new ZipException("Central header and local header file name mismatch");
 1208                    }
 1209
 1210                    // Directories have zero actual size but can have compressed size
 1211                    if (entry.IsDirectory)
 1212                    {
 1213                        if (size > 0)
 1214                        {
 1215                            throw new ZipException("Directory cannot have size");
 1216                        }
 1217
 1218                        // There may be other cases where the compressed size can be greater than this?
 1219                        // If so until details are known we will be strict.
 1220                        if (entry.IsCrypted)
 1221                        {
 1222                            if (compressedSize > ZipConstants.CryptoHeaderSize + 2)
 1223                            {
 1224                                throw new ZipException("Directory compressed size invalid");
 1225                            }
 1226                        }
 1227                        else if (compressedSize > 2)
 1228                        {
 1229                            // When not compressed the directory size can validly be 2 bytes
 1230                            // if the true size wasnt known when data was originally being written.
 1231                            // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes
 1232                            throw new ZipException("Directory compressed size invalid");
 1233                        }
 1234                    }
 1235
 1236                    if (!ZipNameTransform.IsValidName(localName, true))
 1237                    {
 1238                        throw new ZipException("Name is invalid");
 1239                    }
 1240                }
 1241
 1242        // Tests that apply to both data and header.
 1243
 1244        // Size can be verified only if it is known in the local header.
 1245        // it will always be known in the central header.
 1246        if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) ||
 1247          ((size > 0) || (compressedSize > 0))) {
 1248
 1249          if (size != entry.Size) {
 1250            throw new ZipException(
 1251              string.Format("Size mismatch between central header({0}) and local header({1})",
 1252                entry.Size, size));
 1253          }
 1254
 1255          if (compressedSize != entry.CompressedSize &&
 1256            compressedSize != 0xFFFFFFFF && compressedSize != -1) {
 1257            throw new ZipException(
 1258              string.Format("Compressed size mismatch between central header({0}) and local header({1})",
 1259              entry.CompressedSize, compressedSize));
 1260          }
 1261        }
 1262
 1263        int extraLength = storedNameLength + extraDataLength;
 1264        return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength;
 1265      }
 1266    }
 1267
 1268    #endregion
 1269
 1270    #region Updating
 1271
 1272    const int DefaultBufferSize = 4096;
 1273
 1274    /// <summary>
 1275    /// The kind of update to apply.
 1276    /// </summary>
 1277    enum UpdateCommand
 1278    {
 1279      Copy,       // Copy original file contents.
 1280      Modify,     // Change encryption, compression, attributes, name, time etc, of an existing file.
 1281      Add,        // Add a new file to the archive.
 1282    }
 1283
 1284    #region Properties
 1285    /// <summary>
 1286    /// Get / set the <see cref="INameTransform"/> to apply to names when updating.
 1287    /// </summary>
 1288    public INameTransform NameTransform
 1289    {
 1290      get {
 1291        return updateEntryFactory_.NameTransform;
 1292      }
 1293
 1294      set {
 1295        updateEntryFactory_.NameTransform = value;
 1296      }
 1297    }
 1298
 1299    /// <summary>
 1300    /// Get/set the <see cref="IEntryFactory"/> used to generate <see cref="ZipEntry"/> values
 1301    /// during updates.
 1302    /// </summary>
 1303    public IEntryFactory EntryFactory
 1304    {
 1305      get {
 1306        return updateEntryFactory_;
 1307      }
 1308
 1309      set {
 1310        if (value == null) {
 1311          updateEntryFactory_ = new ZipEntryFactory();
 1312        }
 1313        else {
 1314          updateEntryFactory_ = value;
 1315        }
 1316      }
 1317    }
 1318
 1319    /// <summary>
 1320    /// Get /set the buffer size to be used when updating this zip file.
 1321    /// </summary>
 1322    public int BufferSize
 1323    {
 1324      get { return bufferSize_; }
 1325      set {
 1326        if ( value < 1024 ) {
 1327#if NETCF_1_0
 1328          throw new ArgumentOutOfRangeException("value");
 1329#else
 1330          throw new ArgumentOutOfRangeException(nameof(value), "cannot be below 1024");
 1331#endif
 1332        }
 1333
 1334        if ( bufferSize_ != value ) {
 1335          bufferSize_ = value;
 1336          copyBuffer_ = null;
 1337        }
 1338      }
 1339    }
 1340
 1341    /// <summary>
 1342    /// Get a value indicating an update has <see cref="BeginUpdate()">been started</see>.
 1343    /// </summary>
 1344    public bool IsUpdating
 1345    {
 1346      get { return updates_ != null; }
 1347    }
 1348
 1349    /// <summary>
 1350    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 1351    /// </summary>
 1352    public UseZip64 UseZip64
 1353    {
 1354      get { return useZip64_; }
 1355      set { useZip64_ = value; }
 1356    }
 1357
 1358    #endregion
 1359
 1360    #region Immediate updating
 1361//    TBD: Direct form of updating
 1362//
 1363//    public void Update(IEntryMatcher deleteMatcher)
 1364//    {
 1365//    }
 1366//
 1367//    public void Update(IScanner addScanner)
 1368//    {
 1369//    }
 1370    #endregion
 1371
 1372    #region Deferred Updating
 1373    /// <summary>
 1374    /// Begin updating this <see cref="ZipFile"/> archive.
 1375    /// </summary>
 1376    /// <param name="archiveStorage">The <see cref="IArchiveStorage">archive storage</see> for use during the update.</p
 1377    /// <param name="dataSource">The <see cref="IDynamicDataSource">data source</see> to utilise during updating.</param
 1378    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1379    /// <exception cref="ArgumentNullException">One of the arguments provided is null</exception>
 1380    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1381    public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
 1382    {
 1383      if ( archiveStorage == null ) {
 1384        throw new ArgumentNullException(nameof(archiveStorage));
 1385      }
 1386
 1387      if ( dataSource == null ) {
 1388        throw new ArgumentNullException(nameof(dataSource));
 1389      }
 1390
 1391      if ( isDisposed_ ) {
 1392        throw new ObjectDisposedException("ZipFile");
 1393      }
 1394
 1395      if ( IsEmbeddedArchive ) {
 1396        throw new ZipException ("Cannot update embedded/SFX archives");
 1397      }
 1398
 1399      archiveStorage_ = archiveStorage;
 1400      updateDataSource_ = dataSource;
 1401
 1402      // NOTE: the baseStream_ may not currently support writing or seeking.
 1403
 1404      updateIndex_ = new Hashtable();
 1405
 1406      updates_ = new ArrayList(entries_.Length);
 1407      foreach(ZipEntry entry in entries_) {
 1408        int index = updates_.Add(new ZipUpdate(entry));
 1409        updateIndex_.Add(entry.Name, index);
 1410      }
 1411
 1412      // We must sort by offset before using offset's calculated sizes
 1413      updates_.Sort(new UpdateComparer());
 1414
 1415      int idx = 0;
 1416      foreach (ZipUpdate update in updates_) {
 1417        //If last entry, there is no next entry offset to use
 1418        if (idx == updates_.Count - 1)
 1419          break;
 1420
 1421        update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset;
 1422        idx++;
 1423      }
 1424      updateCount_ = updates_.Count;
 1425
 1426      contentsEdited_ = false;
 1427      commentEdited_ = false;
 1428      newComment_ = null;
 1429    }
 1430
 1431    /// <summary>
 1432    /// Begin updating to this <see cref="ZipFile"/> archive.
 1433    /// </summary>
 1434    /// <param name="archiveStorage">The storage to use during the update.</param>
 1435    public void BeginUpdate(IArchiveStorage archiveStorage)
 1436    {
 1437      BeginUpdate(archiveStorage, new DynamicDiskDataSource());
 1438    }
 1439
 1440    /// <summary>
 1441    /// Begin updating this <see cref="ZipFile"/> archive.
 1442    /// </summary>
 1443    /// <seealso cref="BeginUpdate(IArchiveStorage)"/>
 1444    /// <seealso cref="CommitUpdate"></seealso>
 1445    /// <seealso cref="AbortUpdate"></seealso>
 1446    public void BeginUpdate()
 1447    {
 1448      if ( Name == null ) {
 1449        BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource());
 1450      }
 1451      else {
 1452        BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource());
 1453      }
 1454    }
 1455
 1456    /// <summary>
 1457    /// Commit current updates, updating this archive.
 1458    /// </summary>
 1459    /// <seealso cref="BeginUpdate()"></seealso>
 1460    /// <seealso cref="AbortUpdate"></seealso>
 1461    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1462    public void CommitUpdate()
 1463    {
 1464      if ( isDisposed_ ) {
 1465        throw new ObjectDisposedException("ZipFile");
 1466      }
 1467
 1468      CheckUpdating();
 1469
 1470      try {
 1471        updateIndex_.Clear();
 1472        updateIndex_=null;
 1473
 1474        if( contentsEdited_ ) {
 1475          RunUpdates();
 1476        }
 1477        else if( commentEdited_ ) {
 1478          UpdateCommentOnly();
 1479        }
 1480        else {
 1481          // Create an empty archive if none existed originally.
 1482          if( entries_.Length==0 ) {
 1483            byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_);
 1484            using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) {
 1485              zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment);
 1486            }
 1487          }
 1488        }
 1489
 1490      }
 1491      finally {
 1492        PostUpdateCleanup();
 1493      }
 1494    }
 1495
 1496    /// <summary>
 1497    /// Abort updating leaving the archive unchanged.
 1498    /// </summary>
 1499    /// <seealso cref="BeginUpdate()"></seealso>
 1500    /// <seealso cref="CommitUpdate"></seealso>
 1501    public void AbortUpdate()
 1502    {
 1503      PostUpdateCleanup();
 1504    }
 1505
 1506    /// <summary>
 1507    /// Set the file comment to be recorded when the current update is <see cref="CommitUpdate">commited</see>.
 1508    /// </summary>
 1509    /// <param name="comment">The comment to record.</param>
 1510    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1511    public void SetComment(string comment)
 1512    {
 1513      if ( isDisposed_ ) {
 1514        throw new ObjectDisposedException("ZipFile");
 1515      }
 1516
 1517      CheckUpdating();
 1518
 1519      newComment_ = new ZipString(comment);
 1520
 1521      if ( newComment_.RawLength  > 0xffff ) {
 1522        newComment_ = null;
 1523        throw new ZipException("Comment length exceeds maximum - 65535");
 1524      }
 1525
 1526      // We dont take account of the original and current comment appearing to be the same
 1527      // as encoding may be different.
 1528      commentEdited_ = true;
 1529    }
 1530
 1531    #endregion
 1532
 1533    #region Adding Entries
 1534
 1535    void AddUpdate(ZipUpdate update)
 1536    {
 1537      contentsEdited_ = true;
 1538
 1539      int index = FindExistingUpdate(update.Entry.Name);
 1540
 1541      if (index >= 0) {
 1542        if ( updates_[index] == null ) {
 1543          updateCount_ += 1;
 1544        }
 1545
 1546        // Direct replacement is faster than delete and add.
 1547        updates_[index] = update;
 1548      }
 1549      else {
 1550        index = updates_.Add(update);
 1551        updateCount_ += 1;
 1552        updateIndex_.Add(update.Entry.Name, index);
 1553      }
 1554    }
 1555
 1556    /// <summary>
 1557    /// Add a new entry to the archive.
 1558    /// </summary>
 1559    /// <param name="fileName">The name of the file to add.</param>
 1560    /// <param name="compressionMethod">The compression method to use.</param>
 1561    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comment for this entry.</param>
 1562    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1563    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1564    /// <exception cref="ArgumentOutOfRangeException">Compression method is not supported.</exception>
 1565    public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText )
 1566    {
 1567      if (fileName == null) {
 1568        throw new ArgumentNullException(nameof(fileName));
 1569      }
 1570
 1571      if ( isDisposed_ ) {
 1572        throw new ObjectDisposedException("ZipFile");
 1573      }
 1574
 1575      if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) {
 1576        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1577      }
 1578
 1579      CheckUpdating();
 1580      contentsEdited_ = true;
 1581
 1582      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1583      entry.IsUnicodeText = useUnicodeText;
 1584      entry.CompressionMethod = compressionMethod;
 1585
 1586      AddUpdate(new ZipUpdate(fileName, entry));
 1587    }
 1588
 1589    /// <summary>
 1590    /// Add a new entry to the archive.
 1591    /// </summary>
 1592    /// <param name="fileName">The name of the file to add.</param>
 1593    /// <param name="compressionMethod">The compression method to use.</param>
 1594    /// <exception cref="ArgumentNullException">ZipFile has been closed.</exception>
 1595    /// <exception cref="ArgumentOutOfRangeException">The compression method is not supported.</exception>
 1596    public void Add(string fileName, CompressionMethod compressionMethod)
 1597    {
 1598      if ( fileName == null ) {
 1599        throw new ArgumentNullException(nameof(fileName));
 1600      }
 1601
 1602      if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) {
 1603        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1604      }
 1605
 1606      CheckUpdating();
 1607      contentsEdited_ = true;
 1608
 1609      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1610      entry.CompressionMethod = compressionMethod;
 1611      AddUpdate(new ZipUpdate(fileName, entry));
 1612    }
 1613
 1614    /// <summary>
 1615    /// Add a file to the archive.
 1616    /// </summary>
 1617    /// <param name="fileName">The name of the file to add.</param>
 1618    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1619    public void Add(string fileName)
 1620    {
 1621      if ( fileName == null ) {
 1622        throw new ArgumentNullException(nameof(fileName));
 1623      }
 1624
 1625      CheckUpdating();
 1626      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName)));
 1627    }
 1628
 1629    /// <summary>
 1630    /// Add a file to the archive.
 1631    /// </summary>
 1632    /// <param name="fileName">The name of the file to add.</param>
 1633    /// <param name="entryName">The name to use for the <see cref="ZipEntry"/> on the Zip file created.</param>
 1634    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1635    public void Add(string fileName, string entryName)
 1636    {
 1637      if (fileName == null) {
 1638        throw new ArgumentNullException(nameof(fileName));
 1639      }
 1640
 1641      if ( entryName == null ) {
 1642        throw new ArgumentNullException(nameof(entryName));
 1643      }
 1644
 1645      CheckUpdating();
 1646      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true)));
 1647    }
 1648
 1649
 1650    /// <summary>
 1651    /// Add a file entry with data.
 1652    /// </summary>
 1653    /// <param name="dataSource">The source of the data for this entry.</param>
 1654    /// <param name="entryName">The name to give to the entry.</param>
 1655    public void Add(IStaticDataSource dataSource, string entryName)
 1656    {
 1657      if ( dataSource == null ) {
 1658        throw new ArgumentNullException(nameof(dataSource));
 1659      }
 1660
 1661      if ( entryName == null ) {
 1662        throw new ArgumentNullException(nameof(entryName));
 1663      }
 1664
 1665      CheckUpdating();
 1666      AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false)));
 1667    }
 1668
 1669    /// <summary>
 1670    /// Add a file entry with data.
 1671    /// </summary>
 1672    /// <param name="dataSource">The source of the data for this entry.</param>
 1673    /// <param name="entryName">The name to give to the entry.</param>
 1674    /// <param name="compressionMethod">The compression method to use.</param>
 1675    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 1676    {
 1677      if ( dataSource == null ) {
 1678        throw new ArgumentNullException(nameof(dataSource));
 1679      }
 1680
 1681      if ( entryName == null ) {
 1682        throw new ArgumentNullException(nameof(entryName));
 1683      }
 1684
 1685      CheckUpdating();
 1686
 1687      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1688      entry.CompressionMethod = compressionMethod;
 1689
 1690      AddUpdate(new ZipUpdate(dataSource, entry));
 1691    }
 1692
 1693    /// <summary>
 1694    /// Add a file entry with data.
 1695    /// </summary>
 1696    /// <param name="dataSource">The source of the data for this entry.</param>
 1697    /// <param name="entryName">The name to give to the entry.</param>
 1698    /// <param name="compressionMethod">The compression method to use.</param>
 1699    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comments for this entry.</param>
 1700    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicode
 1701    {
 1702      if (dataSource == null) {
 1703        throw new ArgumentNullException(nameof(dataSource));
 1704      }
 1705
 1706      if ( entryName == null ) {
 1707        throw new ArgumentNullException(nameof(entryName));
 1708      }
 1709
 1710      CheckUpdating();
 1711
 1712      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1713      entry.IsUnicodeText = useUnicodeText;
 1714      entry.CompressionMethod = compressionMethod;
 1715
 1716      AddUpdate(new ZipUpdate(dataSource, entry));
 1717    }
 1718
 1719    /// <summary>
 1720    /// Add a <see cref="ZipEntry"/> that contains no data.
 1721    /// </summary>
 1722    /// <param name="entry">The entry to add.</param>
 1723    /// <remarks>This can be used to add directories, volume labels, or empty file entries.</remarks>
 1724    public void Add(ZipEntry entry)
 1725    {
 1726      if ( entry == null ) {
 1727        throw new ArgumentNullException(nameof(entry));
 1728      }
 1729
 1730      CheckUpdating();
 1731
 1732      if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) {
 1733        throw new ZipException("Entry cannot have any data");
 1734      }
 1735
 1736      AddUpdate(new ZipUpdate(UpdateCommand.Add, entry));
 1737    }
 1738
 1739    /// <summary>
 1740    /// Add a directory entry to the archive.
 1741    /// </summary>
 1742    /// <param name="directoryName">The directory to add.</param>
 1743    public void AddDirectory(string directoryName)
 1744    {
 1745      if ( directoryName == null ) {
 1746        throw new ArgumentNullException(nameof(directoryName));
 1747      }
 1748
 1749      CheckUpdating();
 1750
 1751      ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName);
 1752      AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry));
 1753    }
 1754
 1755    #endregion
 1756
 1757    #region Modifying Entries
 1758/* Modify not yet ready for public consumption.
 1759   Direct modification of an entry should not overwrite original data before its read.
 1760   Safe mode is trivial in this sense.
 1761    public void Modify(ZipEntry original, ZipEntry updated)
 1762    {
 1763      if ( original == null ) {
 1764        throw new ArgumentNullException("original");
 1765      }
 1766
 1767      if ( updated == null ) {
 1768        throw new ArgumentNullException("updated");
 1769      }
 1770
 1771      CheckUpdating();
 1772      contentsEdited_ = true;
 1773      updates_.Add(new ZipUpdate(original, updated));
 1774    }
 1775*/
 1776    #endregion
 1777
 1778    #region Deleting Entries
 1779    /// <summary>
 1780    /// Delete an entry by name
 1781    /// </summary>
 1782    /// <param name="fileName">The filename to delete</param>
 1783    /// <returns>True if the entry was found and deleted; false otherwise.</returns>
 1784    public bool Delete(string fileName)
 1785    {
 1786      if ( fileName == null ) {
 1787        throw new ArgumentNullException(nameof(fileName));
 1788      }
 1789
 1790      CheckUpdating();
 1791
 1792      bool result = false;
 1793      int index = FindExistingUpdate(fileName);
 1794      if ( (index >= 0) && (updates_[index] != null) ) {
 1795        result = true;
 1796        contentsEdited_ = true;
 1797        updates_[index] = null;
 1798        updateCount_ -= 1;
 1799      }
 1800      else {
 1801        throw new ZipException("Cannot find entry to delete");
 1802      }
 1803      return result;
 1804    }
 1805
 1806    /// <summary>
 1807    /// Delete a <see cref="ZipEntry"/> from the archive.
 1808    /// </summary>
 1809    /// <param name="entry">The entry to delete.</param>
 1810    public void Delete(ZipEntry entry)
 1811    {
 1812      if ( entry == null ) {
 1813        throw new ArgumentNullException(nameof(entry));
 1814      }
 1815
 1816      CheckUpdating();
 1817
 1818      int index = FindExistingUpdate(entry);
 1819      if ( index >= 0 ) {
 1820        contentsEdited_ = true;
 1821        updates_[index] = null;
 1822        updateCount_ -= 1;
 1823      }
 1824      else {
 1825        throw new ZipException("Cannot find entry to delete");
 1826      }
 1827    }
 1828
 1829    #endregion
 1830
 1831    #region Update Support
 1832
 1833    #region Writing Values/Headers
 1834    void WriteLEShort(int value)
 1835    {
 1836      baseStream_.WriteByte(( byte )(value & 0xff));
 1837      baseStream_.WriteByte(( byte )((value >> 8) & 0xff));
 1838    }
 1839
 1840    /// <summary>
 1841    /// Write an unsigned short in little endian byte order.
 1842    /// </summary>
 1843    void WriteLEUshort(ushort value)
 1844    {
 1845      baseStream_.WriteByte(( byte )(value & 0xff));
 1846      baseStream_.WriteByte(( byte )(value >> 8));
 1847    }
 1848
 1849    /// <summary>
 1850    /// Write an int in little endian byte order.
 1851    /// </summary>
 1852    void WriteLEInt(int value)
 1853    {
 1854      WriteLEShort(value & 0xffff);
 1855      WriteLEShort(value >> 16);
 1856    }
 1857
 1858    /// <summary>
 1859    /// Write an unsigned int in little endian byte order.
 1860    /// </summary>
 1861    void WriteLEUint(uint value)
 1862    {
 1863      WriteLEUshort((ushort)(value & 0xffff));
 1864      WriteLEUshort((ushort)(value >> 16));
 1865    }
 1866
 1867    /// <summary>
 1868    /// Write a long in little endian byte order.
 1869    /// </summary>
 1870    void WriteLeLong(long value)
 1871    {
 1872      WriteLEInt(( int )(value & 0xffffffff));
 1873      WriteLEInt(( int )(value >> 32));
 1874    }
 1875
 1876    void WriteLEUlong(ulong value)
 1877    {
 1878      WriteLEUint(( uint )(value & 0xffffffff));
 1879      WriteLEUint(( uint )(value >> 32));
 1880    }
 1881
 1882    void WriteLocalEntryHeader(ZipUpdate update)
 1883    {
 1884      ZipEntry entry = update.OutEntry;
 1885
 1886      // TODO: Local offset will require adjusting for multi-disk zip files.
 1887      entry.Offset = baseStream_.Position;
 1888
 1889      // TODO: Need to clear any entry flags that dont make sense or throw an exception here.
 1890      if (update.Command != UpdateCommand.Copy) {
 1891        if (entry.CompressionMethod == CompressionMethod.Deflated) {
 1892          if (entry.Size == 0) {
 1893            // No need to compress - no data.
 1894            entry.CompressedSize = entry.Size;
 1895            entry.Crc = 0;
 1896            entry.CompressionMethod = CompressionMethod.Stored;
 1897          }
 1898        }
 1899        else if (entry.CompressionMethod == CompressionMethod.Stored) {
 1900          entry.Flags &= ~(int)GeneralBitFlags.Descriptor;
 1901        }
 1902
 1903        if (HaveKeys) {
 1904          entry.IsCrypted = true;
 1905          if (entry.Crc < 0) {
 1906            entry.Flags |= (int)GeneralBitFlags.Descriptor;
 1907          }
 1908        }
 1909        else {
 1910          entry.IsCrypted = false;
 1911        }
 1912
 1913        switch (useZip64_) {
 1914          case UseZip64.Dynamic:
 1915            if (entry.Size < 0) {
 1916              entry.ForceZip64();
 1917            }
 1918            break;
 1919
 1920          case UseZip64.On:
 1921            entry.ForceZip64();
 1922            break;
 1923
 1924          case UseZip64.Off:
 1925            // Do nothing.  The entry itself may be using Zip64 independantly.
 1926            break;
 1927        }
 1928      }
 1929
 1930      // Write the local file header
 1931      WriteLEInt(ZipConstants.LocalHeaderSignature);
 1932
 1933      WriteLEShort(entry.Version);
 1934      WriteLEShort(entry.Flags);
 1935
 1936      WriteLEShort((byte)entry.CompressionMethod);
 1937      WriteLEInt(( int )entry.DosTime);
 1938
 1939      if ( !entry.HasCrc ) {
 1940        // Note patch address for updating CRC later.
 1941        update.CrcPatchOffset = baseStream_.Position;
 1942        WriteLEInt(( int )0);
 1943      }
 1944      else {
 1945        WriteLEInt(unchecked(( int )entry.Crc));
 1946      }
 1947
 1948      if (entry.LocalHeaderRequiresZip64) {
 1949        WriteLEInt(-1);
 1950        WriteLEInt(-1);
 1951      }
 1952      else {
 1953        if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) {
 1954          update.SizePatchOffset = baseStream_.Position;
 1955        }
 1956
 1957        WriteLEInt(( int )entry.CompressedSize);
 1958        WriteLEInt(( int )entry.Size);
 1959      }
 1960
 1961      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 1962
 1963      if ( name.Length > 0xFFFF ) {
 1964        throw new ZipException("Entry name too long.");
 1965      }
 1966
 1967      var ed = new ZipExtraData(entry.ExtraData);
 1968
 1969      if ( entry.LocalHeaderRequiresZip64 ) {
 1970        ed.StartNewEntry();
 1971
 1972        // Local entry header always includes size and compressed size.
 1973        // NOTE the order of these fields is reversed when compared to the normal headers!
 1974        ed.AddLeLong(entry.Size);
 1975        ed.AddLeLong(entry.CompressedSize);
 1976        ed.AddNewEntry(1);
 1977      }
 1978      else {
 1979        ed.Delete(1);
 1980      }
 1981
 1982      entry.ExtraData = ed.GetEntryData();
 1983
 1984      WriteLEShort(name.Length);
 1985      WriteLEShort(entry.ExtraData.Length);
 1986
 1987      if ( name.Length > 0 ) {
 1988        baseStream_.Write(name, 0, name.Length);
 1989      }
 1990
 1991      if ( entry.LocalHeaderRequiresZip64 ) {
 1992        if ( !ed.Find(1) ) {
 1993          throw new ZipException("Internal error cannot find extra data");
 1994        }
 1995
 1996        update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex;
 1997      }
 1998
 1999      if ( entry.ExtraData.Length > 0 ) {
 2000        baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length);
 2001      }
 2002    }
 2003
 2004    int WriteCentralDirectoryHeader(ZipEntry entry)
 2005    {
 2006      if ( entry.CompressedSize < 0 ) {
 2007        throw new ZipException("Attempt to write central directory entry with unknown csize");
 2008      }
 2009
 2010      if ( entry.Size < 0 ) {
 2011        throw new ZipException("Attempt to write central directory entry with unknown size");
 2012      }
 2013
 2014      if ( entry.Crc < 0 ) {
 2015        throw new ZipException("Attempt to write central directory entry with unknown crc");
 2016      }
 2017
 2018      // Write the central file header
 2019      WriteLEInt(ZipConstants.CentralHeaderSignature);
 2020
 2021      // Version made by
 2022      WriteLEShort(ZipConstants.VersionMadeBy);
 2023
 2024      // Version required to extract
 2025      WriteLEShort(entry.Version);
 2026
 2027      WriteLEShort(entry.Flags);
 2028
 2029      unchecked {
 2030        WriteLEShort((byte)entry.CompressionMethod);
 2031        WriteLEInt((int)entry.DosTime);
 2032        WriteLEInt((int)entry.Crc);
 2033      }
 2034
 2035      if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) {
 2036        WriteLEInt(-1);
 2037      }
 2038      else {
 2039        WriteLEInt((int)(entry.CompressedSize & 0xffffffff));
 2040      }
 2041
 2042      if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) {
 2043        WriteLEInt(-1);
 2044      }
 2045      else {
 2046        WriteLEInt((int)entry.Size);
 2047      }
 2048
 2049      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 2050
 2051      if ( name.Length > 0xFFFF ) {
 2052        throw new ZipException("Entry name is too long.");
 2053      }
 2054
 2055      WriteLEShort(name.Length);
 2056
 2057      // Central header extra data is different to local header version so regenerate.
 2058      var ed = new ZipExtraData(entry.ExtraData);
 2059
 2060      if ( entry.CentralHeaderRequiresZip64 ) {
 2061        ed.StartNewEntry();
 2062
 2063        if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2064        {
 2065          ed.AddLeLong(entry.Size);
 2066        }
 2067
 2068        if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2069        {
 2070          ed.AddLeLong(entry.CompressedSize);
 2071        }
 2072
 2073        if ( entry.Offset >= 0xffffffff ) {
 2074          ed.AddLeLong(entry.Offset);
 2075        }
 2076
 2077        // Number of disk on which this file starts isnt supported and is never written here.
 2078        ed.AddNewEntry(1);
 2079      }
 2080      else {
 2081        // Should have already be done when local header was added.
 2082        ed.Delete(1);
 2083      }
 2084
 2085      byte[] centralExtraData = ed.GetEntryData();
 2086
 2087      WriteLEShort(centralExtraData.Length);
 2088      WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0);
 2089
 2090      WriteLEShort(0);  // disk number
 2091      WriteLEShort(0);  // internal file attributes
 2092
 2093      // External file attributes...
 2094      if ( entry.ExternalFileAttributes != -1 ) {
 2095        WriteLEInt(entry.ExternalFileAttributes);
 2096      }
 2097      else {
 2098        if ( entry.IsDirectory ) {
 2099          WriteLEUint(16);
 2100        }
 2101        else {
 2102          WriteLEUint(0);
 2103        }
 2104      }
 2105
 2106      if ( entry.Offset >= 0xffffffff ) {
 2107        WriteLEUint(0xffffffff);
 2108      }
 2109      else {
 2110        WriteLEUint((uint)(int)entry.Offset);
 2111      }
 2112
 2113      if ( name.Length > 0 ) {
 2114        baseStream_.Write(name, 0, name.Length);
 2115      }
 2116
 2117      if ( centralExtraData.Length > 0 ) {
 2118        baseStream_.Write(centralExtraData, 0, centralExtraData.Length);
 2119      }
 2120
 2121      byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0];
 2122
 2123      if ( rawComment.Length > 0 ) {
 2124        baseStream_.Write(rawComment, 0, rawComment.Length);
 2125      }
 2126
 2127      return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length;
 2128    }
 2129    #endregion
 2130
 2131    void PostUpdateCleanup()
 2132    {
 2133            updateDataSource_ = null;
 2134            updates_ = null;
 2135            updateIndex_ = null;
 2136
 2137            if (archiveStorage_ != null)
 2138            {
 2139        archiveStorage_.Dispose();
 2140        archiveStorage_=null;
 2141      }
 2142    }
 2143
 2144    string GetTransformedFileName(string name)
 2145    {
 2146            INameTransform transform = NameTransform;
 2147      return (transform != null) ?
 2148        transform.TransformFile(name) :
 2149        name;
 2150    }
 2151
 2152    string GetTransformedDirectoryName(string name)
 2153    {
 2154            INameTransform transform = NameTransform;
 2155            return (transform != null) ?
 2156        transform.TransformDirectory(name) :
 2157        name;
 2158    }
 2159
 2160    /// <summary>
 2161    /// Get a raw memory buffer.
 2162    /// </summary>
 2163    /// <returns>Returns a raw memory buffer.</returns>
 2164    byte[] GetBuffer()
 2165    {
 2166      if ( copyBuffer_ == null ) {
 2167        copyBuffer_ = new byte[bufferSize_];
 2168      }
 2169      return copyBuffer_;
 2170    }
 2171
 2172    void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
 2173    {
 2174      int bytesToCopy = GetDescriptorSize(update);
 2175
 2176      if ( bytesToCopy > 0 ) {
 2177        byte[] buffer = GetBuffer();
 2178
 2179        while ( bytesToCopy > 0 ) {
 2180          int readSize = Math.Min(buffer.Length, bytesToCopy);
 2181
 2182          int bytesRead = source.Read(buffer, 0, readSize);
 2183          if ( bytesRead > 0 ) {
 2184            dest.Write(buffer, 0, bytesRead);
 2185            bytesToCopy -= bytesRead;
 2186          }
 2187          else {
 2188            throw new ZipException("Unxpected end of stream");
 2189          }
 2190        }
 2191      }
 2192    }
 2193
 2194    void CopyBytes(ZipUpdate update, Stream destination, Stream source,
 2195      long bytesToCopy, bool updateCrc)
 2196    {
 2197      if ( destination == source ) {
 2198        throw new InvalidOperationException("Destination and source are the same");
 2199      }
 2200
 2201      // NOTE: Compressed size is updated elsewhere.
 2202      var crc = new Crc32();
 2203      byte[] buffer = GetBuffer();
 2204
 2205      long targetBytes = bytesToCopy;
 2206      long totalBytesRead = 0;
 2207
 2208      int bytesRead;
 2209      do {
 2210        int readSize = buffer.Length;
 2211
 2212        if ( bytesToCopy < readSize ) {
 2213          readSize = (int)bytesToCopy;
 2214        }
 2215
 2216        bytesRead = source.Read(buffer, 0, readSize);
 2217        if ( bytesRead > 0 ) {
 2218          if ( updateCrc ) {
 2219            crc.Update(buffer, 0, bytesRead);
 2220          }
 2221          destination.Write(buffer, 0, bytesRead);
 2222          bytesToCopy -= bytesRead;
 2223          totalBytesRead += bytesRead;
 2224        }
 2225      }
 2226      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2227
 2228      if ( totalBytesRead != targetBytes ) {
 2229        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2230      }
 2231
 2232      if ( updateCrc ) {
 2233        update.OutEntry.Crc = crc.Value;
 2234      }
 2235    }
 2236
 2237    /// <summary>
 2238    /// Get the size of the source descriptor for a <see cref="ZipUpdate"/>.
 2239    /// </summary>
 2240    /// <param name="update">The update to get the size for.</param>
 2241    /// <returns>The descriptor size, zero if there isnt one.</returns>
 2242    int GetDescriptorSize(ZipUpdate update)
 2243    {
 2244      int result = 0;
 2245      if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) {
 2246        result = ZipConstants.DataDescriptorSize - 4;
 2247        if ( update.Entry.LocalHeaderRequiresZip64 ) {
 2248          result = ZipConstants.Zip64DataDescriptorSize - 4;
 2249        }
 2250      }
 2251      return result;
 2252    }
 2253
 2254    void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition)
 2255    {
 2256      int bytesToCopy = GetDescriptorSize(update);
 2257
 2258      while ( bytesToCopy > 0 ) {
 2259        var readSize = (int)bytesToCopy;
 2260        byte[] buffer = GetBuffer();
 2261
 2262        stream.Position = sourcePosition;
 2263        int bytesRead = stream.Read(buffer, 0, readSize);
 2264        if ( bytesRead > 0 ) {
 2265          stream.Position = destinationPosition;
 2266          stream.Write(buffer, 0, bytesRead);
 2267          bytesToCopy -= bytesRead;
 2268          destinationPosition += bytesRead;
 2269          sourcePosition += bytesRead;
 2270        }
 2271        else {
 2272          throw new ZipException("Unxpected end of stream");
 2273        }
 2274      }
 2275    }
 2276
 2277    void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sou
 2278    {
 2279      long bytesToCopy = update.Entry.CompressedSize;
 2280
 2281      // NOTE: Compressed size is updated elsewhere.
 2282      var crc = new Crc32();
 2283      byte[] buffer = GetBuffer();
 2284
 2285      long targetBytes = bytesToCopy;
 2286      long totalBytesRead = 0;
 2287
 2288      int bytesRead;
 2289      do
 2290      {
 2291        int readSize = buffer.Length;
 2292
 2293        if ( bytesToCopy < readSize ) {
 2294          readSize = (int)bytesToCopy;
 2295        }
 2296
 2297        stream.Position = sourcePosition;
 2298        bytesRead = stream.Read(buffer, 0, readSize);
 2299        if ( bytesRead > 0 ) {
 2300          if ( updateCrc ) {
 2301            crc.Update(buffer, 0, bytesRead);
 2302          }
 2303          stream.Position = destinationPosition;
 2304          stream.Write(buffer, 0, bytesRead);
 2305
 2306          destinationPosition += bytesRead;
 2307          sourcePosition += bytesRead;
 2308          bytesToCopy -= bytesRead;
 2309          totalBytesRead += bytesRead;
 2310        }
 2311      }
 2312      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2313
 2314      if ( totalBytesRead != targetBytes ) {
 2315        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2316      }
 2317
 2318      if ( updateCrc ) {
 2319        update.OutEntry.Crc = crc.Value;
 2320      }
 2321    }
 2322
 2323    int FindExistingUpdate(ZipEntry entry)
 2324    {
 2325      int result = -1;
 2326      string convertedName = GetTransformedFileName(entry.Name);
 2327
 2328      if (updateIndex_.ContainsKey(convertedName)) {
 2329        result = (int)updateIndex_[convertedName];
 2330      }
 2331/*
 2332      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2333      // for CF?
 2334      for (int index = 0; index < updates_.Count; ++index)
 2335      {
 2336        ZipUpdate zu = ( ZipUpdate )updates_[index];
 2337        if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) &&
 2338          (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) {
 2339          result = index;
 2340          break;
 2341        }
 2342      }
 2343 */
 2344      return result;
 2345    }
 2346
 2347    int FindExistingUpdate(string fileName)
 2348    {
 2349      int result = -1;
 2350
 2351      string convertedName = GetTransformedFileName(fileName);
 2352
 2353      if (updateIndex_.ContainsKey(convertedName)) {
 2354        result = (int)updateIndex_[convertedName];
 2355      }
 2356
 2357/*
 2358      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2359      // for CF?
 2360      for ( int index = 0; index < updates_.Count; ++index ) {
 2361        if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name,
 2362          true, CultureInfo.InvariantCulture) == 0 ) {
 2363          result = index;
 2364          break;
 2365        }
 2366      }
 2367 */
 2368
 2369      return result;
 2370    }
 2371
 2372    /// <summary>
 2373    /// Get an output stream for the specified <see cref="ZipEntry"/>
 2374    /// </summary>
 2375    /// <param name="entry">The entry to get an output stream for.</param>
 2376    /// <returns>The output stream obtained for the entry.</returns>
 2377    Stream GetOutputStream(ZipEntry entry)
 2378    {
 2379      Stream result = baseStream_;
 2380
 2381      if ( entry.IsCrypted == true ) {
 2382#if NETCF_1_0
 2383        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 2384#else
 2385        result = CreateAndInitEncryptionStream(result, entry);
 2386#endif
 2387      }
 2388
 2389      switch ( entry.CompressionMethod ) {
 2390        case CompressionMethod.Stored:
 2391          result = new UncompressedStream(result);
 2392          break;
 2393
 2394        case CompressionMethod.Deflated:
 2395          var dos = new DeflaterOutputStream(result, new Deflater(9, true));
 2396          dos.IsStreamOwner = false;
 2397          result = dos;
 2398          break;
 2399
 2400        default:
 2401          throw new ZipException("Unknown compression method " + entry.CompressionMethod);
 2402      }
 2403      return result;
 2404    }
 2405
 2406    void AddEntry(ZipFile workFile, ZipUpdate update)
 2407    {
 2408      Stream source = null;
 2409
 2410      if ( update.Entry.IsFile ) {
 2411        source = update.GetSource();
 2412
 2413        if ( source == null ) {
 2414          source = updateDataSource_.GetSource(update.Entry, update.Filename);
 2415        }
 2416      }
 2417
 2418      if ( source != null ) {
 2419        using ( source ) {
 2420          long sourceStreamLength = source.Length;
 2421          if ( update.OutEntry.Size < 0 ) {
 2422            update.OutEntry.Size = sourceStreamLength;
 2423          }
 2424          else {
 2425            // Check for errant entries.
 2426            if ( update.OutEntry.Size != sourceStreamLength ) {
 2427              throw new ZipException("Entry size/stream size mismatch");
 2428            }
 2429          }
 2430
 2431          workFile.WriteLocalEntryHeader(update);
 2432
 2433          long dataStart = workFile.baseStream_.Position;
 2434
 2435          using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2436            CopyBytes(update, output, source, sourceStreamLength, true);
 2437          }
 2438
 2439          long dataEnd = workFile.baseStream_.Position;
 2440          update.OutEntry.CompressedSize = dataEnd - dataStart;
 2441
 2442          if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor)
 2443          {
 2444            var helper = new ZipHelperStream(workFile.baseStream_);
 2445            helper.WriteDataDescriptor(update.OutEntry);
 2446          }
 2447        }
 2448      }
 2449      else {
 2450        workFile.WriteLocalEntryHeader(update);
 2451        update.OutEntry.CompressedSize = 0;
 2452      }
 2453
 2454    }
 2455
 2456    void ModifyEntry(ZipFile workFile, ZipUpdate update)
 2457    {
 2458      workFile.WriteLocalEntryHeader(update);
 2459      long dataStart = workFile.baseStream_.Position;
 2460
 2461      // TODO: This is slow if the changes don't effect the data!!
 2462      if ( update.Entry.IsFile && (update.Filename != null) ) {
 2463        using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2464          using ( Stream source = this.GetInputStream(update.Entry) ) {
 2465            CopyBytes(update, output, source, source.Length, true);
 2466          }
 2467        }
 2468      }
 2469
 2470      long dataEnd = workFile.baseStream_.Position;
 2471      update.Entry.CompressedSize = dataEnd - dataStart;
 2472    }
 2473
 2474    void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition)
 2475    {
 2476      bool skipOver = false || update.Entry.Offset == destinationPosition;
 2477
 2478      if ( !skipOver ) {
 2479        baseStream_.Position = destinationPosition;
 2480        workFile.WriteLocalEntryHeader(update);
 2481        destinationPosition = baseStream_.Position;
 2482      }
 2483
 2484      long sourcePosition = 0;
 2485
 2486      const int NameLengthOffset = 26;
 2487
 2488      // TODO: Add base for SFX friendly handling
 2489      long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2490
 2491      baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2492
 2493      // Clumsy way of handling retrieving the original name and extra data length for now.
 2494      // TODO: Stop re-reading name and data length in CopyEntryDirect.
 2495      uint nameLength = ReadLEUshort();
 2496      uint extraLength = ReadLEUshort();
 2497
 2498      sourcePosition = baseStream_.Position + nameLength + extraLength;
 2499
 2500      if (skipOver) {
 2501        if (update.OffsetBasedSize != -1)
 2502          destinationPosition += update.OffsetBasedSize;
 2503        else
 2504          // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) ar
 2505          // WinZip produces a warning on these entries:
 2506          // "caution: value of lrec.csize (compressed size) changed from ..."
 2507          destinationPosition +=
 2508            (sourcePosition - entryDataOffset) + NameLengthOffset +  // Header size
 2509            update.Entry.CompressedSize + GetDescriptorSize(update);
 2510      }
 2511      else {
 2512        if ( update.Entry.CompressedSize > 0 ) {
 2513          CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition );
 2514        }
 2515        CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition);
 2516      }
 2517    }
 2518
 2519    void CopyEntry(ZipFile workFile, ZipUpdate update)
 2520    {
 2521      workFile.WriteLocalEntryHeader(update);
 2522
 2523      if ( update.Entry.CompressedSize > 0 ) {
 2524        const int NameLengthOffset = 26;
 2525
 2526        long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2527
 2528        // TODO: This wont work for SFX files!
 2529        baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2530
 2531        uint nameLength = ReadLEUshort();
 2532        uint extraLength = ReadLEUshort();
 2533
 2534        baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current);
 2535
 2536        CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false);
 2537      }
 2538      CopyDescriptorBytes(update, workFile.baseStream_, baseStream_);
 2539    }
 2540
 2541    void Reopen(Stream source)
 2542    {
 2543      if ( source == null ) {
 2544        throw new ZipException("Failed to reopen archive - no source");
 2545      }
 2546
 2547      isNewArchive_ = false;
 2548      baseStream_ = source;
 2549      ReadEntries();
 2550    }
 2551
 2552    void Reopen()
 2553    {
 2554      if (Name == null) {
 2555        throw new InvalidOperationException("Name is not known cannot Reopen");
 2556      }
 2557
 2558      Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read));
 2559    }
 2560
 2561    void UpdateCommentOnly()
 2562    {
 2563      long baseLength = baseStream_.Length;
 2564
 2565      ZipHelperStream updateFile = null;
 2566
 2567      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2568        Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_);
 2569        updateFile = new ZipHelperStream(copyStream);
 2570        updateFile.IsStreamOwner = true;
 2571
 2572        baseStream_.Close();
 2573        baseStream_ = null;
 2574      }
 2575      else {
 2576        if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) {
 2577          // TODO: archiveStorage wasnt originally intended for this use.
 2578          // Need to revisit this to tidy up handling as archive storage currently doesnt
 2579          // handle the original stream well.
 2580          // The problem is when using an existing zip archive with an in memory archive storage.
 2581          // The open stream wont support writing but the memory storage should open the same file not an in memory one.
 2582
 2583          // Need to tidy up the archive storage interface and contract basically.
 2584          baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_);
 2585          updateFile = new ZipHelperStream(baseStream_);
 2586        }
 2587        else {
 2588          baseStream_.Close();
 2589          baseStream_ = null;
 2590          updateFile = new ZipHelperStream(Name);
 2591        }
 2592      }
 2593
 2594      using ( updateFile ) {
 2595        long locatedCentralDirOffset =
 2596          updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 2597                            baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 2598        if ( locatedCentralDirOffset < 0 ) {
 2599          throw new ZipException("Cannot find central directory");
 2600        }
 2601
 2602        const int CentralHeaderCommentSizeOffset = 16;
 2603        updateFile.Position += CentralHeaderCommentSizeOffset;
 2604
 2605        byte[] rawComment = newComment_.RawComment;
 2606
 2607        updateFile.WriteLEShort(rawComment.Length);
 2608        updateFile.Write(rawComment, 0, rawComment.Length);
 2609        updateFile.SetLength(updateFile.Position);
 2610      }
 2611
 2612      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2613        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2614      }
 2615      else {
 2616        ReadEntries();
 2617      }
 2618    }
 2619
 2620    /// <summary>
 2621    /// Class used to sort updates.
 2622    /// </summary>
 2623    class UpdateComparer : IComparer
 2624    {
 2625      /// <summary>
 2626      /// Compares two objects and returns a value indicating whether one is
 2627      /// less than, equal to or greater than the other.
 2628      /// </summary>
 2629      /// <param name="x">First object to compare</param>
 2630      /// <param name="y">Second object to compare.</param>
 2631      /// <returns>Compare result.</returns>
 2632      public int Compare(
 2633        object x,
 2634        object y)
 2635      {
 2636        var zx = x as ZipUpdate;
 2637        var zy = y as ZipUpdate;
 2638
 2639        int result;
 2640
 2641        if (zx == null) {
 2642          if (zy == null) {
 2643            result = 0;
 2644          }
 2645          else {
 2646            result = -1;
 2647          }
 2648        }
 2649        else if (zy == null) {
 2650          result = 1;
 2651        }
 2652        else {
 2653          int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1;
 2654          int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1;
 2655
 2656          result = xCmdValue - yCmdValue;
 2657          if (result == 0) {
 2658            long offsetDiff = zx.Entry.Offset - zy.Entry.Offset;
 2659            if (offsetDiff < 0) {
 2660              result = -1;
 2661            }
 2662            else if (offsetDiff == 0) {
 2663              result = 0;
 2664            }
 2665            else {
 2666              result = 1;
 2667            }
 2668          }
 2669        }
 2670        return result;
 2671      }
 2672    }
 2673
 2674    void RunUpdates()
 2675    {
 2676      long sizeEntries = 0;
 2677      long endOfStream = 0;
 2678      bool directUpdate = false;
 2679      long destinationPosition = 0; // NOT SFX friendly
 2680
 2681      ZipFile workFile;
 2682
 2683      if ( IsNewArchive ) {
 2684        workFile = this;
 2685        workFile.baseStream_.Position = 0;
 2686        directUpdate = true;
 2687      }
 2688      else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) {
 2689        workFile = this;
 2690        workFile.baseStream_.Position = 0;
 2691        directUpdate = true;
 2692
 2693        // Sort the updates by offset within copies/modifies, then adds.
 2694        // This ensures that data required by copies will not be overwritten.
 2695        updates_.Sort(new UpdateComparer());
 2696      }
 2697      else {
 2698        workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput());
 2699        workFile.UseZip64 = UseZip64;
 2700
 2701        if (key != null) {
 2702          workFile.key = (byte[])key.Clone();
 2703        }
 2704      }
 2705
 2706      try {
 2707        foreach ( ZipUpdate update in updates_ ) {
 2708          if (update != null) {
 2709            switch (update.Command) {
 2710              case UpdateCommand.Copy:
 2711                if (directUpdate) {
 2712                  CopyEntryDirect(workFile, update, ref destinationPosition);
 2713                }
 2714                else {
 2715                  CopyEntry(workFile, update);
 2716                }
 2717                break;
 2718
 2719              case UpdateCommand.Modify:
 2720                // TODO: Direct modifying of an entry will take some legwork.
 2721                ModifyEntry(workFile, update);
 2722                break;
 2723
 2724              case UpdateCommand.Add:
 2725                if (!IsNewArchive && directUpdate) {
 2726                  workFile.baseStream_.Position = destinationPosition;
 2727                }
 2728
 2729                AddEntry(workFile, update);
 2730
 2731                if (directUpdate) {
 2732                  destinationPosition = workFile.baseStream_.Position;
 2733                }
 2734                break;
 2735            }
 2736          }
 2737        }
 2738
 2739        if ( !IsNewArchive && directUpdate ) {
 2740          workFile.baseStream_.Position = destinationPosition;
 2741        }
 2742
 2743        long centralDirOffset = workFile.baseStream_.Position;
 2744
 2745        foreach ( ZipUpdate update in updates_ ) {
 2746          if (update != null) {
 2747            sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry);
 2748          }
 2749        }
 2750
 2751        byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_);
 2752        using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) {
 2753          zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment);
 2754        }
 2755
 2756        endOfStream = workFile.baseStream_.Position;
 2757
 2758        // And now patch entries...
 2759        foreach ( ZipUpdate update in updates_ ) {
 2760          if (update != null)
 2761          {
 2762            // If the size of the entry is zero leave the crc as 0 as well.
 2763            // The calculated crc will be all bits on...
 2764            if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) {
 2765              workFile.baseStream_.Position = update.CrcPatchOffset;
 2766              workFile.WriteLEInt((int)update.OutEntry.Crc);
 2767            }
 2768
 2769            if (update.SizePatchOffset > 0) {
 2770              workFile.baseStream_.Position = update.SizePatchOffset;
 2771              if (update.OutEntry.LocalHeaderRequiresZip64) {
 2772                workFile.WriteLeLong(update.OutEntry.Size);
 2773                workFile.WriteLeLong(update.OutEntry.CompressedSize);
 2774              }
 2775              else {
 2776                workFile.WriteLEInt((int)update.OutEntry.CompressedSize);
 2777                workFile.WriteLEInt((int)update.OutEntry.Size);
 2778              }
 2779            }
 2780          }
 2781        }
 2782      }
 2783      catch {
 2784        workFile.Close();
 2785        if (!directUpdate && (workFile.Name != null)) {
 2786          File.Delete(workFile.Name);
 2787        }
 2788        throw;
 2789      }
 2790
 2791      if (directUpdate) {
 2792        workFile.baseStream_.SetLength(endOfStream);
 2793        workFile.baseStream_.Flush();
 2794        isNewArchive_ = false;
 2795        ReadEntries();
 2796      }
 2797      else {
 2798        baseStream_.Close();
 2799        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2800      }
 2801    }
 2802
 2803    void CheckUpdating()
 2804    {
 2805      if ( updates_ == null ) {
 2806        throw new InvalidOperationException("BeginUpdate has not been called");
 2807      }
 2808    }
 2809
 2810    #endregion
 2811
 2812    #region ZipUpdate class
 2813    /// <summary>
 2814    /// Represents a pending update to a Zip file.
 2815    /// </summary>
 2816    class ZipUpdate
 2817    {
 2818      #region Constructors
 2819      public ZipUpdate(string fileName, ZipEntry entry)
 2820      {
 2821        command_ = UpdateCommand.Add;
 2822        entry_ = entry;
 2823        filename_ = fileName;
 2824      }
 2825
 2826      [Obsolete]
 2827      public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod)
 2828      {
 2829        command_ = UpdateCommand.Add;
 2830        entry_ = new ZipEntry(entryName);
 2831        entry_.CompressionMethod = compressionMethod;
 2832        filename_ = fileName;
 2833      }
 2834
 2835      [Obsolete]
 2836      public ZipUpdate(string fileName, string entryName)
 2837        : this(fileName, entryName, CompressionMethod.Deflated)
 2838      {
 2839        // Do nothing.
 2840      }
 2841
 2842      [Obsolete]
 2843      public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 2844      {
 2845        command_ = UpdateCommand.Add;
 2846        entry_ = new ZipEntry(entryName);
 2847        entry_.CompressionMethod = compressionMethod;
 2848        dataSource_ = dataSource;
 2849      }
 2850
 2851      public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry)
 2852      {
 2853        command_ = UpdateCommand.Add;
 2854        entry_ = entry;
 2855        dataSource_ = dataSource;
 2856      }
 2857
 2858      public ZipUpdate(ZipEntry original, ZipEntry updated)
 2859      {
 2860        throw new ZipException("Modify not currently supported");
 2861      /*
 2862        command_ = UpdateCommand.Modify;
 2863        entry_ = ( ZipEntry )original.Clone();
 2864        outEntry_ = ( ZipEntry )updated.Clone();
 2865      */
 2866      }
 2867
 2868      public ZipUpdate(UpdateCommand command, ZipEntry entry)
 2869      {
 2870        command_ = command;
 2871        entry_ = ( ZipEntry )entry.Clone();
 2872      }
 2873
 2874
 2875      /// <summary>
 2876      /// Copy an existing entry.
 2877      /// </summary>
 2878      /// <param name="entry">The existing entry to copy.</param>
 2879      public ZipUpdate(ZipEntry entry)
 2880        : this(UpdateCommand.Copy, entry)
 2881      {
 2882        // Do nothing.
 2883      }
 2884      #endregion
 2885
 2886      /// <summary>
 2887      /// Get the <see cref="ZipEntry"/> for this update.
 2888      /// </summary>
 2889      /// <remarks>This is the source or original entry.</remarks>
 2890      public ZipEntry Entry
 2891      {
 2892        get { return entry_; }
 2893      }
 2894
 2895      /// <summary>
 2896      /// Get the <see cref="ZipEntry"/> that will be written to the updated/new file.
 2897      /// </summary>
 2898      public ZipEntry OutEntry
 2899      {
 2900        get {
 2901          if ( outEntry_ == null ) {
 2902            outEntry_ = (ZipEntry)entry_.Clone();
 2903          }
 2904
 2905          return outEntry_;
 2906        }
 2907      }
 2908
 2909      /// <summary>
 2910      /// Get the command for this update.
 2911      /// </summary>
 2912      public UpdateCommand Command
 2913      {
 2914        get { return command_; }
 2915      }
 2916
 2917      /// <summary>
 2918      /// Get the filename if any for this update.  Null if none exists.
 2919      /// </summary>
 2920      public string Filename
 2921      {
 2922        get { return filename_; }
 2923      }
 2924
 2925      /// <summary>
 2926      /// Get/set the location of the size patch for this update.
 2927      /// </summary>
 2928      public long SizePatchOffset
 2929      {
 2930        get { return sizePatchOffset_; }
 2931        set { sizePatchOffset_ = value; }
 2932      }
 2933
 2934      /// <summary>
 2935      /// Get /set the location of the crc patch for this update.
 2936      /// </summary>
 2937      public long CrcPatchOffset
 2938      {
 2939        get { return crcPatchOffset_; }
 2940        set { crcPatchOffset_ = value; }
 2941      }
 2942
 2943      /// <summary>
 2944      /// Get/set the size calculated by offset.
 2945      /// Specifically, the difference between this and next entry's starting offset.
 2946      /// </summary>
 2947      public long OffsetBasedSize
 2948      {
 2949        get { return _offsetBasedSize; }
 2950        set { _offsetBasedSize = value; }
 2951      }
 2952
 2953      public Stream GetSource()
 2954      {
 2955        Stream result = null;
 2956        if ( dataSource_ != null ) {
 2957          result = dataSource_.GetSource();
 2958        }
 2959
 2960        return result;
 2961      }
 2962
 2963      #region Instance Fields
 2964      ZipEntry entry_;
 2965      ZipEntry outEntry_;
 2966      UpdateCommand command_;
 2967      IStaticDataSource dataSource_;
 2968      string filename_;
 2969      long sizePatchOffset_ = -1;
 2970      long crcPatchOffset_ = -1;
 2971      long _offsetBasedSize = -1;
 2972      #endregion
 2973    }
 2974
 2975    #endregion
 2976    #endregion
 2977
 2978    #region Disposing
 2979
 2980    #region IDisposable Members
 2981    void IDisposable.Dispose()
 2982    {
 2983      Close();
 2984    }
 2985    #endregion
 2986
 2987    void DisposeInternal(bool disposing)
 2988    {
 2989      if ( !isDisposed_ ) {
 2990        isDisposed_ = true;
 2991        entries_ = new ZipEntry[0];
 2992
 2993        if ( IsStreamOwner && (baseStream_ != null) ) {
 2994          lock(baseStream_) {
 2995            baseStream_.Close();
 2996          }
 2997        }
 2998
 2999        PostUpdateCleanup();
 3000      }
 3001    }
 3002
 3003    /// <summary>
 3004    /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
 3005    /// </summary>
 3006    /// <param name="disposing">true to release both managed and unmanaged resources;
 3007    /// false to release only unmanaged resources.</param>
 3008    protected virtual void Dispose(bool disposing)
 3009    {
 3010      DisposeInternal(disposing);
 3011    }
 3012
 3013    #endregion
 3014
 3015    #region Internal routines
 3016    #region Reading
 3017    /// <summary>
 3018    /// Read an unsigned short in little endian byte order.
 3019    /// </summary>
 3020    /// <returns>Returns the value read.</returns>
 3021    /// <exception cref="EndOfStreamException">
 3022    /// The stream ends prematurely
 3023    /// </exception>
 3024    ushort ReadLEUshort()
 3025    {
 3026      int data1 = baseStream_.ReadByte();
 3027
 3028      if ( data1 < 0 ) {
 3029        throw new EndOfStreamException("End of stream");
 3030      }
 3031
 3032      int data2 = baseStream_.ReadByte();
 3033
 3034      if ( data2 < 0 ) {
 3035        throw new EndOfStreamException("End of stream");
 3036      }
 3037
 3038
 3039      return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8)));
 3040    }
 3041
 3042    /// <summary>
 3043    /// Read a uint in little endian byte order.
 3044    /// </summary>
 3045    /// <returns>Returns the value read.</returns>
 3046    /// <exception cref="IOException">
 3047    /// An i/o error occurs.
 3048    /// </exception>
 3049    /// <exception cref="System.IO.EndOfStreamException">
 3050    /// The file ends prematurely
 3051    /// </exception>
 3052    uint ReadLEUint()
 3053    {
 3054      return (uint)(ReadLEUshort() | (ReadLEUshort() << 16));
 3055    }
 3056
 3057    ulong ReadLEUlong()
 3058    {
 3059      return ReadLEUint() | ((ulong)ReadLEUint() << 32);
 3060    }
 3061
 3062    #endregion
 3063    // NOTE this returns the offset of the first byte after the signature.
 3064    long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 3065    {
 3066      using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) {
 3067        return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData);
 3068      }
 3069    }
 3070
 3071    /// <summary>
 3072    /// Search for and read the central directory of a zip file filling the entries array.
 3073    /// </summary>
 3074    /// <exception cref="System.IO.IOException">
 3075    /// An i/o error occurs.
 3076    /// </exception>
 3077    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3078    /// The central directory is malformed or cannot be found
 3079    /// </exception>
 3080    void ReadEntries()
 3081    {
 3082      // Search for the End Of Central Directory.  When a zip comment is
 3083      // present the directory will start earlier
 3084      //
 3085      // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed.
 3086      // This should be compatible with both SFX and ZIP files but has only been tested for Zip files
 3087      // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then
 3088      // this could be invalid.
 3089      // Could also speed this up by reading memory in larger blocks.
 3090
 3091      if (baseStream_.CanSeek == false) {
 3092        throw new ZipException("ZipFile stream must be seekable");
 3093      }
 3094
 3095      long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 3096        baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 3097
 3098      if (locatedEndOfCentralDir < 0) {
 3099        throw new ZipException("Cannot find central directory");
 3100      }
 3101
 3102      // Read end of central directory record
 3103      ushort thisDiskNumber           = ReadLEUshort();
 3104      ushort startCentralDirDisk      = ReadLEUshort();
 3105      ulong entriesForThisDisk        = ReadLEUshort();
 3106      ulong entriesForWholeCentralDir = ReadLEUshort();
 3107      ulong centralDirSize            = ReadLEUint();
 3108      long offsetOfCentralDir         = ReadLEUint();
 3109      uint commentSize                = ReadLEUshort();
 3110
 3111      if ( commentSize > 0 ) {
 3112        byte[] comment = new byte[commentSize];
 3113
 3114        StreamUtils.ReadFully(baseStream_, comment);
 3115        comment_ = ZipConstants.ConvertToString(comment);
 3116      }
 3117      else {
 3118        comment_ = string.Empty;
 3119      }
 3120
 3121      bool isZip64 = false;
 3122
 3123      // Check if zip64 header information is required.
 3124      if ( (thisDiskNumber == 0xffff) ||
 3125        (startCentralDirDisk == 0xffff) ||
 3126        (entriesForThisDisk == 0xffff) ||
 3127        (entriesForWholeCentralDir == 0xffff) ||
 3128        (centralDirSize == 0xffffffff) ||
 3129        (offsetOfCentralDir == 0xffffffff) ) {
 3130        isZip64 = true;
 3131
 3132        long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 
 3133        if ( offset < 0 ) {
 3134          throw new ZipException("Cannot find Zip64 locator");
 3135        }
 3136
 3137        // number of the disk with the start of the zip64 end of central directory 4 bytes
 3138        // relative offset of the zip64 end of central directory record 8 bytes
 3139        // total number of disks 4 bytes
 3140        ReadLEUint(); // startDisk64 is not currently used
 3141        ulong offset64 = ReadLEUlong();
 3142        uint totalDisks = ReadLEUint();
 3143
 3144        baseStream_.Position = (long)offset64;
 3145        long sig64 = ReadLEUint();
 3146
 3147        if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) {
 3148          throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64));
 3149        }
 3150
 3151        // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12.
 3152        ulong recordSize = ReadLEUlong();
 3153        int versionMadeBy = ReadLEUshort();
 3154        int versionToExtract = ReadLEUshort();
 3155        uint thisDisk = ReadLEUint();
 3156        uint centralDirDisk = ReadLEUint();
 3157        entriesForThisDisk = ReadLEUlong();
 3158        entriesForWholeCentralDir = ReadLEUlong();
 3159        centralDirSize = ReadLEUlong();
 3160        offsetOfCentralDir = (long)ReadLEUlong();
 3161
 3162        // NOTE: zip64 extensible data sector (variable size) is ignored.
 3163      }
 3164
 3165      entries_ = new ZipEntry[entriesForThisDisk];
 3166
 3167      // SFX/embedded support, find the offset of the first entry vis the start of the stream
 3168      // This applies to Zip files that are appended to the end of an SFX stub.
 3169      // Or are appended as a resource to an executable.
 3170      // Zip files created by some archivers have the offsets altered to reflect the true offsets
 3171      // and so dont require any adjustment here...
 3172      // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths?
 3173      if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) {
 3174        offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir);
 3175        if (offsetOfFirstEntry <= 0) {
 3176          throw new ZipException("Invalid embedded zip archive");
 3177        }
 3178      }
 3179
 3180      baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin);
 3181
 3182      for (ulong i = 0; i < entriesForThisDisk; i++) {
 3183        if (ReadLEUint() != ZipConstants.CentralHeaderSignature) {
 3184          throw new ZipException("Wrong Central Directory signature");
 3185        }
 3186
 3187        int versionMadeBy      = ReadLEUshort();
 3188        int versionToExtract   = ReadLEUshort();
 3189        int bitFlags           = ReadLEUshort();
 3190        int method             = ReadLEUshort();
 3191        uint dostime           = ReadLEUint();
 3192        uint crc               = ReadLEUint();
 3193        var csize             = (long)ReadLEUint();
 3194        var size              = (long)ReadLEUint();
 3195        int nameLen            = ReadLEUshort();
 3196        int extraLen           = ReadLEUshort();
 3197        int commentLen         = ReadLEUshort();
 3198
 3199        int diskStartNo        = ReadLEUshort();  // Not currently used
 3200        int internalAttributes = ReadLEUshort();  // Not currently used
 3201
 3202        uint externalAttributes = ReadLEUint();
 3203        long offset             = ReadLEUint();
 3204
 3205        byte[] buffer = new byte[Math.Max(nameLen, commentLen)];
 3206
 3207        StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen);
 3208        string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen);
 3209
 3210        var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method);
 3211        entry.Crc = crc & 0xffffffffL;
 3212        entry.Size = size & 0xffffffffL;
 3213        entry.CompressedSize = csize & 0xffffffffL;
 3214        entry.Flags = bitFlags;
 3215        entry.DosTime = (uint)dostime;
 3216        entry.ZipFileIndex = (long)i;
 3217        entry.Offset = offset;
 3218        entry.ExternalFileAttributes = (int)externalAttributes;
 3219
 3220        if ((bitFlags & 8) == 0) {
 3221          entry.CryptoCheckValue = (byte)(crc >> 24);
 3222        }
 3223        else {
 3224          entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 3225        }
 3226
 3227        if (extraLen > 0) {
 3228          byte[] extra = new byte[extraLen];
 3229          StreamUtils.ReadFully(baseStream_, extra);
 3230          entry.ExtraData = extra;
 3231        }
 3232
 3233        entry.ProcessExtraData(false);
 3234
 3235        if (commentLen > 0) {
 3236          StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen);
 3237          entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen);
 3238        }
 3239
 3240        entries_[i] = entry;
 3241      }
 3242    }
 3243
 3244    /// <summary>
 3245    /// Locate the data for a given entry.
 3246    /// </summary>
 3247    /// <returns>
 3248    /// The start offset of the data.
 3249    /// </returns>
 3250    /// <exception cref="System.IO.EndOfStreamException">
 3251    /// The stream ends prematurely
 3252    /// </exception>
 3253    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3254    /// The local header signature is invalid, the entry and central header file name lengths are different
 3255    /// or the local and entry compression methods dont match
 3256    /// </exception>
 3257    long LocateEntry(ZipEntry entry)
 3258    {
 3259      return TestLocalHeader(entry, HeaderTest.Extract);
 3260    }
 3261
 3262#if !NETCF_1_0
 3263    Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry)
 3264    {
 3265      CryptoStream result = null;
 3266
 3267      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3268        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3269        var classicManaged = new PkzipClassicManaged();
 3270
 3271        OnKeysRequired(entry.Name);
 3272        if (HaveKeys == false) {
 3273          throw new ZipException("No password available for encrypted stream");
 3274        }
 3275
 3276        result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read);
 3277        CheckClassicPassword(result, entry);
 3278      }
 3279      else {
 3280#if !NET_1_1 && !NETCF_2_0
 3281        if (entry.Version == ZipConstants.VERSION_AES) {
 3282          //
 3283          OnKeysRequired(entry.Name);
 3284          if (HaveKeys == false) {
 3285            throw new ZipException("No password available for AES encrypted stream");
 3286          }
 3287          int saltLen = entry.AESSaltLen;
 3288          byte[] saltBytes = new byte[saltLen];
 3289          int saltIn = baseStream.Read(saltBytes, 0, saltLen);
 3290          if (saltIn != saltLen)
 3291            throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn);
 3292          //
 3293          byte[] pwdVerifyRead = new byte[2];
 3294          baseStream.Read(pwdVerifyRead, 0, 2);
 3295          int blockSize = entry.AESKeySize / 8;  // bits to bytes
 3296
 3297          var decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false);
 3298          byte[] pwdVerifyCalc = decryptor.PwdVerifier;
 3299          if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1])
 3300            throw new Exception("Invalid password for AES");
 3301          result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read);
 3302        }
 3303        else
 3304#endif
 3305        {
 3306          throw new ZipException("Decryption method not supported");
 3307        }
 3308      }
 3309
 3310      return result;
 3311    }
 3312
 3313    Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry)
 3314    {
 3315      CryptoStream result = null;
 3316      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3317        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3318        var classicManaged = new PkzipClassicManaged();
 3319
 3320        OnKeysRequired(entry.Name);
 3321        if (HaveKeys == false) {
 3322          throw new ZipException("No password available for encrypted stream");
 3323        }
 3324
 3325        // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
 3326        // which doesnt do this.
 3327        result = new CryptoStream(new UncompressedStream(baseStream),
 3328          classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
 3329
 3330        if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) {
 3331          WriteEncryptionHeader(result, entry.DosTime << 16);
 3332        }
 3333        else {
 3334          WriteEncryptionHeader(result, entry.Crc);
 3335        }
 3336      }
 3337      return result;
 3338    }
 3339
 3340    static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry)
 3341    {
 3342      byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 3343      StreamUtils.ReadFully(classicCryptoStream, cryptbuffer);
 3344      if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 3345        throw new ZipException("Invalid password");
 3346      }
 3347    }
 3348#endif
 3349
 3350    static void WriteEncryptionHeader(Stream stream, long crcValue)
 3351    {
 3352      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 3353      var rnd = new Random();
 3354      rnd.NextBytes(cryptBuffer);
 3355      cryptBuffer[11] = (byte)(crcValue >> 24);
 3356      stream.Write(cryptBuffer, 0, cryptBuffer.Length);
 3357    }
 3358
 3359    #endregion
 3360
 3361    #region Instance Fields
 3362    bool       isDisposed_;
 3363    string     name_;
 3364    string     comment_;
 3365    string     rawPassword_;
 3366    Stream     baseStream_;
 3367    bool       isStreamOwner;
 3368    long       offsetOfFirstEntry;
 3369    ZipEntry[] entries_;
 3370    byte[] key;
 3371    bool isNewArchive_;
 3372
 3373    // Default is dynamic which is not backwards compatible and can cause problems
 3374    // with XP's built in compression which cant read Zip64 archives.
 3375    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 3376    // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed.
 3377    UseZip64 useZip64_ = UseZip64.Dynamic ;
 3378
 3379    #region Zip Update Instance Fields
 3380    ArrayList updates_;
 3381    long updateCount_; // Count is managed manually as updates_ can contain nulls!
 3382    Hashtable updateIndex_;
 3383    IArchiveStorage archiveStorage_;
 3384    IDynamicDataSource updateDataSource_;
 3385    bool contentsEdited_;
 3386    int bufferSize_ = DefaultBufferSize;
 3387    byte[] copyBuffer_;
 3388    ZipString newComment_;
 3389    bool commentEdited_;
 3390    IEntryFactory updateEntryFactory_ = new ZipEntryFactory();
 3391    #endregion
 3392    #endregion
 3393
 3394    #region Support Classes
 3395    /// <summary>
 3396    /// Represents a string from a <see cref="ZipFile"/> which is stored as an array of bytes.
 3397    /// </summary>
 3398    class ZipString
 3399    {
 3400      #region Constructors
 3401      /// <summary>
 3402      /// Initialise a <see cref="ZipString"/> with a string.
 3403      /// </summary>
 3404      /// <param name="comment">The textual string form.</param>
 3405      public ZipString(string comment)
 3406      {
 3407        comment_ = comment;
 3408        isSourceString_ = true;
 3409      }
 3410
 3411      /// <summary>
 3412      /// Initialise a <see cref="ZipString"/> using a string in its binary 'raw' form.
 3413      /// </summary>
 3414      /// <param name="rawString"></param>
 3415      public ZipString(byte[] rawString)
 3416      {
 3417        rawComment_ = rawString;
 3418      }
 3419      #endregion
 3420
 3421      /// <summary>
 3422      /// Get a value indicating the original source of data for this instance.
 3423      /// True if the source was a string; false if the source was binary data.
 3424      /// </summary>
 3425      public bool IsSourceString
 3426      {
 3427        get { return isSourceString_; }
 3428      }
 3429
 3430      /// <summary>
 3431      /// Get the length of the comment when represented as raw bytes.
 3432      /// </summary>
 3433      public int RawLength
 3434      {
 3435        get {
 3436          MakeBytesAvailable();
 3437          return rawComment_.Length;
 3438        }
 3439      }
 3440
 3441      /// <summary>
 3442      /// Get the comment in its 'raw' form as plain bytes.
 3443      /// </summary>
 3444      public byte[] RawComment
 3445      {
 3446        get {
 3447          MakeBytesAvailable();
 3448          return (byte[])rawComment_.Clone();
 3449        }
 3450      }
 3451
 3452      /// <summary>
 3453      /// Reset the comment to its initial state.
 3454      /// </summary>
 3455      public void Reset()
 3456      {
 3457        if ( isSourceString_ ) {
 3458          rawComment_ = null;
 3459        }
 3460        else {
 3461          comment_ = null;
 3462        }
 3463      }
 3464
 3465      void MakeTextAvailable()
 3466      {
 3467        if ( comment_ == null ) {
 3468          comment_ = ZipConstants.ConvertToString(rawComment_);
 3469        }
 3470      }
 3471
 3472      void MakeBytesAvailable()
 3473      {
 3474        if ( rawComment_ == null ) {
 3475          rawComment_ = ZipConstants.ConvertToArray(comment_);
 3476        }
 3477      }
 3478
 3479      /// <summary>
 3480      /// Implicit conversion of comment to a string.
 3481      /// </summary>
 3482      /// <param name="zipString">The <see cref="ZipString"/> to convert to a string.</param>
 3483      /// <returns>The textual equivalent for the input value.</returns>
 3484      static public implicit operator string(ZipString zipString)
 3485      {
 3486        zipString.MakeTextAvailable();
 3487        return zipString.comment_;
 3488      }
 3489
 3490      #region Instance Fields
 3491      string comment_;
 3492      byte[] rawComment_;
 3493      bool isSourceString_;
 3494      #endregion
 3495    }
 3496
 3497    /// <summary>
 3498    /// An <see cref="IEnumerator">enumerator</see> for <see cref="ZipEntry">Zip entries</see>
 3499    /// </summary>
 3500    class ZipEntryEnumerator : IEnumerator
 3501    {
 3502      #region Constructors
 3503      public ZipEntryEnumerator(ZipEntry[] entries)
 3504      {
 3505        array = entries;
 3506      }
 3507
 3508      #endregion
 3509      #region IEnumerator Members
 3510      public object Current
 3511      {
 3512        get {
 3513          return array[index];
 3514        }
 3515      }
 3516
 3517      public void Reset()
 3518      {
 3519        index = -1;
 3520      }
 3521
 3522      public bool MoveNext()
 3523      {
 3524        return (++index < array.Length);
 3525      }
 3526      #endregion
 3527      #region Instance Fields
 3528      ZipEntry[] array;
 3529      int index = -1;
 3530      #endregion
 3531    }
 3532
 3533    /// <summary>
 3534    /// An <see cref="UncompressedStream"/> is a stream that you can write uncompressed data
 3535    /// to and flush, but cannot read, seek or do anything else to.
 3536    /// </summary>
 3537    class UncompressedStream : Stream
 3538    {
 3539      #region Constructors
 3540      public UncompressedStream(Stream baseStream)
 3541      {
 3542        baseStream_ = baseStream;
 3543      }
 3544
 3545      #endregion
 3546
 3547      /// <summary>
 3548      /// Close this stream instance.
 3549      /// </summary>
 3550      public override void Close()
 3551      {
 3552        // Do nothing
 3553      }
 3554
 3555      /// <summary>
 3556      /// Gets a value indicating whether the current stream supports reading.
 3557      /// </summary>
 3558      public override bool CanRead
 3559      {
 3560        get {
 3561          return false;
 3562        }
 3563      }
 3564
 3565      /// <summary>
 3566      /// Write any buffered data to underlying storage.
 3567      /// </summary>
 3568      public override void Flush()
 3569      {
 3570        baseStream_.Flush();
 3571      }
 3572
 3573      /// <summary>
 3574      /// Gets a value indicating whether the current stream supports writing.
 3575      /// </summary>
 3576      public override bool CanWrite
 3577      {
 3578        get {
 3579          return baseStream_.CanWrite;
 3580        }
 3581      }
 3582
 3583      /// <summary>
 3584      /// Gets a value indicating whether the current stream supports seeking.
 3585      /// </summary>
 3586      public override bool CanSeek
 3587      {
 3588        get {
 3589          return false;
 3590        }
 3591      }
 3592
 3593      /// <summary>
 3594      /// Get the length in bytes of the stream.
 3595      /// </summary>
 3596      public override long Length
 3597      {
 3598        get {
 3599          return 0;
 3600        }
 3601      }
 3602
 3603      /// <summary>
 3604      /// Gets or sets the position within the current stream.
 3605      /// </summary>
 3606      public override long Position
 3607      {
 3608        get  {
 3609          return baseStream_.Position;
 3610        }
 3611                set {
 3612                    throw new NotImplementedException();
 3613                }
 3614            }
 3615
 3616            /// <summary>
 3617            /// Reads a sequence of bytes from the current stream and advances the position within the stream by the num
 3618            /// </summary>
 3619            /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte
 3620            /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from t
 3621            /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3622            /// <returns>
 3623            /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if t
 3624            /// </returns>
 3625            /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer lengt
 3626            /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </ex
 3627            /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3628            /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3629            /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3630            /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3631            public override int Read(byte[] buffer, int offset, int count)
 3632      {
 3633        return 0;
 3634      }
 3635
 3636      /// <summary>
 3637      /// Sets the position within the current stream.
 3638      /// </summary>
 3639      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3640      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3641      /// <returns>
 3642      /// The new position within the current stream.
 3643      /// </returns>
 3644      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3645      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3646      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3647      public override long Seek(long offset, SeekOrigin origin)
 3648      {
 3649        return 0;
 3650      }
 3651
 3652      /// <summary>
 3653      /// Sets the length of the current stream.
 3654      /// </summary>
 3655      /// <param name="value">The desired length of the current stream in bytes.</param>
 3656      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3657      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3658      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3659      public override void SetLength(long value)
 3660      {
 3661      }
 3662
 3663      /// <summary>
 3664      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3665      /// </summary>
 3666      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3667      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3668      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3669      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3670      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3671      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3672      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3673      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3674      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3675      public override void Write(byte[] buffer, int offset, int count)
 3676      {
 3677        baseStream_.Write(buffer, offset, count);
 3678      }
 3679
 3680      readonly
 3681
 3682      #region Instance Fields
 3683      Stream baseStream_;
 3684      #endregion
 3685    }
 3686
 3687    /// <summary>
 3688    /// A <see cref="PartialInputStream"/> is an <see cref="InflaterInputStream"/>
 3689    /// whose data is only a part or subsection of a file.
 3690    /// </summary>
 3691    class PartialInputStream : Stream
 3692    {
 3693      #region Constructors
 3694      /// <summary>
 3695      /// Initialise a new instance of the <see cref="PartialInputStream"/> class.
 3696      /// </summary>
 3697      /// <param name="zipFile">The <see cref="ZipFile"/> containing the underlying stream to use for IO.</param>
 3698      /// <param name="start">The start of the partial data.</param>
 3699      /// <param name="length">The length of the partial data.</param>
 3700      public PartialInputStream(ZipFile zipFile, long start, long length)
 3701      {
 3702        start_ = start;
 3703        length_ = length;
 3704
 3705        // Although this is the only time the zipfile is used
 3706        // keeping a reference here prevents premature closure of
 3707        // this zip file and thus the baseStream_.
 3708
 3709        // Code like this will cause apparently random failures depending
 3710        // on the size of the files and when garbage is collected.
 3711        //
 3712        // ZipFile z = new ZipFile (stream);
 3713        // Stream reader = z.GetInputStream(0);
 3714        // uses reader here....
 3715        zipFile_ = zipFile;
 3716        baseStream_ = zipFile_.baseStream_;
 3717        readPos_ = start;
 3718        end_ = start + length;
 3719      }
 3720      #endregion
 3721
 3722      /// <summary>
 3723      /// Read a byte from this stream.
 3724      /// </summary>
 3725      /// <returns>Returns the byte read or -1 on end of stream.</returns>
 3726      public override int ReadByte()
 3727      {
 3728        if (readPos_ >= end_) {
 3729           // -1 is the correct value at end of stream.
 3730          return -1;
 3731        }
 3732
 3733        lock( baseStream_ ) {
 3734          baseStream_.Seek(readPos_++, SeekOrigin.Begin);
 3735          return baseStream_.ReadByte();
 3736        }
 3737      }
 3738
 3739      /// <summary>
 3740      /// Close this <see cref="PartialInputStream">partial input stream</see>.
 3741      /// </summary>
 3742      /// <remarks>
 3743      /// The underlying stream is not closed.  Close the parent ZipFile class to do that.
 3744      /// </remarks>
 3745      public override void Close()
 3746      {
 3747        // Do nothing at all!
 3748      }
 3749
 3750      /// <summary>
 3751      /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of
 3752      /// </summary>
 3753      /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte array
 3754      /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the cur
 3755      /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3756      /// <returns>
 3757      /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that ma
 3758      /// </returns>
 3759      /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer length. </e
 3760      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3761      /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3762      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3763      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3764      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3765      public override int Read(byte[] buffer, int offset, int count)
 3766      {
 3767        lock(baseStream_) {
 3768          if (count > end_ - readPos_) {
 3769            count = (int) (end_ - readPos_);
 3770            if (count == 0) {
 3771              return 0;
 3772            }
 3773          }
 3774
 3775          baseStream_.Seek(readPos_, SeekOrigin.Begin);
 3776          int readCount = baseStream_.Read(buffer, offset, count);
 3777          if (readCount > 0) {
 3778            readPos_ += readCount;
 3779          }
 3780          return readCount;
 3781        }
 3782      }
 3783
 3784      /// <summary>
 3785      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3786      /// </summary>
 3787      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3788      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3789      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3790      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3791      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3792      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3793      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3794      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3795      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3796      public override void Write(byte[] buffer, int offset, int count)
 3797      {
 3798        throw new NotSupportedException();
 3799      }
 3800
 3801      /// <summary>
 3802      /// When overridden in a derived class, sets the length of the current stream.
 3803      /// </summary>
 3804      /// <param name="value">The desired length of the current stream in bytes.</param>
 3805      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3806      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3807      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3808      public override void SetLength(long value)
 3809      {
 3810        throw new NotSupportedException();
 3811      }
 3812
 3813      /// <summary>
 3814      /// When overridden in a derived class, sets the position within the current stream.
 3815      /// </summary>
 3816      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3817      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3818      /// <returns>
 3819      /// The new position within the current stream.
 3820      /// </returns>
 3821      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3822      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3823      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3824      public override long Seek(long offset, SeekOrigin origin)
 3825      {
 3826        long newPos = readPos_;
 3827
 3828        switch ( origin )
 3829        {
 3830          case SeekOrigin.Begin:
 3831            newPos = start_ + offset;
 3832            break;
 3833
 3834          case SeekOrigin.Current:
 3835            newPos = readPos_ + offset;
 3836            break;
 3837
 3838          case SeekOrigin.End:
 3839            newPos = end_ + offset;
 3840            break;
 3841        }
 3842
 3843        if ( newPos < start_ ) {
 3844          throw new ArgumentException("Negative position is invalid");
 3845        }
 3846
 3847        if ( newPos >= end_ ) {
 3848          throw new IOException("Cannot seek past end");
 3849        }
 3850        readPos_ = newPos;
 3851        return readPos_;
 3852      }
 3853
 3854      /// <summary>
 3855      /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device.
 3856      /// </summary>
 3857      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3858      public override void Flush()
 3859      {
 3860        // Nothing to do.
 3861      }
 3862
 3863      /// <summary>
 3864      /// Gets or sets the position within the current stream.
 3865      /// </summary>
 3866      /// <value></value>
 3867      /// <returns>The current position within the stream.</returns>
 3868      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3869      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking. </exception>
 3870      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3871      public override long Position {
 3872        get { return readPos_ - start_; }
 3873        set {
 3874          long newPos = start_ + value;
 3875
 3876          if ( newPos < start_ ) {
 3877            throw new ArgumentException("Negative position is invalid");
 3878          }
 3879
 3880          if ( newPos >= end_ ) {
 3881            throw new InvalidOperationException("Cannot seek past end");
 3882          }
 3883          readPos_ = newPos;
 3884        }
 3885      }
 3886
 3887      /// <summary>
 3888      /// Gets the length in bytes of the stream.
 3889      /// </summary>
 3890      /// <value></value>
 3891      /// <returns>A long value representing the length of the stream in bytes.</returns>
 3892      /// <exception cref="T:System.NotSupportedException">A class derived from Stream does not support seeking. </excep
 3893      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3894      public override long Length {
 3895        get { return length_; }
 3896      }
 3897
 3898      /// <summary>
 3899      /// Gets a value indicating whether the current stream supports writing.
 3900      /// </summary>
 3901      /// <value>false</value>
 3902      /// <returns>true if the stream supports writing; otherwise, false.</returns>
 3903      public override bool CanWrite {
 3904        get { return false; }
 3905      }
 3906
 3907      /// <summary>
 3908      /// Gets a value indicating whether the current stream supports seeking.
 3909      /// </summary>
 3910      /// <value>true</value>
 3911      /// <returns>true if the stream supports seeking; otherwise, false.</returns>
 3912      public override bool CanSeek {
 3913        get { return true; }
 3914      }
 3915
 3916      /// <summary>
 3917      /// Gets a value indicating whether the current stream supports reading.
 3918      /// </summary>
 3919      /// <value>true.</value>
 3920      /// <returns>true if the stream supports reading; otherwise, false.</returns>
 3921      public override bool CanRead {
 3922        get { return true; }
 3923      }
 3924
 3925#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 3926      /// <summary>
 3927      /// Gets a value that determines whether the current stream can time out.
 3928      /// </summary>
 3929      /// <value></value>
 3930      /// <returns>A value that determines whether the current stream can time out.</returns>
 3931      public override bool CanTimeout {
 3932        get { return baseStream_.CanTimeout; }
 3933      }
 3934#endif
 3935      #region Instance Fields
 3936      ZipFile zipFile_;
 3937      Stream baseStream_;
 3938      long start_;
 3939      long length_;
 3940      long readPos_;
 3941      long end_;
 3942      #endregion
 3943    }
 3944    #endregion
 3945  }
 3946
 3947  #endregion
 3948
 3949  #region DataSources
 3950  /// <summary>
 3951  /// Provides a static way to obtain a source of data for an entry.
 3952  /// </summary>
 3953  public interface IStaticDataSource
 3954  {
 3955    /// <summary>
 3956    /// Get a source of data by creating a new stream.
 3957    /// </summary>
 3958    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3959    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3960    Stream GetSource();
 3961  }
 3962
 3963  /// <summary>
 3964  /// Represents a source of data that can dynamically provide
 3965  /// multiple <see cref="Stream">data sources</see> based on the parameters passed.
 3966  /// </summary>
 3967  public interface IDynamicDataSource
 3968  {
 3969    /// <summary>
 3970    /// Get a data source.
 3971    /// </summary>
 3972    /// <param name="entry">The <see cref="ZipEntry"/> to get a source for.</param>
 3973    /// <param name="name">The name for data if known.</param>
 3974    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3975    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3976    Stream GetSource(ZipEntry entry, string name);
 3977  }
 3978
 3979  /// <summary>
 3980  /// Default implementation of a <see cref="IStaticDataSource"/> for use with files stored on disk.
 3981  /// </summary>
 3982  public class StaticDiskDataSource : IStaticDataSource
 3983  {
 3984    /// <summary>
 3985    /// Initialise a new instnace of <see cref="StaticDiskDataSource"/>
 3986    /// </summary>
 3987    /// <param name="fileName">The name of the file to obtain data from.</param>
 3988    public StaticDiskDataSource(string fileName)
 3989    {
 3990      fileName_ = fileName;
 3991    }
 3992
 3993    #region IDataSource Members
 3994
 3995    /// <summary>
 3996    /// Get a <see cref="Stream"/> providing data.
 3997    /// </summary>
 3998    /// <returns>Returns a <see cref="Stream"/> provising data.</returns>
 3999    public Stream GetSource()
 4000    {
 4001      return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4002    }
 4003
 4004    readonly
 4005
 4006    #endregion
 4007    #region Instance Fields
 4008    string fileName_;
 4009    #endregion
 4010  }
 4011
 4012
 4013  /// <summary>
 4014  /// Default implementation of <see cref="IDynamicDataSource"/> for files stored on disk.
 4015  /// </summary>
 4016  public class DynamicDiskDataSource : IDynamicDataSource
 4017  {
 4018
 4019    #region IDataSource Members
 4020    /// <summary>
 4021    /// Get a <see cref="Stream"/> providing data for an entry.
 4022    /// </summary>
 4023    /// <param name="entry">The entry to provide data for.</param>
 4024    /// <param name="name">The file name for data if known.</param>
 4025    /// <returns>Returns a stream providing data; or null if not available</returns>
 4026    public Stream GetSource(ZipEntry entry, string name)
 4027    {
 4028      Stream result = null;
 4029
 4030      if ( name != null ) {
 4031        result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 4032      }
 4033
 4034      return result;
 4035    }
 4036
 4037    #endregion
 4038  }
 4039
 4040  #endregion
 4041
 4042  #region Archive Storage
 4043  /// <summary>
 4044  /// Defines facilities for data storage when updating Zip Archives.
 4045  /// </summary>
 4046  public interface IArchiveStorage
 4047  {
 4048    /// <summary>
 4049    /// Get the <see cref="FileUpdateMode"/> to apply during updates.
 4050    /// </summary>
 4051    FileUpdateMode UpdateMode { get; }
 4052
 4053    /// <summary>
 4054    /// Get an empty <see cref="Stream"/> that can be used for temporary output.
 4055    /// </summary>
 4056    /// <returns>Returns a temporary output <see cref="Stream"/></returns>
 4057    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4058    Stream GetTemporaryOutput();
 4059
 4060    /// <summary>
 4061    /// Convert a temporary output stream to a final stream.
 4062    /// </summary>
 4063    /// <returns>The resulting final <see cref="Stream"/></returns>
 4064    /// <seealso cref="GetTemporaryOutput"/>
 4065    Stream ConvertTemporaryToFinal();
 4066
 4067    /// <summary>
 4068    /// Make a temporary copy of the original stream.
 4069    /// </summary>
 4070    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4071    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4072    Stream MakeTemporaryCopy(Stream stream);
 4073
 4074    /// <summary>
 4075    /// Return a stream suitable for performing direct updates on the original source.
 4076    /// </summary>
 4077    /// <param name="stream">The current stream.</param>
 4078    /// <returns>Returns a stream suitable for direct updating.</returns>
 4079    /// <remarks>This may be the current stream passed.</remarks>
 4080    Stream OpenForDirectUpdate(Stream stream);
 4081
 4082    /// <summary>
 4083    /// Dispose of this instance.
 4084    /// </summary>
 4085    void Dispose();
 4086  }
 4087
 4088  /// <summary>
 4089  /// An abstract <see cref="IArchiveStorage"/> suitable for extension by inheritance.
 4090  /// </summary>
 4091  abstract public class BaseArchiveStorage : IArchiveStorage
 4092  {
 4093    #region Constructors
 4094    /// <summary>
 4095    /// Initializes a new instance of the <see cref="BaseArchiveStorage"/> class.
 4096    /// </summary>
 4097    /// <param name="updateMode">The update mode.</param>
 4098    protected BaseArchiveStorage(FileUpdateMode updateMode)
 4099    {
 4100      updateMode_ = updateMode;
 4101    }
 4102    #endregion
 4103
 4104    #region IArchiveStorage Members
 4105
 4106    /// <summary>
 4107    /// Gets a temporary output <see cref="Stream"/>
 4108    /// </summary>
 4109    /// <returns>Returns the temporary output stream.</returns>
 4110    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4111    public abstract Stream GetTemporaryOutput();
 4112
 4113    /// <summary>
 4114    /// Converts the temporary <see cref="Stream"/> to its final form.
 4115    /// </summary>
 4116    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4117    /// the final storage for the archive.</returns>
 4118    /// <seealso cref="GetTemporaryOutput"/>
 4119    public abstract Stream ConvertTemporaryToFinal();
 4120
 4121    /// <summary>
 4122    /// Make a temporary copy of a <see cref="Stream"/>.
 4123    /// </summary>
 4124    /// <param name="stream">The <see cref="Stream"/> to make a copy of.</param>
 4125    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4126    public abstract Stream MakeTemporaryCopy(Stream stream);
 4127
 4128    /// <summary>
 4129    /// Return a stream suitable for performing direct updates on the original source.
 4130    /// </summary>
 4131    /// <param name="stream">The <see cref="Stream"/> to open for direct update.</param>
 4132    /// <returns>Returns a stream suitable for direct updating.</returns>
 4133    public abstract Stream OpenForDirectUpdate(Stream stream);
 4134
 4135    /// <summary>
 4136    /// Disposes this instance.
 4137    /// </summary>
 4138    public abstract void Dispose();
 4139
 4140    /// <summary>
 4141    /// Gets the update mode applicable.
 4142    /// </summary>
 4143    /// <value>The update mode.</value>
 4144    public FileUpdateMode UpdateMode
 4145    {
 4146      get {
 4147        return updateMode_;
 4148      }
 4149    }
 4150
 4151    #endregion
 4152
 4153    #region Instance Fields
 4154    FileUpdateMode updateMode_;
 4155    #endregion
 4156  }
 4157
 4158  /// <summary>
 4159  /// An <see cref="IArchiveStorage"/> implementation suitable for hard disks.
 4160  /// </summary>
 4161  public class DiskArchiveStorage : BaseArchiveStorage
 4162  {
 4163    #region Constructors
 4164    /// <summary>
 4165    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4166    /// </summary>
 4167    /// <param name="file">The file.</param>
 4168    /// <param name="updateMode">The update mode.</param>
 4169    public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode)
 4170      : base(updateMode)
 4171    {
 4172      if ( file.Name == null ) {
 4173        throw new ZipException("Cant handle non file archives");
 4174      }
 4175
 4176      fileName_ = file.Name;
 4177    }
 4178
 4179    /// <summary>
 4180    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4181    /// </summary>
 4182    /// <param name="file">The file.</param>
 4183    public DiskArchiveStorage(ZipFile file)
 4184      : this(file, FileUpdateMode.Safe)
 4185    {
 4186    }
 4187    #endregion
 4188
 4189    #region IArchiveStorage Members
 4190
 4191    /// <summary>
 4192    /// Gets a temporary output <see cref="Stream"/> for performing updates on.
 4193    /// </summary>
 4194    /// <returns>Returns the temporary output stream.</returns>
 4195    public override Stream GetTemporaryOutput()
 4196    {
 4197      if ( temporaryName_ != null ) {
 4198        temporaryName_ = GetTempFileName(temporaryName_, true);
 4199        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4200      }
 4201      else {
 4202        // Determine where to place files based on internal strategy.
 4203        // Currently this is always done in system temp directory.
 4204        temporaryName_ = Path.GetTempFileName();
 4205        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4206      }
 4207
 4208      return temporaryStream_;
 4209    }
 4210
 4211    /// <summary>
 4212    /// Converts a temporary <see cref="Stream"/> to its final form.
 4213    /// </summary>
 4214    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4215    /// the final storage for the archive.</returns>
 4216    public override Stream ConvertTemporaryToFinal()
 4217    {
 4218      if ( temporaryStream_ == null ) {
 4219        throw new ZipException("No temporary stream has been created");
 4220      }
 4221
 4222      Stream result = null;
 4223
 4224      string moveTempName = GetTempFileName(fileName_, false);
 4225      bool newFileCreated = false;
 4226
 4227      try  {
 4228        temporaryStream_.Close();
 4229        File.Move(fileName_, moveTempName);
 4230        File.Move(temporaryName_, fileName_);
 4231        newFileCreated = true;
 4232        File.Delete(moveTempName);
 4233
 4234        result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4235      }
 4236      catch(Exception) {
 4237        result  = null;
 4238
 4239        // Try to roll back changes...
 4240        if ( !newFileCreated ) {
 4241          File.Move(moveTempName, fileName_);
 4242          File.Delete(temporaryName_);
 4243        }
 4244
 4245        throw;
 4246      }
 4247
 4248      return result;
 4249    }
 4250
 4251    /// <summary>
 4252    /// Make a temporary copy of a stream.
 4253    /// </summary>
 4254    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4255    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4256    public override Stream MakeTemporaryCopy(Stream stream)
 4257    {
 4258      stream.Close();
 4259
 4260      temporaryName_ = GetTempFileName(fileName_, true);
 4261      File.Copy(fileName_, temporaryName_, true);
 4262
 4263      temporaryStream_ = new FileStream(temporaryName_,
 4264        FileMode.Open,
 4265        FileAccess.ReadWrite);
 4266      return temporaryStream_;
 4267    }
 4268
 4269    /// <summary>
 4270    /// Return a stream suitable for performing direct updates on the original source.
 4271    /// </summary>
 4272    /// <param name="stream">The current stream.</param>
 4273    /// <returns>Returns a stream suitable for direct updating.</returns>
 4274    /// <remarks>If the <paramref name="stream"/> is not null this is used as is.</remarks>
 4275    public override Stream OpenForDirectUpdate(Stream stream)
 4276    {
 4277      Stream result;
 4278      if ((stream == null) || !stream.CanWrite)
 4279      {
 4280        if (stream != null) {
 4281          stream.Close();
 4282        }
 4283
 4284        result = new FileStream(fileName_,
 4285            FileMode.Open,
 4286            FileAccess.ReadWrite);
 4287      }
 4288      else
 4289      {
 4290        result = stream;
 4291      }
 4292
 4293      return result;
 4294    }
 4295
 4296    /// <summary>
 4297    /// Disposes this instance.
 4298    /// </summary>
 4299    public override void Dispose()
 4300    {
 4301      if ( temporaryStream_ != null ) {
 4302        temporaryStream_.Close();
 4303      }
 4304    }
 4305
 4306    #endregion
 4307
 4308    #region Internal routines
 4309    static string GetTempFileName(string original, bool makeTempFile)
 4310    {
 4311      string result = null;
 4312
 4313      if ( original == null ) {
 4314        result = Path.GetTempFileName();
 4315      }
 4316      else {
 4317        int counter = 0;
 4318        int suffixSeed = DateTime.Now.Second;
 4319
 4320        while ( result == null ) {
 4321          counter += 1;
 4322          string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter);
 4323          if ( !File.Exists(newName) ) {
 4324            if ( makeTempFile) {
 4325              try  {
 4326                // Try and create the file.
 4327                using ( FileStream stream = File.Create(newName) ) {
 4328                }
 4329                result = newName;
 4330              }
 4331              catch {
 4332                suffixSeed = DateTime.Now.Second;
 4333              }
 4334            }
 4335            else {
 4336              result = newName;
 4337            }
 4338          }
 4339        }
 4340      }
 4341      return result;
 4342    }
 4343    #endregion
 4344
 4345    #region Instance Fields
 4346    Stream temporaryStream_;
 4347    string fileName_;
 4348    string temporaryName_;
 4349    #endregion
 4350  }
 4351
 4352  /// <summary>
 4353  /// An <see cref="IArchiveStorage"/> implementation suitable for in memory streams.
 4354  /// </summary>
 4355  public class MemoryArchiveStorage : BaseArchiveStorage
 4356  {
 4357    #region Constructors
 4358    /// <summary>
 4359    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4360    /// </summary>
 4361    public MemoryArchiveStorage()
 364362      : base(FileUpdateMode.Direct)
 4363    {
 364364    }
 4365
 4366    /// <summary>
 4367    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4368    /// </summary>
 4369    /// <param name="updateMode">The <see cref="FileUpdateMode"/> to use</param>
 4370    /// <remarks>This constructor is for testing as memory streams dont really require safe mode.</remarks>
 4371    public MemoryArchiveStorage(FileUpdateMode updateMode)
 14372      : base(updateMode)
 4373    {
 14374    }
 4375
 4376    #endregion
 4377
 4378    #region Properties
 4379    /// <summary>
 4380    /// Get the stream returned by <see cref="ConvertTemporaryToFinal"/> if this was in fact called.
 4381    /// </summary>
 4382    public MemoryStream FinalStream
 4383    {
 04384      get { return finalStream_; }
 4385    }
 4386
 4387    #endregion
 4388
 4389    #region IArchiveStorage Members
 4390
 4391    /// <summary>
 4392    /// Gets the temporary output <see cref="Stream"/>
 4393    /// </summary>
 4394    /// <returns>Returns the temporary output stream.</returns>
 4395    public override Stream GetTemporaryOutput()
 4396    {
 14397      temporaryStream_ = new MemoryStream();
 14398      return temporaryStream_;
 4399    }
 4400
 4401    /// <summary>
 4402    /// Converts the temporary <see cref="Stream"/> to its final form.
 4403    /// </summary>
 4404    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4405    /// the final storage for the archive.</returns>
 4406    public override Stream ConvertTemporaryToFinal()
 4407    {
 14408       if ( temporaryStream_ == null ) {
 04409        throw new ZipException("No temporary stream has been created");
 4410      }
 4411
 14412      finalStream_ = new MemoryStream(temporaryStream_.ToArray());
 14413      return finalStream_;
 4414    }
 4415
 4416    /// <summary>
 4417    /// Make a temporary copy of the original stream.
 4418    /// </summary>
 4419    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4420    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4421    public override Stream MakeTemporaryCopy(Stream stream)
 4422    {
 04423      temporaryStream_ = new MemoryStream();
 04424      stream.Position = 0;
 04425      StreamUtils.Copy(stream, temporaryStream_, new byte[4096]);
 04426      return temporaryStream_;
 4427    }
 4428
 4429    /// <summary>
 4430    /// Return a stream suitable for performing direct updates on the original source.
 4431    /// </summary>
 4432    /// <param name="stream">The original source stream</param>
 4433    /// <returns>Returns a stream suitable for direct updating.</returns>
 4434    /// <remarks>If the <paramref name="stream"/> passed is not null this is used;
 4435    /// otherwise a new <see cref="MemoryStream"/> is returned.</remarks>
 4436    public override Stream OpenForDirectUpdate(Stream stream)
 4437    {
 4438      Stream result;
 14439       if ((stream == null) || !stream.CanWrite) {
 4440
 04441        result = new MemoryStream();
 4442
 04443         if (stream != null) {
 04444          stream.Position = 0;
 04445          StreamUtils.Copy(stream, result, new byte[4096]);
 4446
 04447          stream.Close();
 4448        }
 04449      }
 4450      else {
 14451        result = stream;
 4452      }
 4453
 14454      return result;
 4455    }
 4456
 4457    /// <summary>
 4458    /// Disposes this instance.
 4459    /// </summary>
 4460    public override void Dispose()
 4461    {
 374462       if ( temporaryStream_ != null ) {
 14463        temporaryStream_.Close();
 4464      }
 374465    }
 4466
 4467    #endregion
 4468
 4469    #region Instance Fields
 4470    MemoryStream temporaryStream_;
 4471    MemoryStream finalStream_;
 4472    #endregion
 4473  }
 4474
 4475  #endregion
 4476}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_NTTaggedData.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_NTTaggedData.htm new file mode 100644 index 000000000..cddb0c735 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_NTTaggedData.htm @@ -0,0 +1,1032 @@ + + + + +ICSharpCode.SharpZipLib.Zip.NTTaggedData - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.NTTaggedData
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipExtraData.cs
Covered lines:45
Uncovered lines:10
Coverable lines:55
Total lines:987
Line coverage:81.8%
Branch coverage:50%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
SetData(...)688.8957.14
GetData()3100100
IsValidValue(...)157.14100
.ctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipExtraData.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// ZipExtraData.cs
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36
 37using System;
 38using System.IO;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42  // TODO: Sort out wether tagged data is useful and what a good implementation might look like.
 43  // Its just a sketch of an idea at the moment.
 44
 45  /// <summary>
 46  /// ExtraData tagged value interface.
 47  /// </summary>
 48  public interface ITaggedData
 49  {
 50    /// <summary>
 51    /// Get the ID for this tagged data value.
 52    /// </summary>
 53    short TagID { get; }
 54
 55    /// <summary>
 56    /// Set the contents of this instance from the data passed.
 57    /// </summary>
 58    /// <param name="data">The data to extract contents from.</param>
 59    /// <param name="offset">The offset to begin extracting data from.</param>
 60    /// <param name="count">The number of bytes to extract.</param>
 61    void SetData(byte[] data, int offset, int count);
 62
 63    /// <summary>
 64    /// Get the data representing this instance.
 65    /// </summary>
 66    /// <returns>Returns the data for this instance.</returns>
 67    byte[] GetData();
 68  }
 69
 70  /// <summary>
 71  /// A raw binary tagged value
 72  /// </summary>
 73  public class RawTaggedData : ITaggedData
 74  {
 75    /// <summary>
 76    /// Initialise a new instance.
 77    /// </summary>
 78    /// <param name="tag">The tag ID.</param>
 79    public RawTaggedData(short tag)
 80    {
 81      _tag = tag;
 82    }
 83
 84    #region ITaggedData Members
 85
 86    /// <summary>
 87    /// Get the ID for this tagged data value.
 88    /// </summary>
 89    public short TagID
 90    {
 91      get { return _tag; }
 92      set { _tag = value; }
 93    }
 94
 95    /// <summary>
 96    /// Set the data from the raw values provided.
 97    /// </summary>
 98    /// <param name="data">The raw data to extract values from.</param>
 99    /// <param name="offset">The index to start extracting values from.</param>
 100    /// <param name="count">The number of bytes available.</param>
 101    public void SetData(byte[] data, int offset, int count)
 102    {
 103      if( data==null )
 104      {
 105        throw new ArgumentNullException(nameof(data));
 106      }
 107
 108      _data=new byte[count];
 109      Array.Copy(data, offset, _data, 0, count);
 110    }
 111
 112    /// <summary>
 113    /// Get the binary data representing this instance.
 114    /// </summary>
 115    /// <returns>The raw binary data representing this instance.</returns>
 116    public byte[] GetData()
 117    {
 118      return _data;
 119    }
 120
 121    #endregion
 122
 123    /// <summary>
 124    /// Get /set the binary data representing this instance.
 125    /// </summary>
 126    /// <returns>The raw binary data representing this instance.</returns>
 127    public byte[] Data
 128    {
 129      get { return _data; }
 130      set { _data=value; }
 131    }
 132
 133    #region Instance Fields
 134    /// <summary>
 135    /// The tag ID for this instance.
 136    /// </summary>
 137    short _tag;
 138
 139    byte[] _data;
 140    #endregion
 141  }
 142
 143  /// <summary>
 144  /// Class representing extended unix date time values.
 145  /// </summary>
 146  public class ExtendedUnixData : ITaggedData
 147  {
 148    /// <summary>
 149    /// Flags indicate which values are included in this instance.
 150    /// </summary>
 151    [Flags]
 152    public enum Flags : byte
 153    {
 154      /// <summary>
 155      /// The modification time is included
 156      /// </summary>
 157      ModificationTime = 0x01,
 158
 159      /// <summary>
 160      /// The access time is included
 161      /// </summary>
 162      AccessTime = 0x02,
 163
 164      /// <summary>
 165      /// The create time is included.
 166      /// </summary>
 167      CreateTime = 0x04,
 168    }
 169
 170    #region ITaggedData Members
 171
 172    /// <summary>
 173    /// Get the ID
 174    /// </summary>
 175    public short TagID
 176    {
 177      get { return 0x5455; }
 178    }
 179
 180    /// <summary>
 181    /// Set the data from the raw values provided.
 182    /// </summary>
 183    /// <param name="data">The raw data to extract values from.</param>
 184    /// <param name="index">The index to start extracting values from.</param>
 185    /// <param name="count">The number of bytes available.</param>
 186    public void SetData(byte[] data, int index, int count)
 187    {
 188      using (MemoryStream ms = new MemoryStream(data, index, count, false))
 189      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 190      {
 191        // bit 0           if set, modification time is present
 192        // bit 1           if set, access time is present
 193        // bit 2           if set, creation time is present
 194
 195        _flags = (Flags)helperStream.ReadByte();
 196        if (((_flags & Flags.ModificationTime) != 0) && (count >= 5))
 197        {
 198          int iTime = helperStream.ReadLEInt();
 199
 200          _modificationTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 201            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 202        }
 203
 204        if ((_flags & Flags.AccessTime) != 0)
 205        {
 206          int iTime = helperStream.ReadLEInt();
 207
 208          _lastAccessTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 209            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 210        }
 211
 212        if ((_flags & Flags.CreateTime) != 0)
 213        {
 214          int iTime = helperStream.ReadLEInt();
 215
 216          _createTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 217            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 218        }
 219      }
 220    }
 221
 222    /// <summary>
 223    /// Get the binary data representing this instance.
 224    /// </summary>
 225    /// <returns>The raw binary data representing this instance.</returns>
 226    public byte[] GetData()
 227    {
 228      using (MemoryStream ms = new MemoryStream())
 229      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 230      {
 231        helperStream.IsStreamOwner = false;
 232        helperStream.WriteByte((byte)_flags);     // Flags
 233        if ( (_flags & Flags.ModificationTime) != 0) {
 234          TimeSpan span = _modificationTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 235          var seconds = (int)span.TotalSeconds;
 236          helperStream.WriteLEInt(seconds);
 237        }
 238        if ( (_flags & Flags.AccessTime) != 0) {
 239          TimeSpan span = _lastAccessTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 240          var seconds = (int)span.TotalSeconds;
 241          helperStream.WriteLEInt(seconds);
 242        }
 243        if ( (_flags & Flags.CreateTime) != 0) {
 244          TimeSpan span = _createTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 245          var seconds = (int)span.TotalSeconds;
 246          helperStream.WriteLEInt(seconds);
 247        }
 248        return ms.ToArray();
 249      }
 250    }
 251
 252    #endregion
 253
 254    /// <summary>
 255    /// Test a <see cref="DateTime"> value to see if is valid and can be represented here.</see>
 256    /// </summary>
 257    /// <param name="value">The <see cref="DateTime">value</see> to test.</param>
 258    /// <returns>Returns true if the value is valid and can be represented; false if not.</returns>
 259    /// <remarks>The standard Unix time is a signed integer data type, directly encoding the Unix time number,
 260    /// which is the number of seconds since 1970-01-01.
 261    /// Being 32 bits means the values here cover a range of about 136 years.
 262    /// The minimum representable time is 1901-12-13 20:45:52,
 263    /// and the maximum representable time is 2038-01-19 03:14:07.
 264    /// </remarks>
 265    public static bool IsValidValue(DateTime value)
 266    {
 267      return (( value >= new DateTime(1901, 12, 13, 20, 45, 52)) ||
 268          ( value <= new DateTime(2038, 1, 19, 03, 14, 07) ));
 269    }
 270
 271    /// <summary>
 272    /// Get /set the Modification Time
 273    /// </summary>
 274    /// <exception cref="ArgumentOutOfRangeException"></exception>
 275    /// <seealso cref="IsValidValue"></seealso>
 276    public DateTime ModificationTime
 277    {
 278      get { return _modificationTime; }
 279      set
 280      {
 281        if ( !IsValidValue(value) ) {
 282          throw new ArgumentOutOfRangeException(nameof(value));
 283        }
 284
 285        _flags |= Flags.ModificationTime;
 286        _modificationTime=value;
 287      }
 288    }
 289
 290    /// <summary>
 291    /// Get / set the Access Time
 292    /// </summary>
 293    /// <exception cref="ArgumentOutOfRangeException"></exception>
 294    /// <seealso cref="IsValidValue"></seealso>
 295    public DateTime AccessTime
 296    {
 297      get { return _lastAccessTime; }
 298      set {
 299        if ( !IsValidValue(value) ) {
 300          throw new ArgumentOutOfRangeException(nameof(value));
 301        }
 302
 303        _flags |= Flags.AccessTime;
 304        _lastAccessTime=value;
 305      }
 306    }
 307
 308    /// <summary>
 309    /// Get / Set the Create Time
 310    /// </summary>
 311    /// <exception cref="ArgumentOutOfRangeException"></exception>
 312    /// <seealso cref="IsValidValue"></seealso>
 313    public DateTime CreateTime
 314    {
 315      get { return _createTime; }
 316      set {
 317        if ( !IsValidValue(value) ) {
 318          throw new ArgumentOutOfRangeException(nameof(value));
 319        }
 320
 321        _flags |= Flags.CreateTime;
 322        _createTime=value;
 323      }
 324    }
 325
 326    /// <summary>
 327    /// Get/set the <see cref="Flags">values</see> to include.
 328    /// </summary>
 329    Flags Include
 330    {
 331      get { return _flags; }
 332      set { _flags = value; }
 333    }
 334
 335    #region Instance Fields
 336    Flags _flags;
 337    DateTime _modificationTime = new DateTime(1970,1,1);
 338    DateTime _lastAccessTime = new DateTime(1970, 1, 1);
 339    DateTime _createTime = new DateTime(1970, 1, 1);
 340    #endregion
 341  }
 342
 343  /// <summary>
 344  /// Class handling NT date time values.
 345  /// </summary>
 346  public class NTTaggedData : ITaggedData
 347  {
 348    /// <summary>
 349    /// Get the ID for this tagged data value.
 350    /// </summary>
 351    public short TagID
 352    {
 1353      get { return 10; }
 354    }
 355
 356    /// <summary>
 357    /// Set the data from the raw values provided.
 358    /// </summary>
 359    /// <param name="data">The raw data to extract values from.</param>
 360    /// <param name="index">The index to start extracting values from.</param>
 361    /// <param name="count">The number of bytes available.</param>
 362    public void SetData(byte[] data, int index, int count)
 363    {
 1364      using (MemoryStream ms = new MemoryStream(data, index, count, false))
 1365      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 366      {
 1367        helperStream.ReadLEInt(); // Reserved
 1368         while (helperStream.Position < helperStream.Length)
 369        {
 1370          int ntfsTag = helperStream.ReadLEShort();
 1371          int ntfsLength = helperStream.ReadLEShort();
 1372           if (ntfsTag == 1)
 373          {
 1374             if (ntfsLength >= 24)
 375            {
 1376              long lastModificationTicks = helperStream.ReadLELong();
 1377              _lastModificationTime = DateTime.FromFileTime(lastModificationTicks);
 378
 1379              long lastAccessTicks = helperStream.ReadLELong();
 1380              _lastAccessTime = DateTime.FromFileTime(lastAccessTicks);
 381
 1382              long createTimeTicks = helperStream.ReadLELong();
 1383              _createTime = DateTime.FromFileTime(createTimeTicks);
 384            }
 1385            break;
 386          }
 387          else
 388          {
 389            // An unknown NTFS tag so simply skip it.
 0390            helperStream.Seek(ntfsLength, SeekOrigin.Current);
 391          }
 392        }
 0393      }
 1394    }
 395
 396    /// <summary>
 397    /// Get the binary data representing this instance.
 398    /// </summary>
 399    /// <returns>The raw binary data representing this instance.</returns>
 400    public byte[] GetData()
 401    {
 2402      using (MemoryStream ms = new MemoryStream())
 2403      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 404      {
 2405        helperStream.IsStreamOwner = false;
 2406        helperStream.WriteLEInt(0);       // Reserved
 2407        helperStream.WriteLEShort(1);     // Tag
 2408        helperStream.WriteLEShort(24);    // Length = 3 x 8.
 2409        helperStream.WriteLELong(_lastModificationTime.ToFileTime());
 2410        helperStream.WriteLELong(_lastAccessTime.ToFileTime());
 2411        helperStream.WriteLELong(_createTime.ToFileTime());
 2412        return ms.ToArray();
 413      }
 2414    }
 415
 416    /// <summary>
 417    /// Test a <see cref="DateTime"> valuie to see if is valid and can be represented here.</see>
 418    /// </summary>
 419    /// <param name="value">The <see cref="DateTime">value</see> to test.</param>
 420    /// <returns>Returns true if the value is valid and can be represented; false if not.</returns>
 421    /// <remarks>
 422    /// NTFS filetimes are 64-bit unsigned integers, stored in Intel
 423    /// (least significant byte first) byte order. They determine the
 424    /// number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch",
 425    /// which is "01-Jan-1601 00:00:00 UTC". 28 May 60056 is the upper limit
 426    /// </remarks>
 427    public static bool IsValidValue(DateTime value)
 428    {
 3429      bool result = true;
 430      try
 431      {
 3432        value.ToFileTimeUtc();
 3433      }
 0434      catch
 435      {
 0436        result = false;
 0437      }
 3438      return result;
 439    }
 440
 441    /// <summary>
 442    /// Get/set the <see cref="DateTime">last modification time</see>.
 443    /// </summary>
 444    public DateTime LastModificationTime
 445    {
 4446      get { return _lastModificationTime; }
 447      set {
 1448         if (! IsValidValue(value))
 449        {
 0450          throw new ArgumentOutOfRangeException(nameof(value));
 451        }
 1452        _lastModificationTime = value;
 1453      }
 454    }
 455
 456    /// <summary>
 457    /// Get /set the <see cref="DateTime">create time</see>
 458    /// </summary>
 459    public DateTime CreateTime
 460    {
 0461      get { return _createTime; }
 462      set {
 1463         if ( !IsValidValue(value)) {
 0464          throw new ArgumentOutOfRangeException(nameof(value));
 465        }
 1466        _createTime = value;
 1467      }
 468    }
 469
 470    /// <summary>
 471    /// Get /set the <see cref="DateTime">last access time</see>.
 472    /// </summary>
 473    public DateTime LastAccessTime
 474    {
 0475      get { return _lastAccessTime; }
 476      set {
 1477         if (!IsValidValue(value)) {
 0478          throw new ArgumentOutOfRangeException(nameof(value));
 479        }
 1480        _lastAccessTime = value;
 1481      }
 482    }
 483
 484    #region Instance Fields
 1485    DateTime _lastAccessTime = DateTime.FromFileTime(0);
 1486    DateTime _lastModificationTime = DateTime.FromFileTime(0);
 1487    DateTime _createTime = DateTime.FromFileTime(0);
 488    #endregion
 489  }
 490
 491  /// <summary>
 492  /// A factory that creates <see cref="ITaggedData">tagged data</see> instances.
 493  /// </summary>
 494  interface ITaggedDataFactory
 495  {
 496    /// <summary>
 497    /// Get data for a specific tag value.
 498    /// </summary>
 499    /// <param name="tag">The tag ID to find.</param>
 500    /// <param name="data">The data to search.</param>
 501    /// <param name="offset">The offset to begin extracting data from.</param>
 502    /// <param name="count">The number of bytes to extract.</param>
 503    /// <returns>The located <see cref="ITaggedData">value found</see>, or null if not found.</returns>
 504    ITaggedData Create(short tag, byte[] data, int offset, int count);
 505  }
 506
 507  ///
 508  /// <summary>
 509  /// A class to handle the extra data field for Zip entries
 510  /// </summary>
 511  /// <remarks>
 512  /// Extra data contains 0 or more values each prefixed by a header tag and length.
 513  /// They contain zero or more bytes of actual data.
 514  /// The data is held internally using a copy on write strategy.  This is more efficient but
 515  /// means that for extra data created by passing in data can have the values modified by the caller
 516  /// in some circumstances.
 517  /// </remarks>
 518  sealed public class ZipExtraData : IDisposable
 519  {
 520    #region Constructors
 521    /// <summary>
 522    /// Initialise a default instance.
 523    /// </summary>
 524    public ZipExtraData()
 525    {
 526      Clear();
 527    }
 528
 529    /// <summary>
 530    /// Initialise with known extra data.
 531    /// </summary>
 532    /// <param name="data">The extra data.</param>
 533    public ZipExtraData(byte[] data)
 534    {
 535      if ( data == null )
 536      {
 537        _data = new byte[0];
 538      }
 539      else
 540      {
 541        _data = data;
 542      }
 543    }
 544    #endregion
 545
 546    /// <summary>
 547    /// Get the raw extra data value
 548    /// </summary>
 549    /// <returns>Returns the raw byte[] extra data this instance represents.</returns>
 550    public byte[] GetEntryData()
 551    {
 552      if ( Length > ushort.MaxValue ) {
 553        throw new ZipException("Data exceeds maximum length");
 554      }
 555
 556      return (byte[])_data.Clone();
 557    }
 558
 559    /// <summary>
 560    /// Clear the stored data.
 561    /// </summary>
 562    public void Clear()
 563    {
 564      if ( (_data == null) || (_data.Length != 0) ) {
 565        _data = new byte[0];
 566      }
 567    }
 568
 569    /// <summary>
 570    /// Gets the current extra data length.
 571    /// </summary>
 572    public int Length
 573    {
 574      get { return _data.Length; }
 575    }
 576
 577    /// <summary>
 578    /// Get a read-only <see cref="Stream"/> for the associated tag.
 579    /// </summary>
 580    /// <param name="tag">The tag to locate data for.</param>
 581    /// <returns>Returns a <see cref="Stream"/> containing tag data or null if no tag was found.</returns>
 582    public Stream GetStreamForTag(int tag)
 583    {
 584      Stream result = null;
 585      if ( Find(tag) ) {
 586        result = new MemoryStream(_data, _index, _readValueLength, false);
 587      }
 588      return result;
 589    }
 590
 591    /// <summary>
 592    /// Get the <see cref="ITaggedData">tagged data</see> for a tag.
 593    /// </summary>
 594    /// <param name="tag">The tag to search for.</param>
 595    /// <returns>Returns a <see cref="ITaggedData">tagged value</see> or null if none found.</returns>
 596    private ITaggedData GetData(short tag)
 597    {
 598      ITaggedData result = null;
 599      if (Find(tag))
 600      {
 601        result = Create(tag, _data, _readValueStart, _readValueLength);
 602      }
 603      return result;
 604    }
 605
 606    static ITaggedData Create(short tag, byte[] data, int offset, int count)
 607    {
 608      ITaggedData result = null;
 609      switch ( tag )
 610      {
 611        case 0x000A:
 612          result = new NTTaggedData();
 613          break;
 614        case 0x5455:
 615          result = new ExtendedUnixData();
 616          break;
 617        default:
 618          result = new RawTaggedData(tag);
 619          break;
 620      }
 621      result.SetData(data, offset, count);
 622      return result;
 623    }
 624
 625    /// <summary>
 626    /// Get the length of the last value found by <see cref="Find"/>
 627    /// </summary>
 628    /// <remarks>This is only valid if <see cref="Find"/> has previously returned true.</remarks>
 629    public int ValueLength
 630    {
 631      get { return _readValueLength; }
 632    }
 633
 634    /// <summary>
 635    /// Get the index for the current read value.
 636    /// </summary>
 637    /// <remarks>This is only valid if <see cref="Find"/> has previously returned true.
 638    /// Initially the result will be the index of the first byte of actual data.  The value is updated after calls to
 639    /// <see cref="ReadInt"/>, <see cref="ReadShort"/> and <see cref="ReadLong"/>. </remarks>
 640    public int CurrentReadIndex
 641    {
 642      get { return _index; }
 643    }
 644
 645    /// <summary>
 646    /// Get the number of bytes remaining to be read for the current value;
 647    /// </summary>
 648    public int UnreadCount
 649    {
 650      get
 651      {
 652        if ((_readValueStart > _data.Length) ||
 653          (_readValueStart < 4) ) {
 654          throw new ZipException("Find must be called before calling a Read method");
 655        }
 656
 657        return _readValueStart + _readValueLength - _index;
 658      }
 659    }
 660
 661    /// <summary>
 662    /// Find an extra data value
 663    /// </summary>
 664    /// <param name="headerID">The identifier for the value to find.</param>
 665    /// <returns>Returns true if the value was found; false otherwise.</returns>
 666    public bool Find(int headerID)
 667    {
 668      _readValueStart = _data.Length;
 669      _readValueLength = 0;
 670      _index = 0;
 671
 672      int localLength = _readValueStart;
 673      int localTag = headerID - 1;
 674
 675      // Trailing bytes that cant make up an entry (as there arent enough
 676      // bytes for a tag and length) are ignored!
 677      while ( (localTag != headerID) && (_index < _data.Length - 3) ) {
 678        localTag = ReadShortInternal();
 679        localLength = ReadShortInternal();
 680        if ( localTag != headerID ) {
 681          _index += localLength;
 682        }
 683      }
 684
 685      bool result = (localTag == headerID) && ((_index + localLength) <= _data.Length);
 686
 687      if ( result ) {
 688        _readValueStart = _index;
 689        _readValueLength = localLength;
 690      }
 691
 692      return result;
 693    }
 694
 695    /// <summary>
 696    /// Add a new entry to extra data.
 697    /// </summary>
 698    /// <param name="taggedData">The <see cref="ITaggedData"/> value to add.</param>
 699    public void AddEntry(ITaggedData taggedData)
 700    {
 701      if (taggedData == null)
 702      {
 703        throw new ArgumentNullException(nameof(taggedData));
 704      }
 705      AddEntry(taggedData.TagID, taggedData.GetData());
 706    }
 707
 708    /// <summary>
 709    /// Add a new entry to extra data
 710    /// </summary>
 711    /// <param name="headerID">The ID for this entry.</param>
 712    /// <param name="fieldData">The data to add.</param>
 713    /// <remarks>If the ID already exists its contents are replaced.</remarks>
 714    public void AddEntry(int headerID, byte[] fieldData)
 715    {
 716      if ( (headerID > ushort.MaxValue) || (headerID < 0)) {
 717        throw new ArgumentOutOfRangeException(nameof(headerID));
 718      }
 719
 720      int addLength = (fieldData == null) ? 0 : fieldData.Length;
 721
 722      if ( addLength > ushort.MaxValue ) {
 723#if NETCF_1_0
 724        throw new ArgumentOutOfRangeException("fieldData");
 725#else
 726        throw new ArgumentOutOfRangeException(nameof(fieldData), "exceeds maximum length");
 727#endif
 728      }
 729
 730      // Test for new length before adjusting data.
 731      int newLength = _data.Length + addLength + 4;
 732
 733      if ( Find(headerID) )
 734      {
 735        newLength -= (ValueLength + 4);
 736      }
 737
 738      if ( newLength > ushort.MaxValue ) {
 739        throw new ZipException("Data exceeds maximum length");
 740      }
 741
 742      Delete(headerID);
 743
 744      byte[] newData = new byte[newLength];
 745      _data.CopyTo(newData, 0);
 746      int index = _data.Length;
 747      _data = newData;
 748      SetShort(ref index, headerID);
 749      SetShort(ref index, addLength);
 750      if ( fieldData != null ) {
 751        fieldData.CopyTo(newData, index);
 752      }
 753    }
 754
 755    /// <summary>
 756    /// Start adding a new entry.
 757    /// </summary>
 758    /// <remarks>Add data using <see cref="AddData(byte[])"/>, <see cref="AddLeShort"/>, <see cref="AddLeInt"/>, or <see
 759    /// The new entry is completed and actually added by calling <see cref="AddNewEntry"/></remarks>
 760    /// <seealso cref="AddEntry(ITaggedData)"/>
 761    public void StartNewEntry()
 762    {
 763      _newEntry = new MemoryStream();
 764    }
 765
 766    /// <summary>
 767    /// Add entry data added since <see cref="StartNewEntry"/> using the ID passed.
 768    /// </summary>
 769    /// <param name="headerID">The identifier to use for this entry.</param>
 770    public void AddNewEntry(int headerID)
 771    {
 772      byte[] newData = _newEntry.ToArray();
 773      _newEntry = null;
 774      AddEntry(headerID, newData);
 775    }
 776
 777    /// <summary>
 778    /// Add a byte of data to the pending new entry.
 779    /// </summary>
 780    /// <param name="data">The byte to add.</param>
 781    /// <seealso cref="StartNewEntry"/>
 782    public void AddData(byte data)
 783    {
 784      _newEntry.WriteByte(data);
 785    }
 786
 787    /// <summary>
 788    /// Add data to a pending new entry.
 789    /// </summary>
 790    /// <param name="data">The data to add.</param>
 791    /// <seealso cref="StartNewEntry"/>
 792    public void AddData(byte[] data)
 793    {
 794      if ( data == null ) {
 795        throw new ArgumentNullException(nameof(data));
 796      }
 797
 798      _newEntry.Write(data, 0, data.Length);
 799    }
 800
 801    /// <summary>
 802    /// Add a short value in little endian order to the pending new entry.
 803    /// </summary>
 804    /// <param name="toAdd">The data to add.</param>
 805    /// <seealso cref="StartNewEntry"/>
 806    public void AddLeShort(int toAdd)
 807    {
 808      unchecked {
 809        _newEntry.WriteByte(( byte )toAdd);
 810        _newEntry.WriteByte(( byte )(toAdd >> 8));
 811      }
 812    }
 813
 814    /// <summary>
 815    /// Add an integer value in little endian order to the pending new entry.
 816    /// </summary>
 817    /// <param name="toAdd">The data to add.</param>
 818    /// <seealso cref="StartNewEntry"/>
 819    public void AddLeInt(int toAdd)
 820    {
 821      unchecked {
 822        AddLeShort(( short )toAdd);
 823        AddLeShort(( short )(toAdd >> 16));
 824      }
 825    }
 826
 827    /// <summary>
 828    /// Add a long value in little endian order to the pending new entry.
 829    /// </summary>
 830    /// <param name="toAdd">The data to add.</param>
 831    /// <seealso cref="StartNewEntry"/>
 832    public void AddLeLong(long toAdd)
 833    {
 834      unchecked {
 835        AddLeInt(( int )(toAdd & 0xffffffff));
 836        AddLeInt(( int )(toAdd >> 32));
 837      }
 838    }
 839
 840    /// <summary>
 841    /// Delete an extra data field.
 842    /// </summary>
 843    /// <param name="headerID">The identifier of the field to delete.</param>
 844    /// <returns>Returns true if the field was found and deleted.</returns>
 845    public bool Delete(int headerID)
 846    {
 847      bool result = false;
 848
 849      if ( Find(headerID) ) {
 850        result = true;
 851        int trueStart = _readValueStart - 4;
 852
 853        byte[] newData = new byte[_data.Length - (ValueLength + 4)];
 854        Array.Copy(_data, 0, newData, 0, trueStart);
 855
 856        int trueEnd = trueStart + ValueLength + 4;
 857        Array.Copy(_data, trueEnd, newData, trueStart, _data.Length - trueEnd);
 858        _data = newData;
 859      }
 860      return result;
 861    }
 862
 863    #region Reading Support
 864    /// <summary>
 865    /// Read a long in little endian form from the last <see cref="Find">found</see> data value
 866    /// </summary>
 867    /// <returns>Returns the long value read.</returns>
 868    public long ReadLong()
 869    {
 870      ReadCheck(8);
 871      return (ReadInt() & 0xffffffff) | ((( long )ReadInt()) << 32);
 872    }
 873
 874    /// <summary>
 875    /// Read an integer in little endian form from the last <see cref="Find">found</see> data value.
 876    /// </summary>
 877    /// <returns>Returns the integer read.</returns>
 878    public int ReadInt()
 879    {
 880      ReadCheck(4);
 881
 882      int result = _data[_index] + (_data[_index + 1] << 8) +
 883        (_data[_index + 2] << 16) + (_data[_index + 3] << 24);
 884      _index += 4;
 885      return result;
 886    }
 887
 888    /// <summary>
 889    /// Read a short value in little endian form from the last <see cref="Find">found</see> data value.
 890    /// </summary>
 891    /// <returns>Returns the short value read.</returns>
 892    public int ReadShort()
 893    {
 894      ReadCheck(2);
 895      int result = _data[_index] + (_data[_index + 1] << 8);
 896      _index += 2;
 897      return result;
 898    }
 899
 900    /// <summary>
 901    /// Read a byte from an extra data
 902    /// </summary>
 903    /// <returns>The byte value read or -1 if the end of data has been reached.</returns>
 904    public int ReadByte()
 905    {
 906      int result = -1;
 907      if ( (_index < _data.Length) && (_readValueStart + _readValueLength > _index) ) {
 908        result = _data[_index];
 909        _index += 1;
 910      }
 911      return result;
 912    }
 913
 914    /// <summary>
 915    /// Skip data during reading.
 916    /// </summary>
 917    /// <param name="amount">The number of bytes to skip.</param>
 918    public void Skip(int amount)
 919    {
 920      ReadCheck(amount);
 921      _index += amount;
 922    }
 923
 924    void ReadCheck(int length)
 925    {
 926      if ((_readValueStart > _data.Length) ||
 927        (_readValueStart < 4) ) {
 928        throw new ZipException("Find must be called before calling a Read method");
 929      }
 930
 931      if (_index > _readValueStart + _readValueLength - length ) {
 932        throw new ZipException("End of extra data");
 933      }
 934
 935            if ( _index + length < 4 ) {
 936                throw new ZipException("Cannot read before start of tag");
 937            }
 938    }
 939
 940    /// <summary>
 941    /// Internal form of <see cref="ReadShort"/> that reads data at any location.
 942    /// </summary>
 943    /// <returns>Returns the short value read.</returns>
 944    int ReadShortInternal()
 945    {
 946      if ( _index > _data.Length - 2) {
 947        throw new ZipException("End of extra data");
 948      }
 949
 950      int result = _data[_index] + (_data[_index + 1] << 8);
 951      _index += 2;
 952      return result;
 953    }
 954
 955    void SetShort(ref int index, int source)
 956    {
 957      _data[index] = (byte)source;
 958      _data[index + 1] = (byte)(source >> 8);
 959      index += 2;
 960    }
 961
 962    #endregion
 963
 964    #region IDisposable Members
 965
 966    /// <summary>
 967    /// Dispose of this instance.
 968    /// </summary>
 969    public void Dispose()
 970    {
 971      if ( _newEntry != null ) {
 972        _newEntry.Close();
 973      }
 974    }
 975
 976    #endregion
 977
 978    #region Instance Fields
 979    int _index;
 980    int _readValueStart;
 981    int _readValueLength;
 982
 983    MemoryStream _newEntry;
 984    byte[] _data;
 985    #endregion
 986  }
 987}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_NameAndSizeFilter.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_NameAndSizeFilter.htm new file mode 100644 index 000000000..950015f32 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_NameAndSizeFilter.htm @@ -0,0 +1,379 @@ + + + + +ICSharpCode.SharpZipLib.Core.NameAndSizeFilter - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.NameAndSizeFilter
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs
Covered lines:0
Uncovered lines:23
Coverable lines:23
Total lines:336
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
IsMatch(...)300
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// PathFilter.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  /// <summary>
 42  /// PathFilter filters directories and files using a form of <see cref="System.Text.RegularExpressions.Regex">regular 
 43  /// by full path name.
 44  /// See <see cref="NameFilter">NameFilter</see> for more detail on filtering.
 45  /// </summary>
 46  public class PathFilter : IScanFilter
 47  {
 48    #region Constructors
 49    /// <summary>
 50    /// Initialise a new instance of <see cref="PathFilter"></see>.
 51    /// </summary>
 52    /// <param name="filter">The <see cref="NameFilter">filter</see> expression to apply.</param>
 53    public PathFilter(string filter)
 54    {
 55      nameFilter_ = new NameFilter(filter);
 56    }
 57    #endregion
 58
 59    #region IScanFilter Members
 60    /// <summary>
 61    /// Test a name to see if it matches the filter.
 62    /// </summary>
 63    /// <param name="name">The name to test.</param>
 64    /// <returns>True if the name matches, false otherwise.</returns>
 65    /// <remarks><see cref="Path.GetFullPath(string)"/> is used to get the full path before matching.</remarks>
 66    public virtual bool IsMatch(string name)
 67    {
 68      bool result = false;
 69
 70      if ( name != null ) {
 71        string cooked = (name.Length > 0) ? Path.GetFullPath(name) : "";
 72        result = nameFilter_.IsMatch(cooked);
 73      }
 74      return result;
 75    }
 76
 77    readonly
 78    #endregion
 79
 80    #region Instance Fields
 81    NameFilter nameFilter_;
 82    #endregion
 83  }
 84
 85  /// <summary>
 86  /// ExtendedPathFilter filters based on name, file size, and the last write time of the file.
 87  /// </summary>
 88  /// <remarks>Provides an example of how to customise filtering.</remarks>
 89  public class ExtendedPathFilter : PathFilter
 90  {
 91    #region Constructors
 92    /// <summary>
 93    /// Initialise a new instance of ExtendedPathFilter.
 94    /// </summary>
 95    /// <param name="filter">The filter to apply.</param>
 96    /// <param name="minSize">The minimum file size to include.</param>
 97    /// <param name="maxSize">The maximum file size to include.</param>
 98    public ExtendedPathFilter(string filter,
 99      long minSize, long maxSize)
 100      : base(filter)
 101    {
 102      MinSize = minSize;
 103      MaxSize = maxSize;
 104    }
 105
 106    /// <summary>
 107    /// Initialise a new instance of ExtendedPathFilter.
 108    /// </summary>
 109    /// <param name="filter">The filter to apply.</param>
 110    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 111    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 112    public ExtendedPathFilter(string filter,
 113      DateTime minDate, DateTime maxDate)
 114      : base(filter)
 115    {
 116      MinDate = minDate;
 117      MaxDate = maxDate;
 118    }
 119
 120    /// <summary>
 121    /// Initialise a new instance of ExtendedPathFilter.
 122    /// </summary>
 123    /// <param name="filter">The filter to apply.</param>
 124    /// <param name="minSize">The minimum file size to include.</param>
 125    /// <param name="maxSize">The maximum file size to include.</param>
 126    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 127    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 128    public ExtendedPathFilter(string filter,
 129      long minSize, long maxSize,
 130      DateTime minDate, DateTime maxDate)
 131      : base(filter)
 132    {
 133      MinSize = minSize;
 134      MaxSize = maxSize;
 135      MinDate = minDate;
 136      MaxDate = maxDate;
 137    }
 138    #endregion
 139
 140    #region IScanFilter Members
 141    /// <summary>
 142    /// Test a filename to see if it matches the filter.
 143    /// </summary>
 144    /// <param name="name">The filename to test.</param>
 145    /// <returns>True if the filter matches, false otherwise.</returns>
 146    /// <exception cref="System.IO.FileNotFoundException">The <see paramref="fileName"/> doesnt exist</exception>
 147    public override bool IsMatch(string name)
 148    {
 149      bool result = base.IsMatch(name);
 150
 151      if ( result ) {
 152        var fileInfo = new FileInfo(name);
 153        result =
 154          (MinSize <= fileInfo.Length) &&
 155          (MaxSize >= fileInfo.Length) &&
 156          (MinDate <= fileInfo.LastWriteTime) &&
 157          (MaxDate >= fileInfo.LastWriteTime)
 158          ;
 159      }
 160      return result;
 161    }
 162    #endregion
 163
 164    #region Properties
 165    /// <summary>
 166    /// Get/set the minimum size/length for a file that will match this filter.
 167    /// </summary>
 168    /// <remarks>The default value is zero.</remarks>
 169    /// <exception cref="ArgumentOutOfRangeException">value is less than zero; greater than <see cref="MaxSize"/></excep
 170    public long MinSize
 171    {
 172      get { return minSize_; }
 173      set
 174      {
 175        if ( (value < 0) || (maxSize_ < value) ) {
 176          throw new ArgumentOutOfRangeException(nameof(value));
 177        }
 178
 179        minSize_ = value;
 180      }
 181    }
 182
 183    /// <summary>
 184    /// Get/set the maximum size/length for a file that will match this filter.
 185    /// </summary>
 186    /// <remarks>The default value is <see cref="System.Int64.MaxValue"/></remarks>
 187    /// <exception cref="ArgumentOutOfRangeException">value is less than zero or less than <see cref="MinSize"/></except
 188    public long MaxSize
 189    {
 190      get { return maxSize_; }
 191      set
 192      {
 193        if ( (value < 0) || (minSize_ > value) ) {
 194          throw new ArgumentOutOfRangeException(nameof(value));
 195        }
 196
 197        maxSize_ = value;
 198      }
 199    }
 200
 201    /// <summary>
 202    /// Get/set the minimum <see cref="DateTime"/> value that will match for this filter.
 203    /// </summary>
 204    /// <remarks>Files with a LastWrite time less than this value are excluded by the filter.</remarks>
 205    public DateTime MinDate
 206    {
 207      get
 208      {
 209        return minDate_;
 210      }
 211
 212      set
 213      {
 214        if ( value > maxDate_ ) {
 215#if NETCF_1_0
 216          throw new ArgumentOutOfRangeException("value");
 217#else
 218          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MaxDate");
 219#endif
 220        }
 221
 222        minDate_ = value;
 223      }
 224    }
 225
 226    /// <summary>
 227    /// Get/set the maximum <see cref="DateTime"/> value that will match for this filter.
 228    /// </summary>
 229    /// <remarks>Files with a LastWrite time greater than this value are excluded by the filter.</remarks>
 230    public DateTime MaxDate
 231    {
 232      get
 233      {
 234        return maxDate_;
 235      }
 236
 237      set
 238      {
 239        if ( minDate_ > value ) {
 240#if NETCF_1_0
 241          throw new ArgumentOutOfRangeException("value");
 242#else
 243          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MinDate");
 244#endif
 245        }
 246
 247        maxDate_ = value;
 248      }
 249    }
 250    #endregion
 251
 252    #region Instance Fields
 253    long minSize_;
 254    long maxSize_ = long.MaxValue;
 255    DateTime minDate_ = DateTime.MinValue;
 256    DateTime maxDate_ = DateTime.MaxValue;
 257    #endregion
 258  }
 259
 260  /// <summary>
 261  /// NameAndSizeFilter filters based on name and file size.
 262  /// </summary>
 263  /// <remarks>A sample showing how filters might be extended.</remarks>
 264  [Obsolete("Use ExtendedPathFilter instead")]
 265  public class NameAndSizeFilter : PathFilter
 266  {
 267
 268    /// <summary>
 269    /// Initialise a new instance of NameAndSizeFilter.
 270    /// </summary>
 271    /// <param name="filter">The filter to apply.</param>
 272    /// <param name="minSize">The minimum file size to include.</param>
 273    /// <param name="maxSize">The maximum file size to include.</param>
 274    public NameAndSizeFilter(string filter, long minSize, long maxSize)
 0275      : base(filter)
 276    {
 0277      MinSize = minSize;
 0278      MaxSize = maxSize;
 0279    }
 280
 281    /// <summary>
 282    /// Test a filename to see if it matches the filter.
 283    /// </summary>
 284    /// <param name="name">The filename to test.</param>
 285    /// <returns>True if the filter matches, false otherwise.</returns>
 286    public override bool IsMatch(string name)
 287    {
 0288      bool result = base.IsMatch(name);
 289
 0290       if ( result ) {
 0291        var fileInfo = new FileInfo(name);
 0292        long length = fileInfo.Length;
 0293        result =
 0294          (MinSize <= length) &&
 0295          (MaxSize >= length);
 296      }
 0297      return result;
 298    }
 299
 300    /// <summary>
 301    /// Get/set the minimum size for a file that will match this filter.
 302    /// </summary>
 303    public long MinSize
 304    {
 0305      get { return minSize_; }
 306      set {
 0307         if ( (value < 0) || (maxSize_ < value) ) {
 0308          throw new ArgumentOutOfRangeException(nameof(value));
 309        }
 310
 0311        minSize_ = value;
 0312      }
 313    }
 314
 315    /// <summary>
 316    /// Get/set the maximum size for a file that will match this filter.
 317    /// </summary>
 318    public long MaxSize
 319    {
 0320      get { return maxSize_; }
 321      set
 322      {
 0323         if ( (value < 0) || (minSize_ > value) ) {
 0324          throw new ArgumentOutOfRangeException(nameof(value));
 325        }
 326
 0327        maxSize_ = value;
 0328      }
 329    }
 330
 331    #region Instance Fields
 332    long minSize_;
 0333    long maxSize_ = long.MaxValue;
 334    #endregion
 335  }
 336}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_NameFilter.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_NameFilter.htm new file mode 100644 index 000000000..0673704e1 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_NameFilter.htm @@ -0,0 +1,338 @@ + + + + +ICSharpCode.SharpZipLib.Core.NameFilter - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.NameFilter
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\NameFilter.cs
Covered lines:70
Uncovered lines:21
Coverable lines:91
Total lines:288
Line coverage:76.9%
Branch coverage:73.9%
+

Metrics

+ + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
IsValidExpression(...)100
IsValidFilterExpression(...)78069.23
SplitQuoted(...)89693.33
ToString()100
IsIncluded(...)5100100
IsExcluded(...)45033.33
IsMatch(...)2100100
Compile()87566.67
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\NameFilter.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// NameFilter.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36// HISTORY
 37//  2010-03-03  Z-1654  Fixed bug where escape characters were excluded in SplitQuoted()
 38
 39using System;
 40using System.Collections;
 41using System.Text;
 42using System.Text.RegularExpressions;
 43
 44namespace ICSharpCode.SharpZipLib.Core
 45{
 46  /// <summary>
 47  /// NameFilter is a string matching class which allows for both positive and negative
 48  /// matching.
 49  /// A filter is a sequence of independant <see cref="Regex">regular expressions</see> separated by semi-colons ';'.
 50  /// To include a semi-colon it may be quoted as in \;. Each expression can be prefixed by a plus '+' sign or
 51  /// a minus '-' sign to denote the expression is intended to include or exclude names.
 52  /// If neither a plus or minus sign is found include is the default.
 53  /// A given name is tested for inclusion before checking exclusions.  Only names matching an include spec
 54  /// and not matching an exclude spec are deemed to match the filter.
 55  /// An empty filter matches any name.
 56  /// </summary>
 57  /// <example>The following expression includes all name ending in '.dat' with the exception of 'dummy.dat'
 58  /// "+\.dat$;-^dummy\.dat$"
 59  /// </example>
 60  public class NameFilter : IScanFilter
 61  {
 62    #region Constructors
 63    /// <summary>
 64    /// Construct an instance based on the filter expression passed
 65    /// </summary>
 66    /// <param name="filter">The filter expression.</param>
 1567    public NameFilter(string filter)
 68    {
 1569      filter_ = filter;
 1570      inclusions_ = new ArrayList();
 1571      exclusions_ = new ArrayList();
 1572      Compile();
 1573    }
 74    #endregion
 75
 76    /// <summary>
 77    /// Test a string to see if it is a valid regular expression.
 78    /// </summary>
 79    /// <param name="expression">The expression to test.</param>
 80    /// <returns>True if expression is a valid <see cref="System.Text.RegularExpressions.Regex"/> false otherwise.</retu
 81    public static bool IsValidExpression(string expression)
 82    {
 083      bool result = true;
 84      try {
 085        var exp = new Regex(expression, RegexOptions.IgnoreCase | RegexOptions.Singleline);
 086      }
 087      catch (ArgumentException) {
 088        result = false;
 089      }
 090      return result;
 91    }
 92
 93    /// <summary>
 94    /// Test an expression to see if it is valid as a filter.
 95    /// </summary>
 96    /// <param name="toTest">The filter expression to test.</param>
 97    /// <returns>True if the expression is valid, false otherwise.</returns>
 98    public static bool IsValidFilterExpression(string toTest)
 99    {
 5100      bool result = true;
 101
 102      try {
 5103                 if (toTest != null) {
 4104                    string[] items = SplitQuoted(toTest);
 10105                     for (int i = 0; i < items.Length; ++i) {
 3106                         if ((items[i] != null) && (items[i].Length > 0)) {
 107                            string toCompile;
 108
 3109                             if (items[i][0] == '+') {
 0110                                toCompile = items[i].Substring(1, items[i].Length - 1);
 0111                            }
 3112                             else if (items[i][0] == '-') {
 0113                                toCompile = items[i].Substring(1, items[i].Length - 1);
 0114                            }
 115                            else {
 3116                                toCompile = items[i];
 117                            }
 118
 3119                            var testRegex = new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Singleline);
 120                        }
 121                    }
 122                }
 3123      }
 2124      catch (ArgumentException) {
 2125        result = false;
 2126      }
 127
 5128      return result;
 129    }
 130
 131    /// <summary>
 132    /// Split a string into its component pieces
 133    /// </summary>
 134    /// <param name="original">The original string</param>
 135    /// <returns>Returns an array of <see cref="T:System.String"/> values containing the individual filter elements.</re
 136    public static string[] SplitQuoted(string original)
 137    {
 14138      char escape = '\\';
 14139      char[] separators = { ';' };
 140
 14141      var result = new ArrayList();
 142
 14143       if (!string.IsNullOrEmpty(original)) {
 12144        int endIndex = -1;
 12145        var b = new StringBuilder();
 146
 85147         while (endIndex < original.Length) {
 73148          endIndex += 1;
 73149           if (endIndex >= original.Length) {
 12150            result.Add(b.ToString());
 12151          }
 61152           else if (original[endIndex] == escape) {
 12153            endIndex += 1;
 12154             if (endIndex >= original.Length) {
 155#if NETCF_1_0
 156              throw new ArgumentException("Missing terminating escape character");
 157#else
 0158              throw new ArgumentException("Missing terminating escape character", nameof(original));
 159#endif
 160            }
 161            // include escape if this is not an escaped separator
 12162             if (Array.IndexOf(separators, original[endIndex]) < 0)
 7163              b.Append(escape);
 164
 12165            b.Append(original[endIndex]);
 12166          }
 167          else {
 49168             if (Array.IndexOf(separators, original[endIndex]) >= 0) {
 11169              result.Add(b.ToString());
 11170              b.Length = 0;
 11171            }
 172            else {
 38173              b.Append(original[endIndex]);
 174            }
 175          }
 176        }
 177      }
 178
 14179      return (string[])result.ToArray(typeof(string));
 180    }
 181
 182    /// <summary>
 183    /// Convert this filter to its string equivalent.
 184    /// </summary>
 185    /// <returns>The string equivalent for this filter.</returns>
 186    public override string ToString()
 187    {
 0188      return filter_;
 189    }
 190
 191    /// <summary>
 192    /// Test a value to see if it is included by the filter.
 193    /// </summary>
 194    /// <param name="name">The value to test.</param>
 195    /// <returns>True if the value is included, false otherwise.</returns>
 196    public bool IsIncluded(string name)
 197    {
 14086198      bool result = false;
 14086199       if ( inclusions_.Count == 0 ) {
 2200        result = true;
 2201      }
 202      else {
 56331203        foreach ( Regex r in inclusions_ ) {
 14084204           if ( r.IsMatch(name) ) {
 5205            result = true;
 5206            break;
 207          }
 208        }
 209      }
 14086210      return result;
 211    }
 212
 213    /// <summary>
 214    /// Test a value to see if it is excluded by the filter.
 215    /// </summary>
 216    /// <param name="name">The value to test.</param>
 217    /// <returns>True if the value is excluded, false otherwise.</returns>
 218    public bool IsExcluded(string name)
 219    {
 6220      bool result = false;
 12221      foreach ( Regex r in exclusions_ ) {
 0222         if ( r.IsMatch(name) ) {
 0223          result = true;
 0224          break;
 225        }
 226      }
 6227      return result;
 228    }
 229
 230    #region IScanFilter Members
 231    /// <summary>
 232    /// Test a value to see if it matches the filter.
 233    /// </summary>
 234    /// <param name="name">The value to test.</param>
 235    /// <returns>True if the value matches, false otherwise.</returns>
 236    public bool IsMatch(string name)
 237    {
 14085238      return (IsIncluded(name) && !IsExcluded(name));
 239    }
 240    #endregion
 241
 242    /// <summary>
 243    /// Compile this filter.
 244    /// </summary>
 245    void Compile()
 246    {
 247      // TODO: Check to see if combining RE's makes it faster/smaller.
 248      // simple scheme would be to have one RE for inclusion and one for exclusion.
 15249       if ( filter_ == null ) {
 9250        return;
 251      }
 252
 6253      string[] items = SplitQuoted(filter_);
 24254       for ( int i = 0; i < items.Length; ++i ) {
 6255         if ( (items[i] != null) && (items[i].Length > 0) ) {
 6256          bool include = (items[i][0] != '-');
 257          string toCompile;
 258
 6259           if ( items[i][0] == '+' ) {
 0260            toCompile = items[i].Substring(1, items[i].Length - 1);
 0261          }
 6262           else if ( items[i][0] == '-' ) {
 0263            toCompile = items[i].Substring(1, items[i].Length - 1);
 0264          }
 265          else {
 6266            toCompile = items[i];
 267          }
 268
 269          // NOTE: Regular expressions can fail to compile here for a number of reasons that cause an exception
 270          // these are left unhandled here as the caller is responsible for ensuring all is valid.
 271          // several functions IsValidFilterExpression and IsValidExpression are provided for such checking
 6272           if ( include ) {
 6273            inclusions_.Add(new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleli
 6274          }
 275          else {
 0276            exclusions_.Add(new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleli
 277          }
 278        }
 279      }
 6280    }
 281
 282    #region Instance Fields
 283    string filter_;
 284    ArrayList inclusions_;
 285    ArrayList exclusions_;
 286    #endregion
 287  }
 288}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_OutputWindow.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_OutputWindow.htm new file mode 100644 index 000000000..c3ba72e5a --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_OutputWindow.htm @@ -0,0 +1,286 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\OutputWindow.cs
Covered lines:46
Uncovered lines:20
Coverable lines:66
Total lines:235
Line coverage:69.6%
Branch coverage:53.3%
+

Metrics

+ + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
Write(...)28066.67
SlowRepeat(...)200
Repeat(...)678.5772.73
CopyStored(...)310080
CopyDict(...)400
GetFreeSpace()1100100
GetAvailable()1100100
CopyOutput(...)493.7585.71
Reset()1100100
.ctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\OutputWindow.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// OutputWindow.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41
 42namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams
 43{
 44
 45  /// <summary>
 46  /// Contains the output from the Inflation process.
 47  /// We need to have a window so that we can refer backwards into the output stream
 48  /// to repeat stuff.<br/>
 49  /// Author of the original java version : John Leuner
 50  /// </summary>
 51  public class OutputWindow
 52  {
 53    #region Constants
 54    const int WindowSize = 1 << 15;
 55    const int WindowMask = WindowSize - 1;
 56    #endregion
 57
 58    #region Instance Fields
 44159    byte[] window = new byte[WindowSize]; //The window is 2^15 bytes
 60    int windowEnd;
 61    int windowFilled;
 62    #endregion
 63
 64    /// <summary>
 65    /// Write a byte to this output window
 66    /// </summary>
 67    /// <param name="value">value to write</param>
 68    /// <exception cref="InvalidOperationException">
 69    /// if window is full
 70    /// </exception>
 71    public void Write(int value)
 72    {
 923973       if (windowFilled++ == WindowSize) {
 074        throw new InvalidOperationException("Window full");
 75      }
 923976      window[windowEnd++] = (byte) value;
 923977      windowEnd &= WindowMask;
 923978    }
 79
 80
 81    private void SlowRepeat(int repStart, int length, int distance)
 82    {
 083       while (length-- > 0) {
 084        window[windowEnd++] = window[repStart++];
 085        windowEnd &= WindowMask;
 086        repStart &= WindowMask;
 87      }
 088    }
 89
 90    /// <summary>
 91    /// Append a byte pattern already in the window itself
 92    /// </summary>
 93    /// <param name="length">length of pattern to copy</param>
 94    /// <param name="distance">distance from end of window pattern occurs</param>
 95    /// <exception cref="InvalidOperationException">
 96    /// If the repeated data overflows the window
 97    /// </exception>
 98    public void Repeat(int length, int distance)
 99    {
 101100       if ((windowFilled += length) > WindowSize) {
 0101        throw new InvalidOperationException("Window full");
 102      }
 103
 101104      int repStart = (windowEnd - distance) & WindowMask;
 101105      int border = WindowSize - length;
 101106       if ( (repStart <= border) && (windowEnd < border) ) {
 101107         if (length <= distance) {
 39108          System.Array.Copy(window, repStart, window, windowEnd, length);
 39109          windowEnd += length;
 39110        } else {
 111          // We have to copy manually, since the repeat pattern overlaps.
 11470112           while (length-- > 0) {
 11408113            window[windowEnd++] = window[repStart++];
 114          }
 115        }
 62116      } else {
 0117        SlowRepeat(repStart, length, distance);
 118      }
 0119    }
 120
 121    /// <summary>
 122    /// Copy from input manipulator to internal window
 123    /// </summary>
 124    /// <param name="input">source of data</param>
 125    /// <param name="length">length of data to copy</param>
 126    /// <returns>the number of bytes copied</returns>
 127    public int CopyStored(StreamManipulator input, int length)
 128    {
 2335129      length = Math.Min(Math.Min(length, WindowSize - windowFilled), input.AvailableBytes);
 130      int copied;
 131
 2335132      int tailLen = WindowSize - windowEnd;
 2335133       if (length > tailLen) {
 99134        copied = input.CopyBytes(window, windowEnd, tailLen);
 99135         if (copied == tailLen) {
 99136          copied += input.CopyBytes(window, 0, length - tailLen);
 137        }
 99138      } else {
 2236139        copied = input.CopyBytes(window, windowEnd, length);
 140      }
 141
 2335142      windowEnd = (windowEnd + copied) & WindowMask;
 2335143      windowFilled += copied;
 2335144      return copied;
 145    }
 146
 147    /// <summary>
 148    /// Copy dictionary to window
 149    /// </summary>
 150    /// <param name="dictionary">source dictionary</param>
 151    /// <param name="offset">offset of start in source dictionary</param>
 152    /// <param name="length">length of dictionary</param>
 153    /// <exception cref="InvalidOperationException">
 154    /// If window isnt empty
 155    /// </exception>
 156    public void CopyDict(byte[] dictionary, int offset, int length)
 157    {
 0158       if ( dictionary == null ) {
 0159        throw new ArgumentNullException(nameof(dictionary));
 160      }
 161
 0162       if (windowFilled > 0) {
 0163        throw new InvalidOperationException();
 164      }
 165
 0166       if (length > WindowSize) {
 0167        offset += length - WindowSize;
 0168        length = WindowSize;
 169      }
 0170      System.Array.Copy(dictionary, offset, window, 0, length);
 0171      windowEnd = length & WindowMask;
 0172    }
 173
 174    /// <summary>
 175    /// Get remaining unfilled space in window
 176    /// </summary>
 177    /// <returns>Number of bytes left in window</returns>
 178    public int GetFreeSpace()
 179    {
 373180      return WindowSize - windowFilled;
 181    }
 182
 183    /// <summary>
 184    /// Get bytes available for output in window
 185    /// </summary>
 186    /// <returns>Number of bytes filled</returns>
 187    public int GetAvailable()
 188    {
 3836189      return windowFilled;
 190    }
 191
 192    /// <summary>
 193    /// Copy contents of window to output
 194    /// </summary>
 195    /// <param name="output">buffer to copy to</param>
 196    /// <param name="offset">offset to start at</param>
 197    /// <param name="len">number of bytes to count</param>
 198    /// <returns>The number of bytes copied</returns>
 199    /// <exception cref="InvalidOperationException">
 200    /// If a window underflow occurs
 201    /// </exception>
 202    public int CopyOutput(byte[] output, int offset, int len)
 203    {
 4599204      int copyEnd = windowEnd;
 4599205       if (len > windowFilled) {
 4469206        len = windowFilled;
 4469207      } else {
 130208        copyEnd = (windowEnd - windowFilled + len) & WindowMask;
 209      }
 210
 4599211      int copied = len;
 4599212      int tailLen = len - copyEnd;
 213
 4599214       if (tailLen > 0) {
 105215        System.Array.Copy(window, WindowSize - tailLen, output, offset, tailLen);
 105216        offset += tailLen;
 105217        len = copyEnd;
 218      }
 4599219      System.Array.Copy(window, copyEnd - len, output, offset, len);
 4599220      windowFilled -= copied;
 4599221       if (windowFilled < 0) {
 0222        throw new InvalidOperationException();
 223      }
 4599224      return copied;
 225    }
 226
 227    /// <summary>
 228    /// Reset by clearing window so <see cref="GetAvailable">GetAvailable</see> returns 0
 229    /// </summary>
 230    public void Reset()
 231    {
 44232      windowFilled = windowEnd = 0;
 44233    }
 234  }
 235}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_PathFilter.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_PathFilter.htm new file mode 100644 index 000000000..aca5daf6d --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_PathFilter.htm @@ -0,0 +1,379 @@ + + + + +ICSharpCode.SharpZipLib.Core.PathFilter - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.PathFilter
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs
Covered lines:8
Uncovered lines:0
Coverable lines:8
Total lines:336
Line coverage:100%
Branch coverage:50%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
IsMatch(...)410060
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// PathFilter.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  /// <summary>
 42  /// PathFilter filters directories and files using a form of <see cref="System.Text.RegularExpressions.Regex">regular 
 43  /// by full path name.
 44  /// See <see cref="NameFilter">NameFilter</see> for more detail on filtering.
 45  /// </summary>
 46  public class PathFilter : IScanFilter
 47  {
 48    #region Constructors
 49    /// <summary>
 50    /// Initialise a new instance of <see cref="PathFilter"></see>.
 51    /// </summary>
 52    /// <param name="filter">The <see cref="NameFilter">filter</see> expression to apply.</param>
 1253    public PathFilter(string filter)
 54    {
 1255      nameFilter_ = new NameFilter(filter);
 1256    }
 57    #endregion
 58
 59    #region IScanFilter Members
 60    /// <summary>
 61    /// Test a name to see if it matches the filter.
 62    /// </summary>
 63    /// <param name="name">The name to test.</param>
 64    /// <returns>True if the name matches, false otherwise.</returns>
 65    /// <remarks><see cref="Path.GetFullPath(string)"/> is used to get the full path before matching.</remarks>
 66    public virtual bool IsMatch(string name)
 67    {
 1408468      bool result = false;
 69
 1408470       if ( name != null ) {
 1408471         string cooked = (name.Length > 0) ? Path.GetFullPath(name) : "";
 1408472        result = nameFilter_.IsMatch(cooked);
 73      }
 1408474      return result;
 75    }
 76
 77    readonly
 78    #endregion
 79
 80    #region Instance Fields
 81    NameFilter nameFilter_;
 82    #endregion
 83  }
 84
 85  /// <summary>
 86  /// ExtendedPathFilter filters based on name, file size, and the last write time of the file.
 87  /// </summary>
 88  /// <remarks>Provides an example of how to customise filtering.</remarks>
 89  public class ExtendedPathFilter : PathFilter
 90  {
 91    #region Constructors
 92    /// <summary>
 93    /// Initialise a new instance of ExtendedPathFilter.
 94    /// </summary>
 95    /// <param name="filter">The filter to apply.</param>
 96    /// <param name="minSize">The minimum file size to include.</param>
 97    /// <param name="maxSize">The maximum file size to include.</param>
 98    public ExtendedPathFilter(string filter,
 99      long minSize, long maxSize)
 100      : base(filter)
 101    {
 102      MinSize = minSize;
 103      MaxSize = maxSize;
 104    }
 105
 106    /// <summary>
 107    /// Initialise a new instance of ExtendedPathFilter.
 108    /// </summary>
 109    /// <param name="filter">The filter to apply.</param>
 110    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 111    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 112    public ExtendedPathFilter(string filter,
 113      DateTime minDate, DateTime maxDate)
 114      : base(filter)
 115    {
 116      MinDate = minDate;
 117      MaxDate = maxDate;
 118    }
 119
 120    /// <summary>
 121    /// Initialise a new instance of ExtendedPathFilter.
 122    /// </summary>
 123    /// <param name="filter">The filter to apply.</param>
 124    /// <param name="minSize">The minimum file size to include.</param>
 125    /// <param name="maxSize">The maximum file size to include.</param>
 126    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 127    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 128    public ExtendedPathFilter(string filter,
 129      long minSize, long maxSize,
 130      DateTime minDate, DateTime maxDate)
 131      : base(filter)
 132    {
 133      MinSize = minSize;
 134      MaxSize = maxSize;
 135      MinDate = minDate;
 136      MaxDate = maxDate;
 137    }
 138    #endregion
 139
 140    #region IScanFilter Members
 141    /// <summary>
 142    /// Test a filename to see if it matches the filter.
 143    /// </summary>
 144    /// <param name="name">The filename to test.</param>
 145    /// <returns>True if the filter matches, false otherwise.</returns>
 146    /// <exception cref="System.IO.FileNotFoundException">The <see paramref="fileName"/> doesnt exist</exception>
 147    public override bool IsMatch(string name)
 148    {
 149      bool result = base.IsMatch(name);
 150
 151      if ( result ) {
 152        var fileInfo = new FileInfo(name);
 153        result =
 154          (MinSize <= fileInfo.Length) &&
 155          (MaxSize >= fileInfo.Length) &&
 156          (MinDate <= fileInfo.LastWriteTime) &&
 157          (MaxDate >= fileInfo.LastWriteTime)
 158          ;
 159      }
 160      return result;
 161    }
 162    #endregion
 163
 164    #region Properties
 165    /// <summary>
 166    /// Get/set the minimum size/length for a file that will match this filter.
 167    /// </summary>
 168    /// <remarks>The default value is zero.</remarks>
 169    /// <exception cref="ArgumentOutOfRangeException">value is less than zero; greater than <see cref="MaxSize"/></excep
 170    public long MinSize
 171    {
 172      get { return minSize_; }
 173      set
 174      {
 175        if ( (value < 0) || (maxSize_ < value) ) {
 176          throw new ArgumentOutOfRangeException(nameof(value));
 177        }
 178
 179        minSize_ = value;
 180      }
 181    }
 182
 183    /// <summary>
 184    /// Get/set the maximum size/length for a file that will match this filter.
 185    /// </summary>
 186    /// <remarks>The default value is <see cref="System.Int64.MaxValue"/></remarks>
 187    /// <exception cref="ArgumentOutOfRangeException">value is less than zero or less than <see cref="MinSize"/></except
 188    public long MaxSize
 189    {
 190      get { return maxSize_; }
 191      set
 192      {
 193        if ( (value < 0) || (minSize_ > value) ) {
 194          throw new ArgumentOutOfRangeException(nameof(value));
 195        }
 196
 197        maxSize_ = value;
 198      }
 199    }
 200
 201    /// <summary>
 202    /// Get/set the minimum <see cref="DateTime"/> value that will match for this filter.
 203    /// </summary>
 204    /// <remarks>Files with a LastWrite time less than this value are excluded by the filter.</remarks>
 205    public DateTime MinDate
 206    {
 207      get
 208      {
 209        return minDate_;
 210      }
 211
 212      set
 213      {
 214        if ( value > maxDate_ ) {
 215#if NETCF_1_0
 216          throw new ArgumentOutOfRangeException("value");
 217#else
 218          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MaxDate");
 219#endif
 220        }
 221
 222        minDate_ = value;
 223      }
 224    }
 225
 226    /// <summary>
 227    /// Get/set the maximum <see cref="DateTime"/> value that will match for this filter.
 228    /// </summary>
 229    /// <remarks>Files with a LastWrite time greater than this value are excluded by the filter.</remarks>
 230    public DateTime MaxDate
 231    {
 232      get
 233      {
 234        return maxDate_;
 235      }
 236
 237      set
 238      {
 239        if ( minDate_ > value ) {
 240#if NETCF_1_0
 241          throw new ArgumentOutOfRangeException("value");
 242#else
 243          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MinDate");
 244#endif
 245        }
 246
 247        maxDate_ = value;
 248      }
 249    }
 250    #endregion
 251
 252    #region Instance Fields
 253    long minSize_;
 254    long maxSize_ = long.MaxValue;
 255    DateTime minDate_ = DateTime.MinValue;
 256    DateTime maxDate_ = DateTime.MaxValue;
 257    #endregion
 258  }
 259
 260  /// <summary>
 261  /// NameAndSizeFilter filters based on name and file size.
 262  /// </summary>
 263  /// <remarks>A sample showing how filters might be extended.</remarks>
 264  [Obsolete("Use ExtendedPathFilter instead")]
 265  public class NameAndSizeFilter : PathFilter
 266  {
 267
 268    /// <summary>
 269    /// Initialise a new instance of NameAndSizeFilter.
 270    /// </summary>
 271    /// <param name="filter">The filter to apply.</param>
 272    /// <param name="minSize">The minimum file size to include.</param>
 273    /// <param name="maxSize">The maximum file size to include.</param>
 274    public NameAndSizeFilter(string filter, long minSize, long maxSize)
 275      : base(filter)
 276    {
 277      MinSize = minSize;
 278      MaxSize = maxSize;
 279    }
 280
 281    /// <summary>
 282    /// Test a filename to see if it matches the filter.
 283    /// </summary>
 284    /// <param name="name">The filename to test.</param>
 285    /// <returns>True if the filter matches, false otherwise.</returns>
 286    public override bool IsMatch(string name)
 287    {
 288      bool result = base.IsMatch(name);
 289
 290      if ( result ) {
 291        var fileInfo = new FileInfo(name);
 292        long length = fileInfo.Length;
 293        result =
 294          (MinSize <= length) &&
 295          (MaxSize >= length);
 296      }
 297      return result;
 298    }
 299
 300    /// <summary>
 301    /// Get/set the minimum size for a file that will match this filter.
 302    /// </summary>
 303    public long MinSize
 304    {
 305      get { return minSize_; }
 306      set {
 307        if ( (value < 0) || (maxSize_ < value) ) {
 308          throw new ArgumentOutOfRangeException(nameof(value));
 309        }
 310
 311        minSize_ = value;
 312      }
 313    }
 314
 315    /// <summary>
 316    /// Get/set the maximum size for a file that will match this filter.
 317    /// </summary>
 318    public long MaxSize
 319    {
 320      get { return maxSize_; }
 321      set
 322      {
 323        if ( (value < 0) || (minSize_ > value) ) {
 324          throw new ArgumentOutOfRangeException(nameof(value));
 325        }
 326
 327        maxSize_ = value;
 328      }
 329    }
 330
 331    #region Instance Fields
 332    long minSize_;
 333    long maxSize_ = long.MaxValue;
 334    #endregion
 335  }
 336}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_PendingBuffer.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_PendingBuffer.htm new file mode 100644 index 000000000..4c6e89bcc --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_PendingBuffer.htm @@ -0,0 +1,348 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\PendingBuffer.cs
Covered lines:40
Uncovered lines:18
Coverable lines:58
Total lines:295
Line coverage:68.9%
Branch coverage:90%
+

Metrics

+ + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
.ctor(...)1100100
Reset()1100100
WriteByte(...)100
WriteShort(...)1100100
WriteInt(...)100
WriteBlock(...)1100100
AlignToByte()3100100
WriteBits(...)2100100
WriteShortMSB(...)1100100
Flush(...)376.9280
ToByteArray()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\PendingBuffer.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// PendingBuffer.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41namespace ICSharpCode.SharpZipLib.Zip.Compression
 42{
 43
 44  /// <summary>
 45  /// This class is general purpose class for writing data to a buffer.
 46  ///
 47  /// It allows you to write bits as well as bytes
 48  /// Based on DeflaterPending.java
 49  ///
 50  /// author of the original java version : Jochen Hoenicke
 51  /// </summary>
 52  public class PendingBuffer
 53  {
 54    readonly
 55    #region Instance Fields
 56    /// <summary>
 57    /// Internal work buffer
 58    /// </summary>
 59    byte[] buffer_;
 60
 61    int    start;
 62    int    end;
 63
 64    uint   bits;
 65    int    bitCount;
 66    #endregion
 67
 68    #region Constructors
 69    /// <summary>
 70    /// construct instance using default buffer size of 4096
 71    /// </summary>
 072    public PendingBuffer() : this( 4096 )
 73    {
 074    }
 75
 76    /// <summary>
 77    /// construct instance using specified buffer size
 78    /// </summary>
 79    /// <param name="bufferSize">
 80    /// size to use for internal buffer
 81    /// </param>
 27982    public PendingBuffer(int bufferSize)
 83    {
 27984      buffer_ = new byte[bufferSize];
 27985    }
 86
 87    #endregion
 88
 89    /// <summary>
 90    /// Clear internal state/buffers
 91    /// </summary>
 92    public void Reset()
 93    {
 40194      start = end = bitCount = 0;
 40195    }
 96
 97    /// <summary>
 98    /// Write a byte to buffer
 99    /// </summary>
 100    /// <param name="value">
 101    /// The value to write
 102    /// </param>
 103    public void WriteByte(int value)
 104    {
 105#if DebugDeflation
 106      if (DeflaterConstants.DEBUGGING && (start != 0) )
 107      {
 108        throw new SharpZipBaseException("Debug check: start != 0");
 109      }
 110#endif
 0111      buffer_[end++] = unchecked((byte) value);
 0112    }
 113
 114    /// <summary>
 115    /// Write a short value to buffer LSB first
 116    /// </summary>
 117    /// <param name="value">
 118    /// The value to write.
 119    /// </param>
 120    public void WriteShort(int value)
 121    {
 122#if DebugDeflation
 123      if (DeflaterConstants.DEBUGGING && (start != 0) )
 124      {
 125        throw new SharpZipBaseException("Debug check: start != 0");
 126      }
 127#endif
 604128      buffer_[end++] = unchecked((byte) value);
 604129      buffer_[end++] = unchecked((byte) (value >> 8));
 604130    }
 131
 132    /// <summary>
 133    /// write an integer LSB first
 134    /// </summary>
 135    /// <param name="value">The value to write.</param>
 136    public void WriteInt(int value)
 137    {
 138#if DebugDeflation
 139      if (DeflaterConstants.DEBUGGING && (start != 0) )
 140      {
 141        throw new SharpZipBaseException("Debug check: start != 0");
 142      }
 143#endif
 0144      buffer_[end++] = unchecked((byte) value);
 0145      buffer_[end++] = unchecked((byte) (value >> 8));
 0146      buffer_[end++] = unchecked((byte) (value >> 16));
 0147      buffer_[end++] = unchecked((byte) (value >> 24));
 0148    }
 149
 150    /// <summary>
 151    /// Write a block of data to buffer
 152    /// </summary>
 153    /// <param name="block">data to write</param>
 154    /// <param name="offset">offset of first byte to write</param>
 155    /// <param name="length">number of bytes to write</param>
 156    public void WriteBlock(byte[] block, int offset, int length)
 157    {
 158#if DebugDeflation
 159      if (DeflaterConstants.DEBUGGING && (start != 0) )
 160      {
 161        throw new SharpZipBaseException("Debug check: start != 0");
 162      }
 163#endif
 302164      System.Array.Copy(block, offset, buffer_, end, length);
 302165      end += length;
 302166    }
 167
 168    /// <summary>
 169    /// The number of bits written to the buffer
 170    /// </summary>
 171    public int BitCount {
 172      get {
 0173        return bitCount;
 174      }
 175    }
 176
 177    /// <summary>
 178    /// Align internal buffer on a byte boundary
 179    /// </summary>
 180    public void AlignToByte()
 181    {
 182#if DebugDeflation
 183      if (DeflaterConstants.DEBUGGING && (start != 0) )
 184      {
 185        throw new SharpZipBaseException("Debug check: start != 0");
 186      }
 187#endif
 611188       if (bitCount > 0)
 189      {
 541190        buffer_[end++] = unchecked((byte) bits);
 541191         if (bitCount > 8) {
 173192          buffer_[end++] = unchecked((byte) (bits >> 8));
 193        }
 194      }
 611195      bits = 0;
 611196      bitCount = 0;
 611197    }
 198
 199    /// <summary>
 200    /// Write bits to internal buffer
 201    /// </summary>
 202    /// <param name="b">source of bits</param>
 203    /// <param name="count">number of bits to write</param>
 204    public void WriteBits(int b, int count)
 205    {
 206#if DebugDeflation
 207      if (DeflaterConstants.DEBUGGING && (start != 0) )
 208      {
 209        throw new SharpZipBaseException("Debug check: start != 0");
 210      }
 211
 212      //      if (DeflaterConstants.DEBUGGING) {
 213      //        //Console.WriteLine("writeBits("+b+","+count+")");
 214      //      }
 215#endif
 8967216      bits |= (uint)(b << bitCount);
 8967217      bitCount += count;
 8967218       if (bitCount >= 16) {
 4183219        buffer_[end++] = unchecked((byte) bits);
 4183220        buffer_[end++] = unchecked((byte) (bits >> 8));
 4183221        bits >>= 16;
 4183222        bitCount -= 16;
 223      }
 8967224    }
 225
 226    /// <summary>
 227    /// Write a short value to internal buffer most significant byte first
 228    /// </summary>
 229    /// <param name="s">value to write</param>
 230    public void WriteShortMSB(int s)
 231    {
 232#if DebugDeflation
 233      if (DeflaterConstants.DEBUGGING && (start != 0) )
 234      {
 235        throw new SharpZipBaseException("Debug check: start != 0");
 236      }
 237#endif
 42238      buffer_[end++] = unchecked((byte) (s >> 8));
 42239      buffer_[end++] = unchecked((byte) s);
 42240    }
 241
 242    /// <summary>
 243    /// Indicates if buffer has been flushed
 244    /// </summary>
 245    public bool IsFlushed {
 246      get {
 10201247        return end == 0;
 248      }
 249    }
 250
 251    /// <summary>
 252    /// Flushes the pending buffer into the given output array.  If the
 253    /// output array is to small, only a partial flush is done.
 254    /// </summary>
 255    /// <param name="output">The output array.</param>
 256    /// <param name="offset">The offset into output array.</param>
 257    /// <param name="length">The maximum number of bytes to store.</param>
 258    /// <returns>The number of bytes flushed.</returns>
 259    public int Flush(byte[] output, int offset, int length)
 260    {
 13290261       if (bitCount >= 8) {
 0262        buffer_[end++] = unchecked((byte) bits);
 0263        bits >>= 8;
 0264        bitCount -= 8;
 265      }
 266
 13290267       if (length > end - start) {
 5201268        length = end - start;
 5201269        System.Array.Copy(buffer_, start, output, offset, length);
 5201270        start = 0;
 5201271        end = 0;
 5201272      } else {
 8089273        System.Array.Copy(buffer_, start, output, offset, length);
 8089274        start += length;
 275      }
 13290276      return length;
 277    }
 278
 279    /// <summary>
 280    /// Convert internal buffer to byte array.
 281    /// Buffer is empty on completion
 282    /// </summary>
 283    /// <returns>
 284    /// The internal buffer contents converted to a byte array.
 285    /// </returns>
 286    public byte[] ToByteArray()
 287    {
 0288      byte[] result = new byte[end - start];
 0289      System.Array.Copy(buffer_, start, result, 0, result.Length);
 0290      start = 0;
 0291      end = 0;
 0292      return result;
 293    }
 294  }
 295}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassic.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassic.htm new file mode 100644 index 000000000..41a5d7d05 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassic.htm @@ -0,0 +1,540 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.PkzipClassic - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.PkzipClassic
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs
Covered lines:26
Uncovered lines:2
Coverable lines:28
Total lines:498
Line coverage:92.8%
Branch coverage:66.6%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
GenerateKeys(...)492.3171.43
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// PkzipClassic encryption
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36//
 37
 38
 39#if !NETCF_1_0
 40
 41using System;
 42using System.Security.Cryptography;
 43using ICSharpCode.SharpZipLib.Checksums;
 44
 45namespace ICSharpCode.SharpZipLib.Encryption
 46{
 47  /// <summary>
 48  /// PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives.
 49  /// While it has been superceded by more recent and more powerful algorithms, its still in use and
 50  /// is viable for preventing casual snooping
 51  /// </summary>
 52  public abstract class PkzipClassic : SymmetricAlgorithm
 53  {
 54    /// <summary>
 55    /// Generates new encryption keys based on given seed
 56    /// </summary>
 57    /// <param name="seed">The seed value to initialise keys with.</param>
 58    /// <returns>A new key value.</returns>
 59    static public byte[] GenerateKeys(byte[] seed)
 60    {
 7461       if ( seed == null ) {
 062        throw new ArgumentNullException(nameof(seed));
 63      }
 64
 7465       if ( seed.Length == 0 ) {
 066        throw new ArgumentException("Length is zero", nameof(seed));
 67      }
 68
 7469      uint[] newKeys = {
 7470        0x12345678,
 7471        0x23456789,
 7472        0x34567890
 7473       };
 74
 111475       for (int i = 0; i < seed.Length; ++i) {
 48376        newKeys[0] = Crc32.ComputeCrc32(newKeys[0], seed[i]);
 48377        newKeys[1] = newKeys[1] + (byte)newKeys[0];
 48378        newKeys[1] = newKeys[1] * 134775813 + 1;
 48379        newKeys[2] = Crc32.ComputeCrc32(newKeys[2], (byte)(newKeys[1] >> 24));
 80      }
 81
 7482      byte[] result = new byte[12];
 7483      result[0] = (byte)(newKeys[0] & 0xff);
 7484      result[1] = (byte)((newKeys[0] >> 8) & 0xff);
 7485      result[2] = (byte)((newKeys[0] >> 16) & 0xff);
 7486      result[3] = (byte)((newKeys[0] >> 24) & 0xff);
 7487      result[4] = (byte)(newKeys[1] & 0xff);
 7488      result[5] = (byte)((newKeys[1] >> 8) & 0xff);
 7489      result[6] = (byte)((newKeys[1] >> 16) & 0xff);
 7490      result[7] = (byte)((newKeys[1] >> 24) & 0xff);
 7491      result[8] = (byte)(newKeys[2] & 0xff);
 7492      result[9] = (byte)((newKeys[2] >> 8) & 0xff);
 7493      result[10] = (byte)((newKeys[2] >> 16) & 0xff);
 7494      result[11] = (byte)((newKeys[2] >> 24) & 0xff);
 7495      return result;
 96    }
 97  }
 98
 99  /// <summary>
 100  /// PkzipClassicCryptoBase provides the low level facilities for encryption
 101  /// and decryption using the PkzipClassic algorithm.
 102  /// </summary>
 103  class PkzipClassicCryptoBase
 104  {
 105    /// <summary>
 106    /// Transform a single byte
 107    /// </summary>
 108    /// <returns>
 109    /// The transformed value
 110    /// </returns>
 111    protected byte TransformByte()
 112    {
 113      uint temp = ((keys[2] & 0xFFFF) | 2);
 114      return (byte)((temp * (temp ^ 1)) >> 8);
 115    }
 116
 117    /// <summary>
 118    /// Set the key schedule for encryption/decryption.
 119    /// </summary>
 120    /// <param name="keyData">The data use to set the keys from.</param>
 121    protected void SetKeys(byte[] keyData)
 122    {
 123      if ( keyData == null ) {
 124        throw new ArgumentNullException(nameof(keyData));
 125      }
 126
 127      if ( keyData.Length != 12 ) {
 128        throw new InvalidOperationException("Key length is not valid");
 129      }
 130
 131      keys = new uint[3];
 132      keys[0] = (uint)((keyData[3] << 24) | (keyData[2] << 16) | (keyData[1] << 8) | keyData[0]);
 133      keys[1] = (uint)((keyData[7] << 24) | (keyData[6] << 16) | (keyData[5] << 8) | keyData[4]);
 134      keys[2] = (uint)((keyData[11] << 24) | (keyData[10] << 16) | (keyData[9] << 8) | keyData[8]);
 135    }
 136
 137    /// <summary>
 138    /// Update encryption keys
 139    /// </summary>
 140    protected void UpdateKeys(byte ch)
 141    {
 142      keys[0] = Crc32.ComputeCrc32(keys[0], ch);
 143      keys[1] = keys[1] + (byte)keys[0];
 144      keys[1] = keys[1] * 134775813 + 1;
 145      keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24));
 146    }
 147
 148    /// <summary>
 149    /// Reset the internal state.
 150    /// </summary>
 151    protected void Reset()
 152    {
 153      keys[0] = 0;
 154      keys[1] = 0;
 155      keys[2] = 0;
 156    }
 157
 158    #region Instance Fields
 159    uint[] keys;
 160    #endregion
 161  }
 162
 163  /// <summary>
 164  /// PkzipClassic CryptoTransform for encryption.
 165  /// </summary>
 166  class PkzipClassicEncryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 167  {
 168    /// <summary>
 169    /// Initialise a new instance of <see cref="PkzipClassicEncryptCryptoTransform"></see>
 170    /// </summary>
 171    /// <param name="keyBlock">The key block to use.</param>
 172    internal PkzipClassicEncryptCryptoTransform(byte[] keyBlock)
 173    {
 174      SetKeys(keyBlock);
 175    }
 176
 177    #region ICryptoTransform Members
 178
 179    /// <summary>
 180    /// Transforms the specified region of the specified byte array.
 181    /// </summary>
 182    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 183    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 184    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 185    /// <returns>The computed transform.</returns>
 186    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 187    {
 188      byte[] result = new byte[inputCount];
 189      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 190      return result;
 191    }
 192
 193    /// <summary>
 194    /// Transforms the specified region of the input byte array and copies
 195    /// the resulting transform to the specified region of the output byte array.
 196    /// </summary>
 197    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 198    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 199    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 200    /// <param name="outputBuffer">The output to which to write the transform.</param>
 201    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 202    /// <returns>The number of bytes written.</returns>
 203    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 204    {
 205      for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 206        byte oldbyte = inputBuffer[i];
 207        outputBuffer[outputOffset++] = (byte)(inputBuffer[i] ^ TransformByte());
 208        UpdateKeys(oldbyte);
 209      }
 210      return inputCount;
 211    }
 212
 213    /// <summary>
 214    /// Gets a value indicating whether the current transform can be reused.
 215    /// </summary>
 216    public bool CanReuseTransform
 217    {
 218      get {
 219        return true;
 220      }
 221    }
 222
 223    /// <summary>
 224    /// Gets the size of the input data blocks in bytes.
 225    /// </summary>
 226    public int InputBlockSize
 227    {
 228      get {
 229        return 1;
 230      }
 231    }
 232
 233    /// <summary>
 234    /// Gets the size of the output data blocks in bytes.
 235    /// </summary>
 236    public int OutputBlockSize
 237    {
 238      get {
 239        return 1;
 240      }
 241    }
 242
 243    /// <summary>
 244    /// Gets a value indicating whether multiple blocks can be transformed.
 245    /// </summary>
 246    public bool CanTransformMultipleBlocks
 247    {
 248      get {
 249        return true;
 250      }
 251    }
 252
 253    #endregion
 254
 255    #region IDisposable Members
 256
 257    /// <summary>
 258    /// Cleanup internal state.
 259    /// </summary>
 260    public void Dispose()
 261    {
 262      Reset();
 263    }
 264
 265    #endregion
 266  }
 267
 268
 269  /// <summary>
 270  /// PkzipClassic CryptoTransform for decryption.
 271  /// </summary>
 272  class PkzipClassicDecryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 273  {
 274    /// <summary>
 275    /// Initialise a new instance of <see cref="PkzipClassicDecryptCryptoTransform"></see>.
 276    /// </summary>
 277    /// <param name="keyBlock">The key block to decrypt with.</param>
 278    internal PkzipClassicDecryptCryptoTransform(byte[] keyBlock)
 279    {
 280      SetKeys(keyBlock);
 281    }
 282
 283    #region ICryptoTransform Members
 284
 285    /// <summary>
 286    /// Transforms the specified region of the specified byte array.
 287    /// </summary>
 288    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 289    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 290    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 291    /// <returns>The computed transform.</returns>
 292    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 293    {
 294      byte[] result = new byte[inputCount];
 295      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 296      return result;
 297    }
 298
 299    /// <summary>
 300    /// Transforms the specified region of the input byte array and copies
 301    /// the resulting transform to the specified region of the output byte array.
 302    /// </summary>
 303    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 304    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 305    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 306    /// <param name="outputBuffer">The output to which to write the transform.</param>
 307    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 308    /// <returns>The number of bytes written.</returns>
 309    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 310    {
 311      for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 312        var newByte = (byte)(inputBuffer[i] ^ TransformByte());
 313        outputBuffer[outputOffset++] = newByte;
 314        UpdateKeys(newByte);
 315      }
 316      return inputCount;
 317    }
 318
 319    /// <summary>
 320    /// Gets a value indicating whether the current transform can be reused.
 321    /// </summary>
 322    public bool CanReuseTransform
 323    {
 324      get {
 325        return true;
 326      }
 327    }
 328
 329    /// <summary>
 330    /// Gets the size of the input data blocks in bytes.
 331    /// </summary>
 332    public int InputBlockSize
 333    {
 334      get {
 335        return 1;
 336      }
 337    }
 338
 339    /// <summary>
 340    /// Gets the size of the output data blocks in bytes.
 341    /// </summary>
 342    public int OutputBlockSize
 343    {
 344      get {
 345        return 1;
 346      }
 347    }
 348
 349    /// <summary>
 350    /// Gets a value indicating whether multiple blocks can be transformed.
 351    /// </summary>
 352    public bool CanTransformMultipleBlocks
 353    {
 354      get {
 355        return true;
 356      }
 357    }
 358
 359    #endregion
 360
 361    #region IDisposable Members
 362
 363    /// <summary>
 364    /// Cleanup internal state.
 365    /// </summary>
 366    public void Dispose()
 367    {
 368      Reset();
 369    }
 370
 371    #endregion
 372  }
 373
 374  /// <summary>
 375  /// Defines a wrapper object to access the Pkzip algorithm.
 376  /// This class cannot be inherited.
 377  /// </summary>
 378  public sealed class PkzipClassicManaged : PkzipClassic
 379  {
 380    /// <summary>
 381    /// Get / set the applicable block size in bits.
 382    /// </summary>
 383    /// <remarks>The only valid block size is 8.</remarks>
 384    public override int BlockSize
 385    {
 386      get {
 387        return 8;
 388      }
 389
 390      set {
 391        if (value != 8) {
 392          throw new CryptographicException("Block size is invalid");
 393        }
 394      }
 395    }
 396
 397    /// <summary>
 398    /// Get an array of legal <see cref="KeySizes">key sizes.</see>
 399    /// </summary>
 400    public override KeySizes[] LegalKeySizes
 401    {
 402      get {
 403        KeySizes[] keySizes = new KeySizes[1];
 404        keySizes[0] = new KeySizes(12 * 8, 12 * 8, 0);
 405        return keySizes;
 406      }
 407    }
 408
 409    /// <summary>
 410    /// Generate an initial vector.
 411    /// </summary>
 412    public override void GenerateIV()
 413    {
 414      // Do nothing.
 415    }
 416
 417    /// <summary>
 418    /// Get an array of legal <see cref="KeySizes">block sizes</see>.
 419    /// </summary>
 420    public override KeySizes[] LegalBlockSizes
 421    {
 422      get {
 423        KeySizes[] keySizes = new KeySizes[1];
 424        keySizes[0] = new KeySizes(1 * 8, 1 * 8, 0);
 425        return keySizes;
 426      }
 427    }
 428
 429    /// <summary>
 430    /// Get / set the key value applicable.
 431    /// </summary>
 432    public override byte[] Key
 433    {
 434      get {
 435        if ( key_ == null ) {
 436          GenerateKey();
 437        }
 438
 439        return (byte[]) key_.Clone();
 440      }
 441
 442      set {
 443        if ( value == null ) {
 444          throw new ArgumentNullException(nameof(value));
 445        }
 446
 447        if ( value.Length != 12 ) {
 448          throw new CryptographicException("Key size is illegal");
 449        }
 450
 451        key_ = (byte[]) value.Clone();
 452      }
 453    }
 454
 455    /// <summary>
 456    /// Generate a new random key.
 457    /// </summary>
 458    public override void GenerateKey()
 459    {
 460      key_ = new byte[12];
 461      var rnd = new Random();
 462      rnd.NextBytes(key_);
 463    }
 464
 465    /// <summary>
 466    /// Create an encryptor.
 467    /// </summary>
 468    /// <param name="rgbKey">The key to use for this encryptor.</param>
 469    /// <param name="rgbIV">Initialisation vector for the new encryptor.</param>
 470    /// <returns>Returns a new PkzipClassic encryptor</returns>
 471    public override ICryptoTransform CreateEncryptor(
 472      byte[] rgbKey,
 473      byte[] rgbIV)
 474    {
 475      key_ = rgbKey;
 476      return new PkzipClassicEncryptCryptoTransform(Key);
 477    }
 478
 479    /// <summary>
 480    /// Create a decryptor.
 481    /// </summary>
 482    /// <param name="rgbKey">Keys to use for this new decryptor.</param>
 483    /// <param name="rgbIV">Initialisation vector for the new decryptor.</param>
 484    /// <returns>Returns a new decryptor.</returns>
 485    public override ICryptoTransform CreateDecryptor(
 486      byte[] rgbKey,
 487      byte[] rgbIV)
 488    {
 489      key_ = rgbKey;
 490      return new PkzipClassicDecryptCryptoTransform(Key);
 491    }
 492
 493    #region Instance Fields
 494    byte[] key_;
 495    #endregion
 496  }
 497}
 498#endif
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicCryptoBase.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicCryptoBase.htm new file mode 100644 index 000000000..f67890fc9 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicCryptoBase.htm @@ -0,0 +1,543 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs
Covered lines:18
Uncovered lines:2
Coverable lines:20
Total lines:498
Line coverage:90%
Branch coverage:50%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
TransformByte()1100100
SetKeys(...)377.7860
UpdateKeys(...)1100100
Reset()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// PkzipClassic encryption
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36//
 37
 38
 39#if !NETCF_1_0
 40
 41using System;
 42using System.Security.Cryptography;
 43using ICSharpCode.SharpZipLib.Checksums;
 44
 45namespace ICSharpCode.SharpZipLib.Encryption
 46{
 47  /// <summary>
 48  /// PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives.
 49  /// While it has been superceded by more recent and more powerful algorithms, its still in use and
 50  /// is viable for preventing casual snooping
 51  /// </summary>
 52  public abstract class PkzipClassic : SymmetricAlgorithm
 53  {
 54    /// <summary>
 55    /// Generates new encryption keys based on given seed
 56    /// </summary>
 57    /// <param name="seed">The seed value to initialise keys with.</param>
 58    /// <returns>A new key value.</returns>
 59    static public byte[] GenerateKeys(byte[] seed)
 60    {
 61      if ( seed == null ) {
 62        throw new ArgumentNullException(nameof(seed));
 63      }
 64
 65      if ( seed.Length == 0 ) {
 66        throw new ArgumentException("Length is zero", nameof(seed));
 67      }
 68
 69      uint[] newKeys = {
 70        0x12345678,
 71        0x23456789,
 72        0x34567890
 73       };
 74
 75      for (int i = 0; i < seed.Length; ++i) {
 76        newKeys[0] = Crc32.ComputeCrc32(newKeys[0], seed[i]);
 77        newKeys[1] = newKeys[1] + (byte)newKeys[0];
 78        newKeys[1] = newKeys[1] * 134775813 + 1;
 79        newKeys[2] = Crc32.ComputeCrc32(newKeys[2], (byte)(newKeys[1] >> 24));
 80      }
 81
 82      byte[] result = new byte[12];
 83      result[0] = (byte)(newKeys[0] & 0xff);
 84      result[1] = (byte)((newKeys[0] >> 8) & 0xff);
 85      result[2] = (byte)((newKeys[0] >> 16) & 0xff);
 86      result[3] = (byte)((newKeys[0] >> 24) & 0xff);
 87      result[4] = (byte)(newKeys[1] & 0xff);
 88      result[5] = (byte)((newKeys[1] >> 8) & 0xff);
 89      result[6] = (byte)((newKeys[1] >> 16) & 0xff);
 90      result[7] = (byte)((newKeys[1] >> 24) & 0xff);
 91      result[8] = (byte)(newKeys[2] & 0xff);
 92      result[9] = (byte)((newKeys[2] >> 8) & 0xff);
 93      result[10] = (byte)((newKeys[2] >> 16) & 0xff);
 94      result[11] = (byte)((newKeys[2] >> 24) & 0xff);
 95      return result;
 96    }
 97  }
 98
 99  /// <summary>
 100  /// PkzipClassicCryptoBase provides the low level facilities for encryption
 101  /// and decryption using the PkzipClassic algorithm.
 102  /// </summary>
 103  class PkzipClassicCryptoBase
 104  {
 105    /// <summary>
 106    /// Transform a single byte
 107    /// </summary>
 108    /// <returns>
 109    /// The transformed value
 110    /// </returns>
 111    protected byte TransformByte()
 112    {
 2260344113      uint temp = ((keys[2] & 0xFFFF) | 2);
 2260344114      return (byte)((temp * (temp ^ 1)) >> 8);
 115    }
 116
 117    /// <summary>
 118    /// Set the key schedule for encryption/decryption.
 119    /// </summary>
 120    /// <param name="keyData">The data use to set the keys from.</param>
 121    protected void SetKeys(byte[] keyData)
 122    {
 78123       if ( keyData == null ) {
 0124        throw new ArgumentNullException(nameof(keyData));
 125      }
 126
 78127       if ( keyData.Length != 12 ) {
 0128        throw new InvalidOperationException("Key length is not valid");
 129      }
 130
 78131      keys = new uint[3];
 78132      keys[0] = (uint)((keyData[3] << 24) | (keyData[2] << 16) | (keyData[1] << 8) | keyData[0]);
 78133      keys[1] = (uint)((keyData[7] << 24) | (keyData[6] << 16) | (keyData[5] << 8) | keyData[4]);
 78134      keys[2] = (uint)((keyData[11] << 24) | (keyData[10] << 16) | (keyData[9] << 8) | keyData[8]);
 78135    }
 136
 137    /// <summary>
 138    /// Update encryption keys
 139    /// </summary>
 140    protected void UpdateKeys(byte ch)
 141    {
 2260344142      keys[0] = Crc32.ComputeCrc32(keys[0], ch);
 2260344143      keys[1] = keys[1] + (byte)keys[0];
 2260344144      keys[1] = keys[1] * 134775813 + 1;
 2260344145      keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24));
 2260344146    }
 147
 148    /// <summary>
 149    /// Reset the internal state.
 150    /// </summary>
 151    protected void Reset()
 152    {
 35153      keys[0] = 0;
 35154      keys[1] = 0;
 35155      keys[2] = 0;
 35156    }
 157
 158    #region Instance Fields
 159    uint[] keys;
 160    #endregion
 161  }
 162
 163  /// <summary>
 164  /// PkzipClassic CryptoTransform for encryption.
 165  /// </summary>
 166  class PkzipClassicEncryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 167  {
 168    /// <summary>
 169    /// Initialise a new instance of <see cref="PkzipClassicEncryptCryptoTransform"></see>
 170    /// </summary>
 171    /// <param name="keyBlock">The key block to use.</param>
 172    internal PkzipClassicEncryptCryptoTransform(byte[] keyBlock)
 173    {
 174      SetKeys(keyBlock);
 175    }
 176
 177    #region ICryptoTransform Members
 178
 179    /// <summary>
 180    /// Transforms the specified region of the specified byte array.
 181    /// </summary>
 182    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 183    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 184    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 185    /// <returns>The computed transform.</returns>
 186    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 187    {
 188      byte[] result = new byte[inputCount];
 189      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 190      return result;
 191    }
 192
 193    /// <summary>
 194    /// Transforms the specified region of the input byte array and copies
 195    /// the resulting transform to the specified region of the output byte array.
 196    /// </summary>
 197    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 198    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 199    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 200    /// <param name="outputBuffer">The output to which to write the transform.</param>
 201    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 202    /// <returns>The number of bytes written.</returns>
 203    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 204    {
 205      for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 206        byte oldbyte = inputBuffer[i];
 207        outputBuffer[outputOffset++] = (byte)(inputBuffer[i] ^ TransformByte());
 208        UpdateKeys(oldbyte);
 209      }
 210      return inputCount;
 211    }
 212
 213    /// <summary>
 214    /// Gets a value indicating whether the current transform can be reused.
 215    /// </summary>
 216    public bool CanReuseTransform
 217    {
 218      get {
 219        return true;
 220      }
 221    }
 222
 223    /// <summary>
 224    /// Gets the size of the input data blocks in bytes.
 225    /// </summary>
 226    public int InputBlockSize
 227    {
 228      get {
 229        return 1;
 230      }
 231    }
 232
 233    /// <summary>
 234    /// Gets the size of the output data blocks in bytes.
 235    /// </summary>
 236    public int OutputBlockSize
 237    {
 238      get {
 239        return 1;
 240      }
 241    }
 242
 243    /// <summary>
 244    /// Gets a value indicating whether multiple blocks can be transformed.
 245    /// </summary>
 246    public bool CanTransformMultipleBlocks
 247    {
 248      get {
 249        return true;
 250      }
 251    }
 252
 253    #endregion
 254
 255    #region IDisposable Members
 256
 257    /// <summary>
 258    /// Cleanup internal state.
 259    /// </summary>
 260    public void Dispose()
 261    {
 262      Reset();
 263    }
 264
 265    #endregion
 266  }
 267
 268
 269  /// <summary>
 270  /// PkzipClassic CryptoTransform for decryption.
 271  /// </summary>
 272  class PkzipClassicDecryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 273  {
 274    /// <summary>
 275    /// Initialise a new instance of <see cref="PkzipClassicDecryptCryptoTransform"></see>.
 276    /// </summary>
 277    /// <param name="keyBlock">The key block to decrypt with.</param>
 278    internal PkzipClassicDecryptCryptoTransform(byte[] keyBlock)
 279    {
 280      SetKeys(keyBlock);
 281    }
 282
 283    #region ICryptoTransform Members
 284
 285    /// <summary>
 286    /// Transforms the specified region of the specified byte array.
 287    /// </summary>
 288    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 289    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 290    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 291    /// <returns>The computed transform.</returns>
 292    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 293    {
 294      byte[] result = new byte[inputCount];
 295      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 296      return result;
 297    }
 298
 299    /// <summary>
 300    /// Transforms the specified region of the input byte array and copies
 301    /// the resulting transform to the specified region of the output byte array.
 302    /// </summary>
 303    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 304    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 305    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 306    /// <param name="outputBuffer">The output to which to write the transform.</param>
 307    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 308    /// <returns>The number of bytes written.</returns>
 309    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 310    {
 311      for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 312        var newByte = (byte)(inputBuffer[i] ^ TransformByte());
 313        outputBuffer[outputOffset++] = newByte;
 314        UpdateKeys(newByte);
 315      }
 316      return inputCount;
 317    }
 318
 319    /// <summary>
 320    /// Gets a value indicating whether the current transform can be reused.
 321    /// </summary>
 322    public bool CanReuseTransform
 323    {
 324      get {
 325        return true;
 326      }
 327    }
 328
 329    /// <summary>
 330    /// Gets the size of the input data blocks in bytes.
 331    /// </summary>
 332    public int InputBlockSize
 333    {
 334      get {
 335        return 1;
 336      }
 337    }
 338
 339    /// <summary>
 340    /// Gets the size of the output data blocks in bytes.
 341    /// </summary>
 342    public int OutputBlockSize
 343    {
 344      get {
 345        return 1;
 346      }
 347    }
 348
 349    /// <summary>
 350    /// Gets a value indicating whether multiple blocks can be transformed.
 351    /// </summary>
 352    public bool CanTransformMultipleBlocks
 353    {
 354      get {
 355        return true;
 356      }
 357    }
 358
 359    #endregion
 360
 361    #region IDisposable Members
 362
 363    /// <summary>
 364    /// Cleanup internal state.
 365    /// </summary>
 366    public void Dispose()
 367    {
 368      Reset();
 369    }
 370
 371    #endregion
 372  }
 373
 374  /// <summary>
 375  /// Defines a wrapper object to access the Pkzip algorithm.
 376  /// This class cannot be inherited.
 377  /// </summary>
 378  public sealed class PkzipClassicManaged : PkzipClassic
 379  {
 380    /// <summary>
 381    /// Get / set the applicable block size in bits.
 382    /// </summary>
 383    /// <remarks>The only valid block size is 8.</remarks>
 384    public override int BlockSize
 385    {
 386      get {
 387        return 8;
 388      }
 389
 390      set {
 391        if (value != 8) {
 392          throw new CryptographicException("Block size is invalid");
 393        }
 394      }
 395    }
 396
 397    /// <summary>
 398    /// Get an array of legal <see cref="KeySizes">key sizes.</see>
 399    /// </summary>
 400    public override KeySizes[] LegalKeySizes
 401    {
 402      get {
 403        KeySizes[] keySizes = new KeySizes[1];
 404        keySizes[0] = new KeySizes(12 * 8, 12 * 8, 0);
 405        return keySizes;
 406      }
 407    }
 408
 409    /// <summary>
 410    /// Generate an initial vector.
 411    /// </summary>
 412    public override void GenerateIV()
 413    {
 414      // Do nothing.
 415    }
 416
 417    /// <summary>
 418    /// Get an array of legal <see cref="KeySizes">block sizes</see>.
 419    /// </summary>
 420    public override KeySizes[] LegalBlockSizes
 421    {
 422      get {
 423        KeySizes[] keySizes = new KeySizes[1];
 424        keySizes[0] = new KeySizes(1 * 8, 1 * 8, 0);
 425        return keySizes;
 426      }
 427    }
 428
 429    /// <summary>
 430    /// Get / set the key value applicable.
 431    /// </summary>
 432    public override byte[] Key
 433    {
 434      get {
 435        if ( key_ == null ) {
 436          GenerateKey();
 437        }
 438
 439        return (byte[]) key_.Clone();
 440      }
 441
 442      set {
 443        if ( value == null ) {
 444          throw new ArgumentNullException(nameof(value));
 445        }
 446
 447        if ( value.Length != 12 ) {
 448          throw new CryptographicException("Key size is illegal");
 449        }
 450
 451        key_ = (byte[]) value.Clone();
 452      }
 453    }
 454
 455    /// <summary>
 456    /// Generate a new random key.
 457    /// </summary>
 458    public override void GenerateKey()
 459    {
 460      key_ = new byte[12];
 461      var rnd = new Random();
 462      rnd.NextBytes(key_);
 463    }
 464
 465    /// <summary>
 466    /// Create an encryptor.
 467    /// </summary>
 468    /// <param name="rgbKey">The key to use for this encryptor.</param>
 469    /// <param name="rgbIV">Initialisation vector for the new encryptor.</param>
 470    /// <returns>Returns a new PkzipClassic encryptor</returns>
 471    public override ICryptoTransform CreateEncryptor(
 472      byte[] rgbKey,
 473      byte[] rgbIV)
 474    {
 475      key_ = rgbKey;
 476      return new PkzipClassicEncryptCryptoTransform(Key);
 477    }
 478
 479    /// <summary>
 480    /// Create a decryptor.
 481    /// </summary>
 482    /// <param name="rgbKey">Keys to use for this new decryptor.</param>
 483    /// <param name="rgbIV">Initialisation vector for the new decryptor.</param>
 484    /// <returns>Returns a new decryptor.</returns>
 485    public override ICryptoTransform CreateDecryptor(
 486      byte[] rgbKey,
 487      byte[] rgbIV)
 488    {
 489      key_ = rgbKey;
 490      return new PkzipClassicDecryptCryptoTransform(Key);
 491    }
 492
 493    #region Instance Fields
 494    byte[] key_;
 495    #endregion
 496  }
 497}
 498#endif
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicDecryptCryptoTransform.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicDecryptCryptoTransform.htm new file mode 100644 index 000000000..98ed7381a --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicDecryptCryptoTransform.htm @@ -0,0 +1,543 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs
Covered lines:14
Uncovered lines:3
Coverable lines:17
Total lines:498
Line coverage:82.3%
Branch coverage:100%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
TransformFinalBlock(...)1100100
TransformBlock(...)2100100
Dispose()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// PkzipClassic encryption
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36//
 37
 38
 39#if !NETCF_1_0
 40
 41using System;
 42using System.Security.Cryptography;
 43using ICSharpCode.SharpZipLib.Checksums;
 44
 45namespace ICSharpCode.SharpZipLib.Encryption
 46{
 47  /// <summary>
 48  /// PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives.
 49  /// While it has been superceded by more recent and more powerful algorithms, its still in use and
 50  /// is viable for preventing casual snooping
 51  /// </summary>
 52  public abstract class PkzipClassic : SymmetricAlgorithm
 53  {
 54    /// <summary>
 55    /// Generates new encryption keys based on given seed
 56    /// </summary>
 57    /// <param name="seed">The seed value to initialise keys with.</param>
 58    /// <returns>A new key value.</returns>
 59    static public byte[] GenerateKeys(byte[] seed)
 60    {
 61      if ( seed == null ) {
 62        throw new ArgumentNullException(nameof(seed));
 63      }
 64
 65      if ( seed.Length == 0 ) {
 66        throw new ArgumentException("Length is zero", nameof(seed));
 67      }
 68
 69      uint[] newKeys = {
 70        0x12345678,
 71        0x23456789,
 72        0x34567890
 73       };
 74
 75      for (int i = 0; i < seed.Length; ++i) {
 76        newKeys[0] = Crc32.ComputeCrc32(newKeys[0], seed[i]);
 77        newKeys[1] = newKeys[1] + (byte)newKeys[0];
 78        newKeys[1] = newKeys[1] * 134775813 + 1;
 79        newKeys[2] = Crc32.ComputeCrc32(newKeys[2], (byte)(newKeys[1] >> 24));
 80      }
 81
 82      byte[] result = new byte[12];
 83      result[0] = (byte)(newKeys[0] & 0xff);
 84      result[1] = (byte)((newKeys[0] >> 8) & 0xff);
 85      result[2] = (byte)((newKeys[0] >> 16) & 0xff);
 86      result[3] = (byte)((newKeys[0] >> 24) & 0xff);
 87      result[4] = (byte)(newKeys[1] & 0xff);
 88      result[5] = (byte)((newKeys[1] >> 8) & 0xff);
 89      result[6] = (byte)((newKeys[1] >> 16) & 0xff);
 90      result[7] = (byte)((newKeys[1] >> 24) & 0xff);
 91      result[8] = (byte)(newKeys[2] & 0xff);
 92      result[9] = (byte)((newKeys[2] >> 8) & 0xff);
 93      result[10] = (byte)((newKeys[2] >> 16) & 0xff);
 94      result[11] = (byte)((newKeys[2] >> 24) & 0xff);
 95      return result;
 96    }
 97  }
 98
 99  /// <summary>
 100  /// PkzipClassicCryptoBase provides the low level facilities for encryption
 101  /// and decryption using the PkzipClassic algorithm.
 102  /// </summary>
 103  class PkzipClassicCryptoBase
 104  {
 105    /// <summary>
 106    /// Transform a single byte
 107    /// </summary>
 108    /// <returns>
 109    /// The transformed value
 110    /// </returns>
 111    protected byte TransformByte()
 112    {
 113      uint temp = ((keys[2] & 0xFFFF) | 2);
 114      return (byte)((temp * (temp ^ 1)) >> 8);
 115    }
 116
 117    /// <summary>
 118    /// Set the key schedule for encryption/decryption.
 119    /// </summary>
 120    /// <param name="keyData">The data use to set the keys from.</param>
 121    protected void SetKeys(byte[] keyData)
 122    {
 123      if ( keyData == null ) {
 124        throw new ArgumentNullException(nameof(keyData));
 125      }
 126
 127      if ( keyData.Length != 12 ) {
 128        throw new InvalidOperationException("Key length is not valid");
 129      }
 130
 131      keys = new uint[3];
 132      keys[0] = (uint)((keyData[3] << 24) | (keyData[2] << 16) | (keyData[1] << 8) | keyData[0]);
 133      keys[1] = (uint)((keyData[7] << 24) | (keyData[6] << 16) | (keyData[5] << 8) | keyData[4]);
 134      keys[2] = (uint)((keyData[11] << 24) | (keyData[10] << 16) | (keyData[9] << 8) | keyData[8]);
 135    }
 136
 137    /// <summary>
 138    /// Update encryption keys
 139    /// </summary>
 140    protected void UpdateKeys(byte ch)
 141    {
 142      keys[0] = Crc32.ComputeCrc32(keys[0], ch);
 143      keys[1] = keys[1] + (byte)keys[0];
 144      keys[1] = keys[1] * 134775813 + 1;
 145      keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24));
 146    }
 147
 148    /// <summary>
 149    /// Reset the internal state.
 150    /// </summary>
 151    protected void Reset()
 152    {
 153      keys[0] = 0;
 154      keys[1] = 0;
 155      keys[2] = 0;
 156    }
 157
 158    #region Instance Fields
 159    uint[] keys;
 160    #endregion
 161  }
 162
 163  /// <summary>
 164  /// PkzipClassic CryptoTransform for encryption.
 165  /// </summary>
 166  class PkzipClassicEncryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 167  {
 168    /// <summary>
 169    /// Initialise a new instance of <see cref="PkzipClassicEncryptCryptoTransform"></see>
 170    /// </summary>
 171    /// <param name="keyBlock">The key block to use.</param>
 172    internal PkzipClassicEncryptCryptoTransform(byte[] keyBlock)
 173    {
 174      SetKeys(keyBlock);
 175    }
 176
 177    #region ICryptoTransform Members
 178
 179    /// <summary>
 180    /// Transforms the specified region of the specified byte array.
 181    /// </summary>
 182    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 183    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 184    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 185    /// <returns>The computed transform.</returns>
 186    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 187    {
 188      byte[] result = new byte[inputCount];
 189      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 190      return result;
 191    }
 192
 193    /// <summary>
 194    /// Transforms the specified region of the input byte array and copies
 195    /// the resulting transform to the specified region of the output byte array.
 196    /// </summary>
 197    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 198    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 199    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 200    /// <param name="outputBuffer">The output to which to write the transform.</param>
 201    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 202    /// <returns>The number of bytes written.</returns>
 203    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 204    {
 205      for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 206        byte oldbyte = inputBuffer[i];
 207        outputBuffer[outputOffset++] = (byte)(inputBuffer[i] ^ TransformByte());
 208        UpdateKeys(oldbyte);
 209      }
 210      return inputCount;
 211    }
 212
 213    /// <summary>
 214    /// Gets a value indicating whether the current transform can be reused.
 215    /// </summary>
 216    public bool CanReuseTransform
 217    {
 218      get {
 219        return true;
 220      }
 221    }
 222
 223    /// <summary>
 224    /// Gets the size of the input data blocks in bytes.
 225    /// </summary>
 226    public int InputBlockSize
 227    {
 228      get {
 229        return 1;
 230      }
 231    }
 232
 233    /// <summary>
 234    /// Gets the size of the output data blocks in bytes.
 235    /// </summary>
 236    public int OutputBlockSize
 237    {
 238      get {
 239        return 1;
 240      }
 241    }
 242
 243    /// <summary>
 244    /// Gets a value indicating whether multiple blocks can be transformed.
 245    /// </summary>
 246    public bool CanTransformMultipleBlocks
 247    {
 248      get {
 249        return true;
 250      }
 251    }
 252
 253    #endregion
 254
 255    #region IDisposable Members
 256
 257    /// <summary>
 258    /// Cleanup internal state.
 259    /// </summary>
 260    public void Dispose()
 261    {
 262      Reset();
 263    }
 264
 265    #endregion
 266  }
 267
 268
 269  /// <summary>
 270  /// PkzipClassic CryptoTransform for decryption.
 271  /// </summary>
 272  class PkzipClassicDecryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 273  {
 274    /// <summary>
 275    /// Initialise a new instance of <see cref="PkzipClassicDecryptCryptoTransform"></see>.
 276    /// </summary>
 277    /// <param name="keyBlock">The key block to decrypt with.</param>
 37278    internal PkzipClassicDecryptCryptoTransform(byte[] keyBlock)
 279    {
 37280      SetKeys(keyBlock);
 37281    }
 282
 283    #region ICryptoTransform Members
 284
 285    /// <summary>
 286    /// Transforms the specified region of the specified byte array.
 287    /// </summary>
 288    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 289    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 290    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 291    /// <returns>The computed transform.</returns>
 292    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 293    {
 10294      byte[] result = new byte[inputCount];
 10295      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 10296      return result;
 297    }
 298
 299    /// <summary>
 300    /// Transforms the specified region of the input byte array and copies
 301    /// the resulting transform to the specified region of the output byte array.
 302    /// </summary>
 303    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 304    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 305    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 306    /// <param name="outputBuffer">The output to which to write the transform.</param>
 307    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 308    /// <returns>The number of bytes written.</returns>
 309    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 310    {
 2264888311       for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 1132117312        var newByte = (byte)(inputBuffer[i] ^ TransformByte());
 1132117313        outputBuffer[outputOffset++] = newByte;
 1132117314        UpdateKeys(newByte);
 315      }
 327316      return inputCount;
 317    }
 318
 319    /// <summary>
 320    /// Gets a value indicating whether the current transform can be reused.
 321    /// </summary>
 322    public bool CanReuseTransform
 323    {
 324      get {
 0325        return true;
 326      }
 327    }
 328
 329    /// <summary>
 330    /// Gets the size of the input data blocks in bytes.
 331    /// </summary>
 332    public int InputBlockSize
 333    {
 334      get {
 10335        return 1;
 336      }
 337    }
 338
 339    /// <summary>
 340    /// Gets the size of the output data blocks in bytes.
 341    /// </summary>
 342    public int OutputBlockSize
 343    {
 344      get {
 10345        return 1;
 346      }
 347    }
 348
 349    /// <summary>
 350    /// Gets a value indicating whether multiple blocks can be transformed.
 351    /// </summary>
 352    public bool CanTransformMultipleBlocks
 353    {
 354      get {
 26355        return true;
 356      }
 357    }
 358
 359    #endregion
 360
 361    #region IDisposable Members
 362
 363    /// <summary>
 364    /// Cleanup internal state.
 365    /// </summary>
 366    public void Dispose()
 367    {
 0368      Reset();
 0369    }
 370
 371    #endregion
 372  }
 373
 374  /// <summary>
 375  /// Defines a wrapper object to access the Pkzip algorithm.
 376  /// This class cannot be inherited.
 377  /// </summary>
 378  public sealed class PkzipClassicManaged : PkzipClassic
 379  {
 380    /// <summary>
 381    /// Get / set the applicable block size in bits.
 382    /// </summary>
 383    /// <remarks>The only valid block size is 8.</remarks>
 384    public override int BlockSize
 385    {
 386      get {
 387        return 8;
 388      }
 389
 390      set {
 391        if (value != 8) {
 392          throw new CryptographicException("Block size is invalid");
 393        }
 394      }
 395    }
 396
 397    /// <summary>
 398    /// Get an array of legal <see cref="KeySizes">key sizes.</see>
 399    /// </summary>
 400    public override KeySizes[] LegalKeySizes
 401    {
 402      get {
 403        KeySizes[] keySizes = new KeySizes[1];
 404        keySizes[0] = new KeySizes(12 * 8, 12 * 8, 0);
 405        return keySizes;
 406      }
 407    }
 408
 409    /// <summary>
 410    /// Generate an initial vector.
 411    /// </summary>
 412    public override void GenerateIV()
 413    {
 414      // Do nothing.
 415    }
 416
 417    /// <summary>
 418    /// Get an array of legal <see cref="KeySizes">block sizes</see>.
 419    /// </summary>
 420    public override KeySizes[] LegalBlockSizes
 421    {
 422      get {
 423        KeySizes[] keySizes = new KeySizes[1];
 424        keySizes[0] = new KeySizes(1 * 8, 1 * 8, 0);
 425        return keySizes;
 426      }
 427    }
 428
 429    /// <summary>
 430    /// Get / set the key value applicable.
 431    /// </summary>
 432    public override byte[] Key
 433    {
 434      get {
 435        if ( key_ == null ) {
 436          GenerateKey();
 437        }
 438
 439        return (byte[]) key_.Clone();
 440      }
 441
 442      set {
 443        if ( value == null ) {
 444          throw new ArgumentNullException(nameof(value));
 445        }
 446
 447        if ( value.Length != 12 ) {
 448          throw new CryptographicException("Key size is illegal");
 449        }
 450
 451        key_ = (byte[]) value.Clone();
 452      }
 453    }
 454
 455    /// <summary>
 456    /// Generate a new random key.
 457    /// </summary>
 458    public override void GenerateKey()
 459    {
 460      key_ = new byte[12];
 461      var rnd = new Random();
 462      rnd.NextBytes(key_);
 463    }
 464
 465    /// <summary>
 466    /// Create an encryptor.
 467    /// </summary>
 468    /// <param name="rgbKey">The key to use for this encryptor.</param>
 469    /// <param name="rgbIV">Initialisation vector for the new encryptor.</param>
 470    /// <returns>Returns a new PkzipClassic encryptor</returns>
 471    public override ICryptoTransform CreateEncryptor(
 472      byte[] rgbKey,
 473      byte[] rgbIV)
 474    {
 475      key_ = rgbKey;
 476      return new PkzipClassicEncryptCryptoTransform(Key);
 477    }
 478
 479    /// <summary>
 480    /// Create a decryptor.
 481    /// </summary>
 482    /// <param name="rgbKey">Keys to use for this new decryptor.</param>
 483    /// <param name="rgbIV">Initialisation vector for the new decryptor.</param>
 484    /// <returns>Returns a new decryptor.</returns>
 485    public override ICryptoTransform CreateDecryptor(
 486      byte[] rgbKey,
 487      byte[] rgbIV)
 488    {
 489      key_ = rgbKey;
 490      return new PkzipClassicDecryptCryptoTransform(Key);
 491    }
 492
 493    #region Instance Fields
 494    byte[] key_;
 495    #endregion
 496  }
 497}
 498#endif
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicEncryptCryptoTransform.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicEncryptCryptoTransform.htm new file mode 100644 index 000000000..1d1b3dcd4 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicEncryptCryptoTransform.htm @@ -0,0 +1,543 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs
Covered lines:13
Uncovered lines:4
Coverable lines:17
Total lines:498
Line coverage:76.4%
Branch coverage:100%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
TransformFinalBlock(...)100
TransformBlock(...)2100100
Dispose()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// PkzipClassic encryption
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36//
 37
 38
 39#if !NETCF_1_0
 40
 41using System;
 42using System.Security.Cryptography;
 43using ICSharpCode.SharpZipLib.Checksums;
 44
 45namespace ICSharpCode.SharpZipLib.Encryption
 46{
 47  /// <summary>
 48  /// PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives.
 49  /// While it has been superceded by more recent and more powerful algorithms, its still in use and
 50  /// is viable for preventing casual snooping
 51  /// </summary>
 52  public abstract class PkzipClassic : SymmetricAlgorithm
 53  {
 54    /// <summary>
 55    /// Generates new encryption keys based on given seed
 56    /// </summary>
 57    /// <param name="seed">The seed value to initialise keys with.</param>
 58    /// <returns>A new key value.</returns>
 59    static public byte[] GenerateKeys(byte[] seed)
 60    {
 61      if ( seed == null ) {
 62        throw new ArgumentNullException(nameof(seed));
 63      }
 64
 65      if ( seed.Length == 0 ) {
 66        throw new ArgumentException("Length is zero", nameof(seed));
 67      }
 68
 69      uint[] newKeys = {
 70        0x12345678,
 71        0x23456789,
 72        0x34567890
 73       };
 74
 75      for (int i = 0; i < seed.Length; ++i) {
 76        newKeys[0] = Crc32.ComputeCrc32(newKeys[0], seed[i]);
 77        newKeys[1] = newKeys[1] + (byte)newKeys[0];
 78        newKeys[1] = newKeys[1] * 134775813 + 1;
 79        newKeys[2] = Crc32.ComputeCrc32(newKeys[2], (byte)(newKeys[1] >> 24));
 80      }
 81
 82      byte[] result = new byte[12];
 83      result[0] = (byte)(newKeys[0] & 0xff);
 84      result[1] = (byte)((newKeys[0] >> 8) & 0xff);
 85      result[2] = (byte)((newKeys[0] >> 16) & 0xff);
 86      result[3] = (byte)((newKeys[0] >> 24) & 0xff);
 87      result[4] = (byte)(newKeys[1] & 0xff);
 88      result[5] = (byte)((newKeys[1] >> 8) & 0xff);
 89      result[6] = (byte)((newKeys[1] >> 16) & 0xff);
 90      result[7] = (byte)((newKeys[1] >> 24) & 0xff);
 91      result[8] = (byte)(newKeys[2] & 0xff);
 92      result[9] = (byte)((newKeys[2] >> 8) & 0xff);
 93      result[10] = (byte)((newKeys[2] >> 16) & 0xff);
 94      result[11] = (byte)((newKeys[2] >> 24) & 0xff);
 95      return result;
 96    }
 97  }
 98
 99  /// <summary>
 100  /// PkzipClassicCryptoBase provides the low level facilities for encryption
 101  /// and decryption using the PkzipClassic algorithm.
 102  /// </summary>
 103  class PkzipClassicCryptoBase
 104  {
 105    /// <summary>
 106    /// Transform a single byte
 107    /// </summary>
 108    /// <returns>
 109    /// The transformed value
 110    /// </returns>
 111    protected byte TransformByte()
 112    {
 113      uint temp = ((keys[2] & 0xFFFF) | 2);
 114      return (byte)((temp * (temp ^ 1)) >> 8);
 115    }
 116
 117    /// <summary>
 118    /// Set the key schedule for encryption/decryption.
 119    /// </summary>
 120    /// <param name="keyData">The data use to set the keys from.</param>
 121    protected void SetKeys(byte[] keyData)
 122    {
 123      if ( keyData == null ) {
 124        throw new ArgumentNullException(nameof(keyData));
 125      }
 126
 127      if ( keyData.Length != 12 ) {
 128        throw new InvalidOperationException("Key length is not valid");
 129      }
 130
 131      keys = new uint[3];
 132      keys[0] = (uint)((keyData[3] << 24) | (keyData[2] << 16) | (keyData[1] << 8) | keyData[0]);
 133      keys[1] = (uint)((keyData[7] << 24) | (keyData[6] << 16) | (keyData[5] << 8) | keyData[4]);
 134      keys[2] = (uint)((keyData[11] << 24) | (keyData[10] << 16) | (keyData[9] << 8) | keyData[8]);
 135    }
 136
 137    /// <summary>
 138    /// Update encryption keys
 139    /// </summary>
 140    protected void UpdateKeys(byte ch)
 141    {
 142      keys[0] = Crc32.ComputeCrc32(keys[0], ch);
 143      keys[1] = keys[1] + (byte)keys[0];
 144      keys[1] = keys[1] * 134775813 + 1;
 145      keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24));
 146    }
 147
 148    /// <summary>
 149    /// Reset the internal state.
 150    /// </summary>
 151    protected void Reset()
 152    {
 153      keys[0] = 0;
 154      keys[1] = 0;
 155      keys[2] = 0;
 156    }
 157
 158    #region Instance Fields
 159    uint[] keys;
 160    #endregion
 161  }
 162
 163  /// <summary>
 164  /// PkzipClassic CryptoTransform for encryption.
 165  /// </summary>
 166  class PkzipClassicEncryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 167  {
 168    /// <summary>
 169    /// Initialise a new instance of <see cref="PkzipClassicEncryptCryptoTransform"></see>
 170    /// </summary>
 171    /// <param name="keyBlock">The key block to use.</param>
 41172    internal PkzipClassicEncryptCryptoTransform(byte[] keyBlock)
 173    {
 41174      SetKeys(keyBlock);
 41175    }
 176
 177    #region ICryptoTransform Members
 178
 179    /// <summary>
 180    /// Transforms the specified region of the specified byte array.
 181    /// </summary>
 182    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 183    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 184    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 185    /// <returns>The computed transform.</returns>
 186    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 187    {
 0188      byte[] result = new byte[inputCount];
 0189      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 0190      return result;
 191    }
 192
 193    /// <summary>
 194    /// Transforms the specified region of the input byte array and copies
 195    /// the resulting transform to the specified region of the output byte array.
 196    /// </summary>
 197    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 198    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 199    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 200    /// <param name="outputBuffer">The output to which to write the transform.</param>
 201    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 202    /// <returns>The number of bytes written.</returns>
 203    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 204    {
 2261096205       for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 1128227206        byte oldbyte = inputBuffer[i];
 1128227207        outputBuffer[outputOffset++] = (byte)(inputBuffer[i] ^ TransformByte());
 1128227208        UpdateKeys(oldbyte);
 209      }
 2321210      return inputCount;
 211    }
 212
 213    /// <summary>
 214    /// Gets a value indicating whether the current transform can be reused.
 215    /// </summary>
 216    public bool CanReuseTransform
 217    {
 218      get {
 0219        return true;
 220      }
 221    }
 222
 223    /// <summary>
 224    /// Gets the size of the input data blocks in bytes.
 225    /// </summary>
 226    public int InputBlockSize
 227    {
 228      get {
 5229        return 1;
 230      }
 231    }
 232
 233    /// <summary>
 234    /// Gets the size of the output data blocks in bytes.
 235    /// </summary>
 236    public int OutputBlockSize
 237    {
 238      get {
 5239        return 1;
 240      }
 241    }
 242
 243    /// <summary>
 244    /// Gets a value indicating whether multiple blocks can be transformed.
 245    /// </summary>
 246    public bool CanTransformMultipleBlocks
 247    {
 248      get {
 10249        return true;
 250      }
 251    }
 252
 253    #endregion
 254
 255    #region IDisposable Members
 256
 257    /// <summary>
 258    /// Cleanup internal state.
 259    /// </summary>
 260    public void Dispose()
 261    {
 35262      Reset();
 35263    }
 264
 265    #endregion
 266  }
 267
 268
 269  /// <summary>
 270  /// PkzipClassic CryptoTransform for decryption.
 271  /// </summary>
 272  class PkzipClassicDecryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 273  {
 274    /// <summary>
 275    /// Initialise a new instance of <see cref="PkzipClassicDecryptCryptoTransform"></see>.
 276    /// </summary>
 277    /// <param name="keyBlock">The key block to decrypt with.</param>
 278    internal PkzipClassicDecryptCryptoTransform(byte[] keyBlock)
 279    {
 280      SetKeys(keyBlock);
 281    }
 282
 283    #region ICryptoTransform Members
 284
 285    /// <summary>
 286    /// Transforms the specified region of the specified byte array.
 287    /// </summary>
 288    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 289    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 290    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 291    /// <returns>The computed transform.</returns>
 292    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 293    {
 294      byte[] result = new byte[inputCount];
 295      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 296      return result;
 297    }
 298
 299    /// <summary>
 300    /// Transforms the specified region of the input byte array and copies
 301    /// the resulting transform to the specified region of the output byte array.
 302    /// </summary>
 303    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 304    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 305    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 306    /// <param name="outputBuffer">The output to which to write the transform.</param>
 307    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 308    /// <returns>The number of bytes written.</returns>
 309    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 310    {
 311      for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 312        var newByte = (byte)(inputBuffer[i] ^ TransformByte());
 313        outputBuffer[outputOffset++] = newByte;
 314        UpdateKeys(newByte);
 315      }
 316      return inputCount;
 317    }
 318
 319    /// <summary>
 320    /// Gets a value indicating whether the current transform can be reused.
 321    /// </summary>
 322    public bool CanReuseTransform
 323    {
 324      get {
 325        return true;
 326      }
 327    }
 328
 329    /// <summary>
 330    /// Gets the size of the input data blocks in bytes.
 331    /// </summary>
 332    public int InputBlockSize
 333    {
 334      get {
 335        return 1;
 336      }
 337    }
 338
 339    /// <summary>
 340    /// Gets the size of the output data blocks in bytes.
 341    /// </summary>
 342    public int OutputBlockSize
 343    {
 344      get {
 345        return 1;
 346      }
 347    }
 348
 349    /// <summary>
 350    /// Gets a value indicating whether multiple blocks can be transformed.
 351    /// </summary>
 352    public bool CanTransformMultipleBlocks
 353    {
 354      get {
 355        return true;
 356      }
 357    }
 358
 359    #endregion
 360
 361    #region IDisposable Members
 362
 363    /// <summary>
 364    /// Cleanup internal state.
 365    /// </summary>
 366    public void Dispose()
 367    {
 368      Reset();
 369    }
 370
 371    #endregion
 372  }
 373
 374  /// <summary>
 375  /// Defines a wrapper object to access the Pkzip algorithm.
 376  /// This class cannot be inherited.
 377  /// </summary>
 378  public sealed class PkzipClassicManaged : PkzipClassic
 379  {
 380    /// <summary>
 381    /// Get / set the applicable block size in bits.
 382    /// </summary>
 383    /// <remarks>The only valid block size is 8.</remarks>
 384    public override int BlockSize
 385    {
 386      get {
 387        return 8;
 388      }
 389
 390      set {
 391        if (value != 8) {
 392          throw new CryptographicException("Block size is invalid");
 393        }
 394      }
 395    }
 396
 397    /// <summary>
 398    /// Get an array of legal <see cref="KeySizes">key sizes.</see>
 399    /// </summary>
 400    public override KeySizes[] LegalKeySizes
 401    {
 402      get {
 403        KeySizes[] keySizes = new KeySizes[1];
 404        keySizes[0] = new KeySizes(12 * 8, 12 * 8, 0);
 405        return keySizes;
 406      }
 407    }
 408
 409    /// <summary>
 410    /// Generate an initial vector.
 411    /// </summary>
 412    public override void GenerateIV()
 413    {
 414      // Do nothing.
 415    }
 416
 417    /// <summary>
 418    /// Get an array of legal <see cref="KeySizes">block sizes</see>.
 419    /// </summary>
 420    public override KeySizes[] LegalBlockSizes
 421    {
 422      get {
 423        KeySizes[] keySizes = new KeySizes[1];
 424        keySizes[0] = new KeySizes(1 * 8, 1 * 8, 0);
 425        return keySizes;
 426      }
 427    }
 428
 429    /// <summary>
 430    /// Get / set the key value applicable.
 431    /// </summary>
 432    public override byte[] Key
 433    {
 434      get {
 435        if ( key_ == null ) {
 436          GenerateKey();
 437        }
 438
 439        return (byte[]) key_.Clone();
 440      }
 441
 442      set {
 443        if ( value == null ) {
 444          throw new ArgumentNullException(nameof(value));
 445        }
 446
 447        if ( value.Length != 12 ) {
 448          throw new CryptographicException("Key size is illegal");
 449        }
 450
 451        key_ = (byte[]) value.Clone();
 452      }
 453    }
 454
 455    /// <summary>
 456    /// Generate a new random key.
 457    /// </summary>
 458    public override void GenerateKey()
 459    {
 460      key_ = new byte[12];
 461      var rnd = new Random();
 462      rnd.NextBytes(key_);
 463    }
 464
 465    /// <summary>
 466    /// Create an encryptor.
 467    /// </summary>
 468    /// <param name="rgbKey">The key to use for this encryptor.</param>
 469    /// <param name="rgbIV">Initialisation vector for the new encryptor.</param>
 470    /// <returns>Returns a new PkzipClassic encryptor</returns>
 471    public override ICryptoTransform CreateEncryptor(
 472      byte[] rgbKey,
 473      byte[] rgbIV)
 474    {
 475      key_ = rgbKey;
 476      return new PkzipClassicEncryptCryptoTransform(Key);
 477    }
 478
 479    /// <summary>
 480    /// Create a decryptor.
 481    /// </summary>
 482    /// <param name="rgbKey">Keys to use for this new decryptor.</param>
 483    /// <param name="rgbIV">Initialisation vector for the new decryptor.</param>
 484    /// <returns>Returns a new decryptor.</returns>
 485    public override ICryptoTransform CreateDecryptor(
 486      byte[] rgbKey,
 487      byte[] rgbIV)
 488    {
 489      key_ = rgbKey;
 490      return new PkzipClassicDecryptCryptoTransform(Key);
 491    }
 492
 493    #region Instance Fields
 494    byte[] key_;
 495    #endregion
 496  }
 497}
 498#endif
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicManaged.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicManaged.htm new file mode 100644 index 000000000..2d02b6aad --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicManaged.htm @@ -0,0 +1,543 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs
Covered lines:6
Uncovered lines:22
Coverable lines:28
Total lines:498
Line coverage:21.4%
Branch coverage:12.5%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
GenerateIV()100
GenerateKey()100
CreateEncryptor(...)1100100
CreateDecryptor(...)1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\PkzipClassic.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// PkzipClassic encryption
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36//
 37
 38
 39#if !NETCF_1_0
 40
 41using System;
 42using System.Security.Cryptography;
 43using ICSharpCode.SharpZipLib.Checksums;
 44
 45namespace ICSharpCode.SharpZipLib.Encryption
 46{
 47  /// <summary>
 48  /// PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives.
 49  /// While it has been superceded by more recent and more powerful algorithms, its still in use and
 50  /// is viable for preventing casual snooping
 51  /// </summary>
 52  public abstract class PkzipClassic : SymmetricAlgorithm
 53  {
 54    /// <summary>
 55    /// Generates new encryption keys based on given seed
 56    /// </summary>
 57    /// <param name="seed">The seed value to initialise keys with.</param>
 58    /// <returns>A new key value.</returns>
 59    static public byte[] GenerateKeys(byte[] seed)
 60    {
 61      if ( seed == null ) {
 62        throw new ArgumentNullException(nameof(seed));
 63      }
 64
 65      if ( seed.Length == 0 ) {
 66        throw new ArgumentException("Length is zero", nameof(seed));
 67      }
 68
 69      uint[] newKeys = {
 70        0x12345678,
 71        0x23456789,
 72        0x34567890
 73       };
 74
 75      for (int i = 0; i < seed.Length; ++i) {
 76        newKeys[0] = Crc32.ComputeCrc32(newKeys[0], seed[i]);
 77        newKeys[1] = newKeys[1] + (byte)newKeys[0];
 78        newKeys[1] = newKeys[1] * 134775813 + 1;
 79        newKeys[2] = Crc32.ComputeCrc32(newKeys[2], (byte)(newKeys[1] >> 24));
 80      }
 81
 82      byte[] result = new byte[12];
 83      result[0] = (byte)(newKeys[0] & 0xff);
 84      result[1] = (byte)((newKeys[0] >> 8) & 0xff);
 85      result[2] = (byte)((newKeys[0] >> 16) & 0xff);
 86      result[3] = (byte)((newKeys[0] >> 24) & 0xff);
 87      result[4] = (byte)(newKeys[1] & 0xff);
 88      result[5] = (byte)((newKeys[1] >> 8) & 0xff);
 89      result[6] = (byte)((newKeys[1] >> 16) & 0xff);
 90      result[7] = (byte)((newKeys[1] >> 24) & 0xff);
 91      result[8] = (byte)(newKeys[2] & 0xff);
 92      result[9] = (byte)((newKeys[2] >> 8) & 0xff);
 93      result[10] = (byte)((newKeys[2] >> 16) & 0xff);
 94      result[11] = (byte)((newKeys[2] >> 24) & 0xff);
 95      return result;
 96    }
 97  }
 98
 99  /// <summary>
 100  /// PkzipClassicCryptoBase provides the low level facilities for encryption
 101  /// and decryption using the PkzipClassic algorithm.
 102  /// </summary>
 103  class PkzipClassicCryptoBase
 104  {
 105    /// <summary>
 106    /// Transform a single byte
 107    /// </summary>
 108    /// <returns>
 109    /// The transformed value
 110    /// </returns>
 111    protected byte TransformByte()
 112    {
 113      uint temp = ((keys[2] & 0xFFFF) | 2);
 114      return (byte)((temp * (temp ^ 1)) >> 8);
 115    }
 116
 117    /// <summary>
 118    /// Set the key schedule for encryption/decryption.
 119    /// </summary>
 120    /// <param name="keyData">The data use to set the keys from.</param>
 121    protected void SetKeys(byte[] keyData)
 122    {
 123      if ( keyData == null ) {
 124        throw new ArgumentNullException(nameof(keyData));
 125      }
 126
 127      if ( keyData.Length != 12 ) {
 128        throw new InvalidOperationException("Key length is not valid");
 129      }
 130
 131      keys = new uint[3];
 132      keys[0] = (uint)((keyData[3] << 24) | (keyData[2] << 16) | (keyData[1] << 8) | keyData[0]);
 133      keys[1] = (uint)((keyData[7] << 24) | (keyData[6] << 16) | (keyData[5] << 8) | keyData[4]);
 134      keys[2] = (uint)((keyData[11] << 24) | (keyData[10] << 16) | (keyData[9] << 8) | keyData[8]);
 135    }
 136
 137    /// <summary>
 138    /// Update encryption keys
 139    /// </summary>
 140    protected void UpdateKeys(byte ch)
 141    {
 142      keys[0] = Crc32.ComputeCrc32(keys[0], ch);
 143      keys[1] = keys[1] + (byte)keys[0];
 144      keys[1] = keys[1] * 134775813 + 1;
 145      keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24));
 146    }
 147
 148    /// <summary>
 149    /// Reset the internal state.
 150    /// </summary>
 151    protected void Reset()
 152    {
 153      keys[0] = 0;
 154      keys[1] = 0;
 155      keys[2] = 0;
 156    }
 157
 158    #region Instance Fields
 159    uint[] keys;
 160    #endregion
 161  }
 162
 163  /// <summary>
 164  /// PkzipClassic CryptoTransform for encryption.
 165  /// </summary>
 166  class PkzipClassicEncryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 167  {
 168    /// <summary>
 169    /// Initialise a new instance of <see cref="PkzipClassicEncryptCryptoTransform"></see>
 170    /// </summary>
 171    /// <param name="keyBlock">The key block to use.</param>
 172    internal PkzipClassicEncryptCryptoTransform(byte[] keyBlock)
 173    {
 174      SetKeys(keyBlock);
 175    }
 176
 177    #region ICryptoTransform Members
 178
 179    /// <summary>
 180    /// Transforms the specified region of the specified byte array.
 181    /// </summary>
 182    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 183    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 184    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 185    /// <returns>The computed transform.</returns>
 186    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 187    {
 188      byte[] result = new byte[inputCount];
 189      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 190      return result;
 191    }
 192
 193    /// <summary>
 194    /// Transforms the specified region of the input byte array and copies
 195    /// the resulting transform to the specified region of the output byte array.
 196    /// </summary>
 197    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 198    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 199    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 200    /// <param name="outputBuffer">The output to which to write the transform.</param>
 201    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 202    /// <returns>The number of bytes written.</returns>
 203    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 204    {
 205      for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 206        byte oldbyte = inputBuffer[i];
 207        outputBuffer[outputOffset++] = (byte)(inputBuffer[i] ^ TransformByte());
 208        UpdateKeys(oldbyte);
 209      }
 210      return inputCount;
 211    }
 212
 213    /// <summary>
 214    /// Gets a value indicating whether the current transform can be reused.
 215    /// </summary>
 216    public bool CanReuseTransform
 217    {
 218      get {
 219        return true;
 220      }
 221    }
 222
 223    /// <summary>
 224    /// Gets the size of the input data blocks in bytes.
 225    /// </summary>
 226    public int InputBlockSize
 227    {
 228      get {
 229        return 1;
 230      }
 231    }
 232
 233    /// <summary>
 234    /// Gets the size of the output data blocks in bytes.
 235    /// </summary>
 236    public int OutputBlockSize
 237    {
 238      get {
 239        return 1;
 240      }
 241    }
 242
 243    /// <summary>
 244    /// Gets a value indicating whether multiple blocks can be transformed.
 245    /// </summary>
 246    public bool CanTransformMultipleBlocks
 247    {
 248      get {
 249        return true;
 250      }
 251    }
 252
 253    #endregion
 254
 255    #region IDisposable Members
 256
 257    /// <summary>
 258    /// Cleanup internal state.
 259    /// </summary>
 260    public void Dispose()
 261    {
 262      Reset();
 263    }
 264
 265    #endregion
 266  }
 267
 268
 269  /// <summary>
 270  /// PkzipClassic CryptoTransform for decryption.
 271  /// </summary>
 272  class PkzipClassicDecryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform
 273  {
 274    /// <summary>
 275    /// Initialise a new instance of <see cref="PkzipClassicDecryptCryptoTransform"></see>.
 276    /// </summary>
 277    /// <param name="keyBlock">The key block to decrypt with.</param>
 278    internal PkzipClassicDecryptCryptoTransform(byte[] keyBlock)
 279    {
 280      SetKeys(keyBlock);
 281    }
 282
 283    #region ICryptoTransform Members
 284
 285    /// <summary>
 286    /// Transforms the specified region of the specified byte array.
 287    /// </summary>
 288    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 289    /// <param name="inputOffset">The offset into the byte array from which to begin using data.</param>
 290    /// <param name="inputCount">The number of bytes in the byte array to use as data.</param>
 291    /// <returns>The computed transform.</returns>
 292    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 293    {
 294      byte[] result = new byte[inputCount];
 295      TransformBlock(inputBuffer, inputOffset, inputCount, result, 0);
 296      return result;
 297    }
 298
 299    /// <summary>
 300    /// Transforms the specified region of the input byte array and copies
 301    /// the resulting transform to the specified region of the output byte array.
 302    /// </summary>
 303    /// <param name="inputBuffer">The input for which to compute the transform.</param>
 304    /// <param name="inputOffset">The offset into the input byte array from which to begin using data.</param>
 305    /// <param name="inputCount">The number of bytes in the input byte array to use as data.</param>
 306    /// <param name="outputBuffer">The output to which to write the transform.</param>
 307    /// <param name="outputOffset">The offset into the output byte array from which to begin writing data.</param>
 308    /// <returns>The number of bytes written.</returns>
 309    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 310    {
 311      for (int i = inputOffset; i < inputOffset + inputCount; ++i) {
 312        var newByte = (byte)(inputBuffer[i] ^ TransformByte());
 313        outputBuffer[outputOffset++] = newByte;
 314        UpdateKeys(newByte);
 315      }
 316      return inputCount;
 317    }
 318
 319    /// <summary>
 320    /// Gets a value indicating whether the current transform can be reused.
 321    /// </summary>
 322    public bool CanReuseTransform
 323    {
 324      get {
 325        return true;
 326      }
 327    }
 328
 329    /// <summary>
 330    /// Gets the size of the input data blocks in bytes.
 331    /// </summary>
 332    public int InputBlockSize
 333    {
 334      get {
 335        return 1;
 336      }
 337    }
 338
 339    /// <summary>
 340    /// Gets the size of the output data blocks in bytes.
 341    /// </summary>
 342    public int OutputBlockSize
 343    {
 344      get {
 345        return 1;
 346      }
 347    }
 348
 349    /// <summary>
 350    /// Gets a value indicating whether multiple blocks can be transformed.
 351    /// </summary>
 352    public bool CanTransformMultipleBlocks
 353    {
 354      get {
 355        return true;
 356      }
 357    }
 358
 359    #endregion
 360
 361    #region IDisposable Members
 362
 363    /// <summary>
 364    /// Cleanup internal state.
 365    /// </summary>
 366    public void Dispose()
 367    {
 368      Reset();
 369    }
 370
 371    #endregion
 372  }
 373
 374  /// <summary>
 375  /// Defines a wrapper object to access the Pkzip algorithm.
 376  /// This class cannot be inherited.
 377  /// </summary>
 378  public sealed class PkzipClassicManaged : PkzipClassic
 379  {
 380    /// <summary>
 381    /// Get / set the applicable block size in bits.
 382    /// </summary>
 383    /// <remarks>The only valid block size is 8.</remarks>
 384    public override int BlockSize
 385    {
 386      get {
 0387        return 8;
 388      }
 389
 390      set {
 0391         if (value != 8) {
 0392          throw new CryptographicException("Block size is invalid");
 393        }
 0394      }
 395    }
 396
 397    /// <summary>
 398    /// Get an array of legal <see cref="KeySizes">key sizes.</see>
 399    /// </summary>
 400    public override KeySizes[] LegalKeySizes
 401    {
 402      get {
 0403        KeySizes[] keySizes = new KeySizes[1];
 0404        keySizes[0] = new KeySizes(12 * 8, 12 * 8, 0);
 0405        return keySizes;
 406      }
 407    }
 408
 409    /// <summary>
 410    /// Generate an initial vector.
 411    /// </summary>
 412    public override void GenerateIV()
 413    {
 414      // Do nothing.
 0415    }
 416
 417    /// <summary>
 418    /// Get an array of legal <see cref="KeySizes">block sizes</see>.
 419    /// </summary>
 420    public override KeySizes[] LegalBlockSizes
 421    {
 422      get {
 0423        KeySizes[] keySizes = new KeySizes[1];
 0424        keySizes[0] = new KeySizes(1 * 8, 1 * 8, 0);
 0425        return keySizes;
 426      }
 427    }
 428
 429    /// <summary>
 430    /// Get / set the key value applicable.
 431    /// </summary>
 432    public override byte[] Key
 433    {
 434      get {
 78435         if ( key_ == null ) {
 0436          GenerateKey();
 437        }
 438
 78439        return (byte[]) key_.Clone();
 440      }
 441
 442      set {
 0443         if ( value == null ) {
 0444          throw new ArgumentNullException(nameof(value));
 445        }
 446
 0447         if ( value.Length != 12 ) {
 0448          throw new CryptographicException("Key size is illegal");
 449        }
 450
 0451        key_ = (byte[]) value.Clone();
 0452      }
 453    }
 454
 455    /// <summary>
 456    /// Generate a new random key.
 457    /// </summary>
 458    public override void GenerateKey()
 459    {
 0460      key_ = new byte[12];
 0461      var rnd = new Random();
 0462      rnd.NextBytes(key_);
 0463    }
 464
 465    /// <summary>
 466    /// Create an encryptor.
 467    /// </summary>
 468    /// <param name="rgbKey">The key to use for this encryptor.</param>
 469    /// <param name="rgbIV">Initialisation vector for the new encryptor.</param>
 470    /// <returns>Returns a new PkzipClassic encryptor</returns>
 471    public override ICryptoTransform CreateEncryptor(
 472      byte[] rgbKey,
 473      byte[] rgbIV)
 474    {
 41475      key_ = rgbKey;
 41476      return new PkzipClassicEncryptCryptoTransform(Key);
 477    }
 478
 479    /// <summary>
 480    /// Create a decryptor.
 481    /// </summary>
 482    /// <param name="rgbKey">Keys to use for this new decryptor.</param>
 483    /// <param name="rgbIV">Initialisation vector for the new decryptor.</param>
 484    /// <returns>Returns a new decryptor.</returns>
 485    public override ICryptoTransform CreateDecryptor(
 486      byte[] rgbKey,
 487      byte[] rgbIV)
 488    {
 37489      key_ = rgbKey;
 37490      return new PkzipClassicDecryptCryptoTransform(Key);
 491    }
 492
 493    #region Instance Fields
 494    byte[] key_;
 495    #endregion
 496  }
 497}
 498#endif
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ProcessFileHandler.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ProcessFileHandler.htm new file mode 100644 index 000000000..b3b99442a --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ProcessFileHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.ProcessFileHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ProcessFileHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressEventArgs.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressEventArgs.htm new file mode 100644 index 000000000..5b1f9c2b1 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressEventArgs.htm @@ -0,0 +1,572 @@ + + + + +ICSharpCode.SharpZipLib.Core.ProgressEventArgs - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ProgressEventArgs
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs
Covered lines:0
Uncovered lines:16
Coverable lines:16
Total lines:530
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// FileSystemScanner.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36
 37using System;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  #region EventArgs
 42  /// <summary>
 43  /// Event arguments for scanning.
 44  /// </summary>
 45  public class ScanEventArgs : EventArgs
 46  {
 47    #region Constructors
 48    /// <summary>
 49    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 50    /// </summary>
 51    /// <param name="name">The file or directory name.</param>
 52    public ScanEventArgs(string name)
 53    {
 54      name_ = name;
 55    }
 56    #endregion
 57
 58    /// <summary>
 59    /// The file or directory name for this event.
 60    /// </summary>
 61    public string Name
 62    {
 63      get { return name_; }
 64    }
 65
 66    /// <summary>
 67    /// Get set a value indicating if scanning should continue or not.
 68    /// </summary>
 69    public bool ContinueRunning
 70    {
 71      get { return continueRunning_; }
 72      set { continueRunning_ = value; }
 73    }
 74
 75    #region Instance Fields
 76    string name_;
 77    bool continueRunning_ = true;
 78    #endregion
 79  }
 80
 81  /// <summary>
 82  /// Event arguments during processing of a single file or directory.
 83  /// </summary>
 84  public class ProgressEventArgs : EventArgs
 85  {
 86    #region Constructors
 87    /// <summary>
 88    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 89    /// </summary>
 90    /// <param name="name">The file or directory name if known.</param>
 91    /// <param name="processed">The number of bytes processed so far</param>
 92    /// <param name="target">The total number of bytes to process, 0 if not known</param>
 093    public ProgressEventArgs(string name, long processed, long target)
 94    {
 095      name_ = name;
 096      processed_ = processed;
 097      target_ = target;
 098    }
 99    #endregion
 100
 101    /// <summary>
 102    /// The name for this event if known.
 103    /// </summary>
 104    public string Name
 105    {
 0106      get { return name_; }
 107    }
 108
 109    /// <summary>
 110    /// Get set a value indicating wether scanning should continue or not.
 111    /// </summary>
 112    public bool ContinueRunning
 113    {
 0114      get { return continueRunning_; }
 0115      set { continueRunning_ = value; }
 116    }
 117
 118    /// <summary>
 119    /// Get a percentage representing how much of the <see cref="Target"></see> has been processed
 120    /// </summary>
 121    /// <value>0.0 to 100.0 percent; 0 if target is not known.</value>
 122    public float PercentComplete
 123    {
 124      get
 125      {
 126          float result;
 0127         if (target_ <= 0)
 128        {
 0129          result = 0;
 0130        }
 131        else
 132        {
 0133          result = ((float)processed_ / (float)target_) * 100.0f;
 134        }
 0135          return result;
 136      }
 137    }
 138
 139    /// <summary>
 140    /// The number of bytes processed so far
 141    /// </summary>
 142    public long Processed
 143    {
 0144      get { return processed_; }
 145    }
 146
 147    /// <summary>
 148    /// The number of bytes to process.
 149    /// </summary>
 150    /// <remarks>Target may be 0 or negative if the value isnt known.</remarks>
 151    public long Target
 152    {
 0153      get { return target_; }
 154    }
 155
 156    #region Instance Fields
 157    string name_;
 158    long processed_;
 159    long target_;
 0160    bool continueRunning_ = true;
 161    #endregion
 162  }
 163
 164  /// <summary>
 165  /// Event arguments for directories.
 166  /// </summary>
 167  public class DirectoryEventArgs : ScanEventArgs
 168  {
 169    #region Constructors
 170    /// <summary>
 171    /// Initialize an instance of <see cref="DirectoryEventArgs"></see>.
 172    /// </summary>
 173    /// <param name="name">The name for this directory.</param>
 174    /// <param name="hasMatchingFiles">Flag value indicating if any matching files are contained in this directory.</par
 175    public DirectoryEventArgs(string name, bool hasMatchingFiles)
 176      : base (name)
 177    {
 178      hasMatchingFiles_ = hasMatchingFiles;
 179    }
 180    #endregion
 181
 182    /// <summary>
 183    /// Get a value indicating if the directory contains any matching files or not.
 184    /// </summary>
 185    public bool HasMatchingFiles
 186    {
 187      get { return hasMatchingFiles_; }
 188    }
 189
 190    readonly
 191
 192    #region Instance Fields
 193    bool hasMatchingFiles_;
 194    #endregion
 195  }
 196
 197  /// <summary>
 198  /// Arguments passed when scan failures are detected.
 199  /// </summary>
 200  public class ScanFailureEventArgs : EventArgs
 201  {
 202    #region Constructors
 203    /// <summary>
 204    /// Initialise a new instance of <see cref="ScanFailureEventArgs"></see>
 205    /// </summary>
 206    /// <param name="name">The name to apply.</param>
 207    /// <param name="e">The exception to use.</param>
 208    public ScanFailureEventArgs(string name, Exception e)
 209    {
 210      name_ = name;
 211      exception_ = e;
 212      continueRunning_ = true;
 213    }
 214    #endregion
 215
 216    /// <summary>
 217    /// The applicable name.
 218    /// </summary>
 219    public string Name
 220    {
 221      get { return name_; }
 222    }
 223
 224    /// <summary>
 225    /// The applicable exception.
 226    /// </summary>
 227    public Exception Exception
 228    {
 229      get { return exception_; }
 230    }
 231
 232    /// <summary>
 233    /// Get / set a value indicating wether scanning should continue.
 234    /// </summary>
 235    public bool ContinueRunning
 236    {
 237      get { return continueRunning_; }
 238      set { continueRunning_ = value; }
 239    }
 240
 241    #region Instance Fields
 242    string name_;
 243    Exception exception_;
 244    bool continueRunning_;
 245    #endregion
 246  }
 247
 248  #endregion
 249
 250  #region Delegates
 251  /// <summary>
 252  /// Delegate invoked before starting to process a file.
 253  /// </summary>
 254  /// <param name="sender">The source of the event</param>
 255  /// <param name="e">The event arguments.</param>
 256  public delegate void ProcessFileHandler(object sender, ScanEventArgs e);
 257
 258  /// <summary>
 259  /// Delegate invoked during processing of a file or directory
 260  /// </summary>
 261  /// <param name="sender">The source of the event</param>
 262  /// <param name="e">The event arguments.</param>
 263  public delegate void ProgressHandler(object sender, ProgressEventArgs e);
 264
 265  /// <summary>
 266  /// Delegate invoked when a file has been completely processed.
 267  /// </summary>
 268  /// <param name="sender">The source of the event</param>
 269  /// <param name="e">The event arguments.</param>
 270  public delegate void CompletedFileHandler(object sender, ScanEventArgs e);
 271
 272  /// <summary>
 273  /// Delegate invoked when a directory failure is detected.
 274  /// </summary>
 275  /// <param name="sender">The source of the event</param>
 276  /// <param name="e">The event arguments.</param>
 277  public delegate void DirectoryFailureHandler(object sender, ScanFailureEventArgs e);
 278
 279  /// <summary>
 280  /// Delegate invoked when a file failure is detected.
 281  /// </summary>
 282  /// <param name="sender">The source of the event</param>
 283  /// <param name="e">The event arguments.</param>
 284  public delegate void FileFailureHandler(object sender, ScanFailureEventArgs e);
 285  #endregion
 286
 287  /// <summary>
 288  /// FileSystemScanner provides facilities scanning of files and directories.
 289  /// </summary>
 290  public class FileSystemScanner
 291  {
 292    #region Constructors
 293    /// <summary>
 294    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 295    /// </summary>
 296    /// <param name="filter">The <see cref="PathFilter">file filter</see> to apply when scanning.</param>
 297    public FileSystemScanner(string filter)
 298    {
 299      fileFilter_ = new PathFilter(filter);
 300    }
 301
 302    /// <summary>
 303    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 304    /// </summary>
 305    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 306    /// <param name="directoryFilter">The <see cref="PathFilter"> directory filter</see> to apply.</param>
 307    public FileSystemScanner(string fileFilter, string directoryFilter)
 308    {
 309      fileFilter_ = new PathFilter(fileFilter);
 310      directoryFilter_ = new PathFilter(directoryFilter);
 311    }
 312
 313    /// <summary>
 314    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 315    /// </summary>
 316    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see> to apply.</param>
 317    public FileSystemScanner(IScanFilter fileFilter)
 318    {
 319      fileFilter_ = fileFilter;
 320    }
 321
 322    /// <summary>
 323    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 324    /// </summary>
 325    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see>  to apply.</param>
 326    /// <param name="directoryFilter">The directory <see cref="IScanFilter">filter</see>  to apply.</param>
 327    public FileSystemScanner(IScanFilter fileFilter, IScanFilter directoryFilter)
 328    {
 329      fileFilter_ = fileFilter;
 330      directoryFilter_ = directoryFilter;
 331    }
 332    #endregion
 333
 334    #region Delegates
 335    /// <summary>
 336    /// Delegate to invoke when a directory is processed.
 337    /// </summary>
 338    public event EventHandler<DirectoryEventArgs> ProcessDirectory;
 339
 340    /// <summary>
 341    /// Delegate to invoke when a file is processed.
 342    /// </summary>
 343    public ProcessFileHandler ProcessFile;
 344
 345    /// <summary>
 346    /// Delegate to invoke when processing for a file has finished.
 347    /// </summary>
 348    public CompletedFileHandler CompletedFile;
 349
 350    /// <summary>
 351    /// Delegate to invoke when a directory failure is detected.
 352    /// </summary>
 353    public DirectoryFailureHandler DirectoryFailure;
 354
 355    /// <summary>
 356    /// Delegate to invoke when a file failure is detected.
 357    /// </summary>
 358    public FileFailureHandler FileFailure;
 359    #endregion
 360
 361    /// <summary>
 362    /// Raise the DirectoryFailure event.
 363    /// </summary>
 364    /// <param name="directory">The directory name.</param>
 365    /// <param name="e">The exception detected.</param>
 366    bool OnDirectoryFailure(string directory, Exception e)
 367    {
 368            DirectoryFailureHandler handler = DirectoryFailure;
 369            bool result = (handler != null);
 370            if ( result ) {
 371        var args = new ScanFailureEventArgs(directory, e);
 372        handler(this, args);
 373        alive_ = args.ContinueRunning;
 374      }
 375            return result;
 376    }
 377
 378    /// <summary>
 379    /// Raise the FileFailure event.
 380    /// </summary>
 381    /// <param name="file">The file name.</param>
 382    /// <param name="e">The exception detected.</param>
 383    bool OnFileFailure(string file, Exception e)
 384    {
 385            FileFailureHandler handler = FileFailure;
 386
 387            bool result = (handler != null);
 388
 389      if ( result ){
 390        var args = new ScanFailureEventArgs(file, e);
 391        FileFailure(this, args);
 392        alive_ = args.ContinueRunning;
 393      }
 394            return result;
 395    }
 396
 397    /// <summary>
 398    /// Raise the ProcessFile event.
 399    /// </summary>
 400    /// <param name="file">The file name.</param>
 401    void OnProcessFile(string file)
 402    {
 403      ProcessFileHandler handler = ProcessFile;
 404
 405      if ( handler!= null ) {
 406        var args = new ScanEventArgs(file);
 407        handler(this, args);
 408        alive_ = args.ContinueRunning;
 409      }
 410    }
 411
 412    /// <summary>
 413    /// Raise the complete file event
 414    /// </summary>
 415    /// <param name="file">The file name</param>
 416    void OnCompleteFile(string file)
 417    {
 418      CompletedFileHandler handler = CompletedFile;
 419
 420      if (handler != null)
 421      {
 422        var args = new ScanEventArgs(file);
 423        handler(this, args);
 424        alive_ = args.ContinueRunning;
 425      }
 426    }
 427
 428    /// <summary>
 429    /// Raise the ProcessDirectory event.
 430    /// </summary>
 431    /// <param name="directory">The directory name.</param>
 432    /// <param name="hasMatchingFiles">Flag indicating if the directory has matching files.</param>
 433    void OnProcessDirectory(string directory, bool hasMatchingFiles)
 434    {
 435      EventHandler<DirectoryEventArgs> handler = ProcessDirectory;
 436
 437      if ( handler != null ) {
 438        var args = new DirectoryEventArgs(directory, hasMatchingFiles);
 439        handler(this, args);
 440        alive_ = args.ContinueRunning;
 441      }
 442    }
 443
 444    /// <summary>
 445    /// Scan a directory.
 446    /// </summary>
 447    /// <param name="directory">The base directory to scan.</param>
 448    /// <param name="recurse">True to recurse subdirectories, false to scan a single directory.</param>
 449    public void Scan(string directory, bool recurse)
 450    {
 451      alive_ = true;
 452      ScanDir(directory, recurse);
 453    }
 454
 455    void ScanDir(string directory, bool recurse)
 456    {
 457
 458      try {
 459        string[] names = System.IO.Directory.GetFiles(directory);
 460        bool hasMatch = false;
 461        for (int fileIndex = 0; fileIndex < names.Length; ++fileIndex) {
 462          if ( !fileFilter_.IsMatch(names[fileIndex]) ) {
 463            names[fileIndex] = null;
 464          } else {
 465            hasMatch = true;
 466          }
 467        }
 468
 469        OnProcessDirectory(directory, hasMatch);
 470
 471        if ( alive_ && hasMatch ) {
 472          foreach (string fileName in names) {
 473            try {
 474              if ( fileName != null ) {
 475                OnProcessFile(fileName);
 476                if ( !alive_ ) {
 477                  break;
 478                }
 479              }
 480            }
 481            catch (Exception e) {
 482                            if (!OnFileFailure(fileName, e)) {
 483                                throw;
 484                            }
 485            }
 486          }
 487        }
 488      }
 489      catch (Exception e) {
 490                if (!OnDirectoryFailure(directory, e)) {
 491                    throw;
 492                }
 493      }
 494
 495      if ( alive_ && recurse ) {
 496        try {
 497          string[] names = System.IO.Directory.GetDirectories(directory);
 498          foreach (string fulldir in names) {
 499            if ((directoryFilter_ == null) || (directoryFilter_.IsMatch(fulldir))) {
 500              ScanDir(fulldir, true);
 501              if ( !alive_ ) {
 502                break;
 503              }
 504            }
 505          }
 506        }
 507        catch (Exception e) {
 508                    if (!OnDirectoryFailure(directory, e)) {
 509                        throw;
 510                    }
 511        }
 512      }
 513    }
 514
 515    #region Instance Fields
 516    /// <summary>
 517    /// The file filter currently in use.
 518    /// </summary>
 519    IScanFilter fileFilter_;
 520    /// <summary>
 521    /// The directory filter currently in use.
 522    /// </summary>
 523    IScanFilter directoryFilter_;
 524    /// <summary>
 525    /// Flag indicating if scanning should continue running.
 526    /// </summary>
 527    bool alive_;
 528    #endregion
 529  }
 530}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressHandler.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressHandler.htm new file mode 100644 index 000000000..f2a3ab37f --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.ProgressHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ProgressHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressMessageHandler.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressMessageHandler.htm new file mode 100644 index 000000000..6c8376acc --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressMessageHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_RawTaggedData.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_RawTaggedData.htm new file mode 100644 index 000000000..d4a51bef2 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_RawTaggedData.htm @@ -0,0 +1,1031 @@ + + + + +ICSharpCode.SharpZipLib.Zip.RawTaggedData - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.RawTaggedData
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipExtraData.cs
Covered lines:0
Uncovered lines:13
Coverable lines:13
Total lines:987
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
SetData(...)200
GetData()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipExtraData.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// ZipExtraData.cs
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36
 37using System;
 38using System.IO;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42  // TODO: Sort out wether tagged data is useful and what a good implementation might look like.
 43  // Its just a sketch of an idea at the moment.
 44
 45  /// <summary>
 46  /// ExtraData tagged value interface.
 47  /// </summary>
 48  public interface ITaggedData
 49  {
 50    /// <summary>
 51    /// Get the ID for this tagged data value.
 52    /// </summary>
 53    short TagID { get; }
 54
 55    /// <summary>
 56    /// Set the contents of this instance from the data passed.
 57    /// </summary>
 58    /// <param name="data">The data to extract contents from.</param>
 59    /// <param name="offset">The offset to begin extracting data from.</param>
 60    /// <param name="count">The number of bytes to extract.</param>
 61    void SetData(byte[] data, int offset, int count);
 62
 63    /// <summary>
 64    /// Get the data representing this instance.
 65    /// </summary>
 66    /// <returns>Returns the data for this instance.</returns>
 67    byte[] GetData();
 68  }
 69
 70  /// <summary>
 71  /// A raw binary tagged value
 72  /// </summary>
 73  public class RawTaggedData : ITaggedData
 74  {
 75    /// <summary>
 76    /// Initialise a new instance.
 77    /// </summary>
 78    /// <param name="tag">The tag ID.</param>
 079    public RawTaggedData(short tag)
 80    {
 081      _tag = tag;
 082    }
 83
 84    #region ITaggedData Members
 85
 86    /// <summary>
 87    /// Get the ID for this tagged data value.
 88    /// </summary>
 89    public short TagID
 90    {
 091      get { return _tag; }
 092      set { _tag = value; }
 93    }
 94
 95    /// <summary>
 96    /// Set the data from the raw values provided.
 97    /// </summary>
 98    /// <param name="data">The raw data to extract values from.</param>
 99    /// <param name="offset">The index to start extracting values from.</param>
 100    /// <param name="count">The number of bytes available.</param>
 101    public void SetData(byte[] data, int offset, int count)
 102    {
 0103       if( data==null )
 104      {
 0105        throw new ArgumentNullException(nameof(data));
 106      }
 107
 0108      _data=new byte[count];
 0109      Array.Copy(data, offset, _data, 0, count);
 0110    }
 111
 112    /// <summary>
 113    /// Get the binary data representing this instance.
 114    /// </summary>
 115    /// <returns>The raw binary data representing this instance.</returns>
 116    public byte[] GetData()
 117    {
 0118      return _data;
 119    }
 120
 121    #endregion
 122
 123    /// <summary>
 124    /// Get /set the binary data representing this instance.
 125    /// </summary>
 126    /// <returns>The raw binary data representing this instance.</returns>
 127    public byte[] Data
 128    {
 0129      get { return _data; }
 0130      set { _data=value; }
 131    }
 132
 133    #region Instance Fields
 134    /// <summary>
 135    /// The tag ID for this instance.
 136    /// </summary>
 137    short _tag;
 138
 139    byte[] _data;
 140    #endregion
 141  }
 142
 143  /// <summary>
 144  /// Class representing extended unix date time values.
 145  /// </summary>
 146  public class ExtendedUnixData : ITaggedData
 147  {
 148    /// <summary>
 149    /// Flags indicate which values are included in this instance.
 150    /// </summary>
 151    [Flags]
 152    public enum Flags : byte
 153    {
 154      /// <summary>
 155      /// The modification time is included
 156      /// </summary>
 157      ModificationTime = 0x01,
 158
 159      /// <summary>
 160      /// The access time is included
 161      /// </summary>
 162      AccessTime = 0x02,
 163
 164      /// <summary>
 165      /// The create time is included.
 166      /// </summary>
 167      CreateTime = 0x04,
 168    }
 169
 170    #region ITaggedData Members
 171
 172    /// <summary>
 173    /// Get the ID
 174    /// </summary>
 175    public short TagID
 176    {
 177      get { return 0x5455; }
 178    }
 179
 180    /// <summary>
 181    /// Set the data from the raw values provided.
 182    /// </summary>
 183    /// <param name="data">The raw data to extract values from.</param>
 184    /// <param name="index">The index to start extracting values from.</param>
 185    /// <param name="count">The number of bytes available.</param>
 186    public void SetData(byte[] data, int index, int count)
 187    {
 188      using (MemoryStream ms = new MemoryStream(data, index, count, false))
 189      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 190      {
 191        // bit 0           if set, modification time is present
 192        // bit 1           if set, access time is present
 193        // bit 2           if set, creation time is present
 194
 195        _flags = (Flags)helperStream.ReadByte();
 196        if (((_flags & Flags.ModificationTime) != 0) && (count >= 5))
 197        {
 198          int iTime = helperStream.ReadLEInt();
 199
 200          _modificationTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 201            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 202        }
 203
 204        if ((_flags & Flags.AccessTime) != 0)
 205        {
 206          int iTime = helperStream.ReadLEInt();
 207
 208          _lastAccessTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 209            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 210        }
 211
 212        if ((_flags & Flags.CreateTime) != 0)
 213        {
 214          int iTime = helperStream.ReadLEInt();
 215
 216          _createTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 217            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 218        }
 219      }
 220    }
 221
 222    /// <summary>
 223    /// Get the binary data representing this instance.
 224    /// </summary>
 225    /// <returns>The raw binary data representing this instance.</returns>
 226    public byte[] GetData()
 227    {
 228      using (MemoryStream ms = new MemoryStream())
 229      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 230      {
 231        helperStream.IsStreamOwner = false;
 232        helperStream.WriteByte((byte)_flags);     // Flags
 233        if ( (_flags & Flags.ModificationTime) != 0) {
 234          TimeSpan span = _modificationTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 235          var seconds = (int)span.TotalSeconds;
 236          helperStream.WriteLEInt(seconds);
 237        }
 238        if ( (_flags & Flags.AccessTime) != 0) {
 239          TimeSpan span = _lastAccessTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 240          var seconds = (int)span.TotalSeconds;
 241          helperStream.WriteLEInt(seconds);
 242        }
 243        if ( (_flags & Flags.CreateTime) != 0) {
 244          TimeSpan span = _createTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 245          var seconds = (int)span.TotalSeconds;
 246          helperStream.WriteLEInt(seconds);
 247        }
 248        return ms.ToArray();
 249      }
 250    }
 251
 252    #endregion
 253
 254    /// <summary>
 255    /// Test a <see cref="DateTime"> value to see if is valid and can be represented here.</see>
 256    /// </summary>
 257    /// <param name="value">The <see cref="DateTime">value</see> to test.</param>
 258    /// <returns>Returns true if the value is valid and can be represented; false if not.</returns>
 259    /// <remarks>The standard Unix time is a signed integer data type, directly encoding the Unix time number,
 260    /// which is the number of seconds since 1970-01-01.
 261    /// Being 32 bits means the values here cover a range of about 136 years.
 262    /// The minimum representable time is 1901-12-13 20:45:52,
 263    /// and the maximum representable time is 2038-01-19 03:14:07.
 264    /// </remarks>
 265    public static bool IsValidValue(DateTime value)
 266    {
 267      return (( value >= new DateTime(1901, 12, 13, 20, 45, 52)) ||
 268          ( value <= new DateTime(2038, 1, 19, 03, 14, 07) ));
 269    }
 270
 271    /// <summary>
 272    /// Get /set the Modification Time
 273    /// </summary>
 274    /// <exception cref="ArgumentOutOfRangeException"></exception>
 275    /// <seealso cref="IsValidValue"></seealso>
 276    public DateTime ModificationTime
 277    {
 278      get { return _modificationTime; }
 279      set
 280      {
 281        if ( !IsValidValue(value) ) {
 282          throw new ArgumentOutOfRangeException(nameof(value));
 283        }
 284
 285        _flags |= Flags.ModificationTime;
 286        _modificationTime=value;
 287      }
 288    }
 289
 290    /// <summary>
 291    /// Get / set the Access Time
 292    /// </summary>
 293    /// <exception cref="ArgumentOutOfRangeException"></exception>
 294    /// <seealso cref="IsValidValue"></seealso>
 295    public DateTime AccessTime
 296    {
 297      get { return _lastAccessTime; }
 298      set {
 299        if ( !IsValidValue(value) ) {
 300          throw new ArgumentOutOfRangeException(nameof(value));
 301        }
 302
 303        _flags |= Flags.AccessTime;
 304        _lastAccessTime=value;
 305      }
 306    }
 307
 308    /// <summary>
 309    /// Get / Set the Create Time
 310    /// </summary>
 311    /// <exception cref="ArgumentOutOfRangeException"></exception>
 312    /// <seealso cref="IsValidValue"></seealso>
 313    public DateTime CreateTime
 314    {
 315      get { return _createTime; }
 316      set {
 317        if ( !IsValidValue(value) ) {
 318          throw new ArgumentOutOfRangeException(nameof(value));
 319        }
 320
 321        _flags |= Flags.CreateTime;
 322        _createTime=value;
 323      }
 324    }
 325
 326    /// <summary>
 327    /// Get/set the <see cref="Flags">values</see> to include.
 328    /// </summary>
 329    Flags Include
 330    {
 331      get { return _flags; }
 332      set { _flags = value; }
 333    }
 334
 335    #region Instance Fields
 336    Flags _flags;
 337    DateTime _modificationTime = new DateTime(1970,1,1);
 338    DateTime _lastAccessTime = new DateTime(1970, 1, 1);
 339    DateTime _createTime = new DateTime(1970, 1, 1);
 340    #endregion
 341  }
 342
 343  /// <summary>
 344  /// Class handling NT date time values.
 345  /// </summary>
 346  public class NTTaggedData : ITaggedData
 347  {
 348    /// <summary>
 349    /// Get the ID for this tagged data value.
 350    /// </summary>
 351    public short TagID
 352    {
 353      get { return 10; }
 354    }
 355
 356    /// <summary>
 357    /// Set the data from the raw values provided.
 358    /// </summary>
 359    /// <param name="data">The raw data to extract values from.</param>
 360    /// <param name="index">The index to start extracting values from.</param>
 361    /// <param name="count">The number of bytes available.</param>
 362    public void SetData(byte[] data, int index, int count)
 363    {
 364      using (MemoryStream ms = new MemoryStream(data, index, count, false))
 365      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 366      {
 367        helperStream.ReadLEInt(); // Reserved
 368        while (helperStream.Position < helperStream.Length)
 369        {
 370          int ntfsTag = helperStream.ReadLEShort();
 371          int ntfsLength = helperStream.ReadLEShort();
 372          if (ntfsTag == 1)
 373          {
 374            if (ntfsLength >= 24)
 375            {
 376              long lastModificationTicks = helperStream.ReadLELong();
 377              _lastModificationTime = DateTime.FromFileTime(lastModificationTicks);
 378
 379              long lastAccessTicks = helperStream.ReadLELong();
 380              _lastAccessTime = DateTime.FromFileTime(lastAccessTicks);
 381
 382              long createTimeTicks = helperStream.ReadLELong();
 383              _createTime = DateTime.FromFileTime(createTimeTicks);
 384            }
 385            break;
 386          }
 387          else
 388          {
 389            // An unknown NTFS tag so simply skip it.
 390            helperStream.Seek(ntfsLength, SeekOrigin.Current);
 391          }
 392        }
 393      }
 394    }
 395
 396    /// <summary>
 397    /// Get the binary data representing this instance.
 398    /// </summary>
 399    /// <returns>The raw binary data representing this instance.</returns>
 400    public byte[] GetData()
 401    {
 402      using (MemoryStream ms = new MemoryStream())
 403      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 404      {
 405        helperStream.IsStreamOwner = false;
 406        helperStream.WriteLEInt(0);       // Reserved
 407        helperStream.WriteLEShort(1);     // Tag
 408        helperStream.WriteLEShort(24);    // Length = 3 x 8.
 409        helperStream.WriteLELong(_lastModificationTime.ToFileTime());
 410        helperStream.WriteLELong(_lastAccessTime.ToFileTime());
 411        helperStream.WriteLELong(_createTime.ToFileTime());
 412        return ms.ToArray();
 413      }
 414    }
 415
 416    /// <summary>
 417    /// Test a <see cref="DateTime"> valuie to see if is valid and can be represented here.</see>
 418    /// </summary>
 419    /// <param name="value">The <see cref="DateTime">value</see> to test.</param>
 420    /// <returns>Returns true if the value is valid and can be represented; false if not.</returns>
 421    /// <remarks>
 422    /// NTFS filetimes are 64-bit unsigned integers, stored in Intel
 423    /// (least significant byte first) byte order. They determine the
 424    /// number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch",
 425    /// which is "01-Jan-1601 00:00:00 UTC". 28 May 60056 is the upper limit
 426    /// </remarks>
 427    public static bool IsValidValue(DateTime value)
 428    {
 429      bool result = true;
 430      try
 431      {
 432        value.ToFileTimeUtc();
 433      }
 434      catch
 435      {
 436        result = false;
 437      }
 438      return result;
 439    }
 440
 441    /// <summary>
 442    /// Get/set the <see cref="DateTime">last modification time</see>.
 443    /// </summary>
 444    public DateTime LastModificationTime
 445    {
 446      get { return _lastModificationTime; }
 447      set {
 448        if (! IsValidValue(value))
 449        {
 450          throw new ArgumentOutOfRangeException(nameof(value));
 451        }
 452        _lastModificationTime = value;
 453      }
 454    }
 455
 456    /// <summary>
 457    /// Get /set the <see cref="DateTime">create time</see>
 458    /// </summary>
 459    public DateTime CreateTime
 460    {
 461      get { return _createTime; }
 462      set {
 463        if ( !IsValidValue(value)) {
 464          throw new ArgumentOutOfRangeException(nameof(value));
 465        }
 466        _createTime = value;
 467      }
 468    }
 469
 470    /// <summary>
 471    /// Get /set the <see cref="DateTime">last access time</see>.
 472    /// </summary>
 473    public DateTime LastAccessTime
 474    {
 475      get { return _lastAccessTime; }
 476      set {
 477        if (!IsValidValue(value)) {
 478          throw new ArgumentOutOfRangeException(nameof(value));
 479        }
 480        _lastAccessTime = value;
 481      }
 482    }
 483
 484    #region Instance Fields
 485    DateTime _lastAccessTime = DateTime.FromFileTime(0);
 486    DateTime _lastModificationTime = DateTime.FromFileTime(0);
 487    DateTime _createTime = DateTime.FromFileTime(0);
 488    #endregion
 489  }
 490
 491  /// <summary>
 492  /// A factory that creates <see cref="ITaggedData">tagged data</see> instances.
 493  /// </summary>
 494  interface ITaggedDataFactory
 495  {
 496    /// <summary>
 497    /// Get data for a specific tag value.
 498    /// </summary>
 499    /// <param name="tag">The tag ID to find.</param>
 500    /// <param name="data">The data to search.</param>
 501    /// <param name="offset">The offset to begin extracting data from.</param>
 502    /// <param name="count">The number of bytes to extract.</param>
 503    /// <returns>The located <see cref="ITaggedData">value found</see>, or null if not found.</returns>
 504    ITaggedData Create(short tag, byte[] data, int offset, int count);
 505  }
 506
 507  ///
 508  /// <summary>
 509  /// A class to handle the extra data field for Zip entries
 510  /// </summary>
 511  /// <remarks>
 512  /// Extra data contains 0 or more values each prefixed by a header tag and length.
 513  /// They contain zero or more bytes of actual data.
 514  /// The data is held internally using a copy on write strategy.  This is more efficient but
 515  /// means that for extra data created by passing in data can have the values modified by the caller
 516  /// in some circumstances.
 517  /// </remarks>
 518  sealed public class ZipExtraData : IDisposable
 519  {
 520    #region Constructors
 521    /// <summary>
 522    /// Initialise a default instance.
 523    /// </summary>
 524    public ZipExtraData()
 525    {
 526      Clear();
 527    }
 528
 529    /// <summary>
 530    /// Initialise with known extra data.
 531    /// </summary>
 532    /// <param name="data">The extra data.</param>
 533    public ZipExtraData(byte[] data)
 534    {
 535      if ( data == null )
 536      {
 537        _data = new byte[0];
 538      }
 539      else
 540      {
 541        _data = data;
 542      }
 543    }
 544    #endregion
 545
 546    /// <summary>
 547    /// Get the raw extra data value
 548    /// </summary>
 549    /// <returns>Returns the raw byte[] extra data this instance represents.</returns>
 550    public byte[] GetEntryData()
 551    {
 552      if ( Length > ushort.MaxValue ) {
 553        throw new ZipException("Data exceeds maximum length");
 554      }
 555
 556      return (byte[])_data.Clone();
 557    }
 558
 559    /// <summary>
 560    /// Clear the stored data.
 561    /// </summary>
 562    public void Clear()
 563    {
 564      if ( (_data == null) || (_data.Length != 0) ) {
 565        _data = new byte[0];
 566      }
 567    }
 568
 569    /// <summary>
 570    /// Gets the current extra data length.
 571    /// </summary>
 572    public int Length
 573    {
 574      get { return _data.Length; }
 575    }
 576
 577    /// <summary>
 578    /// Get a read-only <see cref="Stream"/> for the associated tag.
 579    /// </summary>
 580    /// <param name="tag">The tag to locate data for.</param>
 581    /// <returns>Returns a <see cref="Stream"/> containing tag data or null if no tag was found.</returns>
 582    public Stream GetStreamForTag(int tag)
 583    {
 584      Stream result = null;
 585      if ( Find(tag) ) {
 586        result = new MemoryStream(_data, _index, _readValueLength, false);
 587      }
 588      return result;
 589    }
 590
 591    /// <summary>
 592    /// Get the <see cref="ITaggedData">tagged data</see> for a tag.
 593    /// </summary>
 594    /// <param name="tag">The tag to search for.</param>
 595    /// <returns>Returns a <see cref="ITaggedData">tagged value</see> or null if none found.</returns>
 596    private ITaggedData GetData(short tag)
 597    {
 598      ITaggedData result = null;
 599      if (Find(tag))
 600      {
 601        result = Create(tag, _data, _readValueStart, _readValueLength);
 602      }
 603      return result;
 604    }
 605
 606    static ITaggedData Create(short tag, byte[] data, int offset, int count)
 607    {
 608      ITaggedData result = null;
 609      switch ( tag )
 610      {
 611        case 0x000A:
 612          result = new NTTaggedData();
 613          break;
 614        case 0x5455:
 615          result = new ExtendedUnixData();
 616          break;
 617        default:
 618          result = new RawTaggedData(tag);
 619          break;
 620      }
 621      result.SetData(data, offset, count);
 622      return result;
 623    }
 624
 625    /// <summary>
 626    /// Get the length of the last value found by <see cref="Find"/>
 627    /// </summary>
 628    /// <remarks>This is only valid if <see cref="Find"/> has previously returned true.</remarks>
 629    public int ValueLength
 630    {
 631      get { return _readValueLength; }
 632    }
 633
 634    /// <summary>
 635    /// Get the index for the current read value.
 636    /// </summary>
 637    /// <remarks>This is only valid if <see cref="Find"/> has previously returned true.
 638    /// Initially the result will be the index of the first byte of actual data.  The value is updated after calls to
 639    /// <see cref="ReadInt"/>, <see cref="ReadShort"/> and <see cref="ReadLong"/>. </remarks>
 640    public int CurrentReadIndex
 641    {
 642      get { return _index; }
 643    }
 644
 645    /// <summary>
 646    /// Get the number of bytes remaining to be read for the current value;
 647    /// </summary>
 648    public int UnreadCount
 649    {
 650      get
 651      {
 652        if ((_readValueStart > _data.Length) ||
 653          (_readValueStart < 4) ) {
 654          throw new ZipException("Find must be called before calling a Read method");
 655        }
 656
 657        return _readValueStart + _readValueLength - _index;
 658      }
 659    }
 660
 661    /// <summary>
 662    /// Find an extra data value
 663    /// </summary>
 664    /// <param name="headerID">The identifier for the value to find.</param>
 665    /// <returns>Returns true if the value was found; false otherwise.</returns>
 666    public bool Find(int headerID)
 667    {
 668      _readValueStart = _data.Length;
 669      _readValueLength = 0;
 670      _index = 0;
 671
 672      int localLength = _readValueStart;
 673      int localTag = headerID - 1;
 674
 675      // Trailing bytes that cant make up an entry (as there arent enough
 676      // bytes for a tag and length) are ignored!
 677      while ( (localTag != headerID) && (_index < _data.Length - 3) ) {
 678        localTag = ReadShortInternal();
 679        localLength = ReadShortInternal();
 680        if ( localTag != headerID ) {
 681          _index += localLength;
 682        }
 683      }
 684
 685      bool result = (localTag == headerID) && ((_index + localLength) <= _data.Length);
 686
 687      if ( result ) {
 688        _readValueStart = _index;
 689        _readValueLength = localLength;
 690      }
 691
 692      return result;
 693    }
 694
 695    /// <summary>
 696    /// Add a new entry to extra data.
 697    /// </summary>
 698    /// <param name="taggedData">The <see cref="ITaggedData"/> value to add.</param>
 699    public void AddEntry(ITaggedData taggedData)
 700    {
 701      if (taggedData == null)
 702      {
 703        throw new ArgumentNullException(nameof(taggedData));
 704      }
 705      AddEntry(taggedData.TagID, taggedData.GetData());
 706    }
 707
 708    /// <summary>
 709    /// Add a new entry to extra data
 710    /// </summary>
 711    /// <param name="headerID">The ID for this entry.</param>
 712    /// <param name="fieldData">The data to add.</param>
 713    /// <remarks>If the ID already exists its contents are replaced.</remarks>
 714    public void AddEntry(int headerID, byte[] fieldData)
 715    {
 716      if ( (headerID > ushort.MaxValue) || (headerID < 0)) {
 717        throw new ArgumentOutOfRangeException(nameof(headerID));
 718      }
 719
 720      int addLength = (fieldData == null) ? 0 : fieldData.Length;
 721
 722      if ( addLength > ushort.MaxValue ) {
 723#if NETCF_1_0
 724        throw new ArgumentOutOfRangeException("fieldData");
 725#else
 726        throw new ArgumentOutOfRangeException(nameof(fieldData), "exceeds maximum length");
 727#endif
 728      }
 729
 730      // Test for new length before adjusting data.
 731      int newLength = _data.Length + addLength + 4;
 732
 733      if ( Find(headerID) )
 734      {
 735        newLength -= (ValueLength + 4);
 736      }
 737
 738      if ( newLength > ushort.MaxValue ) {
 739        throw new ZipException("Data exceeds maximum length");
 740      }
 741
 742      Delete(headerID);
 743
 744      byte[] newData = new byte[newLength];
 745      _data.CopyTo(newData, 0);
 746      int index = _data.Length;
 747      _data = newData;
 748      SetShort(ref index, headerID);
 749      SetShort(ref index, addLength);
 750      if ( fieldData != null ) {
 751        fieldData.CopyTo(newData, index);
 752      }
 753    }
 754
 755    /// <summary>
 756    /// Start adding a new entry.
 757    /// </summary>
 758    /// <remarks>Add data using <see cref="AddData(byte[])"/>, <see cref="AddLeShort"/>, <see cref="AddLeInt"/>, or <see
 759    /// The new entry is completed and actually added by calling <see cref="AddNewEntry"/></remarks>
 760    /// <seealso cref="AddEntry(ITaggedData)"/>
 761    public void StartNewEntry()
 762    {
 763      _newEntry = new MemoryStream();
 764    }
 765
 766    /// <summary>
 767    /// Add entry data added since <see cref="StartNewEntry"/> using the ID passed.
 768    /// </summary>
 769    /// <param name="headerID">The identifier to use for this entry.</param>
 770    public void AddNewEntry(int headerID)
 771    {
 772      byte[] newData = _newEntry.ToArray();
 773      _newEntry = null;
 774      AddEntry(headerID, newData);
 775    }
 776
 777    /// <summary>
 778    /// Add a byte of data to the pending new entry.
 779    /// </summary>
 780    /// <param name="data">The byte to add.</param>
 781    /// <seealso cref="StartNewEntry"/>
 782    public void AddData(byte data)
 783    {
 784      _newEntry.WriteByte(data);
 785    }
 786
 787    /// <summary>
 788    /// Add data to a pending new entry.
 789    /// </summary>
 790    /// <param name="data">The data to add.</param>
 791    /// <seealso cref="StartNewEntry"/>
 792    public void AddData(byte[] data)
 793    {
 794      if ( data == null ) {
 795        throw new ArgumentNullException(nameof(data));
 796      }
 797
 798      _newEntry.Write(data, 0, data.Length);
 799    }
 800
 801    /// <summary>
 802    /// Add a short value in little endian order to the pending new entry.
 803    /// </summary>
 804    /// <param name="toAdd">The data to add.</param>
 805    /// <seealso cref="StartNewEntry"/>
 806    public void AddLeShort(int toAdd)
 807    {
 808      unchecked {
 809        _newEntry.WriteByte(( byte )toAdd);
 810        _newEntry.WriteByte(( byte )(toAdd >> 8));
 811      }
 812    }
 813
 814    /// <summary>
 815    /// Add an integer value in little endian order to the pending new entry.
 816    /// </summary>
 817    /// <param name="toAdd">The data to add.</param>
 818    /// <seealso cref="StartNewEntry"/>
 819    public void AddLeInt(int toAdd)
 820    {
 821      unchecked {
 822        AddLeShort(( short )toAdd);
 823        AddLeShort(( short )(toAdd >> 16));
 824      }
 825    }
 826
 827    /// <summary>
 828    /// Add a long value in little endian order to the pending new entry.
 829    /// </summary>
 830    /// <param name="toAdd">The data to add.</param>
 831    /// <seealso cref="StartNewEntry"/>
 832    public void AddLeLong(long toAdd)
 833    {
 834      unchecked {
 835        AddLeInt(( int )(toAdd & 0xffffffff));
 836        AddLeInt(( int )(toAdd >> 32));
 837      }
 838    }
 839
 840    /// <summary>
 841    /// Delete an extra data field.
 842    /// </summary>
 843    /// <param name="headerID">The identifier of the field to delete.</param>
 844    /// <returns>Returns true if the field was found and deleted.</returns>
 845    public bool Delete(int headerID)
 846    {
 847      bool result = false;
 848
 849      if ( Find(headerID) ) {
 850        result = true;
 851        int trueStart = _readValueStart - 4;
 852
 853        byte[] newData = new byte[_data.Length - (ValueLength + 4)];
 854        Array.Copy(_data, 0, newData, 0, trueStart);
 855
 856        int trueEnd = trueStart + ValueLength + 4;
 857        Array.Copy(_data, trueEnd, newData, trueStart, _data.Length - trueEnd);
 858        _data = newData;
 859      }
 860      return result;
 861    }
 862
 863    #region Reading Support
 864    /// <summary>
 865    /// Read a long in little endian form from the last <see cref="Find">found</see> data value
 866    /// </summary>
 867    /// <returns>Returns the long value read.</returns>
 868    public long ReadLong()
 869    {
 870      ReadCheck(8);
 871      return (ReadInt() & 0xffffffff) | ((( long )ReadInt()) << 32);
 872    }
 873
 874    /// <summary>
 875    /// Read an integer in little endian form from the last <see cref="Find">found</see> data value.
 876    /// </summary>
 877    /// <returns>Returns the integer read.</returns>
 878    public int ReadInt()
 879    {
 880      ReadCheck(4);
 881
 882      int result = _data[_index] + (_data[_index + 1] << 8) +
 883        (_data[_index + 2] << 16) + (_data[_index + 3] << 24);
 884      _index += 4;
 885      return result;
 886    }
 887
 888    /// <summary>
 889    /// Read a short value in little endian form from the last <see cref="Find">found</see> data value.
 890    /// </summary>
 891    /// <returns>Returns the short value read.</returns>
 892    public int ReadShort()
 893    {
 894      ReadCheck(2);
 895      int result = _data[_index] + (_data[_index + 1] << 8);
 896      _index += 2;
 897      return result;
 898    }
 899
 900    /// <summary>
 901    /// Read a byte from an extra data
 902    /// </summary>
 903    /// <returns>The byte value read or -1 if the end of data has been reached.</returns>
 904    public int ReadByte()
 905    {
 906      int result = -1;
 907      if ( (_index < _data.Length) && (_readValueStart + _readValueLength > _index) ) {
 908        result = _data[_index];
 909        _index += 1;
 910      }
 911      return result;
 912    }
 913
 914    /// <summary>
 915    /// Skip data during reading.
 916    /// </summary>
 917    /// <param name="amount">The number of bytes to skip.</param>
 918    public void Skip(int amount)
 919    {
 920      ReadCheck(amount);
 921      _index += amount;
 922    }
 923
 924    void ReadCheck(int length)
 925    {
 926      if ((_readValueStart > _data.Length) ||
 927        (_readValueStart < 4) ) {
 928        throw new ZipException("Find must be called before calling a Read method");
 929      }
 930
 931      if (_index > _readValueStart + _readValueLength - length ) {
 932        throw new ZipException("End of extra data");
 933      }
 934
 935            if ( _index + length < 4 ) {
 936                throw new ZipException("Cannot read before start of tag");
 937            }
 938    }
 939
 940    /// <summary>
 941    /// Internal form of <see cref="ReadShort"/> that reads data at any location.
 942    /// </summary>
 943    /// <returns>Returns the short value read.</returns>
 944    int ReadShortInternal()
 945    {
 946      if ( _index > _data.Length - 2) {
 947        throw new ZipException("End of extra data");
 948      }
 949
 950      int result = _data[_index] + (_data[_index + 1] << 8);
 951      _index += 2;
 952      return result;
 953    }
 954
 955    void SetShort(ref int index, int source)
 956    {
 957      _data[index] = (byte)source;
 958      _data[index + 1] = (byte)(source >> 8);
 959      index += 2;
 960    }
 961
 962    #endregion
 963
 964    #region IDisposable Members
 965
 966    /// <summary>
 967    /// Dispose of this instance.
 968    /// </summary>
 969    public void Dispose()
 970    {
 971      if ( _newEntry != null ) {
 972        _newEntry.Close();
 973      }
 974    }
 975
 976    #endregion
 977
 978    #region Instance Fields
 979    int _index;
 980    int _readValueStart;
 981    int _readValueLength;
 982
 983    MemoryStream _newEntry;
 984    byte[] _data;
 985    #endregion
 986  }
 987}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ScanEventArgs.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ScanEventArgs.htm new file mode 100644 index 000000000..3c9d4a736 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ScanEventArgs.htm @@ -0,0 +1,571 @@ + + + + +ICSharpCode.SharpZipLib.Core.ScanEventArgs - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ScanEventArgs
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs
Covered lines:6
Uncovered lines:1
Coverable lines:7
Total lines:530
Line coverage:85.7%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// FileSystemScanner.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36
 37using System;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  #region EventArgs
 42  /// <summary>
 43  /// Event arguments for scanning.
 44  /// </summary>
 45  public class ScanEventArgs : EventArgs
 46  {
 47    #region Constructors
 48    /// <summary>
 49    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 50    /// </summary>
 51    /// <param name="name">The file or directory name.</param>
 552    public ScanEventArgs(string name)
 53    {
 554      name_ = name;
 555    }
 56    #endregion
 57
 58    /// <summary>
 59    /// The file or directory name for this event.
 60    /// </summary>
 61    public string Name
 62    {
 1363      get { return name_; }
 64    }
 65
 66    /// <summary>
 67    /// Get set a value indicating if scanning should continue or not.
 68    /// </summary>
 69    public bool ContinueRunning
 70    {
 971      get { return continueRunning_; }
 072      set { continueRunning_ = value; }
 73    }
 74
 75    #region Instance Fields
 76    string name_;
 577    bool continueRunning_ = true;
 78    #endregion
 79  }
 80
 81  /// <summary>
 82  /// Event arguments during processing of a single file or directory.
 83  /// </summary>
 84  public class ProgressEventArgs : EventArgs
 85  {
 86    #region Constructors
 87    /// <summary>
 88    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 89    /// </summary>
 90    /// <param name="name">The file or directory name if known.</param>
 91    /// <param name="processed">The number of bytes processed so far</param>
 92    /// <param name="target">The total number of bytes to process, 0 if not known</param>
 93    public ProgressEventArgs(string name, long processed, long target)
 94    {
 95      name_ = name;
 96      processed_ = processed;
 97      target_ = target;
 98    }
 99    #endregion
 100
 101    /// <summary>
 102    /// The name for this event if known.
 103    /// </summary>
 104    public string Name
 105    {
 106      get { return name_; }
 107    }
 108
 109    /// <summary>
 110    /// Get set a value indicating wether scanning should continue or not.
 111    /// </summary>
 112    public bool ContinueRunning
 113    {
 114      get { return continueRunning_; }
 115      set { continueRunning_ = value; }
 116    }
 117
 118    /// <summary>
 119    /// Get a percentage representing how much of the <see cref="Target"></see> has been processed
 120    /// </summary>
 121    /// <value>0.0 to 100.0 percent; 0 if target is not known.</value>
 122    public float PercentComplete
 123    {
 124      get
 125      {
 126          float result;
 127        if (target_ <= 0)
 128        {
 129          result = 0;
 130        }
 131        else
 132        {
 133          result = ((float)processed_ / (float)target_) * 100.0f;
 134        }
 135          return result;
 136      }
 137    }
 138
 139    /// <summary>
 140    /// The number of bytes processed so far
 141    /// </summary>
 142    public long Processed
 143    {
 144      get { return processed_; }
 145    }
 146
 147    /// <summary>
 148    /// The number of bytes to process.
 149    /// </summary>
 150    /// <remarks>Target may be 0 or negative if the value isnt known.</remarks>
 151    public long Target
 152    {
 153      get { return target_; }
 154    }
 155
 156    #region Instance Fields
 157    string name_;
 158    long processed_;
 159    long target_;
 160    bool continueRunning_ = true;
 161    #endregion
 162  }
 163
 164  /// <summary>
 165  /// Event arguments for directories.
 166  /// </summary>
 167  public class DirectoryEventArgs : ScanEventArgs
 168  {
 169    #region Constructors
 170    /// <summary>
 171    /// Initialize an instance of <see cref="DirectoryEventArgs"></see>.
 172    /// </summary>
 173    /// <param name="name">The name for this directory.</param>
 174    /// <param name="hasMatchingFiles">Flag value indicating if any matching files are contained in this directory.</par
 175    public DirectoryEventArgs(string name, bool hasMatchingFiles)
 176      : base (name)
 177    {
 178      hasMatchingFiles_ = hasMatchingFiles;
 179    }
 180    #endregion
 181
 182    /// <summary>
 183    /// Get a value indicating if the directory contains any matching files or not.
 184    /// </summary>
 185    public bool HasMatchingFiles
 186    {
 187      get { return hasMatchingFiles_; }
 188    }
 189
 190    readonly
 191
 192    #region Instance Fields
 193    bool hasMatchingFiles_;
 194    #endregion
 195  }
 196
 197  /// <summary>
 198  /// Arguments passed when scan failures are detected.
 199  /// </summary>
 200  public class ScanFailureEventArgs : EventArgs
 201  {
 202    #region Constructors
 203    /// <summary>
 204    /// Initialise a new instance of <see cref="ScanFailureEventArgs"></see>
 205    /// </summary>
 206    /// <param name="name">The name to apply.</param>
 207    /// <param name="e">The exception to use.</param>
 208    public ScanFailureEventArgs(string name, Exception e)
 209    {
 210      name_ = name;
 211      exception_ = e;
 212      continueRunning_ = true;
 213    }
 214    #endregion
 215
 216    /// <summary>
 217    /// The applicable name.
 218    /// </summary>
 219    public string Name
 220    {
 221      get { return name_; }
 222    }
 223
 224    /// <summary>
 225    /// The applicable exception.
 226    /// </summary>
 227    public Exception Exception
 228    {
 229      get { return exception_; }
 230    }
 231
 232    /// <summary>
 233    /// Get / set a value indicating wether scanning should continue.
 234    /// </summary>
 235    public bool ContinueRunning
 236    {
 237      get { return continueRunning_; }
 238      set { continueRunning_ = value; }
 239    }
 240
 241    #region Instance Fields
 242    string name_;
 243    Exception exception_;
 244    bool continueRunning_;
 245    #endregion
 246  }
 247
 248  #endregion
 249
 250  #region Delegates
 251  /// <summary>
 252  /// Delegate invoked before starting to process a file.
 253  /// </summary>
 254  /// <param name="sender">The source of the event</param>
 255  /// <param name="e">The event arguments.</param>
 256  public delegate void ProcessFileHandler(object sender, ScanEventArgs e);
 257
 258  /// <summary>
 259  /// Delegate invoked during processing of a file or directory
 260  /// </summary>
 261  /// <param name="sender">The source of the event</param>
 262  /// <param name="e">The event arguments.</param>
 263  public delegate void ProgressHandler(object sender, ProgressEventArgs e);
 264
 265  /// <summary>
 266  /// Delegate invoked when a file has been completely processed.
 267  /// </summary>
 268  /// <param name="sender">The source of the event</param>
 269  /// <param name="e">The event arguments.</param>
 270  public delegate void CompletedFileHandler(object sender, ScanEventArgs e);
 271
 272  /// <summary>
 273  /// Delegate invoked when a directory failure is detected.
 274  /// </summary>
 275  /// <param name="sender">The source of the event</param>
 276  /// <param name="e">The event arguments.</param>
 277  public delegate void DirectoryFailureHandler(object sender, ScanFailureEventArgs e);
 278
 279  /// <summary>
 280  /// Delegate invoked when a file failure is detected.
 281  /// </summary>
 282  /// <param name="sender">The source of the event</param>
 283  /// <param name="e">The event arguments.</param>
 284  public delegate void FileFailureHandler(object sender, ScanFailureEventArgs e);
 285  #endregion
 286
 287  /// <summary>
 288  /// FileSystemScanner provides facilities scanning of files and directories.
 289  /// </summary>
 290  public class FileSystemScanner
 291  {
 292    #region Constructors
 293    /// <summary>
 294    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 295    /// </summary>
 296    /// <param name="filter">The <see cref="PathFilter">file filter</see> to apply when scanning.</param>
 297    public FileSystemScanner(string filter)
 298    {
 299      fileFilter_ = new PathFilter(filter);
 300    }
 301
 302    /// <summary>
 303    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 304    /// </summary>
 305    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 306    /// <param name="directoryFilter">The <see cref="PathFilter"> directory filter</see> to apply.</param>
 307    public FileSystemScanner(string fileFilter, string directoryFilter)
 308    {
 309      fileFilter_ = new PathFilter(fileFilter);
 310      directoryFilter_ = new PathFilter(directoryFilter);
 311    }
 312
 313    /// <summary>
 314    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 315    /// </summary>
 316    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see> to apply.</param>
 317    public FileSystemScanner(IScanFilter fileFilter)
 318    {
 319      fileFilter_ = fileFilter;
 320    }
 321
 322    /// <summary>
 323    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 324    /// </summary>
 325    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see>  to apply.</param>
 326    /// <param name="directoryFilter">The directory <see cref="IScanFilter">filter</see>  to apply.</param>
 327    public FileSystemScanner(IScanFilter fileFilter, IScanFilter directoryFilter)
 328    {
 329      fileFilter_ = fileFilter;
 330      directoryFilter_ = directoryFilter;
 331    }
 332    #endregion
 333
 334    #region Delegates
 335    /// <summary>
 336    /// Delegate to invoke when a directory is processed.
 337    /// </summary>
 338    public event EventHandler<DirectoryEventArgs> ProcessDirectory;
 339
 340    /// <summary>
 341    /// Delegate to invoke when a file is processed.
 342    /// </summary>
 343    public ProcessFileHandler ProcessFile;
 344
 345    /// <summary>
 346    /// Delegate to invoke when processing for a file has finished.
 347    /// </summary>
 348    public CompletedFileHandler CompletedFile;
 349
 350    /// <summary>
 351    /// Delegate to invoke when a directory failure is detected.
 352    /// </summary>
 353    public DirectoryFailureHandler DirectoryFailure;
 354
 355    /// <summary>
 356    /// Delegate to invoke when a file failure is detected.
 357    /// </summary>
 358    public FileFailureHandler FileFailure;
 359    #endregion
 360
 361    /// <summary>
 362    /// Raise the DirectoryFailure event.
 363    /// </summary>
 364    /// <param name="directory">The directory name.</param>
 365    /// <param name="e">The exception detected.</param>
 366    bool OnDirectoryFailure(string directory, Exception e)
 367    {
 368            DirectoryFailureHandler handler = DirectoryFailure;
 369            bool result = (handler != null);
 370            if ( result ) {
 371        var args = new ScanFailureEventArgs(directory, e);
 372        handler(this, args);
 373        alive_ = args.ContinueRunning;
 374      }
 375            return result;
 376    }
 377
 378    /// <summary>
 379    /// Raise the FileFailure event.
 380    /// </summary>
 381    /// <param name="file">The file name.</param>
 382    /// <param name="e">The exception detected.</param>
 383    bool OnFileFailure(string file, Exception e)
 384    {
 385            FileFailureHandler handler = FileFailure;
 386
 387            bool result = (handler != null);
 388
 389      if ( result ){
 390        var args = new ScanFailureEventArgs(file, e);
 391        FileFailure(this, args);
 392        alive_ = args.ContinueRunning;
 393      }
 394            return result;
 395    }
 396
 397    /// <summary>
 398    /// Raise the ProcessFile event.
 399    /// </summary>
 400    /// <param name="file">The file name.</param>
 401    void OnProcessFile(string file)
 402    {
 403      ProcessFileHandler handler = ProcessFile;
 404
 405      if ( handler!= null ) {
 406        var args = new ScanEventArgs(file);
 407        handler(this, args);
 408        alive_ = args.ContinueRunning;
 409      }
 410    }
 411
 412    /// <summary>
 413    /// Raise the complete file event
 414    /// </summary>
 415    /// <param name="file">The file name</param>
 416    void OnCompleteFile(string file)
 417    {
 418      CompletedFileHandler handler = CompletedFile;
 419
 420      if (handler != null)
 421      {
 422        var args = new ScanEventArgs(file);
 423        handler(this, args);
 424        alive_ = args.ContinueRunning;
 425      }
 426    }
 427
 428    /// <summary>
 429    /// Raise the ProcessDirectory event.
 430    /// </summary>
 431    /// <param name="directory">The directory name.</param>
 432    /// <param name="hasMatchingFiles">Flag indicating if the directory has matching files.</param>
 433    void OnProcessDirectory(string directory, bool hasMatchingFiles)
 434    {
 435      EventHandler<DirectoryEventArgs> handler = ProcessDirectory;
 436
 437      if ( handler != null ) {
 438        var args = new DirectoryEventArgs(directory, hasMatchingFiles);
 439        handler(this, args);
 440        alive_ = args.ContinueRunning;
 441      }
 442    }
 443
 444    /// <summary>
 445    /// Scan a directory.
 446    /// </summary>
 447    /// <param name="directory">The base directory to scan.</param>
 448    /// <param name="recurse">True to recurse subdirectories, false to scan a single directory.</param>
 449    public void Scan(string directory, bool recurse)
 450    {
 451      alive_ = true;
 452      ScanDir(directory, recurse);
 453    }
 454
 455    void ScanDir(string directory, bool recurse)
 456    {
 457
 458      try {
 459        string[] names = System.IO.Directory.GetFiles(directory);
 460        bool hasMatch = false;
 461        for (int fileIndex = 0; fileIndex < names.Length; ++fileIndex) {
 462          if ( !fileFilter_.IsMatch(names[fileIndex]) ) {
 463            names[fileIndex] = null;
 464          } else {
 465            hasMatch = true;
 466          }
 467        }
 468
 469        OnProcessDirectory(directory, hasMatch);
 470
 471        if ( alive_ && hasMatch ) {
 472          foreach (string fileName in names) {
 473            try {
 474              if ( fileName != null ) {
 475                OnProcessFile(fileName);
 476                if ( !alive_ ) {
 477                  break;
 478                }
 479              }
 480            }
 481            catch (Exception e) {
 482                            if (!OnFileFailure(fileName, e)) {
 483                                throw;
 484                            }
 485            }
 486          }
 487        }
 488      }
 489      catch (Exception e) {
 490                if (!OnDirectoryFailure(directory, e)) {
 491                    throw;
 492                }
 493      }
 494
 495      if ( alive_ && recurse ) {
 496        try {
 497          string[] names = System.IO.Directory.GetDirectories(directory);
 498          foreach (string fulldir in names) {
 499            if ((directoryFilter_ == null) || (directoryFilter_.IsMatch(fulldir))) {
 500              ScanDir(fulldir, true);
 501              if ( !alive_ ) {
 502                break;
 503              }
 504            }
 505          }
 506        }
 507        catch (Exception e) {
 508                    if (!OnDirectoryFailure(directory, e)) {
 509                        throw;
 510                    }
 511        }
 512      }
 513    }
 514
 515    #region Instance Fields
 516    /// <summary>
 517    /// The file filter currently in use.
 518    /// </summary>
 519    IScanFilter fileFilter_;
 520    /// <summary>
 521    /// The directory filter currently in use.
 522    /// </summary>
 523    IScanFilter directoryFilter_;
 524    /// <summary>
 525    /// Flag indicating if scanning should continue running.
 526    /// </summary>
 527    bool alive_;
 528    #endregion
 529  }
 530}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ScanFailureEventArgs.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ScanFailureEventArgs.htm new file mode 100644 index 000000000..8f64c2537 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ScanFailureEventArgs.htm @@ -0,0 +1,571 @@ + + + + +ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs
Covered lines:0
Uncovered lines:9
Coverable lines:9
Total lines:530
Line coverage:0%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\FileSystemScanner.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// FileSystemScanner.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36
 37using System;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  #region EventArgs
 42  /// <summary>
 43  /// Event arguments for scanning.
 44  /// </summary>
 45  public class ScanEventArgs : EventArgs
 46  {
 47    #region Constructors
 48    /// <summary>
 49    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 50    /// </summary>
 51    /// <param name="name">The file or directory name.</param>
 52    public ScanEventArgs(string name)
 53    {
 54      name_ = name;
 55    }
 56    #endregion
 57
 58    /// <summary>
 59    /// The file or directory name for this event.
 60    /// </summary>
 61    public string Name
 62    {
 63      get { return name_; }
 64    }
 65
 66    /// <summary>
 67    /// Get set a value indicating if scanning should continue or not.
 68    /// </summary>
 69    public bool ContinueRunning
 70    {
 71      get { return continueRunning_; }
 72      set { continueRunning_ = value; }
 73    }
 74
 75    #region Instance Fields
 76    string name_;
 77    bool continueRunning_ = true;
 78    #endregion
 79  }
 80
 81  /// <summary>
 82  /// Event arguments during processing of a single file or directory.
 83  /// </summary>
 84  public class ProgressEventArgs : EventArgs
 85  {
 86    #region Constructors
 87    /// <summary>
 88    /// Initialise a new instance of <see cref="ScanEventArgs"/>
 89    /// </summary>
 90    /// <param name="name">The file or directory name if known.</param>
 91    /// <param name="processed">The number of bytes processed so far</param>
 92    /// <param name="target">The total number of bytes to process, 0 if not known</param>
 93    public ProgressEventArgs(string name, long processed, long target)
 94    {
 95      name_ = name;
 96      processed_ = processed;
 97      target_ = target;
 98    }
 99    #endregion
 100
 101    /// <summary>
 102    /// The name for this event if known.
 103    /// </summary>
 104    public string Name
 105    {
 106      get { return name_; }
 107    }
 108
 109    /// <summary>
 110    /// Get set a value indicating wether scanning should continue or not.
 111    /// </summary>
 112    public bool ContinueRunning
 113    {
 114      get { return continueRunning_; }
 115      set { continueRunning_ = value; }
 116    }
 117
 118    /// <summary>
 119    /// Get a percentage representing how much of the <see cref="Target"></see> has been processed
 120    /// </summary>
 121    /// <value>0.0 to 100.0 percent; 0 if target is not known.</value>
 122    public float PercentComplete
 123    {
 124      get
 125      {
 126          float result;
 127        if (target_ <= 0)
 128        {
 129          result = 0;
 130        }
 131        else
 132        {
 133          result = ((float)processed_ / (float)target_) * 100.0f;
 134        }
 135          return result;
 136      }
 137    }
 138
 139    /// <summary>
 140    /// The number of bytes processed so far
 141    /// </summary>
 142    public long Processed
 143    {
 144      get { return processed_; }
 145    }
 146
 147    /// <summary>
 148    /// The number of bytes to process.
 149    /// </summary>
 150    /// <remarks>Target may be 0 or negative if the value isnt known.</remarks>
 151    public long Target
 152    {
 153      get { return target_; }
 154    }
 155
 156    #region Instance Fields
 157    string name_;
 158    long processed_;
 159    long target_;
 160    bool continueRunning_ = true;
 161    #endregion
 162  }
 163
 164  /// <summary>
 165  /// Event arguments for directories.
 166  /// </summary>
 167  public class DirectoryEventArgs : ScanEventArgs
 168  {
 169    #region Constructors
 170    /// <summary>
 171    /// Initialize an instance of <see cref="DirectoryEventArgs"></see>.
 172    /// </summary>
 173    /// <param name="name">The name for this directory.</param>
 174    /// <param name="hasMatchingFiles">Flag value indicating if any matching files are contained in this directory.</par
 175    public DirectoryEventArgs(string name, bool hasMatchingFiles)
 176      : base (name)
 177    {
 178      hasMatchingFiles_ = hasMatchingFiles;
 179    }
 180    #endregion
 181
 182    /// <summary>
 183    /// Get a value indicating if the directory contains any matching files or not.
 184    /// </summary>
 185    public bool HasMatchingFiles
 186    {
 187      get { return hasMatchingFiles_; }
 188    }
 189
 190    readonly
 191
 192    #region Instance Fields
 193    bool hasMatchingFiles_;
 194    #endregion
 195  }
 196
 197  /// <summary>
 198  /// Arguments passed when scan failures are detected.
 199  /// </summary>
 200  public class ScanFailureEventArgs : EventArgs
 201  {
 202    #region Constructors
 203    /// <summary>
 204    /// Initialise a new instance of <see cref="ScanFailureEventArgs"></see>
 205    /// </summary>
 206    /// <param name="name">The name to apply.</param>
 207    /// <param name="e">The exception to use.</param>
 0208    public ScanFailureEventArgs(string name, Exception e)
 209    {
 0210      name_ = name;
 0211      exception_ = e;
 0212      continueRunning_ = true;
 0213    }
 214    #endregion
 215
 216    /// <summary>
 217    /// The applicable name.
 218    /// </summary>
 219    public string Name
 220    {
 0221      get { return name_; }
 222    }
 223
 224    /// <summary>
 225    /// The applicable exception.
 226    /// </summary>
 227    public Exception Exception
 228    {
 0229      get { return exception_; }
 230    }
 231
 232    /// <summary>
 233    /// Get / set a value indicating wether scanning should continue.
 234    /// </summary>
 235    public bool ContinueRunning
 236    {
 0237      get { return continueRunning_; }
 0238      set { continueRunning_ = value; }
 239    }
 240
 241    #region Instance Fields
 242    string name_;
 243    Exception exception_;
 244    bool continueRunning_;
 245    #endregion
 246  }
 247
 248  #endregion
 249
 250  #region Delegates
 251  /// <summary>
 252  /// Delegate invoked before starting to process a file.
 253  /// </summary>
 254  /// <param name="sender">The source of the event</param>
 255  /// <param name="e">The event arguments.</param>
 256  public delegate void ProcessFileHandler(object sender, ScanEventArgs e);
 257
 258  /// <summary>
 259  /// Delegate invoked during processing of a file or directory
 260  /// </summary>
 261  /// <param name="sender">The source of the event</param>
 262  /// <param name="e">The event arguments.</param>
 263  public delegate void ProgressHandler(object sender, ProgressEventArgs e);
 264
 265  /// <summary>
 266  /// Delegate invoked when a file has been completely processed.
 267  /// </summary>
 268  /// <param name="sender">The source of the event</param>
 269  /// <param name="e">The event arguments.</param>
 270  public delegate void CompletedFileHandler(object sender, ScanEventArgs e);
 271
 272  /// <summary>
 273  /// Delegate invoked when a directory failure is detected.
 274  /// </summary>
 275  /// <param name="sender">The source of the event</param>
 276  /// <param name="e">The event arguments.</param>
 277  public delegate void DirectoryFailureHandler(object sender, ScanFailureEventArgs e);
 278
 279  /// <summary>
 280  /// Delegate invoked when a file failure is detected.
 281  /// </summary>
 282  /// <param name="sender">The source of the event</param>
 283  /// <param name="e">The event arguments.</param>
 284  public delegate void FileFailureHandler(object sender, ScanFailureEventArgs e);
 285  #endregion
 286
 287  /// <summary>
 288  /// FileSystemScanner provides facilities scanning of files and directories.
 289  /// </summary>
 290  public class FileSystemScanner
 291  {
 292    #region Constructors
 293    /// <summary>
 294    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 295    /// </summary>
 296    /// <param name="filter">The <see cref="PathFilter">file filter</see> to apply when scanning.</param>
 297    public FileSystemScanner(string filter)
 298    {
 299      fileFilter_ = new PathFilter(filter);
 300    }
 301
 302    /// <summary>
 303    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 304    /// </summary>
 305    /// <param name="fileFilter">The <see cref="PathFilter">file filter</see> to apply.</param>
 306    /// <param name="directoryFilter">The <see cref="PathFilter"> directory filter</see> to apply.</param>
 307    public FileSystemScanner(string fileFilter, string directoryFilter)
 308    {
 309      fileFilter_ = new PathFilter(fileFilter);
 310      directoryFilter_ = new PathFilter(directoryFilter);
 311    }
 312
 313    /// <summary>
 314    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 315    /// </summary>
 316    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see> to apply.</param>
 317    public FileSystemScanner(IScanFilter fileFilter)
 318    {
 319      fileFilter_ = fileFilter;
 320    }
 321
 322    /// <summary>
 323    /// Initialise a new instance of <see cref="FileSystemScanner"></see>
 324    /// </summary>
 325    /// <param name="fileFilter">The file <see cref="IScanFilter">filter</see>  to apply.</param>
 326    /// <param name="directoryFilter">The directory <see cref="IScanFilter">filter</see>  to apply.</param>
 327    public FileSystemScanner(IScanFilter fileFilter, IScanFilter directoryFilter)
 328    {
 329      fileFilter_ = fileFilter;
 330      directoryFilter_ = directoryFilter;
 331    }
 332    #endregion
 333
 334    #region Delegates
 335    /// <summary>
 336    /// Delegate to invoke when a directory is processed.
 337    /// </summary>
 338    public event EventHandler<DirectoryEventArgs> ProcessDirectory;
 339
 340    /// <summary>
 341    /// Delegate to invoke when a file is processed.
 342    /// </summary>
 343    public ProcessFileHandler ProcessFile;
 344
 345    /// <summary>
 346    /// Delegate to invoke when processing for a file has finished.
 347    /// </summary>
 348    public CompletedFileHandler CompletedFile;
 349
 350    /// <summary>
 351    /// Delegate to invoke when a directory failure is detected.
 352    /// </summary>
 353    public DirectoryFailureHandler DirectoryFailure;
 354
 355    /// <summary>
 356    /// Delegate to invoke when a file failure is detected.
 357    /// </summary>
 358    public FileFailureHandler FileFailure;
 359    #endregion
 360
 361    /// <summary>
 362    /// Raise the DirectoryFailure event.
 363    /// </summary>
 364    /// <param name="directory">The directory name.</param>
 365    /// <param name="e">The exception detected.</param>
 366    bool OnDirectoryFailure(string directory, Exception e)
 367    {
 368            DirectoryFailureHandler handler = DirectoryFailure;
 369            bool result = (handler != null);
 370            if ( result ) {
 371        var args = new ScanFailureEventArgs(directory, e);
 372        handler(this, args);
 373        alive_ = args.ContinueRunning;
 374      }
 375            return result;
 376    }
 377
 378    /// <summary>
 379    /// Raise the FileFailure event.
 380    /// </summary>
 381    /// <param name="file">The file name.</param>
 382    /// <param name="e">The exception detected.</param>
 383    bool OnFileFailure(string file, Exception e)
 384    {
 385            FileFailureHandler handler = FileFailure;
 386
 387            bool result = (handler != null);
 388
 389      if ( result ){
 390        var args = new ScanFailureEventArgs(file, e);
 391        FileFailure(this, args);
 392        alive_ = args.ContinueRunning;
 393      }
 394            return result;
 395    }
 396
 397    /// <summary>
 398    /// Raise the ProcessFile event.
 399    /// </summary>
 400    /// <param name="file">The file name.</param>
 401    void OnProcessFile(string file)
 402    {
 403      ProcessFileHandler handler = ProcessFile;
 404
 405      if ( handler!= null ) {
 406        var args = new ScanEventArgs(file);
 407        handler(this, args);
 408        alive_ = args.ContinueRunning;
 409      }
 410    }
 411
 412    /// <summary>
 413    /// Raise the complete file event
 414    /// </summary>
 415    /// <param name="file">The file name</param>
 416    void OnCompleteFile(string file)
 417    {
 418      CompletedFileHandler handler = CompletedFile;
 419
 420      if (handler != null)
 421      {
 422        var args = new ScanEventArgs(file);
 423        handler(this, args);
 424        alive_ = args.ContinueRunning;
 425      }
 426    }
 427
 428    /// <summary>
 429    /// Raise the ProcessDirectory event.
 430    /// </summary>
 431    /// <param name="directory">The directory name.</param>
 432    /// <param name="hasMatchingFiles">Flag indicating if the directory has matching files.</param>
 433    void OnProcessDirectory(string directory, bool hasMatchingFiles)
 434    {
 435      EventHandler<DirectoryEventArgs> handler = ProcessDirectory;
 436
 437      if ( handler != null ) {
 438        var args = new DirectoryEventArgs(directory, hasMatchingFiles);
 439        handler(this, args);
 440        alive_ = args.ContinueRunning;
 441      }
 442    }
 443
 444    /// <summary>
 445    /// Scan a directory.
 446    /// </summary>
 447    /// <param name="directory">The base directory to scan.</param>
 448    /// <param name="recurse">True to recurse subdirectories, false to scan a single directory.</param>
 449    public void Scan(string directory, bool recurse)
 450    {
 451      alive_ = true;
 452      ScanDir(directory, recurse);
 453    }
 454
 455    void ScanDir(string directory, bool recurse)
 456    {
 457
 458      try {
 459        string[] names = System.IO.Directory.GetFiles(directory);
 460        bool hasMatch = false;
 461        for (int fileIndex = 0; fileIndex < names.Length; ++fileIndex) {
 462          if ( !fileFilter_.IsMatch(names[fileIndex]) ) {
 463            names[fileIndex] = null;
 464          } else {
 465            hasMatch = true;
 466          }
 467        }
 468
 469        OnProcessDirectory(directory, hasMatch);
 470
 471        if ( alive_ && hasMatch ) {
 472          foreach (string fileName in names) {
 473            try {
 474              if ( fileName != null ) {
 475                OnProcessFile(fileName);
 476                if ( !alive_ ) {
 477                  break;
 478                }
 479              }
 480            }
 481            catch (Exception e) {
 482                            if (!OnFileFailure(fileName, e)) {
 483                                throw;
 484                            }
 485            }
 486          }
 487        }
 488      }
 489      catch (Exception e) {
 490                if (!OnDirectoryFailure(directory, e)) {
 491                    throw;
 492                }
 493      }
 494
 495      if ( alive_ && recurse ) {
 496        try {
 497          string[] names = System.IO.Directory.GetDirectories(directory);
 498          foreach (string fulldir in names) {
 499            if ((directoryFilter_ == null) || (directoryFilter_.IsMatch(fulldir))) {
 500              ScanDir(fulldir, true);
 501              if ( !alive_ ) {
 502                break;
 503              }
 504            }
 505          }
 506        }
 507        catch (Exception e) {
 508                    if (!OnDirectoryFailure(directory, e)) {
 509                        throw;
 510                    }
 511        }
 512      }
 513    }
 514
 515    #region Instance Fields
 516    /// <summary>
 517    /// The file filter currently in use.
 518    /// </summary>
 519    IScanFilter fileFilter_;
 520    /// <summary>
 521    /// The directory filter currently in use.
 522    /// </summary>
 523    IScanFilter directoryFilter_;
 524    /// <summary>
 525    /// Flag indicating if scanning should continue running.
 526    /// </summary>
 527    bool alive_;
 528    #endregion
 529  }
 530}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_SharpZipBaseException.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_SharpZipBaseException.htm new file mode 100644 index 000000000..20fecd5af --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_SharpZipBaseException.htm @@ -0,0 +1,138 @@ + + + + +ICSharpCode.SharpZipLib.SharpZipBaseException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.SharpZipBaseException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\SharpZipBaseException.cs
Covered lines:2
Uncovered lines:6
Coverable lines:8
Total lines:94
Line coverage:25%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)1100100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\SharpZipBaseException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// SharpZipBaseException.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37
 38#if !NETCF_1_0 && !NETCF_2_0
 39using System.Runtime.Serialization;
 40#endif
 41
 42namespace ICSharpCode.SharpZipLib
 43{
 44  /// <summary>
 45  /// SharpZipBaseException is the base exception class for SharpZipLib.
 46  /// All library exceptions are derived from this.
 47  /// </summary>
 48  /// <remarks>NOTE: Not all exceptions thrown will be derived from this class.
 49  /// A variety of other exceptions are possible for example <see cref="ArgumentNullException"></see></remarks>
 50#if !NETCF_1_0 && !NETCF_2_0
 51  [Serializable]
 52#endif
 53  public class SharpZipBaseException : ApplicationException
 54  {
 55#if !NETCF_1_0 && !NETCF_2_0
 56    /// <summary>
 57    /// Deserialization constructor
 58    /// </summary>
 59    /// <param name="info"><see cref="System.Runtime.Serialization.SerializationInfo"/> for this constructor</param>
 60    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 61    protected SharpZipBaseException(SerializationInfo info, StreamingContext context )
 062      : base( info, context )
 63    {
 064    }
 65#endif
 66
 67    /// <summary>
 68    /// Initializes a new instance of the SharpZipBaseException class.
 69    /// </summary>
 070    public SharpZipBaseException()
 71    {
 072    }
 73
 74    /// <summary>
 75    /// Initializes a new instance of the SharpZipBaseException class with a specified error message.
 76    /// </summary>
 77    /// <param name="message">A message describing the exception.</param>
 78    public SharpZipBaseException(string message)
 1879      : base(message)
 80    {
 1881    }
 82
 83    /// <summary>
 84    /// Initializes a new instance of the SharpZipBaseException class with a specified
 85    /// error message and a reference to the inner exception that is the cause of this exception.
 86    /// </summary>
 87    /// <param name="message">A message describing the exception.</param>
 88    /// <param name="innerException">The inner exception</param>
 89    public SharpZipBaseException(string message, Exception innerException)
 090      : base(message, innerException)
 91    {
 092    }
 93  }
 94}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_StaticDiskDataSource.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_StaticDiskDataSource.htm new file mode 100644 index 000000000..81de1ec9b --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_StaticDiskDataSource.htm @@ -0,0 +1,4518 @@ + + + + +ICSharpCode.SharpZipLib.Zip.StaticDiskDataSource - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.StaticDiskDataSource
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs
Covered lines:0
Uncovered lines:4
Coverable lines:4
Total lines:4476
Line coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
GetSource()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipFile.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-03-02  Z-1650  Fixed updating ODT archives in memory. Exposed exceptions in updating.
 42//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 43//  2012-11-29  Z-1684  Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp
 44
 45using System;
 46using System.Collections;
 47using System.IO;
 48using System.Text;
 49using System.Globalization;
 50
 51#if !NETCF_1_0
 52using System.Security.Cryptography;
 53using ICSharpCode.SharpZipLib.Encryption;
 54#endif
 55
 56using ICSharpCode.SharpZipLib.Core;
 57using ICSharpCode.SharpZipLib.Checksums;
 58using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 59using ICSharpCode.SharpZipLib.Zip.Compression;
 60
 61namespace ICSharpCode.SharpZipLib.Zip
 62{
 63  #region Keys Required Event Args
 64  /// <summary>
 65  /// Arguments used with KeysRequiredEvent
 66  /// </summary>
 67  public class KeysRequiredEventArgs : EventArgs
 68  {
 69    #region Constructors
 70    /// <summary>
 71    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 72    /// </summary>
 73    /// <param name="name">The name of the file for which keys are required.</param>
 74    public KeysRequiredEventArgs(string name)
 75    {
 76      fileName = name;
 77    }
 78
 79    /// <summary>
 80    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 81    /// </summary>
 82    /// <param name="name">The name of the file for which keys are required.</param>
 83    /// <param name="keyValue">The current key value.</param>
 84    public KeysRequiredEventArgs(string name, byte[] keyValue)
 85    {
 86      fileName = name;
 87      key = keyValue;
 88    }
 89
 90    #endregion
 91    #region Properties
 92    /// <summary>
 93    /// Gets the name of the file for which keys are required.
 94    /// </summary>
 95    public string FileName
 96    {
 97      get { return fileName; }
 98    }
 99
 100    /// <summary>
 101    /// Gets or sets the key value
 102    /// </summary>
 103    public byte[] Key
 104    {
 105      get { return key; }
 106      set { key = value; }
 107    }
 108    #endregion
 109
 110    #region Instance Fields
 111    string fileName;
 112    byte[] key;
 113    #endregion
 114  }
 115  #endregion
 116
 117  #region Test Definitions
 118  /// <summary>
 119  /// The strategy to apply to testing.
 120  /// </summary>
 121  public enum TestStrategy
 122  {
 123    /// <summary>
 124    /// Find the first error only.
 125    /// </summary>
 126    FindFirstError,
 127    /// <summary>
 128    /// Find all possible errors.
 129    /// </summary>
 130    FindAllErrors,
 131  }
 132
 133  /// <summary>
 134  /// The operation in progress reported by a <see cref="ZipTestResultHandler"/> during testing.
 135  /// </summary>
 136  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 137  public enum TestOperation
 138  {
 139    /// <summary>
 140    /// Setting up testing.
 141    /// </summary>
 142    Initialising,
 143
 144    /// <summary>
 145    /// Testing an individual entries header
 146    /// </summary>
 147    EntryHeader,
 148
 149    /// <summary>
 150    /// Testing an individual entries data
 151    /// </summary>
 152    EntryData,
 153
 154    /// <summary>
 155    /// Testing an individual entry has completed.
 156    /// </summary>
 157    EntryComplete,
 158
 159    /// <summary>
 160    /// Running miscellaneous tests
 161    /// </summary>
 162    MiscellaneousTests,
 163
 164    /// <summary>
 165    /// Testing is complete
 166    /// </summary>
 167    Complete,
 168  }
 169
 170  /// <summary>
 171  /// Status returned returned by <see cref="ZipTestResultHandler"/> during testing.
 172  /// </summary>
 173  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 174  public class TestStatus
 175  {
 176    #region Constructors
 177    /// <summary>
 178    /// Initialise a new instance of <see cref="TestStatus"/>
 179    /// </summary>
 180    /// <param name="file">The <see cref="ZipFile"/> this status applies to.</param>
 181    public TestStatus(ZipFile file)
 182    {
 183      file_ = file;
 184    }
 185    #endregion
 186
 187    #region Properties
 188
 189    /// <summary>
 190    /// Get the current <see cref="TestOperation"/> in progress.
 191    /// </summary>
 192    public TestOperation Operation
 193    {
 194      get { return operation_; }
 195    }
 196
 197    /// <summary>
 198    /// Get the <see cref="ZipFile"/> this status is applicable to.
 199    /// </summary>
 200    public ZipFile File
 201    {
 202      get { return file_; }
 203    }
 204
 205    /// <summary>
 206    /// Get the current/last entry tested.
 207    /// </summary>
 208    public ZipEntry Entry
 209    {
 210      get { return entry_; }
 211    }
 212
 213    /// <summary>
 214    /// Get the number of errors detected so far.
 215    /// </summary>
 216    public int ErrorCount
 217    {
 218      get { return errorCount_; }
 219    }
 220
 221    /// <summary>
 222    /// Get the number of bytes tested so far for the current entry.
 223    /// </summary>
 224    public long BytesTested
 225    {
 226      get { return bytesTested_; }
 227    }
 228
 229    /// <summary>
 230    /// Get a value indicating wether the last entry test was valid.
 231    /// </summary>
 232    public bool EntryValid
 233    {
 234      get { return entryValid_; }
 235    }
 236    #endregion
 237
 238    #region Internal API
 239    internal void AddError()
 240    {
 241      errorCount_++;
 242      entryValid_ = false;
 243    }
 244
 245    internal void SetOperation(TestOperation operation)
 246    {
 247      operation_ = operation;
 248    }
 249
 250    internal void SetEntry(ZipEntry entry)
 251    {
 252      entry_ = entry;
 253      entryValid_ = true;
 254      bytesTested_ = 0;
 255    }
 256
 257    internal void SetBytesTested(long value)
 258    {
 259      bytesTested_ = value;
 260    }
 261    #endregion
 262
 263    #region Instance Fields
 264    ZipFile file_;
 265    ZipEntry entry_;
 266    bool entryValid_;
 267    int errorCount_;
 268    long bytesTested_;
 269    TestOperation operation_;
 270    #endregion
 271  }
 272
 273  /// <summary>
 274  /// Delegate invoked during <see cref="ZipFile.TestArchive(bool, TestStrategy, ZipTestResultHandler)">testing</see> if
 275  /// </summary>
 276  /// <remarks>If the message is non-null an error has occured.  If the message is null
 277  /// the operation as found in <see cref="TestStatus">status</see> has started.</remarks>
 278  public delegate void ZipTestResultHandler(TestStatus status, string message);
 279  #endregion
 280
 281  #region Update Definitions
 282  /// <summary>
 283  /// The possible ways of <see cref="ZipFile.CommitUpdate()">applying updates</see> to an archive.
 284  /// </summary>
 285  public enum FileUpdateMode
 286  {
 287    /// <summary>
 288    /// Perform all updates on temporary files ensuring that the original file is saved.
 289    /// </summary>
 290    Safe,
 291    /// <summary>
 292    /// Update the archive directly, which is faster but less safe.
 293    /// </summary>
 294    Direct,
 295  }
 296  #endregion
 297
 298  #region ZipFile Class
 299  /// <summary>
 300  /// This class represents a Zip archive.  You can ask for the contained
 301  /// entries, or get an input stream for a file entry.  The entry is
 302  /// automatically decompressed.
 303  ///
 304  /// You can also update the archive adding or deleting entries.
 305  ///
 306  /// This class is thread safe for input:  You can open input streams for arbitrary
 307  /// entries in different threads.
 308  /// <br/>
 309  /// <br/>Author of the original java version : Jochen Hoenicke
 310  /// </summary>
 311  /// <example>
 312  /// <code>
 313  /// using System;
 314  /// using System.Text;
 315  /// using System.Collections;
 316  /// using System.IO;
 317  ///
 318  /// using ICSharpCode.SharpZipLib.Zip;
 319  ///
 320  /// class MainClass
 321  /// {
 322  ///   static public void Main(string[] args)
 323  ///   {
 324  ///     using (ZipFile zFile = new ZipFile(args[0])) {
 325  ///       Console.WriteLine("Listing of : " + zFile.Name);
 326  ///       Console.WriteLine("");
 327  ///       Console.WriteLine("Raw Size    Size      Date     Time     Name");
 328  ///       Console.WriteLine("--------  --------  --------  ------  ---------");
 329  ///       foreach (ZipEntry e in zFile) {
 330  ///         if ( e.IsFile ) {
 331  ///           DateTime d = e.DateTime;
 332  ///           Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
 333  ///             d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
 334  ///             e.Name);
 335  ///         }
 336  ///       }
 337  ///     }
 338  ///   }
 339  /// }
 340  /// </code>
 341  /// </example>
 342  public class ZipFile : IEnumerable, IDisposable
 343  {
 344    #region KeyHandling
 345
 346    /// <summary>
 347    /// Delegate for handling keys/password setting during compresion/decompression.
 348    /// </summary>
 349    public delegate void KeysRequiredEventHandler(
 350      object sender,
 351      KeysRequiredEventArgs e
 352    );
 353
 354    /// <summary>
 355    /// Event handler for handling encryption keys.
 356    /// </summary>
 357    public KeysRequiredEventHandler KeysRequired;
 358
 359    /// <summary>
 360    /// Handles getting of encryption keys when required.
 361    /// </summary>
 362    /// <param name="fileName">The file for which encryption keys are required.</param>
 363    void OnKeysRequired(string fileName)
 364    {
 365      if (KeysRequired != null) {
 366        var krea = new KeysRequiredEventArgs(fileName, key);
 367        KeysRequired(this, krea);
 368        key = krea.Key;
 369      }
 370    }
 371
 372    /// <summary>
 373    /// Get/set the encryption key value.
 374    /// </summary>
 375    byte[] Key
 376    {
 377      get { return key; }
 378      set { key = value; }
 379    }
 380
 381#if !NETCF_1_0
 382    /// <summary>
 383    /// Password to be used for encrypting/decrypting files.
 384    /// </summary>
 385    /// <remarks>Set to null if no password is required.</remarks>
 386    public string Password
 387    {
 388      set
 389      {
 390        if ( string.IsNullOrEmpty(value)) {
 391          key = null;
 392        }
 393        else {
 394          rawPassword_ = value;
 395          key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value));
 396        }
 397      }
 398    }
 399#endif
 400
 401    /// <summary>
 402    /// Get a value indicating wether encryption keys are currently available.
 403    /// </summary>
 404    bool HaveKeys
 405    {
 406      get { return key != null; }
 407    }
 408    #endregion
 409
 410    #region Constructors
 411    /// <summary>
 412    /// Opens a Zip file with the given name for reading.
 413    /// </summary>
 414    /// <param name="name">The name of the file to open.</param>
 415    /// <exception cref="ArgumentNullException">The argument supplied is null.</exception>
 416    /// <exception cref="IOException">
 417    /// An i/o error occurs
 418    /// </exception>
 419    /// <exception cref="ZipException">
 420    /// The file doesn't contain a valid zip archive.
 421    /// </exception>
 422    public ZipFile(string name)
 423    {
 424      if ( name == null ) {
 425        throw new ArgumentNullException(nameof(name));
 426      }
 427
 428      name_ = name;
 429
 430      baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 431      isStreamOwner = true;
 432
 433      try {
 434        ReadEntries();
 435      }
 436      catch {
 437        DisposeInternal(true);
 438        throw;
 439      }
 440    }
 441
 442    /// <summary>
 443    /// Opens a Zip file reading the given <see cref="FileStream"/>.
 444    /// </summary>
 445    /// <param name="file">The <see cref="FileStream"/> to read archive data from.</param>
 446    /// <exception cref="ArgumentNullException">The supplied argument is null.</exception>
 447    /// <exception cref="IOException">
 448    /// An i/o error occurs.
 449    /// </exception>
 450    /// <exception cref="ZipException">
 451    /// The file doesn't contain a valid zip archive.
 452    /// </exception>
 453    public ZipFile(FileStream file)
 454    {
 455      if ( file == null ) {
 456        throw new ArgumentNullException(nameof(file));
 457      }
 458
 459      if ( !file.CanSeek ) {
 460        throw new ArgumentException("Stream is not seekable", nameof(file));
 461      }
 462
 463      baseStream_  = file;
 464      name_ = file.Name;
 465      isStreamOwner = true;
 466
 467      try {
 468        ReadEntries();
 469      }
 470      catch {
 471        DisposeInternal(true);
 472        throw;
 473      }
 474    }
 475
 476    /// <summary>
 477    /// Opens a Zip file reading the given <see cref="Stream"/>.
 478    /// </summary>
 479    /// <param name="stream">The <see cref="Stream"/> to read archive data from.</param>
 480    /// <exception cref="IOException">
 481    /// An i/o error occurs
 482    /// </exception>
 483    /// <exception cref="ZipException">
 484    /// The stream doesn't contain a valid zip archive.<br/>
 485    /// </exception>
 486    /// <exception cref="ArgumentException">
 487    /// The <see cref="Stream">stream</see> doesnt support seeking.
 488    /// </exception>
 489    /// <exception cref="ArgumentNullException">
 490    /// The <see cref="Stream">stream</see> argument is null.
 491    /// </exception>
 492    public ZipFile(Stream stream)
 493    {
 494      if ( stream == null ) {
 495        throw new ArgumentNullException(nameof(stream));
 496      }
 497
 498      if ( !stream.CanSeek ) {
 499        throw new ArgumentException("Stream is not seekable", nameof(stream));
 500      }
 501
 502      baseStream_  = stream;
 503      isStreamOwner = true;
 504
 505      if ( baseStream_.Length > 0 ) {
 506        try {
 507          ReadEntries();
 508        }
 509        catch {
 510          DisposeInternal(true);
 511          throw;
 512        }
 513      } else {
 514        entries_ = new ZipEntry[0];
 515        isNewArchive_ = true;
 516      }
 517    }
 518
 519    /// <summary>
 520    /// Initialises a default <see cref="ZipFile"/> instance with no entries and no file storage.
 521    /// </summary>
 522    internal ZipFile()
 523    {
 524      entries_ = new ZipEntry[0];
 525      isNewArchive_ = true;
 526    }
 527
 528    #endregion
 529
 530    #region Destructors and Closing
 531    /// <summary>
 532    /// Finalize this instance.
 533    /// </summary>
 534    ~ZipFile()
 535    {
 536      Dispose(false);
 537    }
 538
 539    /// <summary>
 540    /// Closes the ZipFile.  If the stream is <see cref="IsStreamOwner">owned</see> then this also closes the underlying
 541    /// Once closed, no further instance methods should be called.
 542    /// </summary>
 543    /// <exception cref="System.IO.IOException">
 544    /// An i/o error occurs.
 545    /// </exception>
 546    public void Close()
 547    {
 548      DisposeInternal(true);
 549      GC.SuppressFinalize(this);
 550    }
 551
 552    #endregion
 553
 554    #region Creators
 555    /// <summary>
 556    /// Create a new <see cref="ZipFile"/> whose data will be stored in a file.
 557    /// </summary>
 558    /// <param name="fileName">The name of the archive to create.</param>
 559    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 560    /// <exception cref="ArgumentNullException"><paramref name="fileName"></paramref> is null</exception>
 561    public static ZipFile Create(string fileName)
 562    {
 563      if ( fileName == null ) {
 564        throw new ArgumentNullException(nameof(fileName));
 565      }
 566
 567      FileStream fs = File.Create(fileName);
 568
 569      var result = new ZipFile();
 570      result.name_ = fileName;
 571      result.baseStream_ = fs;
 572      result.isStreamOwner = true;
 573      return result;
 574    }
 575
 576    /// <summary>
 577    /// Create a new <see cref="ZipFile"/> whose data will be stored on a stream.
 578    /// </summary>
 579    /// <param name="outStream">The stream providing data storage.</param>
 580    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 581    /// <exception cref="ArgumentNullException"><paramref name="outStream"> is null</paramref></exception>
 582    /// <exception cref="ArgumentException"><paramref name="outStream"> doesnt support writing.</paramref></exception>
 583    public static ZipFile Create(Stream outStream)
 584    {
 585      if ( outStream == null ) {
 586        throw new ArgumentNullException(nameof(outStream));
 587      }
 588
 589      if ( !outStream.CanWrite ) {
 590        throw new ArgumentException("Stream is not writeable", nameof(outStream));
 591      }
 592
 593      if ( !outStream.CanSeek ) {
 594        throw new ArgumentException("Stream is not seekable", nameof(outStream));
 595      }
 596
 597      var result = new ZipFile();
 598      result.baseStream_ = outStream;
 599      return result;
 600    }
 601
 602    #endregion
 603
 604    #region Properties
 605    /// <summary>
 606    /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance.
 607    /// If the flag is true then the stream will be closed when <see cref="Close">Close</see> is called.
 608    /// </summary>
 609    /// <remarks>
 610    /// The default value is true in all cases.
 611    /// </remarks>
 612    public bool IsStreamOwner
 613    {
 614      get { return isStreamOwner; }
 615      set { isStreamOwner = value; }
 616    }
 617
 618    /// <summary>
 619    /// Get a value indicating wether
 620    /// this archive is embedded in another file or not.
 621    /// </summary>
 622    public bool IsEmbeddedArchive
 623    {
 624      // Not strictly correct in all circumstances currently
 625      get { return offsetOfFirstEntry > 0; }
 626    }
 627
 628    /// <summary>
 629    /// Get a value indicating that this archive is a new one.
 630    /// </summary>
 631    public bool IsNewArchive
 632    {
 633      get { return isNewArchive_; }
 634    }
 635
 636    /// <summary>
 637    /// Gets the comment for the zip file.
 638    /// </summary>
 639    public string ZipFileComment
 640    {
 641      get { return comment_; }
 642    }
 643
 644    /// <summary>
 645    /// Gets the name of this zip file.
 646    /// </summary>
 647    public string Name
 648    {
 649      get { return name_; }
 650    }
 651
 652    /// <summary>
 653    /// Gets the number of entries in this zip file.
 654    /// </summary>
 655    /// <exception cref="InvalidOperationException">
 656    /// The Zip file has been closed.
 657    /// </exception>
 658    [Obsolete("Use the Count property instead")]
 659    public int Size
 660    {
 661      get
 662      {
 663        return entries_.Length;
 664      }
 665    }
 666
 667    /// <summary>
 668    /// Get the number of entries contained in this <see cref="ZipFile"/>.
 669    /// </summary>
 670    public long Count
 671    {
 672      get
 673      {
 674        return entries_.Length;
 675      }
 676    }
 677
 678    /// <summary>
 679    /// Indexer property for ZipEntries
 680    /// </summary>
 681    [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")]
 682    public ZipEntry this[int index]
 683    {
 684      get {
 685        return (ZipEntry) entries_[index].Clone();
 686      }
 687    }
 688
 689    #endregion
 690
 691    #region Input Handling
 692    /// <summary>
 693    /// Gets an enumerator for the Zip entries in this Zip file.
 694    /// </summary>
 695    /// <returns>Returns an <see cref="IEnumerator"/> for this archive.</returns>
 696    /// <exception cref="ObjectDisposedException">
 697    /// The Zip file has been closed.
 698    /// </exception>
 699    public IEnumerator GetEnumerator()
 700    {
 701      if (isDisposed_) {
 702        throw new ObjectDisposedException("ZipFile");
 703      }
 704
 705      return new ZipEntryEnumerator(entries_);
 706    }
 707
 708    /// <summary>
 709    /// Return the index of the entry with a matching name
 710    /// </summary>
 711    /// <param name="name">Entry name to find</param>
 712    /// <param name="ignoreCase">If true the comparison is case insensitive</param>
 713    /// <returns>The index position of the matching entry or -1 if not found</returns>
 714    /// <exception cref="ObjectDisposedException">
 715    /// The Zip file has been closed.
 716    /// </exception>
 717    public int FindEntry(string name, bool ignoreCase)
 718    {
 719      if (isDisposed_) {
 720        throw new ObjectDisposedException("ZipFile");
 721      }
 722
 723      // TODO: This will be slow as the next ice age for huge archives!
 724      for (int i = 0; i < entries_.Length; i++) {
 725        if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) {
 726          return i;
 727        }
 728      }
 729      return -1;
 730    }
 731
 732    /// <summary>
 733    /// Searches for a zip entry in this archive with the given name.
 734    /// String comparisons are case insensitive
 735    /// </summary>
 736    /// <param name="name">
 737    /// The name to find. May contain directory components separated by slashes ('/').
 738    /// </param>
 739    /// <returns>
 740    /// A clone of the zip entry, or null if no entry with that name exists.
 741    /// </returns>
 742    /// <exception cref="ObjectDisposedException">
 743    /// The Zip file has been closed.
 744    /// </exception>
 745    public ZipEntry GetEntry(string name)
 746    {
 747      if (isDisposed_) {
 748        throw new ObjectDisposedException("ZipFile");
 749      }
 750
 751      int index = FindEntry(name, true);
 752      return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null;
 753    }
 754
 755    /// <summary>
 756    /// Gets an input stream for reading the given zip entry data in an uncompressed form.
 757    /// Normally the <see cref="ZipEntry"/> should be an entry returned by GetEntry().
 758    /// </summary>
 759    /// <param name="entry">The <see cref="ZipEntry"/> to obtain a data <see cref="Stream"/> for</param>
 760    /// <returns>An input <see cref="Stream"/> containing data for this <see cref="ZipEntry"/></returns>
 761    /// <exception cref="ObjectDisposedException">
 762    /// The ZipFile has already been closed
 763    /// </exception>
 764    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 765    /// The compression method for the entry is unknown
 766    /// </exception>
 767    /// <exception cref="IndexOutOfRangeException">
 768    /// The entry is not found in the ZipFile
 769    /// </exception>
 770    public Stream GetInputStream(ZipEntry entry)
 771    {
 772      if ( entry == null ) {
 773        throw new ArgumentNullException(nameof(entry));
 774      }
 775
 776      if ( isDisposed_ ) {
 777        throw new ObjectDisposedException("ZipFile");
 778      }
 779
 780      long index = entry.ZipFileIndex;
 781      if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) {
 782        index = FindEntry(entry.Name, true);
 783        if (index < 0) {
 784          throw new ZipException("Entry cannot be found");
 785        }
 786      }
 787      return GetInputStream(index);
 788    }
 789
 790    /// <summary>
 791    /// Creates an input stream reading a zip entry
 792    /// </summary>
 793    /// <param name="entryIndex">The index of the entry to obtain an input stream for.</param>
 794    /// <returns>
 795    /// An input <see cref="Stream"/> containing data for this <paramref name="entryIndex"/>
 796    /// </returns>
 797    /// <exception cref="ObjectDisposedException">
 798    /// The ZipFile has already been closed
 799    /// </exception>
 800    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 801    /// The compression method for the entry is unknown
 802    /// </exception>
 803    /// <exception cref="IndexOutOfRangeException">
 804    /// The entry is not found in the ZipFile
 805    /// </exception>
 806    public Stream GetInputStream(long entryIndex)
 807    {
 808      if ( isDisposed_ ) {
 809        throw new ObjectDisposedException("ZipFile");
 810      }
 811
 812      long start = LocateEntry(entries_[entryIndex]);
 813      CompressionMethod method = entries_[entryIndex].CompressionMethod;
 814      Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize);
 815
 816      if (entries_[entryIndex].IsCrypted == true) {
 817#if NETCF_1_0
 818        throw new ZipException("decryption not supported for Compact Framework 1.0");
 819#else
 820        result = CreateAndInitDecryptionStream(result, entries_[entryIndex]);
 821        if (result == null) {
 822          throw new ZipException("Unable to decrypt this entry");
 823        }
 824#endif
 825      }
 826
 827      switch (method) {
 828        case CompressionMethod.Stored:
 829          // read as is.
 830          break;
 831
 832        case CompressionMethod.Deflated:
 833          // No need to worry about ownership and closing as underlying stream close does nothing.
 834          result = new InflaterInputStream(result, new Inflater(true));
 835          break;
 836
 837        default:
 838          throw new ZipException("Unsupported compression method " + method);
 839      }
 840
 841      return result;
 842    }
 843
 844    #endregion
 845
 846    #region Archive Testing
 847    /// <summary>
 848    /// Test an archive for integrity/validity
 849    /// </summary>
 850    /// <param name="testData">Perform low level data Crc check</param>
 851    /// <returns>true if all tests pass, false otherwise</returns>
 852    /// <remarks>Testing will terminate on the first error found.</remarks>
 853    public bool TestArchive(bool testData)
 854    {
 855      return TestArchive(testData, TestStrategy.FindFirstError, null);
 856    }
 857
 858    /// <summary>
 859    /// Test an archive for integrity/validity
 860    /// </summary>
 861    /// <param name="testData">Perform low level data Crc check</param>
 862    /// <param name="strategy">The <see cref="TestStrategy"></see> to apply.</param>
 863    /// <param name="resultHandler">The <see cref="ZipTestResultHandler"></see> handler to call during testing.</param>
 864    /// <returns>true if all tests pass, false otherwise</returns>
 865    /// <exception cref="ObjectDisposedException">The object has already been closed.</exception>
 866    public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
 867    {
 868      if (isDisposed_) {
 869        throw new ObjectDisposedException("ZipFile");
 870      }
 871
 872      var status = new TestStatus(this);
 873
 874      if ( resultHandler != null ) {
 875        resultHandler(status, null);
 876      }
 877
 878      HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header;
 879
 880      bool testing = true;
 881
 882      try {
 883        int entryIndex = 0;
 884
 885        while ( testing && (entryIndex < Count) ) {
 886          if ( resultHandler != null ) {
 887            status.SetEntry(this[entryIndex]);
 888            status.SetOperation(TestOperation.EntryHeader);
 889            resultHandler(status, null);
 890          }
 891
 892          try  {
 893            TestLocalHeader(this[entryIndex], test);
 894          }
 895          catch(ZipException ex) {
 896            status.AddError();
 897
 898            if ( resultHandler != null ) {
 899              resultHandler(status,
 900                string.Format("Exception during test - '{0}'", ex.Message));
 901            }
 902
 903            testing &= strategy != TestStrategy.FindFirstError;
 904          }
 905
 906          if ( testing && testData && this[entryIndex].IsFile ) {
 907            if ( resultHandler != null ) {
 908              status.SetOperation(TestOperation.EntryData);
 909              resultHandler(status, null);
 910            }
 911
 912                        var crc = new Crc32();
 913
 914                        using (Stream entryStream = this.GetInputStream(this[entryIndex]))
 915                        {
 916
 917                            byte[] buffer = new byte[4096];
 918                            long totalBytes = 0;
 919                            int bytesRead;
 920                            while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0)
 921                            {
 922                                crc.Update(buffer, 0, bytesRead);
 923
 924                                if (resultHandler != null)
 925                                {
 926                                    totalBytes += bytesRead;
 927                                    status.SetBytesTested(totalBytes);
 928                                    resultHandler(status, null);
 929                                }
 930                            }
 931                        }
 932
 933            if (this[entryIndex].Crc != crc.Value) {
 934              status.AddError();
 935
 936              if ( resultHandler != null ) {
 937                resultHandler(status, "CRC mismatch");
 938              }
 939
 940              testing &= strategy != TestStrategy.FindFirstError;
 941            }
 942
 943            if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) {
 944              var helper = new ZipHelperStream(baseStream_);
 945              var data = new DescriptorData();
 946              helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data);
 947              if (this[entryIndex].Crc != data.Crc) {
 948                status.AddError();
 949              }
 950
 951              if (this[entryIndex].CompressedSize != data.CompressedSize) {
 952                status.AddError();
 953              }
 954
 955              if (this[entryIndex].Size != data.Size) {
 956                status.AddError();
 957              }
 958            }
 959          }
 960
 961          if ( resultHandler != null ) {
 962            status.SetOperation(TestOperation.EntryComplete);
 963            resultHandler(status, null);
 964          }
 965
 966          entryIndex += 1;
 967        }
 968
 969        if ( resultHandler != null ) {
 970          status.SetOperation(TestOperation.MiscellaneousTests);
 971          resultHandler(status, null);
 972        }
 973
 974        // TODO: the 'Corrina Johns' test where local headers are missing from
 975        // the central directory.  They are therefore invisible to many archivers.
 976      }
 977      catch (Exception ex) {
 978        status.AddError();
 979
 980        if ( resultHandler != null ) {
 981          resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message));
 982        }
 983      }
 984
 985      if ( resultHandler != null ) {
 986        status.SetOperation(TestOperation.Complete);
 987        status.SetEntry(null);
 988        resultHandler(status, null);
 989      }
 990
 991      return (status.ErrorCount == 0);
 992    }
 993
 994    [Flags]
 995    enum HeaderTest
 996    {
 997      Extract = 0x01,     // Check that this header represents an entry whose data can be extracted
 998      Header  = 0x02,     // Check that this header contents are valid
 999    }
 1000
 1001    /// <summary>
 1002    /// Test a local header against that provided from the central directory
 1003    /// </summary>
 1004    /// <param name="entry">
 1005    /// The entry to test against
 1006    /// </param>
 1007    /// <param name="tests">The type of <see cref="HeaderTest">tests</see> to carry out.</param>
 1008    /// <returns>The offset of the entries data in the file</returns>
 1009    long TestLocalHeader(ZipEntry entry, HeaderTest tests)
 1010    {
 1011      lock(baseStream_)
 1012      {
 1013        bool testHeader = (tests & HeaderTest.Header) != 0;
 1014        bool testData = (tests & HeaderTest.Extract) != 0;
 1015
 1016        baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin);
 1017        if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) {
 1018          throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)
 1019        }
 1020
 1021        var extractVersion = ( short ) (ReadLEUshort() & 0x00ff);
 1022        var localFlags = ( short )ReadLEUshort();
 1023        var compressionMethod = ( short )ReadLEUshort();
 1024        var fileTime = ( short )ReadLEUshort();
 1025        var fileDate = ( short )ReadLEUshort();
 1026        uint crcValue = ReadLEUint();
 1027        long compressedSize = ReadLEUint();
 1028        long size = ReadLEUint();
 1029        int storedNameLength = ReadLEUshort();
 1030        int extraDataLength = ReadLEUshort();
 1031
 1032        byte[] nameData = new byte[storedNameLength];
 1033        StreamUtils.ReadFully(baseStream_, nameData);
 1034
 1035        byte[] extraData = new byte[extraDataLength];
 1036        StreamUtils.ReadFully(baseStream_, extraData);
 1037
 1038        var localExtraData = new ZipExtraData(extraData);
 1039
 1040        // Extra data / zip64 checks
 1041        if (localExtraData.Find(1))
 1042        {
 1043          // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64
 1044          // and size or compressedSize = MaxValue, due to rogue creators.
 1045
 1046          size = localExtraData.ReadLong();
 1047          compressedSize = localExtraData.ReadLong();
 1048
 1049                    if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0)
 1050                    {
 1051                        // These may be valid if patched later
 1052                        if ( (size != -1) && (size != entry.Size)) {
 1053                            throw new ZipException("Size invalid for descriptor");
 1054                        }
 1055
 1056                        if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) {
 1057                            throw new ZipException("Compressed size invalid for descriptor");
 1058                        }
 1059                    }
 1060                }
 1061        else
 1062        {
 1063          // No zip64 extra data but entry requires it.
 1064          if ((extractVersion >= ZipConstants.VersionZip64) &&
 1065            (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue)))
 1066          {
 1067            throw new ZipException("Required Zip64 extended information missing");
 1068          }
 1069        }
 1070
 1071        if ( testData ) {
 1072          if ( entry.IsFile ) {
 1073            if ( !entry.IsCompressionMethodSupported() ) {
 1074              throw new ZipException("Compression method not supported");
 1075            }
 1076
 1077            if ( (extractVersion > ZipConstants.VersionMadeBy)
 1078              || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) {
 1079              throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extract
 1080            }
 1081
 1082            if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.Enha
 1083              throw new ZipException("The library does not support the zip version required to extract this entry");
 1084            }
 1085          }
 1086        }
 1087
 1088                if (testHeader)
 1089                {
 1090                    if ((extractVersion <= 63) &&  // Ignore later versions as we dont know about them..
 1091                        (extractVersion != 10) &&
 1092                        (extractVersion != 11) &&
 1093                        (extractVersion != 20) &&
 1094                        (extractVersion != 21) &&
 1095                        (extractVersion != 25) &&
 1096                        (extractVersion != 27) &&
 1097                        (extractVersion != 45) &&
 1098                        (extractVersion != 46) &&
 1099                        (extractVersion != 50) &&
 1100                        (extractVersion != 51) &&
 1101                        (extractVersion != 52) &&
 1102                        (extractVersion != 61) &&
 1103                        (extractVersion != 62) &&
 1104                        (extractVersion != 63)
 1105                        )
 1106                    {
 1107                        throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", 
 1108                    }
 1109
 1110                    // Local entry flags dont have reserved bit set on.
 1111                    if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | General
 1112                    {
 1113                        throw new ZipException("Reserved bit flags cannot be set.");
 1114                    }
 1115
 1116                    // Encryption requires extract version >= 20
 1117                    if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20))
 1118                    {
 1119                        throw new ZipException(string.Format("Version required to extract this entry is too low for encr
 1120                    }
 1121
 1122                    // Strong encryption requires encryption flag to be set and extract version >= 50.
 1123                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1124                    {
 1125                        if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0)
 1126                        {
 1127                            throw new ZipException("Strong encryption flag set but encryption flag is not set");
 1128                        }
 1129
 1130                        if (extractVersion < 50)
 1131                        {
 1132                            throw new ZipException(string.Format("Version required to extract this entry is too low for 
 1133                        }
 1134                    }
 1135
 1136                    // Patched entries require extract version >= 27
 1137                    if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27))
 1138                    {
 1139                        throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractV
 1140                    }
 1141
 1142                    // Central header flags match local entry flags.
 1143                    if (localFlags != entry.Flags)
 1144                    {
 1145                        throw new ZipException("Central header/local header flags mismatch");
 1146                    }
 1147
 1148                    // Central header compression method matches local entry
 1149                    if (entry.CompressionMethod != (CompressionMethod)compressionMethod)
 1150                    {
 1151                        throw new ZipException("Central header/local header compression method mismatch");
 1152                    }
 1153
 1154                    if (entry.Version != extractVersion)
 1155                    {
 1156                        throw new ZipException("Extract version mismatch");
 1157                    }
 1158
 1159                    // Strong encryption and extract version match
 1160                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1161                    {
 1162                        if (extractVersion < 62)
 1163                        {
 1164                            throw new ZipException("Strong encryption flag set but version not high enough");
 1165                        }
 1166                    }
 1167
 1168                    if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0)
 1169                    {
 1170                        if ((fileTime != 0) || (fileDate != 0))
 1171                        {
 1172                            throw new ZipException("Header masked set but date/time values non-zero");
 1173                        }
 1174                    }
 1175
 1176                    if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0)
 1177                    {
 1178                        if (crcValue != (uint)entry.Crc)
 1179                        {
 1180                            throw new ZipException("Central header/local header crc mismatch");
 1181                        }
 1182                    }
 1183
 1184                    // Crc valid for empty entry.
 1185                    // This will also apply to streamed entries where size isnt known and the header cant be patched
 1186                    if ((size == 0) && (compressedSize == 0))
 1187                    {
 1188                        if (crcValue != 0)
 1189                        {
 1190                            throw new ZipException("Invalid CRC for empty entry");
 1191                        }
 1192                    }
 1193
 1194                    // TODO: make test more correct...  can't compare lengths as was done originally as this can fail fo
 1195                    // Assuming a code page at this point is not valid?  Best is to store the name length in the ZipEntr
 1196                    if (entry.Name.Length > storedNameLength)
 1197                    {
 1198                        throw new ZipException("File name length mismatch");
 1199                    }
 1200
 1201                    // Name data has already been read convert it and compare.
 1202                    string localName = ZipConstants.ConvertToStringExt(localFlags, nameData);
 1203
 1204                    // Central directory and local entry name match
 1205                    if (localName != entry.Name)
 1206                    {
 1207                        throw new ZipException("Central header and local header file name mismatch");
 1208                    }
 1209
 1210                    // Directories have zero actual size but can have compressed size
 1211                    if (entry.IsDirectory)
 1212                    {
 1213                        if (size > 0)
 1214                        {
 1215                            throw new ZipException("Directory cannot have size");
 1216                        }
 1217
 1218                        // There may be other cases where the compressed size can be greater than this?
 1219                        // If so until details are known we will be strict.
 1220                        if (entry.IsCrypted)
 1221                        {
 1222                            if (compressedSize > ZipConstants.CryptoHeaderSize + 2)
 1223                            {
 1224                                throw new ZipException("Directory compressed size invalid");
 1225                            }
 1226                        }
 1227                        else if (compressedSize > 2)
 1228                        {
 1229                            // When not compressed the directory size can validly be 2 bytes
 1230                            // if the true size wasnt known when data was originally being written.
 1231                            // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes
 1232                            throw new ZipException("Directory compressed size invalid");
 1233                        }
 1234                    }
 1235
 1236                    if (!ZipNameTransform.IsValidName(localName, true))
 1237                    {
 1238                        throw new ZipException("Name is invalid");
 1239                    }
 1240                }
 1241
 1242        // Tests that apply to both data and header.
 1243
 1244        // Size can be verified only if it is known in the local header.
 1245        // it will always be known in the central header.
 1246        if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) ||
 1247          ((size > 0) || (compressedSize > 0))) {
 1248
 1249          if (size != entry.Size) {
 1250            throw new ZipException(
 1251              string.Format("Size mismatch between central header({0}) and local header({1})",
 1252                entry.Size, size));
 1253          }
 1254
 1255          if (compressedSize != entry.CompressedSize &&
 1256            compressedSize != 0xFFFFFFFF && compressedSize != -1) {
 1257            throw new ZipException(
 1258              string.Format("Compressed size mismatch between central header({0}) and local header({1})",
 1259              entry.CompressedSize, compressedSize));
 1260          }
 1261        }
 1262
 1263        int extraLength = storedNameLength + extraDataLength;
 1264        return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength;
 1265      }
 1266    }
 1267
 1268    #endregion
 1269
 1270    #region Updating
 1271
 1272    const int DefaultBufferSize = 4096;
 1273
 1274    /// <summary>
 1275    /// The kind of update to apply.
 1276    /// </summary>
 1277    enum UpdateCommand
 1278    {
 1279      Copy,       // Copy original file contents.
 1280      Modify,     // Change encryption, compression, attributes, name, time etc, of an existing file.
 1281      Add,        // Add a new file to the archive.
 1282    }
 1283
 1284    #region Properties
 1285    /// <summary>
 1286    /// Get / set the <see cref="INameTransform"/> to apply to names when updating.
 1287    /// </summary>
 1288    public INameTransform NameTransform
 1289    {
 1290      get {
 1291        return updateEntryFactory_.NameTransform;
 1292      }
 1293
 1294      set {
 1295        updateEntryFactory_.NameTransform = value;
 1296      }
 1297    }
 1298
 1299    /// <summary>
 1300    /// Get/set the <see cref="IEntryFactory"/> used to generate <see cref="ZipEntry"/> values
 1301    /// during updates.
 1302    /// </summary>
 1303    public IEntryFactory EntryFactory
 1304    {
 1305      get {
 1306        return updateEntryFactory_;
 1307      }
 1308
 1309      set {
 1310        if (value == null) {
 1311          updateEntryFactory_ = new ZipEntryFactory();
 1312        }
 1313        else {
 1314          updateEntryFactory_ = value;
 1315        }
 1316      }
 1317    }
 1318
 1319    /// <summary>
 1320    /// Get /set the buffer size to be used when updating this zip file.
 1321    /// </summary>
 1322    public int BufferSize
 1323    {
 1324      get { return bufferSize_; }
 1325      set {
 1326        if ( value < 1024 ) {
 1327#if NETCF_1_0
 1328          throw new ArgumentOutOfRangeException("value");
 1329#else
 1330          throw new ArgumentOutOfRangeException(nameof(value), "cannot be below 1024");
 1331#endif
 1332        }
 1333
 1334        if ( bufferSize_ != value ) {
 1335          bufferSize_ = value;
 1336          copyBuffer_ = null;
 1337        }
 1338      }
 1339    }
 1340
 1341    /// <summary>
 1342    /// Get a value indicating an update has <see cref="BeginUpdate()">been started</see>.
 1343    /// </summary>
 1344    public bool IsUpdating
 1345    {
 1346      get { return updates_ != null; }
 1347    }
 1348
 1349    /// <summary>
 1350    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 1351    /// </summary>
 1352    public UseZip64 UseZip64
 1353    {
 1354      get { return useZip64_; }
 1355      set { useZip64_ = value; }
 1356    }
 1357
 1358    #endregion
 1359
 1360    #region Immediate updating
 1361//    TBD: Direct form of updating
 1362//
 1363//    public void Update(IEntryMatcher deleteMatcher)
 1364//    {
 1365//    }
 1366//
 1367//    public void Update(IScanner addScanner)
 1368//    {
 1369//    }
 1370    #endregion
 1371
 1372    #region Deferred Updating
 1373    /// <summary>
 1374    /// Begin updating this <see cref="ZipFile"/> archive.
 1375    /// </summary>
 1376    /// <param name="archiveStorage">The <see cref="IArchiveStorage">archive storage</see> for use during the update.</p
 1377    /// <param name="dataSource">The <see cref="IDynamicDataSource">data source</see> to utilise during updating.</param
 1378    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1379    /// <exception cref="ArgumentNullException">One of the arguments provided is null</exception>
 1380    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1381    public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
 1382    {
 1383      if ( archiveStorage == null ) {
 1384        throw new ArgumentNullException(nameof(archiveStorage));
 1385      }
 1386
 1387      if ( dataSource == null ) {
 1388        throw new ArgumentNullException(nameof(dataSource));
 1389      }
 1390
 1391      if ( isDisposed_ ) {
 1392        throw new ObjectDisposedException("ZipFile");
 1393      }
 1394
 1395      if ( IsEmbeddedArchive ) {
 1396        throw new ZipException ("Cannot update embedded/SFX archives");
 1397      }
 1398
 1399      archiveStorage_ = archiveStorage;
 1400      updateDataSource_ = dataSource;
 1401
 1402      // NOTE: the baseStream_ may not currently support writing or seeking.
 1403
 1404      updateIndex_ = new Hashtable();
 1405
 1406      updates_ = new ArrayList(entries_.Length);
 1407      foreach(ZipEntry entry in entries_) {
 1408        int index = updates_.Add(new ZipUpdate(entry));
 1409        updateIndex_.Add(entry.Name, index);
 1410      }
 1411
 1412      // We must sort by offset before using offset's calculated sizes
 1413      updates_.Sort(new UpdateComparer());
 1414
 1415      int idx = 0;
 1416      foreach (ZipUpdate update in updates_) {
 1417        //If last entry, there is no next entry offset to use
 1418        if (idx == updates_.Count - 1)
 1419          break;
 1420
 1421        update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset;
 1422        idx++;
 1423      }
 1424      updateCount_ = updates_.Count;
 1425
 1426      contentsEdited_ = false;
 1427      commentEdited_ = false;
 1428      newComment_ = null;
 1429    }
 1430
 1431    /// <summary>
 1432    /// Begin updating to this <see cref="ZipFile"/> archive.
 1433    /// </summary>
 1434    /// <param name="archiveStorage">The storage to use during the update.</param>
 1435    public void BeginUpdate(IArchiveStorage archiveStorage)
 1436    {
 1437      BeginUpdate(archiveStorage, new DynamicDiskDataSource());
 1438    }
 1439
 1440    /// <summary>
 1441    /// Begin updating this <see cref="ZipFile"/> archive.
 1442    /// </summary>
 1443    /// <seealso cref="BeginUpdate(IArchiveStorage)"/>
 1444    /// <seealso cref="CommitUpdate"></seealso>
 1445    /// <seealso cref="AbortUpdate"></seealso>
 1446    public void BeginUpdate()
 1447    {
 1448      if ( Name == null ) {
 1449        BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource());
 1450      }
 1451      else {
 1452        BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource());
 1453      }
 1454    }
 1455
 1456    /// <summary>
 1457    /// Commit current updates, updating this archive.
 1458    /// </summary>
 1459    /// <seealso cref="BeginUpdate()"></seealso>
 1460    /// <seealso cref="AbortUpdate"></seealso>
 1461    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1462    public void CommitUpdate()
 1463    {
 1464      if ( isDisposed_ ) {
 1465        throw new ObjectDisposedException("ZipFile");
 1466      }
 1467
 1468      CheckUpdating();
 1469
 1470      try {
 1471        updateIndex_.Clear();
 1472        updateIndex_=null;
 1473
 1474        if( contentsEdited_ ) {
 1475          RunUpdates();
 1476        }
 1477        else if( commentEdited_ ) {
 1478          UpdateCommentOnly();
 1479        }
 1480        else {
 1481          // Create an empty archive if none existed originally.
 1482          if( entries_.Length==0 ) {
 1483            byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_);
 1484            using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) {
 1485              zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment);
 1486            }
 1487          }
 1488        }
 1489
 1490      }
 1491      finally {
 1492        PostUpdateCleanup();
 1493      }
 1494    }
 1495
 1496    /// <summary>
 1497    /// Abort updating leaving the archive unchanged.
 1498    /// </summary>
 1499    /// <seealso cref="BeginUpdate()"></seealso>
 1500    /// <seealso cref="CommitUpdate"></seealso>
 1501    public void AbortUpdate()
 1502    {
 1503      PostUpdateCleanup();
 1504    }
 1505
 1506    /// <summary>
 1507    /// Set the file comment to be recorded when the current update is <see cref="CommitUpdate">commited</see>.
 1508    /// </summary>
 1509    /// <param name="comment">The comment to record.</param>
 1510    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1511    public void SetComment(string comment)
 1512    {
 1513      if ( isDisposed_ ) {
 1514        throw new ObjectDisposedException("ZipFile");
 1515      }
 1516
 1517      CheckUpdating();
 1518
 1519      newComment_ = new ZipString(comment);
 1520
 1521      if ( newComment_.RawLength  > 0xffff ) {
 1522        newComment_ = null;
 1523        throw new ZipException("Comment length exceeds maximum - 65535");
 1524      }
 1525
 1526      // We dont take account of the original and current comment appearing to be the same
 1527      // as encoding may be different.
 1528      commentEdited_ = true;
 1529    }
 1530
 1531    #endregion
 1532
 1533    #region Adding Entries
 1534
 1535    void AddUpdate(ZipUpdate update)
 1536    {
 1537      contentsEdited_ = true;
 1538
 1539      int index = FindExistingUpdate(update.Entry.Name);
 1540
 1541      if (index >= 0) {
 1542        if ( updates_[index] == null ) {
 1543          updateCount_ += 1;
 1544        }
 1545
 1546        // Direct replacement is faster than delete and add.
 1547        updates_[index] = update;
 1548      }
 1549      else {
 1550        index = updates_.Add(update);
 1551        updateCount_ += 1;
 1552        updateIndex_.Add(update.Entry.Name, index);
 1553      }
 1554    }
 1555
 1556    /// <summary>
 1557    /// Add a new entry to the archive.
 1558    /// </summary>
 1559    /// <param name="fileName">The name of the file to add.</param>
 1560    /// <param name="compressionMethod">The compression method to use.</param>
 1561    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comment for this entry.</param>
 1562    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1563    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1564    /// <exception cref="ArgumentOutOfRangeException">Compression method is not supported.</exception>
 1565    public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText )
 1566    {
 1567      if (fileName == null) {
 1568        throw new ArgumentNullException(nameof(fileName));
 1569      }
 1570
 1571      if ( isDisposed_ ) {
 1572        throw new ObjectDisposedException("ZipFile");
 1573      }
 1574
 1575      if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) {
 1576        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1577      }
 1578
 1579      CheckUpdating();
 1580      contentsEdited_ = true;
 1581
 1582      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1583      entry.IsUnicodeText = useUnicodeText;
 1584      entry.CompressionMethod = compressionMethod;
 1585
 1586      AddUpdate(new ZipUpdate(fileName, entry));
 1587    }
 1588
 1589    /// <summary>
 1590    /// Add a new entry to the archive.
 1591    /// </summary>
 1592    /// <param name="fileName">The name of the file to add.</param>
 1593    /// <param name="compressionMethod">The compression method to use.</param>
 1594    /// <exception cref="ArgumentNullException">ZipFile has been closed.</exception>
 1595    /// <exception cref="ArgumentOutOfRangeException">The compression method is not supported.</exception>
 1596    public void Add(string fileName, CompressionMethod compressionMethod)
 1597    {
 1598      if ( fileName == null ) {
 1599        throw new ArgumentNullException(nameof(fileName));
 1600      }
 1601
 1602      if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) {
 1603        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1604      }
 1605
 1606      CheckUpdating();
 1607      contentsEdited_ = true;
 1608
 1609      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1610      entry.CompressionMethod = compressionMethod;
 1611      AddUpdate(new ZipUpdate(fileName, entry));
 1612    }
 1613
 1614    /// <summary>
 1615    /// Add a file to the archive.
 1616    /// </summary>
 1617    /// <param name="fileName">The name of the file to add.</param>
 1618    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1619    public void Add(string fileName)
 1620    {
 1621      if ( fileName == null ) {
 1622        throw new ArgumentNullException(nameof(fileName));
 1623      }
 1624
 1625      CheckUpdating();
 1626      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName)));
 1627    }
 1628
 1629    /// <summary>
 1630    /// Add a file to the archive.
 1631    /// </summary>
 1632    /// <param name="fileName">The name of the file to add.</param>
 1633    /// <param name="entryName">The name to use for the <see cref="ZipEntry"/> on the Zip file created.</param>
 1634    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1635    public void Add(string fileName, string entryName)
 1636    {
 1637      if (fileName == null) {
 1638        throw new ArgumentNullException(nameof(fileName));
 1639      }
 1640
 1641      if ( entryName == null ) {
 1642        throw new ArgumentNullException(nameof(entryName));
 1643      }
 1644
 1645      CheckUpdating();
 1646      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true)));
 1647    }
 1648
 1649
 1650    /// <summary>
 1651    /// Add a file entry with data.
 1652    /// </summary>
 1653    /// <param name="dataSource">The source of the data for this entry.</param>
 1654    /// <param name="entryName">The name to give to the entry.</param>
 1655    public void Add(IStaticDataSource dataSource, string entryName)
 1656    {
 1657      if ( dataSource == null ) {
 1658        throw new ArgumentNullException(nameof(dataSource));
 1659      }
 1660
 1661      if ( entryName == null ) {
 1662        throw new ArgumentNullException(nameof(entryName));
 1663      }
 1664
 1665      CheckUpdating();
 1666      AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false)));
 1667    }
 1668
 1669    /// <summary>
 1670    /// Add a file entry with data.
 1671    /// </summary>
 1672    /// <param name="dataSource">The source of the data for this entry.</param>
 1673    /// <param name="entryName">The name to give to the entry.</param>
 1674    /// <param name="compressionMethod">The compression method to use.</param>
 1675    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 1676    {
 1677      if ( dataSource == null ) {
 1678        throw new ArgumentNullException(nameof(dataSource));
 1679      }
 1680
 1681      if ( entryName == null ) {
 1682        throw new ArgumentNullException(nameof(entryName));
 1683      }
 1684
 1685      CheckUpdating();
 1686
 1687      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1688      entry.CompressionMethod = compressionMethod;
 1689
 1690      AddUpdate(new ZipUpdate(dataSource, entry));
 1691    }
 1692
 1693    /// <summary>
 1694    /// Add a file entry with data.
 1695    /// </summary>
 1696    /// <param name="dataSource">The source of the data for this entry.</param>
 1697    /// <param name="entryName">The name to give to the entry.</param>
 1698    /// <param name="compressionMethod">The compression method to use.</param>
 1699    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comments for this entry.</param>
 1700    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicode
 1701    {
 1702      if (dataSource == null) {
 1703        throw new ArgumentNullException(nameof(dataSource));
 1704      }
 1705
 1706      if ( entryName == null ) {
 1707        throw new ArgumentNullException(nameof(entryName));
 1708      }
 1709
 1710      CheckUpdating();
 1711
 1712      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1713      entry.IsUnicodeText = useUnicodeText;
 1714      entry.CompressionMethod = compressionMethod;
 1715
 1716      AddUpdate(new ZipUpdate(dataSource, entry));
 1717    }
 1718
 1719    /// <summary>
 1720    /// Add a <see cref="ZipEntry"/> that contains no data.
 1721    /// </summary>
 1722    /// <param name="entry">The entry to add.</param>
 1723    /// <remarks>This can be used to add directories, volume labels, or empty file entries.</remarks>
 1724    public void Add(ZipEntry entry)
 1725    {
 1726      if ( entry == null ) {
 1727        throw new ArgumentNullException(nameof(entry));
 1728      }
 1729
 1730      CheckUpdating();
 1731
 1732      if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) {
 1733        throw new ZipException("Entry cannot have any data");
 1734      }
 1735
 1736      AddUpdate(new ZipUpdate(UpdateCommand.Add, entry));
 1737    }
 1738
 1739    /// <summary>
 1740    /// Add a directory entry to the archive.
 1741    /// </summary>
 1742    /// <param name="directoryName">The directory to add.</param>
 1743    public void AddDirectory(string directoryName)
 1744    {
 1745      if ( directoryName == null ) {
 1746        throw new ArgumentNullException(nameof(directoryName));
 1747      }
 1748
 1749      CheckUpdating();
 1750
 1751      ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName);
 1752      AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry));
 1753    }
 1754
 1755    #endregion
 1756
 1757    #region Modifying Entries
 1758/* Modify not yet ready for public consumption.
 1759   Direct modification of an entry should not overwrite original data before its read.
 1760   Safe mode is trivial in this sense.
 1761    public void Modify(ZipEntry original, ZipEntry updated)
 1762    {
 1763      if ( original == null ) {
 1764        throw new ArgumentNullException("original");
 1765      }
 1766
 1767      if ( updated == null ) {
 1768        throw new ArgumentNullException("updated");
 1769      }
 1770
 1771      CheckUpdating();
 1772      contentsEdited_ = true;
 1773      updates_.Add(new ZipUpdate(original, updated));
 1774    }
 1775*/
 1776    #endregion
 1777
 1778    #region Deleting Entries
 1779    /// <summary>
 1780    /// Delete an entry by name
 1781    /// </summary>
 1782    /// <param name="fileName">The filename to delete</param>
 1783    /// <returns>True if the entry was found and deleted; false otherwise.</returns>
 1784    public bool Delete(string fileName)
 1785    {
 1786      if ( fileName == null ) {
 1787        throw new ArgumentNullException(nameof(fileName));
 1788      }
 1789
 1790      CheckUpdating();
 1791
 1792      bool result = false;
 1793      int index = FindExistingUpdate(fileName);
 1794      if ( (index >= 0) && (updates_[index] != null) ) {
 1795        result = true;
 1796        contentsEdited_ = true;
 1797        updates_[index] = null;
 1798        updateCount_ -= 1;
 1799      }
 1800      else {
 1801        throw new ZipException("Cannot find entry to delete");
 1802      }
 1803      return result;
 1804    }
 1805
 1806    /// <summary>
 1807    /// Delete a <see cref="ZipEntry"/> from the archive.
 1808    /// </summary>
 1809    /// <param name="entry">The entry to delete.</param>
 1810    public void Delete(ZipEntry entry)
 1811    {
 1812      if ( entry == null ) {
 1813        throw new ArgumentNullException(nameof(entry));
 1814      }
 1815
 1816      CheckUpdating();
 1817
 1818      int index = FindExistingUpdate(entry);
 1819      if ( index >= 0 ) {
 1820        contentsEdited_ = true;
 1821        updates_[index] = null;
 1822        updateCount_ -= 1;
 1823      }
 1824      else {
 1825        throw new ZipException("Cannot find entry to delete");
 1826      }
 1827    }
 1828
 1829    #endregion
 1830
 1831    #region Update Support
 1832
 1833    #region Writing Values/Headers
 1834    void WriteLEShort(int value)
 1835    {
 1836      baseStream_.WriteByte(( byte )(value & 0xff));
 1837      baseStream_.WriteByte(( byte )((value >> 8) & 0xff));
 1838    }
 1839
 1840    /// <summary>
 1841    /// Write an unsigned short in little endian byte order.
 1842    /// </summary>
 1843    void WriteLEUshort(ushort value)
 1844    {
 1845      baseStream_.WriteByte(( byte )(value & 0xff));
 1846      baseStream_.WriteByte(( byte )(value >> 8));
 1847    }
 1848
 1849    /// <summary>
 1850    /// Write an int in little endian byte order.
 1851    /// </summary>
 1852    void WriteLEInt(int value)
 1853    {
 1854      WriteLEShort(value & 0xffff);
 1855      WriteLEShort(value >> 16);
 1856    }
 1857
 1858    /// <summary>
 1859    /// Write an unsigned int in little endian byte order.
 1860    /// </summary>
 1861    void WriteLEUint(uint value)
 1862    {
 1863      WriteLEUshort((ushort)(value & 0xffff));
 1864      WriteLEUshort((ushort)(value >> 16));
 1865    }
 1866
 1867    /// <summary>
 1868    /// Write a long in little endian byte order.
 1869    /// </summary>
 1870    void WriteLeLong(long value)
 1871    {
 1872      WriteLEInt(( int )(value & 0xffffffff));
 1873      WriteLEInt(( int )(value >> 32));
 1874    }
 1875
 1876    void WriteLEUlong(ulong value)
 1877    {
 1878      WriteLEUint(( uint )(value & 0xffffffff));
 1879      WriteLEUint(( uint )(value >> 32));
 1880    }
 1881
 1882    void WriteLocalEntryHeader(ZipUpdate update)
 1883    {
 1884      ZipEntry entry = update.OutEntry;
 1885
 1886      // TODO: Local offset will require adjusting for multi-disk zip files.
 1887      entry.Offset = baseStream_.Position;
 1888
 1889      // TODO: Need to clear any entry flags that dont make sense or throw an exception here.
 1890      if (update.Command != UpdateCommand.Copy) {
 1891        if (entry.CompressionMethod == CompressionMethod.Deflated) {
 1892          if (entry.Size == 0) {
 1893            // No need to compress - no data.
 1894            entry.CompressedSize = entry.Size;
 1895            entry.Crc = 0;
 1896            entry.CompressionMethod = CompressionMethod.Stored;
 1897          }
 1898        }
 1899        else if (entry.CompressionMethod == CompressionMethod.Stored) {
 1900          entry.Flags &= ~(int)GeneralBitFlags.Descriptor;
 1901        }
 1902
 1903        if (HaveKeys) {
 1904          entry.IsCrypted = true;
 1905          if (entry.Crc < 0) {
 1906            entry.Flags |= (int)GeneralBitFlags.Descriptor;
 1907          }
 1908        }
 1909        else {
 1910          entry.IsCrypted = false;
 1911        }
 1912
 1913        switch (useZip64_) {
 1914          case UseZip64.Dynamic:
 1915            if (entry.Size < 0) {
 1916              entry.ForceZip64();
 1917            }
 1918            break;
 1919
 1920          case UseZip64.On:
 1921            entry.ForceZip64();
 1922            break;
 1923
 1924          case UseZip64.Off:
 1925            // Do nothing.  The entry itself may be using Zip64 independantly.
 1926            break;
 1927        }
 1928      }
 1929
 1930      // Write the local file header
 1931      WriteLEInt(ZipConstants.LocalHeaderSignature);
 1932
 1933      WriteLEShort(entry.Version);
 1934      WriteLEShort(entry.Flags);
 1935
 1936      WriteLEShort((byte)entry.CompressionMethod);
 1937      WriteLEInt(( int )entry.DosTime);
 1938
 1939      if ( !entry.HasCrc ) {
 1940        // Note patch address for updating CRC later.
 1941        update.CrcPatchOffset = baseStream_.Position;
 1942        WriteLEInt(( int )0);
 1943      }
 1944      else {
 1945        WriteLEInt(unchecked(( int )entry.Crc));
 1946      }
 1947
 1948      if (entry.LocalHeaderRequiresZip64) {
 1949        WriteLEInt(-1);
 1950        WriteLEInt(-1);
 1951      }
 1952      else {
 1953        if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) {
 1954          update.SizePatchOffset = baseStream_.Position;
 1955        }
 1956
 1957        WriteLEInt(( int )entry.CompressedSize);
 1958        WriteLEInt(( int )entry.Size);
 1959      }
 1960
 1961      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 1962
 1963      if ( name.Length > 0xFFFF ) {
 1964        throw new ZipException("Entry name too long.");
 1965      }
 1966
 1967      var ed = new ZipExtraData(entry.ExtraData);
 1968
 1969      if ( entry.LocalHeaderRequiresZip64 ) {
 1970        ed.StartNewEntry();
 1971
 1972        // Local entry header always includes size and compressed size.
 1973        // NOTE the order of these fields is reversed when compared to the normal headers!
 1974        ed.AddLeLong(entry.Size);
 1975        ed.AddLeLong(entry.CompressedSize);
 1976        ed.AddNewEntry(1);
 1977      }
 1978      else {
 1979        ed.Delete(1);
 1980      }
 1981
 1982      entry.ExtraData = ed.GetEntryData();
 1983
 1984      WriteLEShort(name.Length);
 1985      WriteLEShort(entry.ExtraData.Length);
 1986
 1987      if ( name.Length > 0 ) {
 1988        baseStream_.Write(name, 0, name.Length);
 1989      }
 1990
 1991      if ( entry.LocalHeaderRequiresZip64 ) {
 1992        if ( !ed.Find(1) ) {
 1993          throw new ZipException("Internal error cannot find extra data");
 1994        }
 1995
 1996        update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex;
 1997      }
 1998
 1999      if ( entry.ExtraData.Length > 0 ) {
 2000        baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length);
 2001      }
 2002    }
 2003
 2004    int WriteCentralDirectoryHeader(ZipEntry entry)
 2005    {
 2006      if ( entry.CompressedSize < 0 ) {
 2007        throw new ZipException("Attempt to write central directory entry with unknown csize");
 2008      }
 2009
 2010      if ( entry.Size < 0 ) {
 2011        throw new ZipException("Attempt to write central directory entry with unknown size");
 2012      }
 2013
 2014      if ( entry.Crc < 0 ) {
 2015        throw new ZipException("Attempt to write central directory entry with unknown crc");
 2016      }
 2017
 2018      // Write the central file header
 2019      WriteLEInt(ZipConstants.CentralHeaderSignature);
 2020
 2021      // Version made by
 2022      WriteLEShort(ZipConstants.VersionMadeBy);
 2023
 2024      // Version required to extract
 2025      WriteLEShort(entry.Version);
 2026
 2027      WriteLEShort(entry.Flags);
 2028
 2029      unchecked {
 2030        WriteLEShort((byte)entry.CompressionMethod);
 2031        WriteLEInt((int)entry.DosTime);
 2032        WriteLEInt((int)entry.Crc);
 2033      }
 2034
 2035      if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) {
 2036        WriteLEInt(-1);
 2037      }
 2038      else {
 2039        WriteLEInt((int)(entry.CompressedSize & 0xffffffff));
 2040      }
 2041
 2042      if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) {
 2043        WriteLEInt(-1);
 2044      }
 2045      else {
 2046        WriteLEInt((int)entry.Size);
 2047      }
 2048
 2049      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 2050
 2051      if ( name.Length > 0xFFFF ) {
 2052        throw new ZipException("Entry name is too long.");
 2053      }
 2054
 2055      WriteLEShort(name.Length);
 2056
 2057      // Central header extra data is different to local header version so regenerate.
 2058      var ed = new ZipExtraData(entry.ExtraData);
 2059
 2060      if ( entry.CentralHeaderRequiresZip64 ) {
 2061        ed.StartNewEntry();
 2062
 2063        if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2064        {
 2065          ed.AddLeLong(entry.Size);
 2066        }
 2067
 2068        if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2069        {
 2070          ed.AddLeLong(entry.CompressedSize);
 2071        }
 2072
 2073        if ( entry.Offset >= 0xffffffff ) {
 2074          ed.AddLeLong(entry.Offset);
 2075        }
 2076
 2077        // Number of disk on which this file starts isnt supported and is never written here.
 2078        ed.AddNewEntry(1);
 2079      }
 2080      else {
 2081        // Should have already be done when local header was added.
 2082        ed.Delete(1);
 2083      }
 2084
 2085      byte[] centralExtraData = ed.GetEntryData();
 2086
 2087      WriteLEShort(centralExtraData.Length);
 2088      WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0);
 2089
 2090      WriteLEShort(0);  // disk number
 2091      WriteLEShort(0);  // internal file attributes
 2092
 2093      // External file attributes...
 2094      if ( entry.ExternalFileAttributes != -1 ) {
 2095        WriteLEInt(entry.ExternalFileAttributes);
 2096      }
 2097      else {
 2098        if ( entry.IsDirectory ) {
 2099          WriteLEUint(16);
 2100        }
 2101        else {
 2102          WriteLEUint(0);
 2103        }
 2104      }
 2105
 2106      if ( entry.Offset >= 0xffffffff ) {
 2107        WriteLEUint(0xffffffff);
 2108      }
 2109      else {
 2110        WriteLEUint((uint)(int)entry.Offset);
 2111      }
 2112
 2113      if ( name.Length > 0 ) {
 2114        baseStream_.Write(name, 0, name.Length);
 2115      }
 2116
 2117      if ( centralExtraData.Length > 0 ) {
 2118        baseStream_.Write(centralExtraData, 0, centralExtraData.Length);
 2119      }
 2120
 2121      byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0];
 2122
 2123      if ( rawComment.Length > 0 ) {
 2124        baseStream_.Write(rawComment, 0, rawComment.Length);
 2125      }
 2126
 2127      return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length;
 2128    }
 2129    #endregion
 2130
 2131    void PostUpdateCleanup()
 2132    {
 2133            updateDataSource_ = null;
 2134            updates_ = null;
 2135            updateIndex_ = null;
 2136
 2137            if (archiveStorage_ != null)
 2138            {
 2139        archiveStorage_.Dispose();
 2140        archiveStorage_=null;
 2141      }
 2142    }
 2143
 2144    string GetTransformedFileName(string name)
 2145    {
 2146            INameTransform transform = NameTransform;
 2147      return (transform != null) ?
 2148        transform.TransformFile(name) :
 2149        name;
 2150    }
 2151
 2152    string GetTransformedDirectoryName(string name)
 2153    {
 2154            INameTransform transform = NameTransform;
 2155            return (transform != null) ?
 2156        transform.TransformDirectory(name) :
 2157        name;
 2158    }
 2159
 2160    /// <summary>
 2161    /// Get a raw memory buffer.
 2162    /// </summary>
 2163    /// <returns>Returns a raw memory buffer.</returns>
 2164    byte[] GetBuffer()
 2165    {
 2166      if ( copyBuffer_ == null ) {
 2167        copyBuffer_ = new byte[bufferSize_];
 2168      }
 2169      return copyBuffer_;
 2170    }
 2171
 2172    void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
 2173    {
 2174      int bytesToCopy = GetDescriptorSize(update);
 2175
 2176      if ( bytesToCopy > 0 ) {
 2177        byte[] buffer = GetBuffer();
 2178
 2179        while ( bytesToCopy > 0 ) {
 2180          int readSize = Math.Min(buffer.Length, bytesToCopy);
 2181
 2182          int bytesRead = source.Read(buffer, 0, readSize);
 2183          if ( bytesRead > 0 ) {
 2184            dest.Write(buffer, 0, bytesRead);
 2185            bytesToCopy -= bytesRead;
 2186          }
 2187          else {
 2188            throw new ZipException("Unxpected end of stream");
 2189          }
 2190        }
 2191      }
 2192    }
 2193
 2194    void CopyBytes(ZipUpdate update, Stream destination, Stream source,
 2195      long bytesToCopy, bool updateCrc)
 2196    {
 2197      if ( destination == source ) {
 2198        throw new InvalidOperationException("Destination and source are the same");
 2199      }
 2200
 2201      // NOTE: Compressed size is updated elsewhere.
 2202      var crc = new Crc32();
 2203      byte[] buffer = GetBuffer();
 2204
 2205      long targetBytes = bytesToCopy;
 2206      long totalBytesRead = 0;
 2207
 2208      int bytesRead;
 2209      do {
 2210        int readSize = buffer.Length;
 2211
 2212        if ( bytesToCopy < readSize ) {
 2213          readSize = (int)bytesToCopy;
 2214        }
 2215
 2216        bytesRead = source.Read(buffer, 0, readSize);
 2217        if ( bytesRead > 0 ) {
 2218          if ( updateCrc ) {
 2219            crc.Update(buffer, 0, bytesRead);
 2220          }
 2221          destination.Write(buffer, 0, bytesRead);
 2222          bytesToCopy -= bytesRead;
 2223          totalBytesRead += bytesRead;
 2224        }
 2225      }
 2226      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2227
 2228      if ( totalBytesRead != targetBytes ) {
 2229        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2230      }
 2231
 2232      if ( updateCrc ) {
 2233        update.OutEntry.Crc = crc.Value;
 2234      }
 2235    }
 2236
 2237    /// <summary>
 2238    /// Get the size of the source descriptor for a <see cref="ZipUpdate"/>.
 2239    /// </summary>
 2240    /// <param name="update">The update to get the size for.</param>
 2241    /// <returns>The descriptor size, zero if there isnt one.</returns>
 2242    int GetDescriptorSize(ZipUpdate update)
 2243    {
 2244      int result = 0;
 2245      if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) {
 2246        result = ZipConstants.DataDescriptorSize - 4;
 2247        if ( update.Entry.LocalHeaderRequiresZip64 ) {
 2248          result = ZipConstants.Zip64DataDescriptorSize - 4;
 2249        }
 2250      }
 2251      return result;
 2252    }
 2253
 2254    void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition)
 2255    {
 2256      int bytesToCopy = GetDescriptorSize(update);
 2257
 2258      while ( bytesToCopy > 0 ) {
 2259        var readSize = (int)bytesToCopy;
 2260        byte[] buffer = GetBuffer();
 2261
 2262        stream.Position = sourcePosition;
 2263        int bytesRead = stream.Read(buffer, 0, readSize);
 2264        if ( bytesRead > 0 ) {
 2265          stream.Position = destinationPosition;
 2266          stream.Write(buffer, 0, bytesRead);
 2267          bytesToCopy -= bytesRead;
 2268          destinationPosition += bytesRead;
 2269          sourcePosition += bytesRead;
 2270        }
 2271        else {
 2272          throw new ZipException("Unxpected end of stream");
 2273        }
 2274      }
 2275    }
 2276
 2277    void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sou
 2278    {
 2279      long bytesToCopy = update.Entry.CompressedSize;
 2280
 2281      // NOTE: Compressed size is updated elsewhere.
 2282      var crc = new Crc32();
 2283      byte[] buffer = GetBuffer();
 2284
 2285      long targetBytes = bytesToCopy;
 2286      long totalBytesRead = 0;
 2287
 2288      int bytesRead;
 2289      do
 2290      {
 2291        int readSize = buffer.Length;
 2292
 2293        if ( bytesToCopy < readSize ) {
 2294          readSize = (int)bytesToCopy;
 2295        }
 2296
 2297        stream.Position = sourcePosition;
 2298        bytesRead = stream.Read(buffer, 0, readSize);
 2299        if ( bytesRead > 0 ) {
 2300          if ( updateCrc ) {
 2301            crc.Update(buffer, 0, bytesRead);
 2302          }
 2303          stream.Position = destinationPosition;
 2304          stream.Write(buffer, 0, bytesRead);
 2305
 2306          destinationPosition += bytesRead;
 2307          sourcePosition += bytesRead;
 2308          bytesToCopy -= bytesRead;
 2309          totalBytesRead += bytesRead;
 2310        }
 2311      }
 2312      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2313
 2314      if ( totalBytesRead != targetBytes ) {
 2315        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2316      }
 2317
 2318      if ( updateCrc ) {
 2319        update.OutEntry.Crc = crc.Value;
 2320      }
 2321    }
 2322
 2323    int FindExistingUpdate(ZipEntry entry)
 2324    {
 2325      int result = -1;
 2326      string convertedName = GetTransformedFileName(entry.Name);
 2327
 2328      if (updateIndex_.ContainsKey(convertedName)) {
 2329        result = (int)updateIndex_[convertedName];
 2330      }
 2331/*
 2332      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2333      // for CF?
 2334      for (int index = 0; index < updates_.Count; ++index)
 2335      {
 2336        ZipUpdate zu = ( ZipUpdate )updates_[index];
 2337        if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) &&
 2338          (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) {
 2339          result = index;
 2340          break;
 2341        }
 2342      }
 2343 */
 2344      return result;
 2345    }
 2346
 2347    int FindExistingUpdate(string fileName)
 2348    {
 2349      int result = -1;
 2350
 2351      string convertedName = GetTransformedFileName(fileName);
 2352
 2353      if (updateIndex_.ContainsKey(convertedName)) {
 2354        result = (int)updateIndex_[convertedName];
 2355      }
 2356
 2357/*
 2358      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2359      // for CF?
 2360      for ( int index = 0; index < updates_.Count; ++index ) {
 2361        if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name,
 2362          true, CultureInfo.InvariantCulture) == 0 ) {
 2363          result = index;
 2364          break;
 2365        }
 2366      }
 2367 */
 2368
 2369      return result;
 2370    }
 2371
 2372    /// <summary>
 2373    /// Get an output stream for the specified <see cref="ZipEntry"/>
 2374    /// </summary>
 2375    /// <param name="entry">The entry to get an output stream for.</param>
 2376    /// <returns>The output stream obtained for the entry.</returns>
 2377    Stream GetOutputStream(ZipEntry entry)
 2378    {
 2379      Stream result = baseStream_;
 2380
 2381      if ( entry.IsCrypted == true ) {
 2382#if NETCF_1_0
 2383        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 2384#else
 2385        result = CreateAndInitEncryptionStream(result, entry);
 2386#endif
 2387      }
 2388
 2389      switch ( entry.CompressionMethod ) {
 2390        case CompressionMethod.Stored:
 2391          result = new UncompressedStream(result);
 2392          break;
 2393
 2394        case CompressionMethod.Deflated:
 2395          var dos = new DeflaterOutputStream(result, new Deflater(9, true));
 2396          dos.IsStreamOwner = false;
 2397          result = dos;
 2398          break;
 2399
 2400        default:
 2401          throw new ZipException("Unknown compression method " + entry.CompressionMethod);
 2402      }
 2403      return result;
 2404    }
 2405
 2406    void AddEntry(ZipFile workFile, ZipUpdate update)
 2407    {
 2408      Stream source = null;
 2409
 2410      if ( update.Entry.IsFile ) {
 2411        source = update.GetSource();
 2412
 2413        if ( source == null ) {
 2414          source = updateDataSource_.GetSource(update.Entry, update.Filename);
 2415        }
 2416      }
 2417
 2418      if ( source != null ) {
 2419        using ( source ) {
 2420          long sourceStreamLength = source.Length;
 2421          if ( update.OutEntry.Size < 0 ) {
 2422            update.OutEntry.Size = sourceStreamLength;
 2423          }
 2424          else {
 2425            // Check for errant entries.
 2426            if ( update.OutEntry.Size != sourceStreamLength ) {
 2427              throw new ZipException("Entry size/stream size mismatch");
 2428            }
 2429          }
 2430
 2431          workFile.WriteLocalEntryHeader(update);
 2432
 2433          long dataStart = workFile.baseStream_.Position;
 2434
 2435          using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2436            CopyBytes(update, output, source, sourceStreamLength, true);
 2437          }
 2438
 2439          long dataEnd = workFile.baseStream_.Position;
 2440          update.OutEntry.CompressedSize = dataEnd - dataStart;
 2441
 2442          if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor)
 2443          {
 2444            var helper = new ZipHelperStream(workFile.baseStream_);
 2445            helper.WriteDataDescriptor(update.OutEntry);
 2446          }
 2447        }
 2448      }
 2449      else {
 2450        workFile.WriteLocalEntryHeader(update);
 2451        update.OutEntry.CompressedSize = 0;
 2452      }
 2453
 2454    }
 2455
 2456    void ModifyEntry(ZipFile workFile, ZipUpdate update)
 2457    {
 2458      workFile.WriteLocalEntryHeader(update);
 2459      long dataStart = workFile.baseStream_.Position;
 2460
 2461      // TODO: This is slow if the changes don't effect the data!!
 2462      if ( update.Entry.IsFile && (update.Filename != null) ) {
 2463        using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2464          using ( Stream source = this.GetInputStream(update.Entry) ) {
 2465            CopyBytes(update, output, source, source.Length, true);
 2466          }
 2467        }
 2468      }
 2469
 2470      long dataEnd = workFile.baseStream_.Position;
 2471      update.Entry.CompressedSize = dataEnd - dataStart;
 2472    }
 2473
 2474    void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition)
 2475    {
 2476      bool skipOver = false || update.Entry.Offset == destinationPosition;
 2477
 2478      if ( !skipOver ) {
 2479        baseStream_.Position = destinationPosition;
 2480        workFile.WriteLocalEntryHeader(update);
 2481        destinationPosition = baseStream_.Position;
 2482      }
 2483
 2484      long sourcePosition = 0;
 2485
 2486      const int NameLengthOffset = 26;
 2487
 2488      // TODO: Add base for SFX friendly handling
 2489      long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2490
 2491      baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2492
 2493      // Clumsy way of handling retrieving the original name and extra data length for now.
 2494      // TODO: Stop re-reading name and data length in CopyEntryDirect.
 2495      uint nameLength = ReadLEUshort();
 2496      uint extraLength = ReadLEUshort();
 2497
 2498      sourcePosition = baseStream_.Position + nameLength + extraLength;
 2499
 2500      if (skipOver) {
 2501        if (update.OffsetBasedSize != -1)
 2502          destinationPosition += update.OffsetBasedSize;
 2503        else
 2504          // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) ar
 2505          // WinZip produces a warning on these entries:
 2506          // "caution: value of lrec.csize (compressed size) changed from ..."
 2507          destinationPosition +=
 2508            (sourcePosition - entryDataOffset) + NameLengthOffset +  // Header size
 2509            update.Entry.CompressedSize + GetDescriptorSize(update);
 2510      }
 2511      else {
 2512        if ( update.Entry.CompressedSize > 0 ) {
 2513          CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition );
 2514        }
 2515        CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition);
 2516      }
 2517    }
 2518
 2519    void CopyEntry(ZipFile workFile, ZipUpdate update)
 2520    {
 2521      workFile.WriteLocalEntryHeader(update);
 2522
 2523      if ( update.Entry.CompressedSize > 0 ) {
 2524        const int NameLengthOffset = 26;
 2525
 2526        long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2527
 2528        // TODO: This wont work for SFX files!
 2529        baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2530
 2531        uint nameLength = ReadLEUshort();
 2532        uint extraLength = ReadLEUshort();
 2533
 2534        baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current);
 2535
 2536        CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false);
 2537      }
 2538      CopyDescriptorBytes(update, workFile.baseStream_, baseStream_);
 2539    }
 2540
 2541    void Reopen(Stream source)
 2542    {
 2543      if ( source == null ) {
 2544        throw new ZipException("Failed to reopen archive - no source");
 2545      }
 2546
 2547      isNewArchive_ = false;
 2548      baseStream_ = source;
 2549      ReadEntries();
 2550    }
 2551
 2552    void Reopen()
 2553    {
 2554      if (Name == null) {
 2555        throw new InvalidOperationException("Name is not known cannot Reopen");
 2556      }
 2557
 2558      Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read));
 2559    }
 2560
 2561    void UpdateCommentOnly()
 2562    {
 2563      long baseLength = baseStream_.Length;
 2564
 2565      ZipHelperStream updateFile = null;
 2566
 2567      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2568        Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_);
 2569        updateFile = new ZipHelperStream(copyStream);
 2570        updateFile.IsStreamOwner = true;
 2571
 2572        baseStream_.Close();
 2573        baseStream_ = null;
 2574      }
 2575      else {
 2576        if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) {
 2577          // TODO: archiveStorage wasnt originally intended for this use.
 2578          // Need to revisit this to tidy up handling as archive storage currently doesnt
 2579          // handle the original stream well.
 2580          // The problem is when using an existing zip archive with an in memory archive storage.
 2581          // The open stream wont support writing but the memory storage should open the same file not an in memory one.
 2582
 2583          // Need to tidy up the archive storage interface and contract basically.
 2584          baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_);
 2585          updateFile = new ZipHelperStream(baseStream_);
 2586        }
 2587        else {
 2588          baseStream_.Close();
 2589          baseStream_ = null;
 2590          updateFile = new ZipHelperStream(Name);
 2591        }
 2592      }
 2593
 2594      using ( updateFile ) {
 2595        long locatedCentralDirOffset =
 2596          updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 2597                            baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 2598        if ( locatedCentralDirOffset < 0 ) {
 2599          throw new ZipException("Cannot find central directory");
 2600        }
 2601
 2602        const int CentralHeaderCommentSizeOffset = 16;
 2603        updateFile.Position += CentralHeaderCommentSizeOffset;
 2604
 2605        byte[] rawComment = newComment_.RawComment;
 2606
 2607        updateFile.WriteLEShort(rawComment.Length);
 2608        updateFile.Write(rawComment, 0, rawComment.Length);
 2609        updateFile.SetLength(updateFile.Position);
 2610      }
 2611
 2612      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2613        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2614      }
 2615      else {
 2616        ReadEntries();
 2617      }
 2618    }
 2619
 2620    /// <summary>
 2621    /// Class used to sort updates.
 2622    /// </summary>
 2623    class UpdateComparer : IComparer
 2624    {
 2625      /// <summary>
 2626      /// Compares two objects and returns a value indicating whether one is
 2627      /// less than, equal to or greater than the other.
 2628      /// </summary>
 2629      /// <param name="x">First object to compare</param>
 2630      /// <param name="y">Second object to compare.</param>
 2631      /// <returns>Compare result.</returns>
 2632      public int Compare(
 2633        object x,
 2634        object y)
 2635      {
 2636        var zx = x as ZipUpdate;
 2637        var zy = y as ZipUpdate;
 2638
 2639        int result;
 2640
 2641        if (zx == null) {
 2642          if (zy == null) {
 2643            result = 0;
 2644          }
 2645          else {
 2646            result = -1;
 2647          }
 2648        }
 2649        else if (zy == null) {
 2650          result = 1;
 2651        }
 2652        else {
 2653          int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1;
 2654          int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1;
 2655
 2656          result = xCmdValue - yCmdValue;
 2657          if (result == 0) {
 2658            long offsetDiff = zx.Entry.Offset - zy.Entry.Offset;
 2659            if (offsetDiff < 0) {
 2660              result = -1;
 2661            }
 2662            else if (offsetDiff == 0) {
 2663              result = 0;
 2664            }
 2665            else {
 2666              result = 1;
 2667            }
 2668          }
 2669        }
 2670        return result;
 2671      }
 2672    }
 2673
 2674    void RunUpdates()
 2675    {
 2676      long sizeEntries = 0;
 2677      long endOfStream = 0;
 2678      bool directUpdate = false;
 2679      long destinationPosition = 0; // NOT SFX friendly
 2680
 2681      ZipFile workFile;
 2682
 2683      if ( IsNewArchive ) {
 2684        workFile = this;
 2685        workFile.baseStream_.Position = 0;
 2686        directUpdate = true;
 2687      }
 2688      else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) {
 2689        workFile = this;
 2690        workFile.baseStream_.Position = 0;
 2691        directUpdate = true;
 2692
 2693        // Sort the updates by offset within copies/modifies, then adds.
 2694        // This ensures that data required by copies will not be overwritten.
 2695        updates_.Sort(new UpdateComparer());
 2696      }
 2697      else {
 2698        workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput());
 2699        workFile.UseZip64 = UseZip64;
 2700
 2701        if (key != null) {
 2702          workFile.key = (byte[])key.Clone();
 2703        }
 2704      }
 2705
 2706      try {
 2707        foreach ( ZipUpdate update in updates_ ) {
 2708          if (update != null) {
 2709            switch (update.Command) {
 2710              case UpdateCommand.Copy:
 2711                if (directUpdate) {
 2712                  CopyEntryDirect(workFile, update, ref destinationPosition);
 2713                }
 2714                else {
 2715                  CopyEntry(workFile, update);
 2716                }
 2717                break;
 2718
 2719              case UpdateCommand.Modify:
 2720                // TODO: Direct modifying of an entry will take some legwork.
 2721                ModifyEntry(workFile, update);
 2722                break;
 2723
 2724              case UpdateCommand.Add:
 2725                if (!IsNewArchive && directUpdate) {
 2726                  workFile.baseStream_.Position = destinationPosition;
 2727                }
 2728
 2729                AddEntry(workFile, update);
 2730
 2731                if (directUpdate) {
 2732                  destinationPosition = workFile.baseStream_.Position;
 2733                }
 2734                break;
 2735            }
 2736          }
 2737        }
 2738
 2739        if ( !IsNewArchive && directUpdate ) {
 2740          workFile.baseStream_.Position = destinationPosition;
 2741        }
 2742
 2743        long centralDirOffset = workFile.baseStream_.Position;
 2744
 2745        foreach ( ZipUpdate update in updates_ ) {
 2746          if (update != null) {
 2747            sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry);
 2748          }
 2749        }
 2750
 2751        byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_);
 2752        using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) {
 2753          zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment);
 2754        }
 2755
 2756        endOfStream = workFile.baseStream_.Position;
 2757
 2758        // And now patch entries...
 2759        foreach ( ZipUpdate update in updates_ ) {
 2760          if (update != null)
 2761          {
 2762            // If the size of the entry is zero leave the crc as 0 as well.
 2763            // The calculated crc will be all bits on...
 2764            if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) {
 2765              workFile.baseStream_.Position = update.CrcPatchOffset;
 2766              workFile.WriteLEInt((int)update.OutEntry.Crc);
 2767            }
 2768
 2769            if (update.SizePatchOffset > 0) {
 2770              workFile.baseStream_.Position = update.SizePatchOffset;
 2771              if (update.OutEntry.LocalHeaderRequiresZip64) {
 2772                workFile.WriteLeLong(update.OutEntry.Size);
 2773                workFile.WriteLeLong(update.OutEntry.CompressedSize);
 2774              }
 2775              else {
 2776                workFile.WriteLEInt((int)update.OutEntry.CompressedSize);
 2777                workFile.WriteLEInt((int)update.OutEntry.Size);
 2778              }
 2779            }
 2780          }
 2781        }
 2782      }
 2783      catch {
 2784        workFile.Close();
 2785        if (!directUpdate && (workFile.Name != null)) {
 2786          File.Delete(workFile.Name);
 2787        }
 2788        throw;
 2789      }
 2790
 2791      if (directUpdate) {
 2792        workFile.baseStream_.SetLength(endOfStream);
 2793        workFile.baseStream_.Flush();
 2794        isNewArchive_ = false;
 2795        ReadEntries();
 2796      }
 2797      else {
 2798        baseStream_.Close();
 2799        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2800      }
 2801    }
 2802
 2803    void CheckUpdating()
 2804    {
 2805      if ( updates_ == null ) {
 2806        throw new InvalidOperationException("BeginUpdate has not been called");
 2807      }
 2808    }
 2809
 2810    #endregion
 2811
 2812    #region ZipUpdate class
 2813    /// <summary>
 2814    /// Represents a pending update to a Zip file.
 2815    /// </summary>
 2816    class ZipUpdate
 2817    {
 2818      #region Constructors
 2819      public ZipUpdate(string fileName, ZipEntry entry)
 2820      {
 2821        command_ = UpdateCommand.Add;
 2822        entry_ = entry;
 2823        filename_ = fileName;
 2824      }
 2825
 2826      [Obsolete]
 2827      public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod)
 2828      {
 2829        command_ = UpdateCommand.Add;
 2830        entry_ = new ZipEntry(entryName);
 2831        entry_.CompressionMethod = compressionMethod;
 2832        filename_ = fileName;
 2833      }
 2834
 2835      [Obsolete]
 2836      public ZipUpdate(string fileName, string entryName)
 2837        : this(fileName, entryName, CompressionMethod.Deflated)
 2838      {
 2839        // Do nothing.
 2840      }
 2841
 2842      [Obsolete]
 2843      public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 2844      {
 2845        command_ = UpdateCommand.Add;
 2846        entry_ = new ZipEntry(entryName);
 2847        entry_.CompressionMethod = compressionMethod;
 2848        dataSource_ = dataSource;
 2849      }
 2850
 2851      public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry)
 2852      {
 2853        command_ = UpdateCommand.Add;
 2854        entry_ = entry;
 2855        dataSource_ = dataSource;
 2856      }
 2857
 2858      public ZipUpdate(ZipEntry original, ZipEntry updated)
 2859      {
 2860        throw new ZipException("Modify not currently supported");
 2861      /*
 2862        command_ = UpdateCommand.Modify;
 2863        entry_ = ( ZipEntry )original.Clone();
 2864        outEntry_ = ( ZipEntry )updated.Clone();
 2865      */
 2866      }
 2867
 2868      public ZipUpdate(UpdateCommand command, ZipEntry entry)
 2869      {
 2870        command_ = command;
 2871        entry_ = ( ZipEntry )entry.Clone();
 2872      }
 2873
 2874
 2875      /// <summary>
 2876      /// Copy an existing entry.
 2877      /// </summary>
 2878      /// <param name="entry">The existing entry to copy.</param>
 2879      public ZipUpdate(ZipEntry entry)
 2880        : this(UpdateCommand.Copy, entry)
 2881      {
 2882        // Do nothing.
 2883      }
 2884      #endregion
 2885
 2886      /// <summary>
 2887      /// Get the <see cref="ZipEntry"/> for this update.
 2888      /// </summary>
 2889      /// <remarks>This is the source or original entry.</remarks>
 2890      public ZipEntry Entry
 2891      {
 2892        get { return entry_; }
 2893      }
 2894
 2895      /// <summary>
 2896      /// Get the <see cref="ZipEntry"/> that will be written to the updated/new file.
 2897      /// </summary>
 2898      public ZipEntry OutEntry
 2899      {
 2900        get {
 2901          if ( outEntry_ == null ) {
 2902            outEntry_ = (ZipEntry)entry_.Clone();
 2903          }
 2904
 2905          return outEntry_;
 2906        }
 2907      }
 2908
 2909      /// <summary>
 2910      /// Get the command for this update.
 2911      /// </summary>
 2912      public UpdateCommand Command
 2913      {
 2914        get { return command_; }
 2915      }
 2916
 2917      /// <summary>
 2918      /// Get the filename if any for this update.  Null if none exists.
 2919      /// </summary>
 2920      public string Filename
 2921      {
 2922        get { return filename_; }
 2923      }
 2924
 2925      /// <summary>
 2926      /// Get/set the location of the size patch for this update.
 2927      /// </summary>
 2928      public long SizePatchOffset
 2929      {
 2930        get { return sizePatchOffset_; }
 2931        set { sizePatchOffset_ = value; }
 2932      }
 2933
 2934      /// <summary>
 2935      /// Get /set the location of the crc patch for this update.
 2936      /// </summary>
 2937      public long CrcPatchOffset
 2938      {
 2939        get { return crcPatchOffset_; }
 2940        set { crcPatchOffset_ = value; }
 2941      }
 2942
 2943      /// <summary>
 2944      /// Get/set the size calculated by offset.
 2945      /// Specifically, the difference between this and next entry's starting offset.
 2946      /// </summary>
 2947      public long OffsetBasedSize
 2948      {
 2949        get { return _offsetBasedSize; }
 2950        set { _offsetBasedSize = value; }
 2951      }
 2952
 2953      public Stream GetSource()
 2954      {
 2955        Stream result = null;
 2956        if ( dataSource_ != null ) {
 2957          result = dataSource_.GetSource();
 2958        }
 2959
 2960        return result;
 2961      }
 2962
 2963      #region Instance Fields
 2964      ZipEntry entry_;
 2965      ZipEntry outEntry_;
 2966      UpdateCommand command_;
 2967      IStaticDataSource dataSource_;
 2968      string filename_;
 2969      long sizePatchOffset_ = -1;
 2970      long crcPatchOffset_ = -1;
 2971      long _offsetBasedSize = -1;
 2972      #endregion
 2973    }
 2974
 2975    #endregion
 2976    #endregion
 2977
 2978    #region Disposing
 2979
 2980    #region IDisposable Members
 2981    void IDisposable.Dispose()
 2982    {
 2983      Close();
 2984    }
 2985    #endregion
 2986
 2987    void DisposeInternal(bool disposing)
 2988    {
 2989      if ( !isDisposed_ ) {
 2990        isDisposed_ = true;
 2991        entries_ = new ZipEntry[0];
 2992
 2993        if ( IsStreamOwner && (baseStream_ != null) ) {
 2994          lock(baseStream_) {
 2995            baseStream_.Close();
 2996          }
 2997        }
 2998
 2999        PostUpdateCleanup();
 3000      }
 3001    }
 3002
 3003    /// <summary>
 3004    /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
 3005    /// </summary>
 3006    /// <param name="disposing">true to release both managed and unmanaged resources;
 3007    /// false to release only unmanaged resources.</param>
 3008    protected virtual void Dispose(bool disposing)
 3009    {
 3010      DisposeInternal(disposing);
 3011    }
 3012
 3013    #endregion
 3014
 3015    #region Internal routines
 3016    #region Reading
 3017    /// <summary>
 3018    /// Read an unsigned short in little endian byte order.
 3019    /// </summary>
 3020    /// <returns>Returns the value read.</returns>
 3021    /// <exception cref="EndOfStreamException">
 3022    /// The stream ends prematurely
 3023    /// </exception>
 3024    ushort ReadLEUshort()
 3025    {
 3026      int data1 = baseStream_.ReadByte();
 3027
 3028      if ( data1 < 0 ) {
 3029        throw new EndOfStreamException("End of stream");
 3030      }
 3031
 3032      int data2 = baseStream_.ReadByte();
 3033
 3034      if ( data2 < 0 ) {
 3035        throw new EndOfStreamException("End of stream");
 3036      }
 3037
 3038
 3039      return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8)));
 3040    }
 3041
 3042    /// <summary>
 3043    /// Read a uint in little endian byte order.
 3044    /// </summary>
 3045    /// <returns>Returns the value read.</returns>
 3046    /// <exception cref="IOException">
 3047    /// An i/o error occurs.
 3048    /// </exception>
 3049    /// <exception cref="System.IO.EndOfStreamException">
 3050    /// The file ends prematurely
 3051    /// </exception>
 3052    uint ReadLEUint()
 3053    {
 3054      return (uint)(ReadLEUshort() | (ReadLEUshort() << 16));
 3055    }
 3056
 3057    ulong ReadLEUlong()
 3058    {
 3059      return ReadLEUint() | ((ulong)ReadLEUint() << 32);
 3060    }
 3061
 3062    #endregion
 3063    // NOTE this returns the offset of the first byte after the signature.
 3064    long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 3065    {
 3066      using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) {
 3067        return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData);
 3068      }
 3069    }
 3070
 3071    /// <summary>
 3072    /// Search for and read the central directory of a zip file filling the entries array.
 3073    /// </summary>
 3074    /// <exception cref="System.IO.IOException">
 3075    /// An i/o error occurs.
 3076    /// </exception>
 3077    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3078    /// The central directory is malformed or cannot be found
 3079    /// </exception>
 3080    void ReadEntries()
 3081    {
 3082      // Search for the End Of Central Directory.  When a zip comment is
 3083      // present the directory will start earlier
 3084      //
 3085      // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed.
 3086      // This should be compatible with both SFX and ZIP files but has only been tested for Zip files
 3087      // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then
 3088      // this could be invalid.
 3089      // Could also speed this up by reading memory in larger blocks.
 3090
 3091      if (baseStream_.CanSeek == false) {
 3092        throw new ZipException("ZipFile stream must be seekable");
 3093      }
 3094
 3095      long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 3096        baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 3097
 3098      if (locatedEndOfCentralDir < 0) {
 3099        throw new ZipException("Cannot find central directory");
 3100      }
 3101
 3102      // Read end of central directory record
 3103      ushort thisDiskNumber           = ReadLEUshort();
 3104      ushort startCentralDirDisk      = ReadLEUshort();
 3105      ulong entriesForThisDisk        = ReadLEUshort();
 3106      ulong entriesForWholeCentralDir = ReadLEUshort();
 3107      ulong centralDirSize            = ReadLEUint();
 3108      long offsetOfCentralDir         = ReadLEUint();
 3109      uint commentSize                = ReadLEUshort();
 3110
 3111      if ( commentSize > 0 ) {
 3112        byte[] comment = new byte[commentSize];
 3113
 3114        StreamUtils.ReadFully(baseStream_, comment);
 3115        comment_ = ZipConstants.ConvertToString(comment);
 3116      }
 3117      else {
 3118        comment_ = string.Empty;
 3119      }
 3120
 3121      bool isZip64 = false;
 3122
 3123      // Check if zip64 header information is required.
 3124      if ( (thisDiskNumber == 0xffff) ||
 3125        (startCentralDirDisk == 0xffff) ||
 3126        (entriesForThisDisk == 0xffff) ||
 3127        (entriesForWholeCentralDir == 0xffff) ||
 3128        (centralDirSize == 0xffffffff) ||
 3129        (offsetOfCentralDir == 0xffffffff) ) {
 3130        isZip64 = true;
 3131
 3132        long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 
 3133        if ( offset < 0 ) {
 3134          throw new ZipException("Cannot find Zip64 locator");
 3135        }
 3136
 3137        // number of the disk with the start of the zip64 end of central directory 4 bytes
 3138        // relative offset of the zip64 end of central directory record 8 bytes
 3139        // total number of disks 4 bytes
 3140        ReadLEUint(); // startDisk64 is not currently used
 3141        ulong offset64 = ReadLEUlong();
 3142        uint totalDisks = ReadLEUint();
 3143
 3144        baseStream_.Position = (long)offset64;
 3145        long sig64 = ReadLEUint();
 3146
 3147        if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) {
 3148          throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64));
 3149        }
 3150
 3151        // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12.
 3152        ulong recordSize = ReadLEUlong();
 3153        int versionMadeBy = ReadLEUshort();
 3154        int versionToExtract = ReadLEUshort();
 3155        uint thisDisk = ReadLEUint();
 3156        uint centralDirDisk = ReadLEUint();
 3157        entriesForThisDisk = ReadLEUlong();
 3158        entriesForWholeCentralDir = ReadLEUlong();
 3159        centralDirSize = ReadLEUlong();
 3160        offsetOfCentralDir = (long)ReadLEUlong();
 3161
 3162        // NOTE: zip64 extensible data sector (variable size) is ignored.
 3163      }
 3164
 3165      entries_ = new ZipEntry[entriesForThisDisk];
 3166
 3167      // SFX/embedded support, find the offset of the first entry vis the start of the stream
 3168      // This applies to Zip files that are appended to the end of an SFX stub.
 3169      // Or are appended as a resource to an executable.
 3170      // Zip files created by some archivers have the offsets altered to reflect the true offsets
 3171      // and so dont require any adjustment here...
 3172      // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths?
 3173      if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) {
 3174        offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir);
 3175        if (offsetOfFirstEntry <= 0) {
 3176          throw new ZipException("Invalid embedded zip archive");
 3177        }
 3178      }
 3179
 3180      baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin);
 3181
 3182      for (ulong i = 0; i < entriesForThisDisk; i++) {
 3183        if (ReadLEUint() != ZipConstants.CentralHeaderSignature) {
 3184          throw new ZipException("Wrong Central Directory signature");
 3185        }
 3186
 3187        int versionMadeBy      = ReadLEUshort();
 3188        int versionToExtract   = ReadLEUshort();
 3189        int bitFlags           = ReadLEUshort();
 3190        int method             = ReadLEUshort();
 3191        uint dostime           = ReadLEUint();
 3192        uint crc               = ReadLEUint();
 3193        var csize             = (long)ReadLEUint();
 3194        var size              = (long)ReadLEUint();
 3195        int nameLen            = ReadLEUshort();
 3196        int extraLen           = ReadLEUshort();
 3197        int commentLen         = ReadLEUshort();
 3198
 3199        int diskStartNo        = ReadLEUshort();  // Not currently used
 3200        int internalAttributes = ReadLEUshort();  // Not currently used
 3201
 3202        uint externalAttributes = ReadLEUint();
 3203        long offset             = ReadLEUint();
 3204
 3205        byte[] buffer = new byte[Math.Max(nameLen, commentLen)];
 3206
 3207        StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen);
 3208        string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen);
 3209
 3210        var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method);
 3211        entry.Crc = crc & 0xffffffffL;
 3212        entry.Size = size & 0xffffffffL;
 3213        entry.CompressedSize = csize & 0xffffffffL;
 3214        entry.Flags = bitFlags;
 3215        entry.DosTime = (uint)dostime;
 3216        entry.ZipFileIndex = (long)i;
 3217        entry.Offset = offset;
 3218        entry.ExternalFileAttributes = (int)externalAttributes;
 3219
 3220        if ((bitFlags & 8) == 0) {
 3221          entry.CryptoCheckValue = (byte)(crc >> 24);
 3222        }
 3223        else {
 3224          entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 3225        }
 3226
 3227        if (extraLen > 0) {
 3228          byte[] extra = new byte[extraLen];
 3229          StreamUtils.ReadFully(baseStream_, extra);
 3230          entry.ExtraData = extra;
 3231        }
 3232
 3233        entry.ProcessExtraData(false);
 3234
 3235        if (commentLen > 0) {
 3236          StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen);
 3237          entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen);
 3238        }
 3239
 3240        entries_[i] = entry;
 3241      }
 3242    }
 3243
 3244    /// <summary>
 3245    /// Locate the data for a given entry.
 3246    /// </summary>
 3247    /// <returns>
 3248    /// The start offset of the data.
 3249    /// </returns>
 3250    /// <exception cref="System.IO.EndOfStreamException">
 3251    /// The stream ends prematurely
 3252    /// </exception>
 3253    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3254    /// The local header signature is invalid, the entry and central header file name lengths are different
 3255    /// or the local and entry compression methods dont match
 3256    /// </exception>
 3257    long LocateEntry(ZipEntry entry)
 3258    {
 3259      return TestLocalHeader(entry, HeaderTest.Extract);
 3260    }
 3261
 3262#if !NETCF_1_0
 3263    Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry)
 3264    {
 3265      CryptoStream result = null;
 3266
 3267      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3268        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3269        var classicManaged = new PkzipClassicManaged();
 3270
 3271        OnKeysRequired(entry.Name);
 3272        if (HaveKeys == false) {
 3273          throw new ZipException("No password available for encrypted stream");
 3274        }
 3275
 3276        result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read);
 3277        CheckClassicPassword(result, entry);
 3278      }
 3279      else {
 3280#if !NET_1_1 && !NETCF_2_0
 3281        if (entry.Version == ZipConstants.VERSION_AES) {
 3282          //
 3283          OnKeysRequired(entry.Name);
 3284          if (HaveKeys == false) {
 3285            throw new ZipException("No password available for AES encrypted stream");
 3286          }
 3287          int saltLen = entry.AESSaltLen;
 3288          byte[] saltBytes = new byte[saltLen];
 3289          int saltIn = baseStream.Read(saltBytes, 0, saltLen);
 3290          if (saltIn != saltLen)
 3291            throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn);
 3292          //
 3293          byte[] pwdVerifyRead = new byte[2];
 3294          baseStream.Read(pwdVerifyRead, 0, 2);
 3295          int blockSize = entry.AESKeySize / 8;  // bits to bytes
 3296
 3297          var decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false);
 3298          byte[] pwdVerifyCalc = decryptor.PwdVerifier;
 3299          if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1])
 3300            throw new Exception("Invalid password for AES");
 3301          result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read);
 3302        }
 3303        else
 3304#endif
 3305        {
 3306          throw new ZipException("Decryption method not supported");
 3307        }
 3308      }
 3309
 3310      return result;
 3311    }
 3312
 3313    Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry)
 3314    {
 3315      CryptoStream result = null;
 3316      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3317        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3318        var classicManaged = new PkzipClassicManaged();
 3319
 3320        OnKeysRequired(entry.Name);
 3321        if (HaveKeys == false) {
 3322          throw new ZipException("No password available for encrypted stream");
 3323        }
 3324
 3325        // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
 3326        // which doesnt do this.
 3327        result = new CryptoStream(new UncompressedStream(baseStream),
 3328          classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
 3329
 3330        if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) {
 3331          WriteEncryptionHeader(result, entry.DosTime << 16);
 3332        }
 3333        else {
 3334          WriteEncryptionHeader(result, entry.Crc);
 3335        }
 3336      }
 3337      return result;
 3338    }
 3339
 3340    static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry)
 3341    {
 3342      byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 3343      StreamUtils.ReadFully(classicCryptoStream, cryptbuffer);
 3344      if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 3345        throw new ZipException("Invalid password");
 3346      }
 3347    }
 3348#endif
 3349
 3350    static void WriteEncryptionHeader(Stream stream, long crcValue)
 3351    {
 3352      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 3353      var rnd = new Random();
 3354      rnd.NextBytes(cryptBuffer);
 3355      cryptBuffer[11] = (byte)(crcValue >> 24);
 3356      stream.Write(cryptBuffer, 0, cryptBuffer.Length);
 3357    }
 3358
 3359    #endregion
 3360
 3361    #region Instance Fields
 3362    bool       isDisposed_;
 3363    string     name_;
 3364    string     comment_;
 3365    string     rawPassword_;
 3366    Stream     baseStream_;
 3367    bool       isStreamOwner;
 3368    long       offsetOfFirstEntry;
 3369    ZipEntry[] entries_;
 3370    byte[] key;
 3371    bool isNewArchive_;
 3372
 3373    // Default is dynamic which is not backwards compatible and can cause problems
 3374    // with XP's built in compression which cant read Zip64 archives.
 3375    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 3376    // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed.
 3377    UseZip64 useZip64_ = UseZip64.Dynamic ;
 3378
 3379    #region Zip Update Instance Fields
 3380    ArrayList updates_;
 3381    long updateCount_; // Count is managed manually as updates_ can contain nulls!
 3382    Hashtable updateIndex_;
 3383    IArchiveStorage archiveStorage_;
 3384    IDynamicDataSource updateDataSource_;
 3385    bool contentsEdited_;
 3386    int bufferSize_ = DefaultBufferSize;
 3387    byte[] copyBuffer_;
 3388    ZipString newComment_;
 3389    bool commentEdited_;
 3390    IEntryFactory updateEntryFactory_ = new ZipEntryFactory();
 3391    #endregion
 3392    #endregion
 3393
 3394    #region Support Classes
 3395    /// <summary>
 3396    /// Represents a string from a <see cref="ZipFile"/> which is stored as an array of bytes.
 3397    /// </summary>
 3398    class ZipString
 3399    {
 3400      #region Constructors
 3401      /// <summary>
 3402      /// Initialise a <see cref="ZipString"/> with a string.
 3403      /// </summary>
 3404      /// <param name="comment">The textual string form.</param>
 3405      public ZipString(string comment)
 3406      {
 3407        comment_ = comment;
 3408        isSourceString_ = true;
 3409      }
 3410
 3411      /// <summary>
 3412      /// Initialise a <see cref="ZipString"/> using a string in its binary 'raw' form.
 3413      /// </summary>
 3414      /// <param name="rawString"></param>
 3415      public ZipString(byte[] rawString)
 3416      {
 3417        rawComment_ = rawString;
 3418      }
 3419      #endregion
 3420
 3421      /// <summary>
 3422      /// Get a value indicating the original source of data for this instance.
 3423      /// True if the source was a string; false if the source was binary data.
 3424      /// </summary>
 3425      public bool IsSourceString
 3426      {
 3427        get { return isSourceString_; }
 3428      }
 3429
 3430      /// <summary>
 3431      /// Get the length of the comment when represented as raw bytes.
 3432      /// </summary>
 3433      public int RawLength
 3434      {
 3435        get {
 3436          MakeBytesAvailable();
 3437          return rawComment_.Length;
 3438        }
 3439      }
 3440
 3441      /// <summary>
 3442      /// Get the comment in its 'raw' form as plain bytes.
 3443      /// </summary>
 3444      public byte[] RawComment
 3445      {
 3446        get {
 3447          MakeBytesAvailable();
 3448          return (byte[])rawComment_.Clone();
 3449        }
 3450      }
 3451
 3452      /// <summary>
 3453      /// Reset the comment to its initial state.
 3454      /// </summary>
 3455      public void Reset()
 3456      {
 3457        if ( isSourceString_ ) {
 3458          rawComment_ = null;
 3459        }
 3460        else {
 3461          comment_ = null;
 3462        }
 3463      }
 3464
 3465      void MakeTextAvailable()
 3466      {
 3467        if ( comment_ == null ) {
 3468          comment_ = ZipConstants.ConvertToString(rawComment_);
 3469        }
 3470      }
 3471
 3472      void MakeBytesAvailable()
 3473      {
 3474        if ( rawComment_ == null ) {
 3475          rawComment_ = ZipConstants.ConvertToArray(comment_);
 3476        }
 3477      }
 3478
 3479      /// <summary>
 3480      /// Implicit conversion of comment to a string.
 3481      /// </summary>
 3482      /// <param name="zipString">The <see cref="ZipString"/> to convert to a string.</param>
 3483      /// <returns>The textual equivalent for the input value.</returns>
 3484      static public implicit operator string(ZipString zipString)
 3485      {
 3486        zipString.MakeTextAvailable();
 3487        return zipString.comment_;
 3488      }
 3489
 3490      #region Instance Fields
 3491      string comment_;
 3492      byte[] rawComment_;
 3493      bool isSourceString_;
 3494      #endregion
 3495    }
 3496
 3497    /// <summary>
 3498    /// An <see cref="IEnumerator">enumerator</see> for <see cref="ZipEntry">Zip entries</see>
 3499    /// </summary>
 3500    class ZipEntryEnumerator : IEnumerator
 3501    {
 3502      #region Constructors
 3503      public ZipEntryEnumerator(ZipEntry[] entries)
 3504      {
 3505        array = entries;
 3506      }
 3507
 3508      #endregion
 3509      #region IEnumerator Members
 3510      public object Current
 3511      {
 3512        get {
 3513          return array[index];
 3514        }
 3515      }
 3516
 3517      public void Reset()
 3518      {
 3519        index = -1;
 3520      }
 3521
 3522      public bool MoveNext()
 3523      {
 3524        return (++index < array.Length);
 3525      }
 3526      #endregion
 3527      #region Instance Fields
 3528      ZipEntry[] array;
 3529      int index = -1;
 3530      #endregion
 3531    }
 3532
 3533    /// <summary>
 3534    /// An <see cref="UncompressedStream"/> is a stream that you can write uncompressed data
 3535    /// to and flush, but cannot read, seek or do anything else to.
 3536    /// </summary>
 3537    class UncompressedStream : Stream
 3538    {
 3539      #region Constructors
 3540      public UncompressedStream(Stream baseStream)
 3541      {
 3542        baseStream_ = baseStream;
 3543      }
 3544
 3545      #endregion
 3546
 3547      /// <summary>
 3548      /// Close this stream instance.
 3549      /// </summary>
 3550      public override void Close()
 3551      {
 3552        // Do nothing
 3553      }
 3554
 3555      /// <summary>
 3556      /// Gets a value indicating whether the current stream supports reading.
 3557      /// </summary>
 3558      public override bool CanRead
 3559      {
 3560        get {
 3561          return false;
 3562        }
 3563      }
 3564
 3565      /// <summary>
 3566      /// Write any buffered data to underlying storage.
 3567      /// </summary>
 3568      public override void Flush()
 3569      {
 3570        baseStream_.Flush();
 3571      }
 3572
 3573      /// <summary>
 3574      /// Gets a value indicating whether the current stream supports writing.
 3575      /// </summary>
 3576      public override bool CanWrite
 3577      {
 3578        get {
 3579          return baseStream_.CanWrite;
 3580        }
 3581      }
 3582
 3583      /// <summary>
 3584      /// Gets a value indicating whether the current stream supports seeking.
 3585      /// </summary>
 3586      public override bool CanSeek
 3587      {
 3588        get {
 3589          return false;
 3590        }
 3591      }
 3592
 3593      /// <summary>
 3594      /// Get the length in bytes of the stream.
 3595      /// </summary>
 3596      public override long Length
 3597      {
 3598        get {
 3599          return 0;
 3600        }
 3601      }
 3602
 3603      /// <summary>
 3604      /// Gets or sets the position within the current stream.
 3605      /// </summary>
 3606      public override long Position
 3607      {
 3608        get  {
 3609          return baseStream_.Position;
 3610        }
 3611                set {
 3612                    throw new NotImplementedException();
 3613                }
 3614            }
 3615
 3616            /// <summary>
 3617            /// Reads a sequence of bytes from the current stream and advances the position within the stream by the num
 3618            /// </summary>
 3619            /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte
 3620            /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from t
 3621            /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3622            /// <returns>
 3623            /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if t
 3624            /// </returns>
 3625            /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer lengt
 3626            /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </ex
 3627            /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3628            /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3629            /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3630            /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3631            public override int Read(byte[] buffer, int offset, int count)
 3632      {
 3633        return 0;
 3634      }
 3635
 3636      /// <summary>
 3637      /// Sets the position within the current stream.
 3638      /// </summary>
 3639      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3640      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3641      /// <returns>
 3642      /// The new position within the current stream.
 3643      /// </returns>
 3644      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3645      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3646      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3647      public override long Seek(long offset, SeekOrigin origin)
 3648      {
 3649        return 0;
 3650      }
 3651
 3652      /// <summary>
 3653      /// Sets the length of the current stream.
 3654      /// </summary>
 3655      /// <param name="value">The desired length of the current stream in bytes.</param>
 3656      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3657      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3658      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3659      public override void SetLength(long value)
 3660      {
 3661      }
 3662
 3663      /// <summary>
 3664      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3665      /// </summary>
 3666      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3667      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3668      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3669      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3670      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3671      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3672      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3673      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3674      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3675      public override void Write(byte[] buffer, int offset, int count)
 3676      {
 3677        baseStream_.Write(buffer, offset, count);
 3678      }
 3679
 3680      readonly
 3681
 3682      #region Instance Fields
 3683      Stream baseStream_;
 3684      #endregion
 3685    }
 3686
 3687    /// <summary>
 3688    /// A <see cref="PartialInputStream"/> is an <see cref="InflaterInputStream"/>
 3689    /// whose data is only a part or subsection of a file.
 3690    /// </summary>
 3691    class PartialInputStream : Stream
 3692    {
 3693      #region Constructors
 3694      /// <summary>
 3695      /// Initialise a new instance of the <see cref="PartialInputStream"/> class.
 3696      /// </summary>
 3697      /// <param name="zipFile">The <see cref="ZipFile"/> containing the underlying stream to use for IO.</param>
 3698      /// <param name="start">The start of the partial data.</param>
 3699      /// <param name="length">The length of the partial data.</param>
 3700      public PartialInputStream(ZipFile zipFile, long start, long length)
 3701      {
 3702        start_ = start;
 3703        length_ = length;
 3704
 3705        // Although this is the only time the zipfile is used
 3706        // keeping a reference here prevents premature closure of
 3707        // this zip file and thus the baseStream_.
 3708
 3709        // Code like this will cause apparently random failures depending
 3710        // on the size of the files and when garbage is collected.
 3711        //
 3712        // ZipFile z = new ZipFile (stream);
 3713        // Stream reader = z.GetInputStream(0);
 3714        // uses reader here....
 3715        zipFile_ = zipFile;
 3716        baseStream_ = zipFile_.baseStream_;
 3717        readPos_ = start;
 3718        end_ = start + length;
 3719      }
 3720      #endregion
 3721
 3722      /// <summary>
 3723      /// Read a byte from this stream.
 3724      /// </summary>
 3725      /// <returns>Returns the byte read or -1 on end of stream.</returns>
 3726      public override int ReadByte()
 3727      {
 3728        if (readPos_ >= end_) {
 3729           // -1 is the correct value at end of stream.
 3730          return -1;
 3731        }
 3732
 3733        lock( baseStream_ ) {
 3734          baseStream_.Seek(readPos_++, SeekOrigin.Begin);
 3735          return baseStream_.ReadByte();
 3736        }
 3737      }
 3738
 3739      /// <summary>
 3740      /// Close this <see cref="PartialInputStream">partial input stream</see>.
 3741      /// </summary>
 3742      /// <remarks>
 3743      /// The underlying stream is not closed.  Close the parent ZipFile class to do that.
 3744      /// </remarks>
 3745      public override void Close()
 3746      {
 3747        // Do nothing at all!
 3748      }
 3749
 3750      /// <summary>
 3751      /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of
 3752      /// </summary>
 3753      /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte array
 3754      /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the cur
 3755      /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3756      /// <returns>
 3757      /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that ma
 3758      /// </returns>
 3759      /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer length. </e
 3760      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3761      /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3762      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3763      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3764      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3765      public override int Read(byte[] buffer, int offset, int count)
 3766      {
 3767        lock(baseStream_) {
 3768          if (count > end_ - readPos_) {
 3769            count = (int) (end_ - readPos_);
 3770            if (count == 0) {
 3771              return 0;
 3772            }
 3773          }
 3774
 3775          baseStream_.Seek(readPos_, SeekOrigin.Begin);
 3776          int readCount = baseStream_.Read(buffer, offset, count);
 3777          if (readCount > 0) {
 3778            readPos_ += readCount;
 3779          }
 3780          return readCount;
 3781        }
 3782      }
 3783
 3784      /// <summary>
 3785      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3786      /// </summary>
 3787      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3788      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3789      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3790      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3791      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3792      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3793      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3794      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3795      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3796      public override void Write(byte[] buffer, int offset, int count)
 3797      {
 3798        throw new NotSupportedException();
 3799      }
 3800
 3801      /// <summary>
 3802      /// When overridden in a derived class, sets the length of the current stream.
 3803      /// </summary>
 3804      /// <param name="value">The desired length of the current stream in bytes.</param>
 3805      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3806      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3807      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3808      public override void SetLength(long value)
 3809      {
 3810        throw new NotSupportedException();
 3811      }
 3812
 3813      /// <summary>
 3814      /// When overridden in a derived class, sets the position within the current stream.
 3815      /// </summary>
 3816      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3817      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3818      /// <returns>
 3819      /// The new position within the current stream.
 3820      /// </returns>
 3821      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3822      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3823      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3824      public override long Seek(long offset, SeekOrigin origin)
 3825      {
 3826        long newPos = readPos_;
 3827
 3828        switch ( origin )
 3829        {
 3830          case SeekOrigin.Begin:
 3831            newPos = start_ + offset;
 3832            break;
 3833
 3834          case SeekOrigin.Current:
 3835            newPos = readPos_ + offset;
 3836            break;
 3837
 3838          case SeekOrigin.End:
 3839            newPos = end_ + offset;
 3840            break;
 3841        }
 3842
 3843        if ( newPos < start_ ) {
 3844          throw new ArgumentException("Negative position is invalid");
 3845        }
 3846
 3847        if ( newPos >= end_ ) {
 3848          throw new IOException("Cannot seek past end");
 3849        }
 3850        readPos_ = newPos;
 3851        return readPos_;
 3852      }
 3853
 3854      /// <summary>
 3855      /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device.
 3856      /// </summary>
 3857      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3858      public override void Flush()
 3859      {
 3860        // Nothing to do.
 3861      }
 3862
 3863      /// <summary>
 3864      /// Gets or sets the position within the current stream.
 3865      /// </summary>
 3866      /// <value></value>
 3867      /// <returns>The current position within the stream.</returns>
 3868      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3869      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking. </exception>
 3870      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3871      public override long Position {
 3872        get { return readPos_ - start_; }
 3873        set {
 3874          long newPos = start_ + value;
 3875
 3876          if ( newPos < start_ ) {
 3877            throw new ArgumentException("Negative position is invalid");
 3878          }
 3879
 3880          if ( newPos >= end_ ) {
 3881            throw new InvalidOperationException("Cannot seek past end");
 3882          }
 3883          readPos_ = newPos;
 3884        }
 3885      }
 3886
 3887      /// <summary>
 3888      /// Gets the length in bytes of the stream.
 3889      /// </summary>
 3890      /// <value></value>
 3891      /// <returns>A long value representing the length of the stream in bytes.</returns>
 3892      /// <exception cref="T:System.NotSupportedException">A class derived from Stream does not support seeking. </excep
 3893      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3894      public override long Length {
 3895        get { return length_; }
 3896      }
 3897
 3898      /// <summary>
 3899      /// Gets a value indicating whether the current stream supports writing.
 3900      /// </summary>
 3901      /// <value>false</value>
 3902      /// <returns>true if the stream supports writing; otherwise, false.</returns>
 3903      public override bool CanWrite {
 3904        get { return false; }
 3905      }
 3906
 3907      /// <summary>
 3908      /// Gets a value indicating whether the current stream supports seeking.
 3909      /// </summary>
 3910      /// <value>true</value>
 3911      /// <returns>true if the stream supports seeking; otherwise, false.</returns>
 3912      public override bool CanSeek {
 3913        get { return true; }
 3914      }
 3915
 3916      /// <summary>
 3917      /// Gets a value indicating whether the current stream supports reading.
 3918      /// </summary>
 3919      /// <value>true.</value>
 3920      /// <returns>true if the stream supports reading; otherwise, false.</returns>
 3921      public override bool CanRead {
 3922        get { return true; }
 3923      }
 3924
 3925#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 3926      /// <summary>
 3927      /// Gets a value that determines whether the current stream can time out.
 3928      /// </summary>
 3929      /// <value></value>
 3930      /// <returns>A value that determines whether the current stream can time out.</returns>
 3931      public override bool CanTimeout {
 3932        get { return baseStream_.CanTimeout; }
 3933      }
 3934#endif
 3935      #region Instance Fields
 3936      ZipFile zipFile_;
 3937      Stream baseStream_;
 3938      long start_;
 3939      long length_;
 3940      long readPos_;
 3941      long end_;
 3942      #endregion
 3943    }
 3944    #endregion
 3945  }
 3946
 3947  #endregion
 3948
 3949  #region DataSources
 3950  /// <summary>
 3951  /// Provides a static way to obtain a source of data for an entry.
 3952  /// </summary>
 3953  public interface IStaticDataSource
 3954  {
 3955    /// <summary>
 3956    /// Get a source of data by creating a new stream.
 3957    /// </summary>
 3958    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3959    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3960    Stream GetSource();
 3961  }
 3962
 3963  /// <summary>
 3964  /// Represents a source of data that can dynamically provide
 3965  /// multiple <see cref="Stream">data sources</see> based on the parameters passed.
 3966  /// </summary>
 3967  public interface IDynamicDataSource
 3968  {
 3969    /// <summary>
 3970    /// Get a data source.
 3971    /// </summary>
 3972    /// <param name="entry">The <see cref="ZipEntry"/> to get a source for.</param>
 3973    /// <param name="name">The name for data if known.</param>
 3974    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3975    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3976    Stream GetSource(ZipEntry entry, string name);
 3977  }
 3978
 3979  /// <summary>
 3980  /// Default implementation of a <see cref="IStaticDataSource"/> for use with files stored on disk.
 3981  /// </summary>
 3982  public class StaticDiskDataSource : IStaticDataSource
 3983  {
 3984    /// <summary>
 3985    /// Initialise a new instnace of <see cref="StaticDiskDataSource"/>
 3986    /// </summary>
 3987    /// <param name="fileName">The name of the file to obtain data from.</param>
 03988    public StaticDiskDataSource(string fileName)
 3989    {
 03990      fileName_ = fileName;
 03991    }
 3992
 3993    #region IDataSource Members
 3994
 3995    /// <summary>
 3996    /// Get a <see cref="Stream"/> providing data.
 3997    /// </summary>
 3998    /// <returns>Returns a <see cref="Stream"/> provising data.</returns>
 3999    public Stream GetSource()
 4000    {
 04001      return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4002    }
 4003
 4004    readonly
 4005
 4006    #endregion
 4007    #region Instance Fields
 4008    string fileName_;
 4009    #endregion
 4010  }
 4011
 4012
 4013  /// <summary>
 4014  /// Default implementation of <see cref="IDynamicDataSource"/> for files stored on disk.
 4015  /// </summary>
 4016  public class DynamicDiskDataSource : IDynamicDataSource
 4017  {
 4018
 4019    #region IDataSource Members
 4020    /// <summary>
 4021    /// Get a <see cref="Stream"/> providing data for an entry.
 4022    /// </summary>
 4023    /// <param name="entry">The entry to provide data for.</param>
 4024    /// <param name="name">The file name for data if known.</param>
 4025    /// <returns>Returns a stream providing data; or null if not available</returns>
 4026    public Stream GetSource(ZipEntry entry, string name)
 4027    {
 4028      Stream result = null;
 4029
 4030      if ( name != null ) {
 4031        result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 4032      }
 4033
 4034      return result;
 4035    }
 4036
 4037    #endregion
 4038  }
 4039
 4040  #endregion
 4041
 4042  #region Archive Storage
 4043  /// <summary>
 4044  /// Defines facilities for data storage when updating Zip Archives.
 4045  /// </summary>
 4046  public interface IArchiveStorage
 4047  {
 4048    /// <summary>
 4049    /// Get the <see cref="FileUpdateMode"/> to apply during updates.
 4050    /// </summary>
 4051    FileUpdateMode UpdateMode { get; }
 4052
 4053    /// <summary>
 4054    /// Get an empty <see cref="Stream"/> that can be used for temporary output.
 4055    /// </summary>
 4056    /// <returns>Returns a temporary output <see cref="Stream"/></returns>
 4057    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4058    Stream GetTemporaryOutput();
 4059
 4060    /// <summary>
 4061    /// Convert a temporary output stream to a final stream.
 4062    /// </summary>
 4063    /// <returns>The resulting final <see cref="Stream"/></returns>
 4064    /// <seealso cref="GetTemporaryOutput"/>
 4065    Stream ConvertTemporaryToFinal();
 4066
 4067    /// <summary>
 4068    /// Make a temporary copy of the original stream.
 4069    /// </summary>
 4070    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4071    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4072    Stream MakeTemporaryCopy(Stream stream);
 4073
 4074    /// <summary>
 4075    /// Return a stream suitable for performing direct updates on the original source.
 4076    /// </summary>
 4077    /// <param name="stream">The current stream.</param>
 4078    /// <returns>Returns a stream suitable for direct updating.</returns>
 4079    /// <remarks>This may be the current stream passed.</remarks>
 4080    Stream OpenForDirectUpdate(Stream stream);
 4081
 4082    /// <summary>
 4083    /// Dispose of this instance.
 4084    /// </summary>
 4085    void Dispose();
 4086  }
 4087
 4088  /// <summary>
 4089  /// An abstract <see cref="IArchiveStorage"/> suitable for extension by inheritance.
 4090  /// </summary>
 4091  abstract public class BaseArchiveStorage : IArchiveStorage
 4092  {
 4093    #region Constructors
 4094    /// <summary>
 4095    /// Initializes a new instance of the <see cref="BaseArchiveStorage"/> class.
 4096    /// </summary>
 4097    /// <param name="updateMode">The update mode.</param>
 4098    protected BaseArchiveStorage(FileUpdateMode updateMode)
 4099    {
 4100      updateMode_ = updateMode;
 4101    }
 4102    #endregion
 4103
 4104    #region IArchiveStorage Members
 4105
 4106    /// <summary>
 4107    /// Gets a temporary output <see cref="Stream"/>
 4108    /// </summary>
 4109    /// <returns>Returns the temporary output stream.</returns>
 4110    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4111    public abstract Stream GetTemporaryOutput();
 4112
 4113    /// <summary>
 4114    /// Converts the temporary <see cref="Stream"/> to its final form.
 4115    /// </summary>
 4116    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4117    /// the final storage for the archive.</returns>
 4118    /// <seealso cref="GetTemporaryOutput"/>
 4119    public abstract Stream ConvertTemporaryToFinal();
 4120
 4121    /// <summary>
 4122    /// Make a temporary copy of a <see cref="Stream"/>.
 4123    /// </summary>
 4124    /// <param name="stream">The <see cref="Stream"/> to make a copy of.</param>
 4125    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4126    public abstract Stream MakeTemporaryCopy(Stream stream);
 4127
 4128    /// <summary>
 4129    /// Return a stream suitable for performing direct updates on the original source.
 4130    /// </summary>
 4131    /// <param name="stream">The <see cref="Stream"/> to open for direct update.</param>
 4132    /// <returns>Returns a stream suitable for direct updating.</returns>
 4133    public abstract Stream OpenForDirectUpdate(Stream stream);
 4134
 4135    /// <summary>
 4136    /// Disposes this instance.
 4137    /// </summary>
 4138    public abstract void Dispose();
 4139
 4140    /// <summary>
 4141    /// Gets the update mode applicable.
 4142    /// </summary>
 4143    /// <value>The update mode.</value>
 4144    public FileUpdateMode UpdateMode
 4145    {
 4146      get {
 4147        return updateMode_;
 4148      }
 4149    }
 4150
 4151    #endregion
 4152
 4153    #region Instance Fields
 4154    FileUpdateMode updateMode_;
 4155    #endregion
 4156  }
 4157
 4158  /// <summary>
 4159  /// An <see cref="IArchiveStorage"/> implementation suitable for hard disks.
 4160  /// </summary>
 4161  public class DiskArchiveStorage : BaseArchiveStorage
 4162  {
 4163    #region Constructors
 4164    /// <summary>
 4165    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4166    /// </summary>
 4167    /// <param name="file">The file.</param>
 4168    /// <param name="updateMode">The update mode.</param>
 4169    public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode)
 4170      : base(updateMode)
 4171    {
 4172      if ( file.Name == null ) {
 4173        throw new ZipException("Cant handle non file archives");
 4174      }
 4175
 4176      fileName_ = file.Name;
 4177    }
 4178
 4179    /// <summary>
 4180    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4181    /// </summary>
 4182    /// <param name="file">The file.</param>
 4183    public DiskArchiveStorage(ZipFile file)
 4184      : this(file, FileUpdateMode.Safe)
 4185    {
 4186    }
 4187    #endregion
 4188
 4189    #region IArchiveStorage Members
 4190
 4191    /// <summary>
 4192    /// Gets a temporary output <see cref="Stream"/> for performing updates on.
 4193    /// </summary>
 4194    /// <returns>Returns the temporary output stream.</returns>
 4195    public override Stream GetTemporaryOutput()
 4196    {
 4197      if ( temporaryName_ != null ) {
 4198        temporaryName_ = GetTempFileName(temporaryName_, true);
 4199        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4200      }
 4201      else {
 4202        // Determine where to place files based on internal strategy.
 4203        // Currently this is always done in system temp directory.
 4204        temporaryName_ = Path.GetTempFileName();
 4205        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4206      }
 4207
 4208      return temporaryStream_;
 4209    }
 4210
 4211    /// <summary>
 4212    /// Converts a temporary <see cref="Stream"/> to its final form.
 4213    /// </summary>
 4214    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4215    /// the final storage for the archive.</returns>
 4216    public override Stream ConvertTemporaryToFinal()
 4217    {
 4218      if ( temporaryStream_ == null ) {
 4219        throw new ZipException("No temporary stream has been created");
 4220      }
 4221
 4222      Stream result = null;
 4223
 4224      string moveTempName = GetTempFileName(fileName_, false);
 4225      bool newFileCreated = false;
 4226
 4227      try  {
 4228        temporaryStream_.Close();
 4229        File.Move(fileName_, moveTempName);
 4230        File.Move(temporaryName_, fileName_);
 4231        newFileCreated = true;
 4232        File.Delete(moveTempName);
 4233
 4234        result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4235      }
 4236      catch(Exception) {
 4237        result  = null;
 4238
 4239        // Try to roll back changes...
 4240        if ( !newFileCreated ) {
 4241          File.Move(moveTempName, fileName_);
 4242          File.Delete(temporaryName_);
 4243        }
 4244
 4245        throw;
 4246      }
 4247
 4248      return result;
 4249    }
 4250
 4251    /// <summary>
 4252    /// Make a temporary copy of a stream.
 4253    /// </summary>
 4254    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4255    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4256    public override Stream MakeTemporaryCopy(Stream stream)
 4257    {
 4258      stream.Close();
 4259
 4260      temporaryName_ = GetTempFileName(fileName_, true);
 4261      File.Copy(fileName_, temporaryName_, true);
 4262
 4263      temporaryStream_ = new FileStream(temporaryName_,
 4264        FileMode.Open,
 4265        FileAccess.ReadWrite);
 4266      return temporaryStream_;
 4267    }
 4268
 4269    /// <summary>
 4270    /// Return a stream suitable for performing direct updates on the original source.
 4271    /// </summary>
 4272    /// <param name="stream">The current stream.</param>
 4273    /// <returns>Returns a stream suitable for direct updating.</returns>
 4274    /// <remarks>If the <paramref name="stream"/> is not null this is used as is.</remarks>
 4275    public override Stream OpenForDirectUpdate(Stream stream)
 4276    {
 4277      Stream result;
 4278      if ((stream == null) || !stream.CanWrite)
 4279      {
 4280        if (stream != null) {
 4281          stream.Close();
 4282        }
 4283
 4284        result = new FileStream(fileName_,
 4285            FileMode.Open,
 4286            FileAccess.ReadWrite);
 4287      }
 4288      else
 4289      {
 4290        result = stream;
 4291      }
 4292
 4293      return result;
 4294    }
 4295
 4296    /// <summary>
 4297    /// Disposes this instance.
 4298    /// </summary>
 4299    public override void Dispose()
 4300    {
 4301      if ( temporaryStream_ != null ) {
 4302        temporaryStream_.Close();
 4303      }
 4304    }
 4305
 4306    #endregion
 4307
 4308    #region Internal routines
 4309    static string GetTempFileName(string original, bool makeTempFile)
 4310    {
 4311      string result = null;
 4312
 4313      if ( original == null ) {
 4314        result = Path.GetTempFileName();
 4315      }
 4316      else {
 4317        int counter = 0;
 4318        int suffixSeed = DateTime.Now.Second;
 4319
 4320        while ( result == null ) {
 4321          counter += 1;
 4322          string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter);
 4323          if ( !File.Exists(newName) ) {
 4324            if ( makeTempFile) {
 4325              try  {
 4326                // Try and create the file.
 4327                using ( FileStream stream = File.Create(newName) ) {
 4328                }
 4329                result = newName;
 4330              }
 4331              catch {
 4332                suffixSeed = DateTime.Now.Second;
 4333              }
 4334            }
 4335            else {
 4336              result = newName;
 4337            }
 4338          }
 4339        }
 4340      }
 4341      return result;
 4342    }
 4343    #endregion
 4344
 4345    #region Instance Fields
 4346    Stream temporaryStream_;
 4347    string fileName_;
 4348    string temporaryName_;
 4349    #endregion
 4350  }
 4351
 4352  /// <summary>
 4353  /// An <see cref="IArchiveStorage"/> implementation suitable for in memory streams.
 4354  /// </summary>
 4355  public class MemoryArchiveStorage : BaseArchiveStorage
 4356  {
 4357    #region Constructors
 4358    /// <summary>
 4359    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4360    /// </summary>
 4361    public MemoryArchiveStorage()
 4362      : base(FileUpdateMode.Direct)
 4363    {
 4364    }
 4365
 4366    /// <summary>
 4367    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4368    /// </summary>
 4369    /// <param name="updateMode">The <see cref="FileUpdateMode"/> to use</param>
 4370    /// <remarks>This constructor is for testing as memory streams dont really require safe mode.</remarks>
 4371    public MemoryArchiveStorage(FileUpdateMode updateMode)
 4372      : base(updateMode)
 4373    {
 4374    }
 4375
 4376    #endregion
 4377
 4378    #region Properties
 4379    /// <summary>
 4380    /// Get the stream returned by <see cref="ConvertTemporaryToFinal"/> if this was in fact called.
 4381    /// </summary>
 4382    public MemoryStream FinalStream
 4383    {
 4384      get { return finalStream_; }
 4385    }
 4386
 4387    #endregion
 4388
 4389    #region IArchiveStorage Members
 4390
 4391    /// <summary>
 4392    /// Gets the temporary output <see cref="Stream"/>
 4393    /// </summary>
 4394    /// <returns>Returns the temporary output stream.</returns>
 4395    public override Stream GetTemporaryOutput()
 4396    {
 4397      temporaryStream_ = new MemoryStream();
 4398      return temporaryStream_;
 4399    }
 4400
 4401    /// <summary>
 4402    /// Converts the temporary <see cref="Stream"/> to its final form.
 4403    /// </summary>
 4404    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4405    /// the final storage for the archive.</returns>
 4406    public override Stream ConvertTemporaryToFinal()
 4407    {
 4408      if ( temporaryStream_ == null ) {
 4409        throw new ZipException("No temporary stream has been created");
 4410      }
 4411
 4412      finalStream_ = new MemoryStream(temporaryStream_.ToArray());
 4413      return finalStream_;
 4414    }
 4415
 4416    /// <summary>
 4417    /// Make a temporary copy of the original stream.
 4418    /// </summary>
 4419    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4420    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4421    public override Stream MakeTemporaryCopy(Stream stream)
 4422    {
 4423      temporaryStream_ = new MemoryStream();
 4424      stream.Position = 0;
 4425      StreamUtils.Copy(stream, temporaryStream_, new byte[4096]);
 4426      return temporaryStream_;
 4427    }
 4428
 4429    /// <summary>
 4430    /// Return a stream suitable for performing direct updates on the original source.
 4431    /// </summary>
 4432    /// <param name="stream">The original source stream</param>
 4433    /// <returns>Returns a stream suitable for direct updating.</returns>
 4434    /// <remarks>If the <paramref name="stream"/> passed is not null this is used;
 4435    /// otherwise a new <see cref="MemoryStream"/> is returned.</remarks>
 4436    public override Stream OpenForDirectUpdate(Stream stream)
 4437    {
 4438      Stream result;
 4439      if ((stream == null) || !stream.CanWrite) {
 4440
 4441        result = new MemoryStream();
 4442
 4443        if (stream != null) {
 4444          stream.Position = 0;
 4445          StreamUtils.Copy(stream, result, new byte[4096]);
 4446
 4447          stream.Close();
 4448        }
 4449      }
 4450      else {
 4451        result = stream;
 4452      }
 4453
 4454      return result;
 4455    }
 4456
 4457    /// <summary>
 4458    /// Disposes this instance.
 4459    /// </summary>
 4460    public override void Dispose()
 4461    {
 4462      if ( temporaryStream_ != null ) {
 4463        temporaryStream_.Close();
 4464      }
 4465    }
 4466
 4467    #endregion
 4468
 4469    #region Instance Fields
 4470    MemoryStream temporaryStream_;
 4471    MemoryStream finalStream_;
 4472    #endregion
 4473  }
 4474
 4475  #endregion
 4476}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_StrangeCRC.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_StrangeCRC.htm new file mode 100644 index 000000000..6ce2b4e3d --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_StrangeCRC.htm @@ -0,0 +1,255 @@ + + + + +ICSharpCode.SharpZipLib.Checksums.StrangeCRC - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Checksums.StrangeCRC
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksums\StrangeCrc.cs
Covered lines:77
Uncovered lines:15
Coverable lines:92
Total lines:208
Line coverage:83.6%
Branch coverage:14.2%
+

Metrics

+ + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
Reset()1100100
Update(...)2100100
Update(...)200
Update(...)600
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksums\StrangeCrc.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// StrangeCRC.cs - computes a crc used in the bziplib
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41namespace ICSharpCode.SharpZipLib.Checksums
 42{
 43  /// <summary>
 44  /// Bzip2 checksum algorithm
 45  /// </summary>
 46  public class StrangeCRC : IChecksum
 47  {
 148    readonly static uint[] crc32Table = {
 149      0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
 150      0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
 151      0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
 152      0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
 153      0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
 154      0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
 155      0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
 156      0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
 157      0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
 158      0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
 159      0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
 160      0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
 161      0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
 162      0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
 163      0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
 164      0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
 165      0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
 166      0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
 167      0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
 168      0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
 169      0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
 170      0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
 171      0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
 172      0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
 173      0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
 174      0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
 175      0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
 176      0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
 177      0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
 178      0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
 179      0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
 180      0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
 181      0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
 182      0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
 183      0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
 184      0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
 185      0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
 186      0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
 187      0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
 188      0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
 189      0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
 190      0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
 191      0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
 192      0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
 193      0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
 194      0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
 195      0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
 196      0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
 197      0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
 198      0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
 199      0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
 1100      0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
 1101      0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
 1102      0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
 1103      0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
 1104      0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
 1105      0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
 1106      0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
 1107      0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
 1108      0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
 1109      0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
 1110      0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
 1111      0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
 1112      0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
 1113    };
 114
 115    int globalCrc;
 116
 117    /// <summary>
 118    /// Initialise a default instance of <see cref="StrangeCRC"></see>
 119    /// </summary>
 4120    public StrangeCRC()
 121    {
 4122      Reset();
 4123    }
 124
 125    /// <summary>
 126    /// Reset the state of Crc.
 127    /// </summary>
 128    public void Reset()
 129    {
 7130      globalCrc = -1;
 7131    }
 132
 133    /// <summary>
 134    /// Get the current Crc value.
 135    /// </summary>
 136    public long Value {
 137      get {
 2138        return ~globalCrc;
 139      }
 140    }
 141
 142    /// <summary>
 143    /// Update the Crc value.
 144    /// </summary>
 145    /// <param name="value">data update is based on</param>
 146    public void Update(int value)
 147    {
 20002148      int temp = (globalCrc >> 24) ^ value;
 20002149       if (temp < 0) {
 10031150        temp = 256 + temp;
 151      }
 20002152      globalCrc = unchecked((int)((globalCrc << 8) ^ crc32Table[temp]));
 20002153    }
 154
 155    /// <summary>
 156    /// Update Crc based on a block of data
 157    /// </summary>
 158    /// <param name="buffer">The buffer containing data to update the crc with.</param>
 159    public void Update(byte[] buffer)
 160    {
 0161       if (buffer == null) {
 0162        throw new ArgumentNullException(nameof(buffer));
 163      }
 164
 0165      Update(buffer, 0, buffer.Length);
 0166    }
 167
 168    /// <summary>
 169    /// Update Crc based on a portion of a block of data
 170    /// </summary>
 171    /// <param name="buffer">block of data</param>
 172    /// <param name="offset">index of first byte to use</param>
 173    /// <param name="count">number of bytes to use</param>
 174    public void Update(byte[] buffer, int offset, int count)
 175    {
 0176       if (buffer == null) {
 0177        throw new ArgumentNullException(nameof(buffer));
 178      }
 179
 0180       if ( offset < 0 )
 181      {
 182#if NETCF_1_0
 183        throw new ArgumentOutOfRangeException("offset");
 184#else
 0185        throw new ArgumentOutOfRangeException(nameof(offset), "cannot be less than zero");
 186#endif
 187      }
 188
 0189       if ( count < 0 )
 190      {
 191#if NETCF_1_0
 192        throw new ArgumentOutOfRangeException("count");
 193#else
 0194        throw new ArgumentOutOfRangeException(nameof(count), "cannot be less than zero");
 195#endif
 196      }
 197
 0198       if ( offset + count > buffer.Length )
 199      {
 0200        throw new ArgumentOutOfRangeException(nameof(count));
 201      }
 202
 0203       for (int i = 0; i < count; ++i) {
 0204        Update(buffer[offset++]);
 205      }
 0206    }
 207  }
 208}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_StreamManipulator.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_StreamManipulator.htm new file mode 100644 index 000000000..071ef33cc --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_StreamManipulator.htm @@ -0,0 +1,336 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\StreamManipulator.cs
Covered lines:51
Uncovered lines:12
Coverable lines:63
Total lines:288
Line coverage:80.9%
Branch coverage:67.6%
+

Metrics

+ + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
PeekBits(...)3100100
DropBits(...)1100100
GetBits(...)200
SkipToByteBoundary()1100100
CopyBytes(...)886.3680
Reset()1100100
SetInput(...)872.2260
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\StreamManipulator.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// StreamManipulator.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams
 42{
 43
 44  /// <summary>
 45  /// This class allows us to retrieve a specified number of bits from
 46  /// the input buffer, as well as copy big byte blocks.
 47  ///
 48  /// It uses an int buffer to store up to 31 bits for direct
 49  /// manipulation.  This guarantees that we can get at least 16 bits,
 50  /// but we only need at most 15, so this is all safe.
 51  ///
 52  /// There are some optimizations in this class, for example, you must
 53  /// never peek more than 8 bits more than needed, and you must first
 54  /// peek bits before you may drop them.  This is not a general purpose
 55  /// class but optimized for the behaviour of the Inflater.
 56  ///
 57  /// authors of the original java version : John Leuner, Jochen Hoenicke
 58  /// </summary>
 59  public class StreamManipulator
 60  {
 61    /// <summary>
 62    /// Get the next sequence of bits but don't increase input pointer.  bitCount must be
 63    /// less or equal 16 and if this call succeeds, you must drop
 64    /// at least n - 8 bits in the next call.
 65    /// </summary>
 66    /// <param name="bitCount">The number of bits to peek.</param>
 67    /// <returns>
 68    /// the value of the bits, or -1 if not enough bits available.  */
 69    /// </returns>
 70    public int PeekBits(int bitCount)
 71    {
 1166672       if (bitsInBuffer_ < bitCount) {
 631873         if (windowStart_ == windowEnd_) {
 39774          return -1; // ok
 75        }
 592176        buffer_ |= (uint)((window_[windowStart_++] & 0xff |
 592177                 (window_[windowStart_++] & 0xff) << 8) << bitsInBuffer_);
 592178        bitsInBuffer_ += 16;
 79      }
 1126980      return (int)(buffer_ & ((1 << bitCount) - 1));
 81    }
 82
 83    /// <summary>
 84    /// Drops the next n bits from the input.  You should have called PeekBits
 85    /// with a bigger or equal n before, to make sure that enough bits are in
 86    /// the bit buffer.
 87    /// </summary>
 88    /// <param name="bitCount">The number of bits to drop.</param>
 89    public void DropBits(int bitCount)
 90    {
 1126991      buffer_ >>= bitCount;
 1126992      bitsInBuffer_ -= bitCount;
 1126993    }
 94
 95    /// <summary>
 96    /// Gets the next n bits and increases input pointer.  This is equivalent
 97    /// to <see cref="PeekBits"/> followed by <see cref="DropBits"/>, except for correct error handling.
 98    /// </summary>
 99    /// <param name="bitCount">The number of bits to retrieve.</param>
 100    /// <returns>
 101    /// the value of the bits, or -1 if not enough bits available.
 102    /// </returns>
 103    public int GetBits(int bitCount)
 104    {
 0105      int bits = PeekBits(bitCount);
 0106       if (bits >= 0) {
 0107        DropBits(bitCount);
 108      }
 0109      return bits;
 110    }
 111
 112    /// <summary>
 113    /// Gets the number of bits available in the bit buffer.  This must be
 114    /// only called when a previous PeekBits() returned -1.
 115    /// </summary>
 116    /// <returns>
 117    /// the number of bits available.
 118    /// </returns>
 119    public int AvailableBits {
 120      get {
 23121        return bitsInBuffer_;
 122      }
 123    }
 124
 125    /// <summary>
 126    /// Gets the number of bytes available.
 127    /// </summary>
 128    /// <returns>
 129    /// The number of bytes available.
 130    /// </returns>
 131    public int AvailableBytes {
 132      get {
 2384133        return windowEnd_ - windowStart_ + (bitsInBuffer_ >> 3);
 134      }
 135    }
 136
 137    /// <summary>
 138    /// Skips to the next byte boundary.
 139    /// </summary>
 140    public void SkipToByteBoundary()
 141    {
 310142      buffer_ >>= (bitsInBuffer_ & 7);
 310143      bitsInBuffer_ &= ~7;
 310144    }
 145
 146    /// <summary>
 147    /// Returns true when SetInput can be called
 148    /// </summary>
 149    public bool IsNeedingInput {
 150      get {
 3428151        return windowStart_ == windowEnd_;
 152      }
 153    }
 154
 155    /// <summary>
 156    /// Copies bytes from input buffer to output buffer starting
 157    /// at output[offset].  You have to make sure, that the buffer is
 158    /// byte aligned.  If not enough bytes are available, copies fewer
 159    /// bytes.
 160    /// </summary>
 161    /// <param name="output">
 162    /// The buffer to copy bytes to.
 163    /// </param>
 164    /// <param name="offset">
 165    /// The offset in the buffer at which copying starts
 166    /// </param>
 167    /// <param name="length">
 168    /// The length to copy, 0 is allowed.
 169    /// </param>
 170    /// <returns>
 171    /// The number of bytes copied, 0 if no bytes were available.
 172    /// </returns>
 173    /// <exception cref="ArgumentOutOfRangeException">
 174    /// Length is less than zero
 175    /// </exception>
 176    /// <exception cref="InvalidOperationException">
 177    /// Bit buffer isnt byte aligned
 178    /// </exception>
 179    public int CopyBytes(byte[] output, int offset, int length)
 180    {
 2434181       if (length < 0) {
 0182        throw new ArgumentOutOfRangeException(nameof(length));
 183      }
 184
 2434185       if ((bitsInBuffer_ & 7) != 0) {
 186        // bits_in_buffer may only be 0 or a multiple of 8
 0187        throw new InvalidOperationException("Bit buffer is not byte aligned!");
 188      }
 189
 2434190      int count = 0;
 2667191       while ((bitsInBuffer_ > 0) && (length > 0)) {
 233192        output[offset++] = (byte) buffer_;
 233193        buffer_ >>= 8;
 233194        bitsInBuffer_ -= 8;
 233195        length--;
 233196        count++;
 197      }
 198
 2434199       if (length == 0) {
 1020200        return count;
 201      }
 202
 1414203      int avail = windowEnd_ - windowStart_;
 1414204       if (length > avail) {
 0205        length = avail;
 206      }
 1414207      System.Array.Copy(window_, windowStart_, output, offset, length);
 1414208      windowStart_ += length;
 209
 1414210       if (((windowStart_ - windowEnd_) & 1) != 0) {
 211        // We always want an even number of bytes in input, see peekBits
 211212        buffer_ = (uint)(window_[windowStart_++] & 0xff);
 211213        bitsInBuffer_ = 8;
 214      }
 1414215      return count + length;
 216    }
 217
 218    /// <summary>
 219    /// Resets state and empties internal buffers
 220    /// </summary>
 221    public void Reset()
 222    {
 44223      buffer_ = 0;
 44224      windowStart_ = windowEnd_ = bitsInBuffer_ = 0;
 44225    }
 226
 227    /// <summary>
 228    /// Add more input for consumption.
 229    /// Only call when IsNeedingInput returns true
 230    /// </summary>
 231    /// <param name="buffer">data to be input</param>
 232    /// <param name="offset">offset of first byte of input</param>
 233    /// <param name="count">number of bytes of input to add.</param>
 234    public void SetInput(byte[] buffer, int offset, int count)
 235    {
 1460236       if ( buffer == null ) {
 0237        throw new ArgumentNullException(nameof(buffer));
 238      }
 239
 1460240       if ( offset < 0 ) {
 241#if NETCF_1_0
 242        throw new ArgumentOutOfRangeException("offset");
 243#else
 0244        throw new ArgumentOutOfRangeException(nameof(offset), "Cannot be negative");
 245#endif
 246      }
 247
 1460248       if ( count < 0 ) {
 249#if NETCF_1_0
 250        throw new ArgumentOutOfRangeException("count");
 251#else
 0252        throw new ArgumentOutOfRangeException(nameof(count), "Cannot be negative");
 253#endif
 254      }
 255
 1460256       if (windowStart_ < windowEnd_) {
 0257        throw new InvalidOperationException("Old input was not completely processed");
 258      }
 259
 1460260      int end = offset + count;
 261
 262      // We want to throw an ArrayIndexOutOfBoundsException early.
 263      // Note the check also handles integer wrap around.
 1460264       if ((offset > end) || (end > buffer.Length) ) {
 0265        throw new ArgumentOutOfRangeException(nameof(count));
 266      }
 267
 1460268       if ((count & 1) != 0) {
 269        // We always want an even number of bytes in input, see PeekBits
 217270        buffer_ |= (uint)((buffer[offset++] & 0xff) << bitsInBuffer_);
 217271        bitsInBuffer_ += 8;
 272      }
 273
 1460274      window_ = buffer;
 1460275      windowStart_ = offset;
 1460276      windowEnd_ = end;
 1460277    }
 278
 279    #region Instance Fields
 280    private byte[] window_;
 281    private int windowStart_;
 282    private int windowEnd_;
 283
 284    private uint buffer_;
 285    private int bitsInBuffer_;
 286    #endregion
 287  }
 288}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_StreamUtils.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_StreamUtils.htm new file mode 100644 index 000000000..1e80d849e --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_StreamUtils.htm @@ -0,0 +1,293 @@ + + + + +ICSharpCode.SharpZipLib.Core.StreamUtils - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.StreamUtils
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\StreamUtils.cs
Covered lines:25
Uncovered lines:54
Coverable lines:79
Total lines:246
Line coverage:31.6%
Branch coverage:34%
+

Metrics

+ + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
ReadFully(...)1100100
ReadFully(...)966.6758.82
Copy(...)776.4769.23
Copy(...)100
Copy(...)1200
.ctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\StreamUtils.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// StreamUtils.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38
 39namespace ICSharpCode.SharpZipLib.Core
 40{
 41  /// <summary>
 42  /// Provides simple <see cref="Stream"/>" utilities.
 43  /// </summary>
 44  public sealed class StreamUtils
 45  {
 46    /// <summary>
 47    /// Read from a <see cref="Stream"/> ensuring all the required data is read.
 48    /// </summary>
 49    /// <param name="stream">The stream to read.</param>
 50    /// <param name="buffer">The buffer to fill.</param>
 51    /// <seealso cref="ReadFully(Stream,byte[],int,int)"/>
 52    static public void ReadFully(Stream stream, byte[] buffer)
 53    {
 26378954      ReadFully(stream, buffer, 0, buffer.Length);
 26378955    }
 56
 57    /// <summary>
 58    /// Read from a <see cref="Stream"/>" ensuring all the required data is read.
 59    /// </summary>
 60    /// <param name="stream">The stream to read data from.</param>
 61    /// <param name="buffer">The buffer to store data in.</param>
 62    /// <param name="offset">The offset at which to begin storing data.</param>
 63    /// <param name="count">The number of bytes of data to store.</param>
 64    /// <exception cref="ArgumentNullException">Required parameter is null</exception>
 65    /// <exception cref="ArgumentOutOfRangeException"><paramref name="offset"/> and or <paramref name="count"/> are inva
 66    /// <exception cref="EndOfStreamException">End of stream is encountered before all the data has been read.</exceptio
 67    static public void ReadFully(Stream stream, byte[] buffer, int offset, int count)
 68    {
 32974569       if ( stream == null ) {
 070        throw new ArgumentNullException(nameof(stream));
 71      }
 72
 32974573       if ( buffer == null ) {
 074        throw new ArgumentNullException(nameof(buffer));
 75      }
 76
 77      // Offset can equal length when buffer and count are 0.
 32974578       if ( (offset < 0) || (offset > buffer.Length) ) {
 079        throw new ArgumentOutOfRangeException(nameof(offset));
 80      }
 81
 32974582       if ( (count < 0) || (offset + count > buffer.Length) ) {
 083        throw new ArgumentOutOfRangeException(nameof(count));
 84      }
 85
 52767886       while ( count > 0 ) {
 19793387        int readCount = stream.Read(buffer, offset, count);
 19793388         if ( readCount <= 0 ) {
 089          throw new EndOfStreamException();
 90        }
 19793391        offset += readCount;
 19793392        count -= readCount;
 93      }
 32974594    }
 95
 96    /// <summary>
 97    /// Copy the contents of one <see cref="Stream"/> to another.
 98    /// </summary>
 99    /// <param name="source">The stream to source data from.</param>
 100    /// <param name="destination">The stream to write data to.</param>
 101    /// <param name="buffer">The buffer to use during copying.</param>
 102    static public void Copy(Stream source, Stream destination, byte[] buffer)
 103    {
 8104       if (source == null) {
 0105        throw new ArgumentNullException(nameof(source));
 106      }
 107
 8108       if (destination == null) {
 0109        throw new ArgumentNullException(nameof(destination));
 110      }
 111
 8112       if (buffer == null) {
 0113        throw new ArgumentNullException(nameof(buffer));
 114      }
 115
 116      // Ensure a reasonable size of buffer is used without being prohibitive.
 8117       if (buffer.Length < 128) {
 0118        throw new ArgumentException("Buffer is too small", nameof(buffer));
 119      }
 120
 8121      bool copying = true;
 122
 24123       while (copying) {
 16124        int bytesRead = source.Read(buffer, 0, buffer.Length);
 16125         if (bytesRead > 0) {
 8126          destination.Write(buffer, 0, bytesRead);
 8127        }
 128        else {
 8129          destination.Flush();
 8130          copying = false;
 131        }
 132      }
 8133    }
 134
 135    /// <summary>
 136    /// Copy the contents of one <see cref="Stream"/> to another.
 137    /// </summary>
 138    /// <param name="source">The stream to source data from.</param>
 139    /// <param name="destination">The stream to write data to.</param>
 140    /// <param name="buffer">The buffer to use during copying.</param>
 141    /// <param name="progressHandler">The <see cref="ProgressHandler">progress handler delegate</see> to use.</param>
 142    /// <param name="updateInterval">The minimum <see cref="TimeSpan"/> between progress updates.</param>
 143    /// <param name="sender">The source for this event.</param>
 144    /// <param name="name">The name to use with the event.</param>
 145    /// <remarks>This form is specialised for use within #Zip to support events during archive operations.</remarks>
 146    static public void Copy(Stream source, Stream destination,
 147      byte[] buffer, ProgressHandler progressHandler, TimeSpan updateInterval, object sender, string name)
 148    {
 0149      Copy(source, destination, buffer, progressHandler, updateInterval, sender, name, -1);
 0150    }
 151
 152    /// <summary>
 153    /// Copy the contents of one <see cref="Stream"/> to another.
 154    /// </summary>
 155    /// <param name="source">The stream to source data from.</param>
 156    /// <param name="destination">The stream to write data to.</param>
 157    /// <param name="buffer">The buffer to use during copying.</param>
 158    /// <param name="progressHandler">The <see cref="ProgressHandler">progress handler delegate</see> to use.</param>
 159    /// <param name="updateInterval">The minimum <see cref="TimeSpan"/> between progress updates.</param>
 160    /// <param name="sender">The source for this event.</param>
 161    /// <param name="name">The name to use with the event.</param>
 162    /// <param name="fixedTarget">A predetermined fixed target value to use with progress updates.
 163    /// If the value is negative the target is calculated by looking at the stream.</param>
 164    /// <remarks>This form is specialised for use within #Zip to support events during archive operations.</remarks>
 165    static public void Copy(Stream source, Stream destination,
 166      byte[] buffer,
 167      ProgressHandler progressHandler, TimeSpan updateInterval,
 168      object sender, string name, long fixedTarget)
 169    {
 0170       if (source == null) {
 0171        throw new ArgumentNullException(nameof(source));
 172      }
 173
 0174       if (destination == null) {
 0175        throw new ArgumentNullException(nameof(destination));
 176      }
 177
 0178       if (buffer == null) {
 0179        throw new ArgumentNullException(nameof(buffer));
 180      }
 181
 182      // Ensure a reasonable size of buffer is used without being prohibitive.
 0183       if (buffer.Length < 128) {
 0184        throw new ArgumentException("Buffer is too small", nameof(buffer));
 185      }
 186
 0187       if (progressHandler == null) {
 0188        throw new ArgumentNullException(nameof(progressHandler));
 189      }
 190
 0191      bool copying = true;
 192
 0193      DateTime marker = DateTime.Now;
 0194      long processed = 0;
 0195      long target = 0;
 196
 0197       if (fixedTarget >= 0) {
 0198        target = fixedTarget;
 0199      }
 0200       else if (source.CanSeek) {
 0201        target = source.Length - source.Position;
 202      }
 203
 204      // Always fire 0% progress..
 0205      var args = new ProgressEventArgs(name, processed, target);
 0206      progressHandler(sender, args);
 207
 0208      bool progressFired = true;
 209
 0210       while (copying) {
 0211        int bytesRead = source.Read(buffer, 0, buffer.Length);
 0212         if (bytesRead > 0) {
 0213          processed += bytesRead;
 0214          progressFired = false;
 0215          destination.Write(buffer, 0, bytesRead);
 0216        }
 217        else {
 0218          destination.Flush();
 0219          copying = false;
 220        }
 221
 0222         if (DateTime.Now - marker > updateInterval) {
 0223          progressFired = true;
 0224          marker = DateTime.Now;
 0225          args = new ProgressEventArgs(name, processed, target);
 0226          progressHandler(sender, args);
 227
 0228          copying = args.ContinueRunning;
 229        }
 230      }
 231
 0232       if (!progressFired) {
 0233        args = new ProgressEventArgs(name, processed, target);
 0234        progressHandler(sender, args);
 235      }
 0236    }
 237
 238    /// <summary>
 239    /// Initialise an instance of <see cref="StreamUtils"></see>
 240    /// </summary>
 0241    private StreamUtils()
 242    {
 243      // Do nothing.
 0244    }
 245  }
 246}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_TarArchive.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_TarArchive.htm new file mode 100644 index 000000000..9c5a42003 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_TarArchive.htm @@ -0,0 +1,959 @@ + + + + +ICSharpCode.SharpZipLib.Tar.TarArchive - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.TarArchive
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarArchive.cs
Covered lines:46
Uncovered lines:223
Coverable lines:269
Total lines:895
Line coverage:17.1%
Branch coverage:14%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
OnProgressMessageEvent(...)200
.ctor()100
.ctor(...)285.7166.67
.ctor(...)285.7166.67
CreateInputTarArchive(...)362.560
CreateInputTarArchive(...)36060
CreateOutputTarArchive(...)362.560
CreateOutputTarArchive(...)36060
SetKeepOldFiles(...)200
SetAsciiTranslation(...)200
SetUserInfo(...)200
CloseArchive()100
ListContents()357.1460
ExtractContents(...)300
ExtractEntry(...)1400
WriteEntry(...)500
WriteEntryCore(...)1900
Dispose()1100100
Dispose(...)510077.78
Close()100
Finalize()100
EnsureDirectoryExists(...)200
IsBinary(...)700
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarArchive.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// TarArchive.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36// HISTORY
 37//  2010-01-28      Added IsStreamOwner
 38//  2012-06-07  Z-1675  RootPath was case and slash direction sensitive; trailing slash caused failure
 39
 40using System;
 41using System.IO;
 42using System.Text;
 43
 44namespace ICSharpCode.SharpZipLib.Tar
 45{
 46  /// <summary>
 47  /// Used to advise clients of 'events' while processing archives
 48  /// </summary>
 49  public delegate void ProgressMessageHandler(TarArchive archive, TarEntry entry, string message);
 50
 51  /// <summary>
 52  /// The TarArchive class implements the concept of a
 53  /// 'Tape Archive'. A tar archive is a series of entries, each of
 54  /// which represents a file system object. Each entry in
 55  /// the archive consists of a header block followed by 0 or more data blocks.
 56  /// Directory entries consist only of the header block, and are followed by entries
 57  /// for the directory's contents. File entries consist of a
 58  /// header followed by the number of blocks needed to
 59  /// contain the file's contents. All entries are written on
 60  /// block boundaries. Blocks are 512 bytes long.
 61  ///
 62  /// TarArchives are instantiated in either read or write mode,
 63  /// based upon whether they are instantiated with an InputStream
 64  /// or an OutputStream. Once instantiated TarArchives read/write
 65  /// mode can not be changed.
 66  ///
 67  /// There is currently no support for random access to tar archives.
 68  /// However, it seems that subclassing TarArchive, and using the
 69  /// TarBuffer.CurrentRecord and TarBuffer.CurrentBlock
 70  /// properties, this would be rather trivial.
 71  /// </summary>
 72  public class TarArchive : IDisposable
 73  {
 74    /// <summary>
 75    /// Client hook allowing detailed information to be reported during processing
 76    /// </summary>
 77    public event ProgressMessageHandler ProgressMessageEvent;
 78
 79    /// <summary>
 80    /// Raises the ProgressMessage event
 81    /// </summary>
 82    /// <param name="entry">The <see cref="TarEntry">TarEntry</see> for this event</param>
 83    /// <param name="message">message for this event.  Null is no message</param>
 84    protected virtual void OnProgressMessageEvent(TarEntry entry, string message)
 85    {
 086        ProgressMessageHandler handler = ProgressMessageEvent;
 087       if (handler != null) {
 088        handler(this, entry, message);
 89      }
 090    }
 91
 92    #region Constructors
 93    /// <summary>
 94    /// Constructor for a default <see cref="TarArchive"/>.
 95    /// </summary>
 096    protected TarArchive()
 97    {
 098    }
 99
 100    /// <summary>
 101    /// Initalise a TarArchive for input.
 102    /// </summary>
 103    /// <param name="stream">The <see cref="TarInputStream"/> to use for input.</param>
 1104    protected TarArchive(TarInputStream stream)
 105    {
 1106       if ( stream == null ) {
 0107        throw new ArgumentNullException(nameof(stream));
 108      }
 109
 1110      tarIn = stream;
 1111    }
 112
 113    /// <summary>
 114    /// Initialise a TarArchive for output.
 115    /// </summary>
 116    /// <param name="stream">The <see cref="TarOutputStream"/> to use for output.</param>
 1117    protected TarArchive(TarOutputStream stream)
 118    {
 1119       if ( stream == null ) {
 0120        throw new ArgumentNullException(nameof(stream));
 121      }
 122
 1123      tarOut = stream;
 1124    }
 125    #endregion
 126
 127    #region Static factory methods
 128    /// <summary>
 129    /// The InputStream based constructors create a TarArchive for the
 130    /// purposes of extracting or listing a tar archive. Thus, use
 131    /// these constructors when you wish to extract files from or list
 132    /// the contents of an existing tar archive.
 133    /// </summary>
 134    /// <param name="inputStream">The stream to retrieve archive data from.</param>
 135    /// <returns>Returns a new <see cref="TarArchive"/> suitable for reading from.</returns>
 136    public static TarArchive CreateInputTarArchive(Stream inputStream)
 137    {
 1138       if ( inputStream == null ) {
 0139        throw new ArgumentNullException(nameof(inputStream));
 140      }
 141
 1142      var tarStream = inputStream as TarInputStream;
 143
 144        TarArchive result;
 1145       if ( tarStream != null ) {
 0146        result = new TarArchive(tarStream);
 0147      }
 148      else {
 1149        result = CreateInputTarArchive(inputStream, TarBuffer.DefaultBlockFactor);
 150      }
 1151        return result;
 152    }
 153
 154    /// <summary>
 155    /// Create TarArchive for reading setting block factor
 156    /// </summary>
 157    /// <param name="inputStream">A stream containing the tar archive contents</param>
 158    /// <param name="blockFactor">The blocking factor to apply</param>
 159    /// <returns>Returns a <see cref="TarArchive"/> suitable for reading.</returns>
 160    public static TarArchive CreateInputTarArchive(Stream inputStream, int blockFactor)
 161    {
 1162       if ( inputStream == null ) {
 0163        throw new ArgumentNullException(nameof(inputStream));
 164      }
 165
 1166       if ( inputStream is TarInputStream ) {
 0167        throw new ArgumentException("TarInputStream not valid");
 168      }
 169
 1170      return new TarArchive(new TarInputStream(inputStream, blockFactor));
 171    }
 172
 173    /// <summary>
 174    /// Create a TarArchive for writing to, using the default blocking factor
 175    /// </summary>
 176    /// <param name="outputStream">The <see cref="Stream"/> to write to</param>
 177    /// <returns>Returns a <see cref="TarArchive"/> suitable for writing.</returns>
 178    public static TarArchive CreateOutputTarArchive(Stream outputStream)
 179    {
 1180       if ( outputStream == null ) {
 0181        throw new ArgumentNullException(nameof(outputStream));
 182      }
 183
 1184            var tarStream = outputStream as TarOutputStream;
 185
 186        TarArchive result;
 1187       if ( tarStream != null ) {
 0188        result = new TarArchive(tarStream);
 0189      }
 190      else {
 1191        result = CreateOutputTarArchive(outputStream, TarBuffer.DefaultBlockFactor);
 192      }
 1193        return result;
 194    }
 195
 196    /// <summary>
 197    /// Create a <see cref="TarArchive">tar archive</see> for writing.
 198    /// </summary>
 199    /// <param name="outputStream">The stream to write to</param>
 200    /// <param name="blockFactor">The blocking factor to use for buffering.</param>
 201    /// <returns>Returns a <see cref="TarArchive"/> suitable for writing.</returns>
 202    public static TarArchive CreateOutputTarArchive(Stream outputStream, int blockFactor)
 203    {
 1204       if ( outputStream == null ) {
 0205        throw new ArgumentNullException(nameof(outputStream));
 206      }
 207
 1208       if ( outputStream is TarOutputStream ) {
 0209        throw new ArgumentException("TarOutputStream is not valid");
 210      }
 211
 1212      return new TarArchive(new TarOutputStream(outputStream, blockFactor));
 213    }
 214    #endregion
 215
 216    /// <summary>
 217    /// Set the flag that determines whether existing files are
 218    /// kept, or overwritten during extraction.
 219    /// </summary>
 220    /// <param name="keepExistingFiles">
 221    /// If true, do not overwrite existing files.
 222    /// </param>
 223    public void SetKeepOldFiles(bool keepExistingFiles)
 224    {
 0225       if ( isDisposed ) {
 0226        throw new ObjectDisposedException("TarArchive");
 227      }
 228
 0229      keepOldFiles = keepExistingFiles;
 0230    }
 231
 232    /// <summary>
 233    /// Get/set the ascii file translation flag. If ascii file translation
 234    /// is true, then the file is checked to see if it a binary file or not.
 235    /// If the flag is true and the test indicates it is ascii text
 236    /// file, it will be translated. The translation converts the local
 237    /// operating system's concept of line ends into the UNIX line end,
 238    /// '\n', which is the defacto standard for a TAR archive. This makes
 239    /// text files compatible with UNIX.
 240    /// </summary>
 241    public bool AsciiTranslate
 242    {
 243      get {
 0244         if ( isDisposed ) {
 0245          throw new ObjectDisposedException("TarArchive");
 246        }
 247
 0248        return asciiTranslate;
 249      }
 250
 251      set {
 0252         if ( isDisposed ) {
 0253          throw new ObjectDisposedException("TarArchive");
 254        }
 255
 0256        asciiTranslate = value;
 0257      }
 258
 259    }
 260
 261    /// <summary>
 262    /// Set the ascii file translation flag.
 263    /// </summary>
 264    /// <param name= "translateAsciiFiles">
 265    /// If true, translate ascii text files.
 266    /// </param>
 267    [Obsolete("Use the AsciiTranslate property")]
 268    public void SetAsciiTranslation(bool translateAsciiFiles)
 269    {
 0270       if ( isDisposed ) {
 0271        throw new ObjectDisposedException("TarArchive");
 272      }
 273
 0274      asciiTranslate = translateAsciiFiles;
 0275    }
 276
 277    /// <summary>
 278    /// PathPrefix is added to entry names as they are written if the value is not null.
 279    /// A slash character is appended after PathPrefix
 280    /// </summary>
 281    public string PathPrefix
 282    {
 283      get {
 0284         if ( isDisposed ) {
 0285          throw new ObjectDisposedException("TarArchive");
 286        }
 287
 0288        return pathPrefix;
 289      }
 290
 291      set {
 0292         if ( isDisposed ) {
 0293          throw new ObjectDisposedException("TarArchive");
 294        }
 295
 0296        pathPrefix = value;
 0297      }
 298
 299    }
 300
 301    /// <summary>
 302    /// RootPath is removed from entry names if it is found at the
 303    /// beginning of the name.
 304    /// </summary>
 305    public string RootPath
 306    {
 307      get {
 0308         if ( isDisposed ) {
 0309          throw new ObjectDisposedException("TarArchive");
 310        }
 311
 0312        return rootPath;
 313      }
 314
 315      set {
 0316         if ( isDisposed ) {
 0317          throw new ObjectDisposedException("TarArchive");
 318        }
 319        // Convert to forward slashes for matching. Trim trailing / for correct final path
 0320        rootPath = value.Replace('\\', '/').TrimEnd('/');
 0321      }
 322    }
 323
 324    /// <summary>
 325    /// Set user and group information that will be used to fill in the
 326    /// tar archive's entry headers. This information is based on that available
 327    /// for the linux operating system, which is not always available on other
 328    /// operating systems.  TarArchive allows the programmer to specify values
 329    /// to be used in their place.
 330    /// <see cref="ApplyUserInfoOverrides"/> is set to true by this call.
 331    /// </summary>
 332    /// <param name="userId">
 333    /// The user id to use in the headers.
 334    /// </param>
 335    /// <param name="userName">
 336    /// The user name to use in the headers.
 337    /// </param>
 338    /// <param name="groupId">
 339    /// The group id to use in the headers.
 340    /// </param>
 341    /// <param name="groupName">
 342    /// The group name to use in the headers.
 343    /// </param>
 344    public void SetUserInfo(int userId, string userName, int groupId, string groupName)
 345    {
 0346       if ( isDisposed ) {
 0347        throw new ObjectDisposedException("TarArchive");
 348      }
 349
 0350      this.userId    = userId;
 0351      this.userName  = userName;
 0352      this.groupId   = groupId;
 0353      this.groupName = groupName;
 0354      applyUserInfoOverrides = true;
 0355    }
 356
 357    /// <summary>
 358    /// Get or set a value indicating if overrides defined by <see cref="SetUserInfo">SetUserInfo</see> should be applie
 359    /// </summary>
 360    /// <remarks>If overrides are not applied then the values as set in each header will be used.</remarks>
 361    public bool ApplyUserInfoOverrides
 362    {
 363      get {
 0364         if ( isDisposed ) {
 0365          throw new ObjectDisposedException("TarArchive");
 366        }
 367
 0368        return applyUserInfoOverrides;
 369      }
 370
 371      set {
 0372         if ( isDisposed ) {
 0373          throw new ObjectDisposedException("TarArchive");
 374        }
 375
 0376        applyUserInfoOverrides = value;
 0377      }
 378    }
 379
 380    /// <summary>
 381    /// Get the archive user id.
 382    /// See <see cref="ApplyUserInfoOverrides">ApplyUserInfoOverrides</see> for detail
 383    /// on how to allow setting values on a per entry basis.
 384    /// </summary>
 385    /// <returns>
 386    /// The current user id.
 387    /// </returns>
 388    public int UserId {
 389      get {
 0390         if ( isDisposed ) {
 0391          throw new ObjectDisposedException("TarArchive");
 392        }
 393
 0394        return userId;
 395      }
 396    }
 397
 398    /// <summary>
 399    /// Get the archive user name.
 400    /// See <see cref="ApplyUserInfoOverrides">ApplyUserInfoOverrides</see> for detail
 401    /// on how to allow setting values on a per entry basis.
 402    /// </summary>
 403    /// <returns>
 404    /// The current user name.
 405    /// </returns>
 406    public string UserName {
 407      get {
 0408         if ( isDisposed ) {
 0409          throw new ObjectDisposedException("TarArchive");
 410        }
 411
 0412        return userName;
 413      }
 414    }
 415
 416    /// <summary>
 417    /// Get the archive group id.
 418    /// See <see cref="ApplyUserInfoOverrides">ApplyUserInfoOverrides</see> for detail
 419    /// on how to allow setting values on a per entry basis.
 420    /// </summary>
 421    /// <returns>
 422    /// The current group id.
 423    /// </returns>
 424    public int GroupId {
 425      get {
 0426         if ( isDisposed ) {
 0427          throw new ObjectDisposedException("TarArchive");
 428        }
 429
 0430        return groupId;
 431      }
 432    }
 433
 434    /// <summary>
 435    /// Get the archive group name.
 436    /// See <see cref="ApplyUserInfoOverrides">ApplyUserInfoOverrides</see> for detail
 437    /// on how to allow setting values on a per entry basis.
 438    /// </summary>
 439    /// <returns>
 440    /// The current group name.
 441    /// </returns>
 442    public string GroupName {
 443      get {
 0444         if ( isDisposed ) {
 0445          throw new ObjectDisposedException("TarArchive");
 446        }
 447
 0448        return groupName;
 449      }
 450    }
 451
 452    /// <summary>
 453    /// Get the archive's record size. Tar archives are composed of
 454    /// a series of RECORDS each containing a number of BLOCKS.
 455    /// This allowed tar archives to match the IO characteristics of
 456    /// the physical device being used. Archives are expected
 457    /// to be properly "blocked".
 458    /// </summary>
 459    /// <returns>
 460    /// The record size this archive is using.
 461    /// </returns>
 462    public int RecordSize {
 463      get {
 1464         if ( isDisposed ) {
 0465          throw new ObjectDisposedException("TarArchive");
 466        }
 467
 1468         if (tarIn != null) {
 0469          return tarIn.RecordSize;
 1470         } else if (tarOut != null) {
 1471          return tarOut.RecordSize;
 472        }
 0473        return TarBuffer.DefaultRecordSize;
 474      }
 475    }
 476
 477    /// <summary>
 478    /// Sets the IsStreamOwner property on the underlying stream.
 479    /// Set this to false to prevent the Close of the TarArchive from closing the stream.
 480    /// </summary>
 481    public bool IsStreamOwner {
 482      set {
 0483         if (tarIn != null) {
 0484          tarIn.IsStreamOwner = value;
 0485        } else {
 0486          tarOut.IsStreamOwner = value;
 487        }
 0488      }
 489    }
 490
 491    /// <summary>
 492    /// Close the archive.
 493    /// </summary>
 494    [Obsolete("Use Close instead")]
 495    public void CloseArchive()
 496    {
 0497      Close();
 0498    }
 499
 500    /// <summary>
 501    /// Perform the "list" command for the archive contents.
 502    ///
 503    /// NOTE That this method uses the <see cref="ProgressMessageEvent"> progress event</see> to actually list
 504    /// the contents. If the progress display event is not set, nothing will be listed!
 505    /// </summary>
 506    public void ListContents()
 507    {
 1508       if ( isDisposed ) {
 0509        throw new ObjectDisposedException("TarArchive");
 510      }
 511
 0512      while (true) {
 1513        TarEntry entry = tarIn.GetNextEntry();
 514
 1515         if (entry == null) {
 516          break;
 517        }
 0518        OnProgressMessageEvent(entry, null);
 519      }
 1520    }
 521
 522    /// <summary>
 523    /// Perform the "extract" command and extract the contents of the archive.
 524    /// </summary>
 525    /// <param name="destinationDirectory">
 526    /// The destination directory into which to extract.
 527    /// </param>
 528    public void ExtractContents(string destinationDirectory)
 529    {
 0530       if ( isDisposed ) {
 0531        throw new ObjectDisposedException("TarArchive");
 532      }
 533
 0534      while (true) {
 0535        TarEntry entry = tarIn.GetNextEntry();
 536
 0537         if (entry == null) {
 538          break;
 539        }
 540
 0541        ExtractEntry(destinationDirectory, entry);
 542      }
 0543    }
 544
 545    /// <summary>
 546    /// Extract an entry from the archive. This method assumes that the
 547    /// tarIn stream has been properly set with a call to GetNextEntry().
 548    /// </summary>
 549    /// <param name="destDir">
 550    /// The destination directory into which to extract.
 551    /// </param>
 552    /// <param name="entry">
 553    /// The TarEntry returned by tarIn.GetNextEntry().
 554    /// </param>
 555    void ExtractEntry(string destDir, TarEntry entry)
 556    {
 0557      OnProgressMessageEvent(entry, null);
 558
 0559      string name = entry.Name;
 560
 0561       if (Path.IsPathRooted(name)) {
 562        // NOTE:
 563        // for UNC names...  \\machine\share\zoom\beet.txt gives \zoom\beet.txt
 0564        name = name.Substring(Path.GetPathRoot(name).Length);
 565      }
 566
 0567      name = name.Replace('/', Path.DirectorySeparatorChar);
 568
 0569      string destFile = Path.Combine(destDir, name);
 570
 0571       if (entry.IsDirectory) {
 0572        EnsureDirectoryExists(destFile);
 0573      } else {
 0574        string parentDirectory = Path.GetDirectoryName(destFile);
 0575        EnsureDirectoryExists(parentDirectory);
 576
 0577        bool process = true;
 0578        var fileInfo = new FileInfo(destFile);
 0579         if (fileInfo.Exists) {
 0580           if (keepOldFiles) {
 0581            OnProgressMessageEvent(entry, "Destination file already exists");
 0582            process = false;
 0583           } else if ((fileInfo.Attributes & FileAttributes.ReadOnly) != 0) {
 0584            OnProgressMessageEvent(entry, "Destination file already exists, and is read-only");
 0585            process = false;
 586          }
 587        }
 588
 0589         if (process) {
 0590          bool asciiTrans = false;
 591
 0592          Stream outputStream = File.Create(destFile);
 0593           if (this.asciiTranslate) {
 0594            asciiTrans = !IsBinary(destFile);
 595          }
 596
 0597          StreamWriter outw = null;
 0598           if (asciiTrans) {
 0599            outw = new StreamWriter(outputStream);
 600          }
 601
 0602          byte[] rdbuf = new byte[32 * 1024];
 603
 0604          while (true) {
 0605            int numRead = tarIn.Read(rdbuf, 0, rdbuf.Length);
 606
 0607             if (numRead <= 0) {
 608              break;
 609            }
 610
 0611             if (asciiTrans) {
 0612               for (int off = 0, b = 0; b < numRead; ++b) {
 0613                 if (rdbuf[b] == 10) {
 0614                  string s = Encoding.ASCII.GetString(rdbuf, off, (b - off));
 0615                  outw.WriteLine(s);
 0616                  off = b + 1;
 617                }
 618              }
 0619            } else {
 0620              outputStream.Write(rdbuf, 0, numRead);
 621            }
 622          }
 623
 0624           if (asciiTrans) {
 0625            outw.Close();
 0626          } else {
 0627            outputStream.Close();
 628          }
 629        }
 630      }
 0631    }
 632
 633    /// <summary>
 634    /// Write an entry to the archive. This method will call the putNextEntry
 635    /// and then write the contents of the entry, and finally call closeEntry()
 636    /// for entries that are files. For directories, it will call putNextEntry(),
 637    /// and then, if the recurse flag is true, process each entry that is a
 638    /// child of the directory.
 639    /// </summary>
 640    /// <param name="sourceEntry">
 641    /// The TarEntry representing the entry to write to the archive.
 642    /// </param>
 643    /// <param name="recurse">
 644    /// If true, process the children of directory entries.
 645    /// </param>
 646    public void WriteEntry(TarEntry sourceEntry, bool recurse)
 647    {
 0648       if ( sourceEntry == null ) {
 0649        throw new ArgumentNullException(nameof(sourceEntry));
 650      }
 651
 0652       if ( isDisposed ) {
 0653        throw new ObjectDisposedException("TarArchive");
 654      }
 655
 656      try
 657      {
 0658         if ( recurse ) {
 0659          TarHeader.SetValueDefaults(sourceEntry.UserId, sourceEntry.UserName,
 0660                         sourceEntry.GroupId, sourceEntry.GroupName);
 661        }
 0662        WriteEntryCore(sourceEntry, recurse);
 0663      }
 664      finally
 665      {
 0666         if ( recurse ) {
 0667          TarHeader.RestoreSetValues();
 668        }
 0669      }
 0670    }
 671
 672    /// <summary>
 673    /// Write an entry to the archive. This method will call the putNextEntry
 674    /// and then write the contents of the entry, and finally call closeEntry()
 675    /// for entries that are files. For directories, it will call putNextEntry(),
 676    /// and then, if the recurse flag is true, process each entry that is a
 677    /// child of the directory.
 678    /// </summary>
 679    /// <param name="sourceEntry">
 680    /// The TarEntry representing the entry to write to the archive.
 681    /// </param>
 682    /// <param name="recurse">
 683    /// If true, process the children of directory entries.
 684    /// </param>
 685    void WriteEntryCore(TarEntry sourceEntry, bool recurse)
 686    {
 0687      string tempFileName = null;
 0688      string entryFilename   = sourceEntry.File;
 689
 0690      var entry = (TarEntry)sourceEntry.Clone();
 691
 0692       if ( applyUserInfoOverrides ) {
 0693        entry.GroupId = groupId;
 0694        entry.GroupName = groupName;
 0695        entry.UserId = userId;
 0696        entry.UserName = userName;
 697      }
 698
 0699      OnProgressMessageEvent(entry, null);
 700
 0701       if (asciiTranslate && !entry.IsDirectory) {
 702
 0703         if (!IsBinary(entryFilename)) {
 0704          tempFileName = Path.GetTempFileName();
 705
 0706          using (StreamReader inStream  = File.OpenText(entryFilename)) {
 0707            using (Stream outStream = File.Create(tempFileName)) {
 708
 0709              while (true) {
 0710                string line = inStream.ReadLine();
 0711                 if (line == null) {
 712                  break;
 713                }
 0714                byte[] data = Encoding.ASCII.GetBytes(line);
 0715                outStream.Write(data, 0, data.Length);
 0716                outStream.WriteByte((byte)'\n');
 717              }
 718
 0719              outStream.Flush();
 0720            }
 721          }
 722
 0723          entry.Size = new FileInfo(tempFileName).Length;
 0724          entryFilename = tempFileName;
 725        }
 726      }
 727
 0728      string newName = null;
 729
 0730       if (rootPath != null) {
 0731         if (entry.Name.StartsWith(rootPath, StringComparison.OrdinalIgnoreCase)) {
 0732          newName = entry.Name.Substring(rootPath.Length + 1 );
 733        }
 734      }
 735
 0736       if (pathPrefix != null) {
 0737        newName = (newName == null) ? pathPrefix + "/" + entry.Name : pathPrefix + "/" + newName;
 738      }
 739
 0740       if (newName != null) {
 0741        entry.Name = newName;
 742      }
 743
 0744      tarOut.PutNextEntry(entry);
 745
 0746       if (entry.IsDirectory) {
 0747         if (recurse) {
 0748          TarEntry[] list = entry.GetDirectoryEntries();
 0749           for (int i = 0; i < list.Length; ++i) {
 0750            WriteEntryCore(list[i], recurse);
 751          }
 752        }
 0753      }
 754      else {
 0755        using (Stream inputStream = File.OpenRead(entryFilename)) {
 0756          byte[] localBuffer = new byte[32 * 1024];
 0757          while (true) {
 0758            int numRead = inputStream.Read(localBuffer, 0, localBuffer.Length);
 759
 0760             if (numRead <=0) {
 0761              break;
 762            }
 763
 0764            tarOut.Write(localBuffer, 0, numRead);
 765          }
 766        }
 767
 0768         if ( !string.IsNullOrEmpty(tempFileName)) {
 0769          File.Delete(tempFileName);
 770        }
 771
 0772        tarOut.CloseEntry();
 773      }
 0774    }
 775
 776        /// <summary>
 777        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
 778        /// </summary>
 779        public void Dispose()
 780        {
 2781            Dispose(true);
 2782            GC.SuppressFinalize(this);
 2783        }
 784
 785      /// <summary>
 786    /// Releases the unmanaged resources used by the FileStream and optionally releases the managed resources.
 787    /// </summary>
 788    /// <param name="disposing">true to release both managed and unmanaged resources;
 789    /// false to release only unmanaged resources.</param>
 790    protected virtual void Dispose(bool disposing)
 791    {
 2792       if ( !isDisposed ) {
 2793        isDisposed = true;
 2794         if ( disposing ) {
 2795           if ( tarOut != null ) {
 1796            tarOut.Flush();
 1797            tarOut.Close();
 798          }
 799
 2800           if ( tarIn != null ) {
 1801            tarIn.Close();
 802          }
 803        }
 804      }
 2805        }
 806
 807    /// <summary>
 808    /// Closes the archive and releases any associated resources.
 809    /// </summary>
 810    public virtual void Close()
 811    {
 0812      Dispose(true);
 0813    }
 814
 815    /// <summary>
 816    /// Ensures that resources are freed and other cleanup operations are performed
 817    /// when the garbage collector reclaims the <see cref="TarArchive"/>.
 818    /// </summary>
 819    ~TarArchive()
 820    {
 0821      Dispose(false);
 0822    }
 823
 824    static void EnsureDirectoryExists(string directoryName)
 825    {
 0826       if (!Directory.Exists(directoryName)) {
 827        try {
 0828          Directory.CreateDirectory(directoryName);
 0829        }
 0830        catch (Exception e) {
 0831          throw new TarException("Exception creating directory '" + directoryName + "', " + e.Message, e);
 832        }
 833      }
 0834    }
 835
 836    // TODO: TarArchive - Is there a better way to test for a text file?
 837    // It no longer reads entire files into memory but is still a weak test!
 838    // This assumes that byte values 0-7, 14-31 or 255 are binary
 839    // and that all non text files contain one of these values
 840    static bool IsBinary(string filename)
 841    {
 0842      using (FileStream fs = File.OpenRead(filename))
 843      {
 0844        int sampleSize = Math.Min(4096, (int)fs.Length);
 0845        byte[] content = new byte[sampleSize];
 846
 0847        int bytesRead = fs.Read(content, 0, sampleSize);
 848
 0849         for (int i = 0; i < bytesRead; ++i) {
 0850          byte b = content[i];
 0851           if ( (b < 8) || ((b > 13) && (b < 32)) || (b == 255) ) {
 0852            return true;
 853          }
 854        }
 0855      }
 0856      return false;
 0857    }
 858
 859    #region Instance Fields
 860    bool keepOldFiles;
 861    bool asciiTranslate;
 862
 863    int    userId;
 2864    string userName = string.Empty;
 865    int    groupId;
 2866    string groupName = string.Empty;
 867
 868    string rootPath;
 869    string pathPrefix;
 870
 871    bool applyUserInfoOverrides;
 872
 873    TarInputStream  tarIn;
 874    TarOutputStream tarOut;
 875    bool isDisposed;
 876    #endregion
 877  }
 878}
 879
 880
 881/* The original Java file had this header:
 882  ** Authored by Timothy Gerard Endres
 883  ** <mailto:time@gjt.org>  <http://www.trustice.com>
 884  **
 885  ** This work has been placed into the public domain.
 886  ** You may use this work in any way and for any purpose you wish.
 887  **
 888  ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
 889  ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
 890  ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
 891  ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
 892  ** REDISTRIBUTION OF THIS SOFTWARE.
 893  **
 894  */
 895
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_TarBuffer.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_TarBuffer.htm new file mode 100644 index 000000000..85293171d --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_TarBuffer.htm @@ -0,0 +1,685 @@ + + + + +ICSharpCode.SharpZipLib.Tar.TarBuffer - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.TarBuffer
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarBuffer.cs
Covered lines:97
Uncovered lines:50
Coverable lines:147
Total lines:624
Line coverage:65.9%
Branch coverage:51.2%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
GetRecordSize()100
GetBlockFactor()100
.ctor()1100100
CreateInputTarBuffer(...)200
CreateInputTarBuffer(...)377.7860
CreateOutputTarBuffer(...)200
CreateOutputTarBuffer(...)377.7860
Initialize(...)2100100
IsEOFBlock(...)500
IsEndOfArchiveBlock(...)58077.78
SkipBlock()400
ReadBlock()477.7871.43
ReadRecord()491.6771.43
GetCurrentBlockNum()100
GetCurrentRecordNum()100
WriteBlock(...)566.6766.67
WriteBlock(...)764.2961.54
WriteRecord()285.7166.67
WriteFinalRecord()387.560
Close()510088.89
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarBuffer.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// TarBuffer.cs
 2// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 3//
 4// This program is free software; you can redistribute it and/or
 5// modify it under the terms of the GNU General Public License
 6// as published by the Free Software Foundation; either version 2
 7// of the License, or (at your option) any later version.
 8//
 9// This program is distributed in the hope that it will be useful,
 10// but WITHOUT ANY WARRANTY; without even the implied warranty of
 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 12// GNU General Public License for more details.
 13//
 14// You should have received a copy of the GNU General Public License
 15// along with this program; if not, write to the Free Software
 16// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 17//
 18// Linking this library statically or dynamically with other modules is
 19// making a combined work based on this library.  Thus, the terms and
 20// conditions of the GNU General Public License cover the whole
 21// combination.
 22//
 23// As a special exception, the copyright holders of this library give you
 24// permission to link this library with independent modules to produce an
 25// executable, regardless of the license terms of these independent
 26// modules, and to copy and distribute the resulting executable under
 27// terms of your choice, provided that you also meet, for each linked
 28// independent module, the terms and conditions of the license of that
 29// module.  An independent module is a module which is not derived from
 30// or based on this library.  If you modify this library, you may extend
 31// this exception to your version of the library, but you are not
 32// obligated to do so.  If you do not wish to do so, delete this
 33// exception statement from your version.
 34
 35using System;
 36using System.IO;
 37
 38namespace ICSharpCode.SharpZipLib.Tar
 39{
 40
 41  /// <summary>
 42  /// The TarBuffer class implements the tar archive concept
 43  /// of a buffered input stream. This concept goes back to the
 44  /// days of blocked tape drives and special io devices. In the
 45  /// C# universe, the only real function that this class
 46  /// performs is to ensure that files have the correct "record"
 47  /// size, or other tars will complain.
 48  /// <p>
 49  /// You should never have a need to access this class directly.
 50  /// TarBuffers are created by Tar IO Streams.
 51  /// </p>
 52  /// </summary>
 53  public class TarBuffer
 54  {
 55
 56/* A quote from GNU tar man file on blocking and records
 57   A `tar' archive file contains a series of blocks.  Each block
 58contains `BLOCKSIZE' bytes.  Although this format may be thought of as
 59being on magnetic tape, other media are often used.
 60
 61   Each file archived is represented by a header block which describes
 62the file, followed by zero or more blocks which give the contents of
 63the file.  At the end of the archive file there may be a block filled
 64with binary zeros as an end-of-file marker.  A reasonable system should
 65write a block of zeros at the end, but must not assume that such a
 66block exists when reading an archive.
 67
 68   The blocks may be "blocked" for physical I/O operations.  Each
 69record of N blocks is written with a single 'write ()'
 70operation.  On magnetic tapes, the result of such a write is a single
 71record.  When writing an archive, the last record of blocks should be
 72written at the full size, with blocks after the zero block containing
 73all zeros.  When reading an archive, a reasonable system should
 74properly handle an archive whose last record is shorter than the rest,
 75or which contains garbage records after a zero block.
 76*/
 77
 78    #region Constants
 79    /// <summary>
 80    /// The size of a block in a tar archive in bytes.
 81    /// </summary>
 82    /// <remarks>This is 512 bytes.</remarks>
 83    public const int BlockSize = 512;
 84
 85    /// <summary>
 86    /// The number of blocks in a default record.
 87    /// </summary>
 88    /// <remarks>
 89    /// The default value is 20 blocks per record.
 90    /// </remarks>
 91    public const int DefaultBlockFactor = 20;
 92
 93    /// <summary>
 94    /// The size in bytes of a default record.
 95    /// </summary>
 96    /// <remarks>
 97    /// The default size is 10KB.
 98    /// </remarks>
 99    public const int DefaultRecordSize = BlockSize * DefaultBlockFactor;
 100    #endregion
 101
 102    /// <summary>
 103    /// Get the record size for this buffer
 104    /// </summary>
 105    /// <value>The record size in bytes.
 106    /// This is equal to the <see cref="BlockFactor"/> multiplied by the <see cref="BlockSize"/></value>
 107    public int RecordSize
 108    {
 109      get {
 2950110        return recordSize;
 111      }
 112    }
 113
 114    /// <summary>
 115    /// Get the TAR Buffer's record size.
 116    /// </summary>
 117    /// <returns>The record size in bytes.
 118    /// This is equal to the <see cref="BlockFactor"/> multiplied by the <see cref="BlockSize"/></returns>
 119    [Obsolete("Use RecordSize property instead")]
 120    public int GetRecordSize()
 121    {
 0122      return recordSize;
 123    }
 124
 125    /// <summary>
 126    /// Get the Blocking factor for the buffer
 127    /// </summary>
 128    /// <value>This is the number of blocks in each record.</value>
 129    public int BlockFactor {
 130      get {
 7940131        return blockFactor;
 132      }
 133    }
 134
 135    /// <summary>
 136    /// Get the TAR Buffer's block factor
 137    /// </summary>
 138    /// <returns>The block factor; the number of blocks per record.</returns>
 139    [Obsolete("Use BlockFactor property instead")]
 140    public int GetBlockFactor()
 141    {
 0142      return blockFactor;
 143    }
 144
 145    /// <summary>
 146    /// Construct a default TarBuffer
 147    /// </summary>
 1114148    protected TarBuffer()
 149    {
 1114150    }
 151
 152    /// <summary>
 153    /// Create TarBuffer for reading with default BlockFactor
 154    /// </summary>
 155    /// <param name="inputStream">Stream to buffer</param>
 156    /// <returns>A new <see cref="TarBuffer"/> suitable for input.</returns>
 157    public static TarBuffer CreateInputTarBuffer(Stream inputStream)
 158    {
 0159       if ( inputStream == null )
 160      {
 0161        throw new ArgumentNullException(nameof(inputStream));
 162      }
 163
 0164      return CreateInputTarBuffer(inputStream, DefaultBlockFactor);
 165    }
 166
 167    /// <summary>
 168    /// Construct TarBuffer for reading inputStream setting BlockFactor
 169    /// </summary>
 170    /// <param name="inputStream">Stream to buffer</param>
 171    /// <param name="blockFactor">Blocking factor to apply</param>
 172    /// <returns>A new <see cref="TarBuffer"/> suitable for input.</returns>
 173    public static TarBuffer CreateInputTarBuffer(Stream inputStream, int blockFactor)
 174    {
 523175       if ( inputStream == null )
 176      {
 0177        throw new ArgumentNullException(nameof(inputStream));
 178      }
 179
 523180       if ( blockFactor <= 0 )
 181      {
 182#if NETCF_1_0
 183        throw new ArgumentOutOfRangeException("blockFactor");
 184#else
 0185        throw new ArgumentOutOfRangeException(nameof(blockFactor), "Factor cannot be negative");
 186#endif
 187      }
 188
 523189      var tarBuffer = new TarBuffer();
 523190      tarBuffer.inputStream  = inputStream;
 523191      tarBuffer.outputStream = null;
 523192      tarBuffer.Initialize(blockFactor);
 193
 523194      return tarBuffer;
 195    }
 196
 197    /// <summary>
 198    /// Construct TarBuffer for writing with default BlockFactor
 199    /// </summary>
 200    /// <param name="outputStream">output stream for buffer</param>
 201    /// <returns>A new <see cref="TarBuffer"/> suitable for output.</returns>
 202    public static TarBuffer CreateOutputTarBuffer(Stream outputStream)
 203    {
 0204       if ( outputStream == null )
 205      {
 0206        throw new ArgumentNullException(nameof(outputStream));
 207      }
 208
 0209      return CreateOutputTarBuffer(outputStream, DefaultBlockFactor);
 210    }
 211
 212    /// <summary>
 213    /// Construct TarBuffer for writing Tar output to streams.
 214    /// </summary>
 215    /// <param name="outputStream">Output stream to write to.</param>
 216    /// <param name="blockFactor">Blocking factor to apply</param>
 217    /// <returns>A new <see cref="TarBuffer"/> suitable for output.</returns>
 218    public static TarBuffer CreateOutputTarBuffer(Stream outputStream, int blockFactor)
 219    {
 591220       if ( outputStream == null )
 221      {
 0222        throw new ArgumentNullException(nameof(outputStream));
 223      }
 224
 591225       if ( blockFactor <= 0 )
 226      {
 227#if NETCF_1_0
 228        throw new ArgumentOutOfRangeException("blockFactor");
 229#else
 0230        throw new ArgumentOutOfRangeException(nameof(blockFactor), "Factor cannot be negative");
 231#endif
 232      }
 233
 591234      var tarBuffer = new TarBuffer();
 591235      tarBuffer.inputStream  = null;
 591236      tarBuffer.outputStream = outputStream;
 591237      tarBuffer.Initialize(blockFactor);
 238
 591239      return tarBuffer;
 240    }
 241
 242    /// <summary>
 243    /// Initialization common to all constructors.
 244    /// </summary>
 245    void Initialize(int archiveBlockFactor)
 246    {
 1114247      blockFactor  = archiveBlockFactor;
 1114248      recordSize   = archiveBlockFactor * BlockSize;
 1114249      recordBuffer  = new byte[RecordSize];
 250
 1114251       if (inputStream != null) {
 523252        currentRecordIndex = -1;
 523253        currentBlockIndex = BlockFactor;
 523254      }
 255      else {
 591256        currentRecordIndex = 0;
 591257        currentBlockIndex = 0;
 258      }
 591259    }
 260
 261    /// <summary>
 262    /// Determine if an archive block indicates End of Archive. End of
 263    /// archive is indicated by a block that consists entirely of null bytes.
 264    /// All remaining blocks for the record should also be null's
 265    /// However some older tars only do a couple of null blocks (Old GNU tar for one)
 266    /// and also partial records
 267    /// </summary>
 268    /// <param name = "block">The data block to check.</param>
 269    /// <returns>Returns true if the block is an EOF block; false otherwise.</returns>
 270    [Obsolete("Use IsEndOfArchiveBlock instead")]
 271    public bool IsEOFBlock(byte[] block)
 272    {
 0273       if ( block == null ) {
 0274        throw new ArgumentNullException(nameof(block));
 275      }
 276
 0277       if ( block.Length != BlockSize )
 278      {
 0279        throw new ArgumentException("block length is invalid");
 280      }
 281
 0282       for (int i = 0; i < BlockSize; ++i) {
 0283         if (block[i] != 0) {
 0284          return false;
 285        }
 286      }
 287
 0288      return true;
 289    }
 290
 291
 292    /// <summary>
 293    /// Determine if an archive block indicates the End of an Archive has been reached.
 294    /// End of archive is indicated by a block that consists entirely of null bytes.
 295    /// All remaining blocks for the record should also be null's
 296    /// However some older tars only do a couple of null blocks (Old GNU tar for one)
 297    /// and also partial records
 298    /// </summary>
 299    /// <param name = "block">The data block to check.</param>
 300    /// <returns>Returns true if the block is an EOF block; false otherwise.</returns>
 301    public static bool IsEndOfArchiveBlock(byte[] block)
 302    {
 522303       if ( block == null ) {
 0304        throw new ArgumentNullException(nameof(block));
 305      }
 306
 522307       if ( block.Length != BlockSize ) {
 0308        throw new ArgumentException("block length is invalid");
 309      }
 310
 3092311       for ( int i = 0; i < BlockSize; ++i ) {
 1544312         if ( block[i] != 0 ) {
 520313          return false;
 314        }
 315      }
 316
 2317      return true;
 318    }
 319
 320    /// <summary>
 321    /// Skip over a block on the input stream.
 322    /// </summary>
 323    public void SkipBlock()
 324    {
 0325       if (inputStream == null) {
 0326        throw new TarException("no input stream defined");
 327      }
 328
 0329       if (currentBlockIndex >= BlockFactor) {
 0330         if (!ReadRecord()) {
 0331          throw new TarException("Failed to read a record");
 332        }
 333      }
 334
 0335      currentBlockIndex++;
 0336    }
 337
 338    /// <summary>
 339    /// Read a block from the input stream.
 340    /// </summary>
 341    /// <returns>
 342    /// The block of data read.
 343    /// </returns>
 344    public byte[] ReadBlock()
 345    {
 1357346       if (inputStream == null) {
 0347        throw new TarException("TarBuffer.ReadBlock - no input stream defined");
 348      }
 349
 1357350       if (currentBlockIndex >= BlockFactor) {
 521351         if (!ReadRecord()) {
 0352          throw new TarException("Failed to read a record");
 353        }
 354      }
 355
 1357356      byte[] result = new byte[BlockSize];
 357
 1357358      Array.Copy(recordBuffer, (currentBlockIndex * BlockSize), result, 0, BlockSize );
 1357359      currentBlockIndex++;
 1357360      return result;
 361    }
 362
 363    /// <summary>
 364    /// Read a record from data stream.
 365    /// </summary>
 366    /// <returns>
 367    /// false if End-Of-File, else true.
 368    /// </returns>
 369    bool ReadRecord()
 370    {
 521371       if (inputStream == null) {
 0372        throw new TarException("no input stream stream defined");
 373      }
 374
 521375      currentBlockIndex = 0;
 376
 521377      int offset = 0;
 521378      int bytesNeeded = RecordSize;
 379
 1042380       while (bytesNeeded > 0) {
 521381        long numBytes = inputStream.Read(recordBuffer, offset, bytesNeeded);
 382
 383        //
 384        // NOTE
 385        // We have found EOF, and the record is not full!
 386        //
 387        // This is a broken archive. It does not follow the standard
 388        // blocking algorithm. However, because we are generous, and
 389        // it requires little effort, we will simply ignore the error
 390        // and continue as if the entire record were read. This does
 391        // not appear to break anything upstream. We used to return
 392        // false in this case.
 393        //
 394        // Thanks to 'Yohann.Roussel@alcatel.fr' for this fix.
 395        //
 521396         if (numBytes <= 0) {
 397          break;
 398        }
 399
 521400        offset      += (int)numBytes;
 521401        bytesNeeded -= (int)numBytes;
 402      }
 403
 521404      currentRecordIndex++;
 521405      return true;
 406    }
 407
 408    /// <summary>
 409    /// Get the current block number, within the current record, zero based.
 410    /// </summary>
 411        /// <remarks>Block numbers are zero based values</remarks>
 412        /// <seealso cref="RecordSize"/>
 413    public int CurrentBlock
 414    {
 0415      get { return currentBlockIndex; }
 416    }
 417
 418        /// <summary>
 419        /// Get/set flag indicating ownership of the underlying stream.
 420        /// When the flag is true <see cref="Close"></see> will close the underlying stream also.
 421        /// </summary>
 422        public bool IsStreamOwner
 423        {
 0424            get { return isStreamOwner_; }
 4425            set { isStreamOwner_ = value; }
 426        }
 427
 428    /// <summary>
 429    /// Get the current block number, within the current record, zero based.
 430    /// </summary>
 431    /// <returns>
 432    /// The current zero based block number.
 433    /// </returns>
 434    /// <remarks>
 435    /// The absolute block number = (<see cref="GetCurrentRecordNum">record number</see> * <see cref="BlockFactor">block
 436    /// </remarks>
 437    [Obsolete("Use CurrentBlock property instead")]
 438    public int GetCurrentBlockNum()
 439    {
 0440      return currentBlockIndex;
 441    }
 442
 443    /// <summary>
 444    /// Get the current record number.
 445    /// </summary>
 446    /// <returns>
 447    /// The current zero based record number.
 448    /// </returns>
 449    public int CurrentRecord
 450    {
 0451      get { return currentRecordIndex; }
 452    }
 453
 454    /// <summary>
 455    /// Get the current record number.
 456    /// </summary>
 457    /// <returns>
 458    /// The current zero based record number.
 459    /// </returns>
 460    [Obsolete("Use CurrentRecord property instead")]
 461    public int GetCurrentRecordNum()
 462    {
 0463      return currentRecordIndex;
 464    }
 465
 466    /// <summary>
 467    /// Write a block of data to the archive.
 468    /// </summary>
 469    /// <param name="block">
 470    /// The data to write to the archive.
 471    /// </param>
 472    public void WriteBlock(byte[] block)
 473    {
 2018474       if ( block == null ) {
 0475        throw new ArgumentNullException(nameof(block));
 476      }
 477
 2018478       if (outputStream == null) {
 0479        throw new TarException("TarBuffer.WriteBlock - no output stream defined");
 480      }
 481
 2018482       if (block.Length != BlockSize) {
 0483        string errorText = string.Format("TarBuffer.WriteBlock - block to write has length '{0}' which is not the block 
 0484          block.Length, BlockSize );
 0485        throw new TarException(errorText);
 486      }
 487
 2018488       if (currentBlockIndex >= BlockFactor) {
 4489        WriteRecord();
 490      }
 491
 2018492      Array.Copy(block, 0, recordBuffer, (currentBlockIndex * BlockSize), BlockSize);
 2018493      currentBlockIndex++;
 2018494    }
 495
 496    /// <summary>
 497    /// Write an archive record to the archive, where the record may be
 498    /// inside of a larger array buffer. The buffer must be "offset plus
 499    /// record size" long.
 500    /// </summary>
 501    /// <param name="buffer">
 502    /// The buffer containing the record data to write.
 503    /// </param>
 504    /// <param name="offset">
 505    /// The offset of the record data within buffer.
 506    /// </param>
 507    public void WriteBlock(byte[] buffer, int offset)
 508    {
 4042509       if ( buffer == null ) {
 0510        throw new ArgumentNullException(nameof(buffer));
 511      }
 512
 4042513       if (outputStream == null) {
 0514        throw new TarException("TarBuffer.WriteBlock - no output stream stream defined");
 515      }
 516
 4042517       if ( (offset < 0) || (offset >= buffer.Length) )
 518      {
 0519        throw new ArgumentOutOfRangeException(nameof(offset));
 520      }
 521
 4042522       if ((offset + BlockSize) > buffer.Length) {
 0523        string errorText = string.Format("TarBuffer.WriteBlock - record has length '{0}' with offset '{1}' which is less
 0524          buffer.Length, offset, recordSize);
 0525        throw new TarException(errorText);
 526      }
 527
 4042528       if (currentBlockIndex >= BlockFactor) {
 128529        WriteRecord();
 530      }
 531
 4042532      Array.Copy(buffer, offset, recordBuffer, (currentBlockIndex * BlockSize), BlockSize);
 533
 4042534      currentBlockIndex++;
 4042535    }
 536
 537    /// <summary>
 538    /// Write a TarBuffer record to the archive.
 539    /// </summary>
 540    void WriteRecord()
 541    {
 723542       if (outputStream == null) {
 0543        throw new TarException("TarBuffer.WriteRecord no output stream defined");
 544      }
 545
 723546      outputStream.Write(recordBuffer, 0, RecordSize);
 723547      outputStream.Flush();
 548
 723549      currentBlockIndex = 0;
 723550      currentRecordIndex++;
 723551    }
 552
 553    /// <summary>
 554    /// WriteFinalRecord writes the current record buffer to output any unwritten data is present.
 555    /// </summary>
 556        /// <remarks>Any trailing bytes are set to zero which is by definition correct behaviour
 557        /// for the end of a tar stream.</remarks>
 558    void WriteFinalRecord()
 559    {
 591560       if (outputStream == null) {
 0561        throw new TarException("TarBuffer.WriteFinalRecord no output stream defined");
 562      }
 563
 591564       if (currentBlockIndex > 0) {
 591565        int dataBytes = currentBlockIndex * BlockSize;
 591566        Array.Clear(recordBuffer, dataBytes, RecordSize - dataBytes);
 591567        WriteRecord();
 568      }
 569
 591570      outputStream.Flush();
 591571    }
 572
 573    /// <summary>
 574    /// Close the TarBuffer. If this is an output buffer, also flush the
 575    /// current block before closing.
 576    /// </summary>
 577    public void Close()
 578    {
 1114579       if (outputStream != null) {
 591580        WriteFinalRecord();
 581
 591582                 if (isStreamOwner_) {
 590583                    outputStream.Close();
 584                }
 591585        outputStream = null;
 591586      }
 523587       else if (inputStream != null) {
 523588                 if (isStreamOwner_) {
 522589                    inputStream.Close();
 590                }
 523591        inputStream = null;
 592      }
 523593    }
 594
 595    #region Instance Fields
 596    Stream inputStream;
 597    Stream outputStream;
 598
 599    byte[] recordBuffer;
 600    int currentBlockIndex;
 601    int currentRecordIndex;
 602
 1114603    int recordSize = DefaultRecordSize;
 1114604    int blockFactor = DefaultBlockFactor;
 1114605        bool isStreamOwner_ = true;
 606    #endregion
 607  }
 608}
 609
 610/* The original Java file had this header:
 611  *
 612  ** Authored by Timothy Gerard Endres
 613  ** <mailto:time@gjt.org>  <http://www.trustice.com>
 614  **
 615  ** This work has been placed into the public domain.
 616  ** You may use this work in any way and for any purpose you wish.
 617  **
 618  ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
 619  ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
 620  ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
 621  ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
 622  ** REDISTRIBUTION OF THIS SOFTWARE.
 623  **
 624  */
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_TarEntry.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_TarEntry.htm new file mode 100644 index 000000000..7bb78973b --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_TarEntry.htm @@ -0,0 +1,616 @@ + + + + +ICSharpCode.SharpZipLib.Tar.TarEntry - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.TarEntry
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarEntry.cs
Covered lines:66
Uncovered lines:56
Coverable lines:122
Total lines:559
Line coverage:54%
Branch coverage:23.8%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)1100100
.ctor(...)28066.67
Clone()1100100
CreateTarEntry(...)1100100
CreateEntryFromFile(...)100
Equals(...)27566.67
GetHashCode()100
IsDescendent(...)200
SetIds(...)100
SetNames(...)100
GetFileTarHeader(...)800
GetDirectoryEntries()400
WriteEntryHeader(...)1100100
AdjustEntryName(...)100
NameTarHeader(...)788.8955.56
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarEntry.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// TarEntry.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38
 39namespace ICSharpCode.SharpZipLib.Tar
 40{
 41  /// <summary>
 42  /// This class represents an entry in a Tar archive. It consists
 43  /// of the entry's header, as well as the entry's File. Entries
 44  /// can be instantiated in one of three ways, depending on how
 45  /// they are to be used.
 46  /// <p>
 47  /// TarEntries that are created from the header bytes read from
 48  /// an archive are instantiated with the TarEntry( byte[] )
 49  /// constructor. These entries will be used when extracting from
 50  /// or listing the contents of an archive. These entries have their
 51  /// header filled in using the header bytes. They also set the File
 52  /// to null, since they reference an archive entry not a file.</p>
 53  /// <p>
 54  /// TarEntries that are created from files that are to be written
 55  /// into an archive are instantiated with the CreateEntryFromFile(string)
 56  /// pseudo constructor. These entries have their header filled in using
 57  /// the File's information. They also keep a reference to the File
 58  /// for convenience when writing entries.</p>
 59  /// <p>
 60  /// Finally, TarEntries can be constructed from nothing but a name.
 61  /// This allows the programmer to construct the entry by hand, for
 62  /// instance when only an InputStream is available for writing to
 63  /// the archive, and the header information is constructed from
 64  /// other information. In this case the header fields are set to
 65  /// defaults and the File is set to null.</p>
 66  /// <see cref="TarHeader"/>
 67  /// </summary>
 68  public class TarEntry : ICloneable
 69  {
 70    #region Constructors
 71    /// <summary>
 72    /// Initialise a default instance of <see cref="TarEntry"/>.
 73    /// </summary>
 59774    private TarEntry()
 75    {
 59776      header = new TarHeader();
 59777    }
 78
 79    /// <summary>
 80    /// Construct an entry from an archive's header bytes. File is set
 81    /// to null.
 82    /// </summary>
 83    /// <param name = "headerBuffer">
 84    /// The header bytes from a tar archive entry.
 85    /// </param>
 51986    public TarEntry(byte[] headerBuffer)
 87    {
 51988      header = new TarHeader();
 51989      header.ParseBuffer(headerBuffer);
 51990    }
 91
 92    /// <summary>
 93    /// Construct a TarEntry using the <paramref name="header">header</paramref> provided
 94    /// </summary>
 95    /// <param name="header">Header details for entry</param>
 196    public TarEntry(TarHeader header)
 97    {
 198       if ( header == null )
 99      {
 0100        throw new ArgumentNullException(nameof(header));
 101      }
 102
 1103      this.header = (TarHeader)header.Clone();
 1104    }
 105    #endregion
 106
 107    #region ICloneable Members
 108    /// <summary>
 109    /// Clone this tar entry.
 110    /// </summary>
 111    /// <returns>Returns a clone of this entry.</returns>
 112    public object Clone()
 113    {
 1114      var entry = new TarEntry();
 1115      entry.file = file;
 1116      entry.header = (TarHeader)header.Clone();
 1117      entry.Name = Name;
 1118      return entry;
 119    }
 120    #endregion
 121
 122    /// <summary>
 123    /// Construct an entry with only a <paramref name="name">name</paramref>.
 124    /// This allows the programmer to construct the entry's header "by hand".
 125    /// </summary>
 126    /// <param name="name">The name to use for the entry</param>
 127    /// <returns>Returns the newly created <see cref="TarEntry"/></returns>
 128    public static TarEntry CreateTarEntry(string name)
 129    {
 596130      var entry = new TarEntry();
 596131      TarEntry.NameTarHeader(entry.header, name);
 596132      return entry;
 133    }
 134
 135    /// <summary>
 136    /// Construct an entry for a file. File is set to file, and the
 137    /// header is constructed from information from the file.
 138    /// </summary>
 139    /// <param name = "fileName">The file name that the entry represents.</param>
 140    /// <returns>Returns the newly created <see cref="TarEntry"/></returns>
 141    public static TarEntry CreateEntryFromFile(string fileName)
 142    {
 0143      var entry = new TarEntry();
 0144      entry.GetFileTarHeader(entry.header, fileName);
 0145      return entry;
 146    }
 147
 148    /// <summary>
 149    /// Determine if the two entries are equal. Equality is determined
 150    /// by the header names being equal.
 151    /// </summary>
 152    /// <param name="obj">The <see cref="Object"/> to compare with the current Object.</param>
 153    /// <returns>
 154    /// True if the entries are equal; false if not.
 155    /// </returns>
 156    public override bool Equals(object obj)
 157    {
 1158      var localEntry = obj as TarEntry;
 159
 1160       if ( localEntry != null )
 161      {
 1162        return Name.Equals(localEntry.Name);
 163      }
 0164      return false;
 165    }
 166
 167    /// <summary>
 168    /// Derive a Hash value for the current <see cref="Object"/>
 169    /// </summary>
 170    /// <returns>A Hash code for the current <see cref="Object"/></returns>
 171    public override int GetHashCode()
 172    {
 0173      return Name.GetHashCode();
 174    }
 175
 176    /// <summary>
 177    /// Determine if the given entry is a descendant of this entry.
 178    /// Descendancy is determined by the name of the descendant
 179    /// starting with this entry's name.
 180    /// </summary>
 181    /// <param name = "toTest">
 182    /// Entry to be checked as a descendent of this.
 183    /// </param>
 184    /// <returns>
 185    /// True if entry is a descendant of this.
 186    /// </returns>
 187    public bool IsDescendent(TarEntry toTest)
 188    {
 0189       if ( toTest == null ) {
 0190        throw new ArgumentNullException(nameof(toTest));
 191      }
 192
 0193      return toTest.Name.StartsWith(Name, StringComparison.Ordinal);
 194    }
 195
 196    /// <summary>
 197    /// Get this entry's header.
 198    /// </summary>
 199    /// <returns>
 200    /// This entry's TarHeader.
 201    /// </returns>
 202    public TarHeader TarHeader
 203    {
 204      get {
 2269205        return header;
 206      }
 207    }
 208
 209    /// <summary>
 210    /// Get/Set this entry's name.
 211    /// </summary>
 212    public string Name
 213    {
 214      get {
 1110215        return header.Name;
 216      }
 217      set {
 419218        header.Name = value;
 418219      }
 220    }
 221
 222    /// <summary>
 223    /// Get/set this entry's user id.
 224    /// </summary>
 225    public int UserId
 226    {
 227      get {
 0228        return header.UserId;
 229      }
 230      set {
 1231        header.UserId = value;
 1232      }
 233    }
 234
 235    /// <summary>
 236    /// Get/set this entry's group id.
 237    /// </summary>
 238    public int GroupId
 239    {
 240      get {
 2241        return header.GroupId;
 242      }
 243      set {
 2244        header.GroupId = value;
 2245      }
 246    }
 247
 248    /// <summary>
 249    /// Get/set this entry's user name.
 250    /// </summary>
 251    public string UserName
 252    {
 253      get {
 2254        return header.UserName;
 255      }
 256      set {
 3257        header.UserName = value;
 3258      }
 259    }
 260
 261    /// <summary>
 262    /// Get/set this entry's group name.
 263    /// </summary>
 264    public string GroupName
 265    {
 266      get {
 3267        return header.GroupName;
 268      }
 269      set {
 3270        header.GroupName = value;
 3271      }
 272    }
 273
 274    /// <summary>
 275    /// Convenience method to set this entry's group and user ids.
 276    /// </summary>
 277    /// <param name="userId">
 278    /// This entry's new user id.
 279    /// </param>
 280    /// <param name="groupId">
 281    /// This entry's new group id.
 282    /// </param>
 283    public void SetIds(int userId, int groupId)
 284    {
 0285      UserId  = userId;
 0286      GroupId = groupId;
 0287    }
 288
 289    /// <summary>
 290    /// Convenience method to set this entry's group and user names.
 291    /// </summary>
 292    /// <param name="userName">
 293    /// This entry's new user name.
 294    /// </param>
 295    /// <param name="groupName">
 296    /// This entry's new group name.
 297    /// </param>
 298    public void SetNames(string userName, string groupName)
 299    {
 0300      UserName  = userName;
 0301      GroupName = groupName;
 0302    }
 303
 304    /// <summary>
 305    /// Get/Set the modification time for this entry
 306    /// </summary>
 307    public DateTime ModTime {
 308      get {
 3309        return header.ModTime;
 310      }
 311      set {
 3312        header.ModTime = value;
 2313      }
 314    }
 315
 316    /// <summary>
 317    /// Get this entry's file.
 318    /// </summary>
 319    /// <returns>
 320    /// This entry's file.
 321    /// </returns>
 322    public string File {
 323      get {
 2324        return file;
 325      }
 326    }
 327
 328    /// <summary>
 329    /// Get/set this entry's recorded file size.
 330    /// </summary>
 331    public long Size {
 332      get {
 1109333        return header.Size;
 334      }
 335      set {
 70336        header.Size = value;
 69337      }
 338    }
 339
 340    /// <summary>
 341    /// Return true if this entry represents a directory, false otherwise
 342    /// </summary>
 343    /// <returns>
 344    /// True if this entry is a directory.
 345    /// </returns>
 346    public bool IsDirectory {
 347      get {
 590348         if (file != null) {
 0349          return Directory.Exists(file);
 350        }
 351
 590352         if (header != null) {
 590353           if ((header.TypeFlag == TarHeader.LF_DIR) || Name.EndsWith("/", StringComparison.Ordinal)) {
 0354            return true;
 355          }
 356        }
 590357        return false;
 358      }
 359    }
 360
 361    /// <summary>
 362    /// Fill in a TarHeader with information from a File.
 363    /// </summary>
 364    /// <param name="header">
 365    /// The TarHeader to fill in.
 366    /// </param>
 367    /// <param name="file">
 368    /// The file from which to get the header information.
 369    /// </param>
 370    public void GetFileTarHeader(TarHeader header, string file)
 371    {
 0372       if ( header == null ) {
 0373        throw new ArgumentNullException(nameof(header));
 374      }
 375
 0376       if ( file == null ) {
 0377        throw new ArgumentNullException(nameof(file));
 378      }
 379
 0380      this.file = file;
 381
 382      // bugfix from torhovl from #D forum:
 0383      string name = file;
 384
 385#if !NETCF_1_0 && !NETCF_2_0
 386      // 23-Jan-2004 GnuTar allows device names in path where the name is not local to the current directory
 0387       if (name.IndexOf(Environment.CurrentDirectory, StringComparison.Ordinal) == 0) {
 0388        name = name.Substring(Environment.CurrentDirectory.Length);
 389      }
 390#endif
 391
 392/*
 393      if (Path.DirectorySeparatorChar == '\\')
 394      {
 395        // check if the OS is Windows
 396        // Strip off drive letters!
 397        if (name.Length > 2)
 398        {
 399          char ch1 = name[0];
 400          char ch2 = name[1];
 401
 402          if (ch2 == ':' && Char.IsLetter(ch1))
 403          {
 404            name = name.Substring(2);
 405          }
 406        }
 407      }
 408*/
 409
 0410      name = name.Replace(Path.DirectorySeparatorChar, '/');
 411
 412      // No absolute pathnames
 413      // Windows (and Posix?) paths can start with UNC style "\\NetworkDrive\",
 414      // so we loop on starting /'s.
 0415       while (name.StartsWith("/", StringComparison.Ordinal)) {
 0416        name = name.Substring(1);
 417      }
 418
 0419      header.LinkName = String.Empty;
 0420      header.Name     = name;
 421
 0422       if (Directory.Exists(file)) {
 0423        header.Mode     = 1003; // Magic number for security access for a UNIX filesystem
 0424        header.TypeFlag = TarHeader.LF_DIR;
 0425         if ( (header.Name.Length == 0) || header.Name[header.Name.Length - 1] != '/') {
 0426          header.Name = header.Name + "/";
 427        }
 428
 0429        header.Size     = 0;
 0430      } else {
 0431        header.Mode     = 33216; // Magic number for security access for a UNIX filesystem
 0432        header.TypeFlag = TarHeader.LF_NORMAL;
 0433        header.Size     = new FileInfo(file.Replace('/', Path.DirectorySeparatorChar)).Length;
 434      }
 435
 0436      header.ModTime = System.IO.File.GetLastWriteTime(file.Replace('/', Path.DirectorySeparatorChar)).ToUniversalTime()
 0437      header.DevMajor = 0;
 0438      header.DevMinor = 0;
 0439    }
 440
 441    /// <summary>
 442    /// Get entries for all files present in this entries directory.
 443    /// If this entry doesnt represent a directory zero entries are returned.
 444    /// </summary>
 445    /// <returns>
 446    /// An array of TarEntry's for this entry's children.
 447    /// </returns>
 448    public TarEntry[] GetDirectoryEntries()
 449    {
 0450       if ( (file == null) || !Directory.Exists(file)) {
 0451        return new TarEntry[0];
 452      }
 453
 0454      string[]   list   = Directory.GetFileSystemEntries(file);
 0455      TarEntry[] result = new TarEntry[list.Length];
 456
 0457       for (int i = 0; i < list.Length; ++i) {
 0458        result[i] = TarEntry.CreateEntryFromFile(list[i]);
 459      }
 460
 0461      return result;
 462    }
 463
 464    /// <summary>
 465    /// Write an entry's header information to a header buffer.
 466    /// </summary>
 467    /// <param name = "outBuffer">
 468    /// The tar entry header buffer to fill in.
 469    /// </param>
 470    public void WriteEntryHeader(byte[] outBuffer)
 471    {
 588472      header.WriteHeader(outBuffer);
 588473    }
 474
 475    /// <summary>
 476    /// Convenience method that will modify an entry's name directly
 477    /// in place in an entry header buffer byte array.
 478    /// </summary>
 479    /// <param name="buffer">
 480    /// The buffer containing the entry header to modify.
 481    /// </param>
 482    /// <param name="newName">
 483    /// The new name to place into the header buffer.
 484    /// </param>
 485    static public void AdjustEntryName(byte[] buffer, string newName)
 486    {
 0487      TarHeader.GetNameBytes(newName, buffer, 0, TarHeader.NAMELEN);
 0488    }
 489
 490    /// <summary>
 491    /// Fill in a TarHeader given only the entry's name.
 492    /// </summary>
 493    /// <param name="header">
 494    /// The TarHeader to fill in.
 495    /// </param>
 496    /// <param name="name">
 497    /// The tar entry name.
 498    /// </param>
 499    static public void NameTarHeader(TarHeader header, string name)
 500    {
 596501       if ( header == null ) {
 0502        throw new ArgumentNullException(nameof(header));
 503      }
 504
 596505       if ( name == null ) {
 0506        throw new ArgumentNullException(nameof(name));
 507      }
 508
 596509      bool isDir = name.EndsWith("/", StringComparison.Ordinal);
 510
 596511      header.Name = name;
 596512       header.Mode = isDir ? 1003 : 33216;
 596513      header.UserId   = 0;
 596514      header.GroupId  = 0;
 596515      header.Size     = 0;
 516
 596517      header.ModTime  = DateTime.UtcNow;
 518
 596519       header.TypeFlag = isDir ? TarHeader.LF_DIR : TarHeader.LF_NORMAL;
 520
 596521      header.LinkName  = String.Empty;
 596522      header.UserName  = String.Empty;
 596523      header.GroupName = String.Empty;
 524
 596525      header.DevMajor = 0;
 596526      header.DevMinor = 0;
 596527    }
 528
 529    #region Instance Fields
 530    /// <summary>
 531    /// The name of the file this entry represents or null if the entry is not based on a file.
 532    /// </summary>
 533    string file;
 534
 535    /// <summary>
 536    /// The entry's header information.
 537    /// </summary>
 538    TarHeader  header;
 539    #endregion
 540  }
 541}
 542
 543
 544
 545/* The original Java file had this header:
 546  *
 547  ** Authored by Timothy Gerard Endres
 548  ** <mailto:time@gjt.org>  <http://www.trustice.com>
 549  **
 550  ** This work has been placed into the public domain.
 551  ** You may use this work in any way and for any purpose you wish.
 552  **
 553  ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
 554  ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
 555  ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
 556  ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
 557  ** REDISTRIBUTION OF THIS SOFTWARE.
 558  **
 559  */
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_TarException.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_TarException.htm new file mode 100644 index 000000000..01d57ce2f --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_TarException.htm @@ -0,0 +1,135 @@ + + + + +ICSharpCode.SharpZipLib.Tar.TarException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.TarException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarException.cs
Covered lines:2
Uncovered lines:6
Coverable lines:8
Total lines:91
Line coverage:25%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)1100100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// TarException.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37
 38#if !NETCF_1_0 && !NETCF_2_0
 39using System.Runtime.Serialization;
 40#endif
 41
 42namespace ICSharpCode.SharpZipLib.Tar {
 43
 44  /// <summary>
 45  /// TarExceptions are used for exceptions specific to tar classes and code.
 46  /// </summary>
 47#if !NETCF_1_0 && !NETCF_2_0
 48  [Serializable]
 49#endif
 50  public class TarException : SharpZipBaseException
 51  {
 52#if !NETCF_1_0 && !NETCF_2_0
 53    /// <summary>
 54    /// Deserialization constructor
 55    /// </summary>
 56    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 57    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 58    protected TarException(SerializationInfo info, StreamingContext context)
 059      : base(info, context)
 60
 61    {
 062    }
 63#endif
 64
 65    /// <summary>
 66    /// Initialises a new instance of the TarException class.
 67    /// </summary>
 068    public TarException()
 69    {
 070    }
 71
 72    /// <summary>
 73    /// Initialises a new instance of the TarException class with a specified message.
 74    /// </summary>
 75    /// <param name="message">The message that describes the error.</param>
 76    public TarException(string message)
 177      : base(message)
 78    {
 179    }
 80
 81    /// <summary>
 82    ///
 83    /// </summary>
 84    /// <param name="message">A message describing the error.</param>
 85    /// <param name="exception">The exception that is the cause of the current exception.</param>
 86    public TarException(string message, Exception exception)
 087      : base(message, exception)
 88    {
 089    }
 90  }
 91}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_TarHeader.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_TarHeader.htm new file mode 100644 index 000000000..d71a9c26a --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_TarHeader.htm @@ -0,0 +1,1246 @@ + + + + +ICSharpCode.SharpZipLib.Tar.TarHeader - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.TarHeader
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarHeader.cs
Covered lines:217
Uncovered lines:52
Coverable lines:269
Total lines:1180
Line coverage:80.6%
Branch coverage:69.2%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
GetName()100
Clone()1100100
ParseBuffer(...)296.9766.67
WriteHeader(...)689.6672.73
GetHashCode()100
Equals(...)1683.3366.67
SetValueDefaults(...)100
RestoreSetValues()100
ParseBinaryOrOctal(...)32540
ParseOctal(...)893.3373.33
ParseName(...)773.3369.23
GetNameBytes(...)300
GetNameBytes(...)683.3381.82
GetNameBytes(...)300
GetNameBytes(...)36060
GetAsciiBytes(...)577.7877.78
GetOctalBytes(...)693.3390.91
GetBinaryOrOctalBytes(...)322.2240
GetCheckSumOctalBytes(...)1100100
ComputeCheckSum(...)2100100
MakeCheckSum(...)4100100
GetCTime(...)1100100
GetDateTimeFromCTime(...)150100
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarHeader.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// TarHeader.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36// HISTORY
 37//  27-07-2012  Z-1647  Added handling of Tar formats for files over 8GB such as Posix and Pax
 38
 39/* The tar format and its POSIX successor PAX have a long history which makes for compatability
 40   issues when creating and reading files.
 41
 42   This is further complicated by a large number of programs with variations on formats
 43   One common issue is the handling of names longer than 100 characters.
 44   GNU style long names are currently supported.
 45
 46This is the ustar (Posix 1003.1) header.
 47
 48struct header
 49{
 50  char t_name[100];          //   0 Filename
 51  char t_mode[8];            // 100 Permissions
 52  char t_uid[8];             // 108 Numerical User ID
 53  char t_gid[8];             // 116 Numerical Group ID
 54  char t_size[12];           // 124 Filesize
 55  char t_mtime[12];          // 136 st_mtime
 56  char t_chksum[8];          // 148 Checksum
 57  char t_typeflag;           // 156 Type of File
 58  char t_linkname[100];      // 157 Target of Links
 59  char t_magic[6];           // 257 "ustar" or other...
 60  char t_version[2];         // 263 Version fixed to 00
 61  char t_uname[32];          // 265 User Name
 62  char t_gname[32];          // 297 Group Name
 63  char t_devmajor[8];        // 329 Major for devices
 64  char t_devminor[8];        // 337 Minor for devices
 65  char t_prefix[155];        // 345 Prefix for t_name
 66  char t_mfill[12];          // 500 Filler up to 512
 67};
 68
 69*/
 70
 71using System;
 72using System.Text;
 73
 74namespace ICSharpCode.SharpZipLib.Tar
 75{
 76
 77
 78  /// <summary>
 79  /// This class encapsulates the Tar Entry Header used in Tar Archives.
 80  /// The class also holds a number of tar constants, used mostly in headers.
 81  /// </summary>
 82  public class TarHeader : ICloneable
 83  {
 84    #region Constants
 85    /// <summary>
 86    /// The length of the name field in a header buffer.
 87    /// </summary>
 88    public const int NAMELEN = 100;
 89
 90    /// <summary>
 91    /// The length of the mode field in a header buffer.
 92    /// </summary>
 93    public const int MODELEN = 8;
 94
 95    /// <summary>
 96    /// The length of the user id field in a header buffer.
 97    /// </summary>
 98    public const int UIDLEN = 8;
 99
 100    /// <summary>
 101    /// The length of the group id field in a header buffer.
 102    /// </summary>
 103    public const int GIDLEN = 8;
 104
 105    /// <summary>
 106    /// The length of the checksum field in a header buffer.
 107    /// </summary>
 108    public const int CHKSUMLEN = 8;
 109
 110    /// <summary>
 111    /// Offset of checksum in a header buffer.
 112    /// </summary>
 113    public const int CHKSUMOFS = 148;
 114
 115    /// <summary>
 116    /// The length of the size field in a header buffer.
 117    /// </summary>
 118    public const int SIZELEN = 12;
 119
 120    /// <summary>
 121    /// The length of the magic field in a header buffer.
 122    /// </summary>
 123    public const int MAGICLEN = 6;
 124
 125    /// <summary>
 126    /// The length of the version field in a header buffer.
 127    /// </summary>
 128    public const int VERSIONLEN = 2;
 129
 130    /// <summary>
 131    /// The length of the modification time field in a header buffer.
 132    /// </summary>
 133    public const int MODTIMELEN = 12;
 134
 135    /// <summary>
 136    /// The length of the user name field in a header buffer.
 137    /// </summary>
 138    public const int UNAMELEN = 32;
 139
 140    /// <summary>
 141    /// The length of the group name field in a header buffer.
 142    /// </summary>
 143    public const int GNAMELEN = 32;
 144
 145    /// <summary>
 146    /// The length of the devices field in a header buffer.
 147    /// </summary>
 148    public const int DEVLEN = 8;
 149
 150    //
 151    // LF_ constants represent the "type" of an entry
 152    //
 153
 154    /// <summary>
 155    ///  The "old way" of indicating a normal file.
 156    /// </summary>
 157    public const byte  LF_OLDNORM  = 0;
 158
 159    /// <summary>
 160    /// Normal file type.
 161    /// </summary>
 162    public const byte  LF_NORMAL  = (byte) '0';
 163
 164    /// <summary>
 165    /// Link file type.
 166    /// </summary>
 167    public const byte  LF_LINK    = (byte) '1';
 168
 169    /// <summary>
 170    /// Symbolic link file type.
 171    /// </summary>
 172    public const byte  LF_SYMLINK  = (byte) '2';
 173
 174    /// <summary>
 175    /// Character device file type.
 176    /// </summary>
 177    public const byte  LF_CHR    = (byte) '3';
 178
 179    /// <summary>
 180    /// Block device file type.
 181    /// </summary>
 182    public const byte  LF_BLK    = (byte) '4';
 183
 184    /// <summary>
 185    /// Directory file type.
 186    /// </summary>
 187    public const byte  LF_DIR    = (byte) '5';
 188
 189    /// <summary>
 190    /// FIFO (pipe) file type.
 191    /// </summary>
 192    public const byte  LF_FIFO    = (byte) '6';
 193
 194    /// <summary>
 195    /// Contiguous file type.
 196    /// </summary>
 197    public const byte  LF_CONTIG  = (byte) '7';
 198
 199    /// <summary>
 200    /// Posix.1 2001 global extended header
 201    /// </summary>
 202    public const byte   LF_GHDR    = (byte) 'g';
 203
 204    /// <summary>
 205    /// Posix.1 2001 extended header
 206    /// </summary>
 207    public const byte   LF_XHDR    = (byte) 'x';
 208
 209    // POSIX allows for upper case ascii type as extensions
 210
 211    /// <summary>
 212    /// Solaris access control list file type
 213    /// </summary>
 214    public const byte   LF_ACL            = (byte) 'A';
 215
 216    /// <summary>
 217    /// GNU dir dump file type
 218    /// This is a dir entry that contains the names of files that were in the
 219    /// dir at the time the dump was made
 220    /// </summary>
 221    public const byte   LF_GNU_DUMPDIR    = (byte) 'D';
 222
 223    /// <summary>
 224    /// Solaris Extended Attribute File
 225    /// </summary>
 226    public const byte   LF_EXTATTR        = (byte) 'E' ;
 227
 228    /// <summary>
 229    /// Inode (metadata only) no file content
 230    /// </summary>
 231    public const byte   LF_META           = (byte) 'I';
 232
 233    /// <summary>
 234    /// Identifies the next file on the tape as having a long link name
 235    /// </summary>
 236    public const byte   LF_GNU_LONGLINK   = (byte) 'K';
 237
 238    /// <summary>
 239    /// Identifies the next file on the tape as having a long name
 240    /// </summary>
 241    public const byte   LF_GNU_LONGNAME   = (byte) 'L';
 242
 243    /// <summary>
 244    /// Continuation of a file that began on another volume
 245    /// </summary>
 246    public const byte   LF_GNU_MULTIVOL   = (byte) 'M';
 247
 248    /// <summary>
 249    /// For storing filenames that dont fit in the main header (old GNU)
 250    /// </summary>
 251    public const byte   LF_GNU_NAMES      = (byte) 'N';
 252
 253    /// <summary>
 254    /// GNU Sparse file
 255    /// </summary>
 256    public const byte   LF_GNU_SPARSE     = (byte) 'S';
 257
 258    /// <summary>
 259    /// GNU Tape/volume header ignore on extraction
 260    /// </summary>
 261    public const byte   LF_GNU_VOLHDR     = (byte) 'V';
 262
 263    /// <summary>
 264    /// The magic tag representing a POSIX tar archive.  (includes trailing NULL)
 265    /// </summary>
 266    public const string  TMAGIC    = "ustar ";
 267
 268    /// <summary>
 269    /// The magic tag representing an old GNU tar archive where version is included in magic and overwrites it
 270    /// </summary>
 271    public const string  GNU_TMAGIC  = "ustar  ";
 272
 273    const long     timeConversionFactor = 10000000L;           // 1 tick == 100 nanoseconds
 1274    readonly static DateTime dateTime1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0);
 275    #endregion
 276
 277    #region Constructors
 278
 279    /// <summary>
 280    /// Initialise a default TarHeader instance
 281    /// </summary>
 2055282    public TarHeader()
 283    {
 2055284      Magic = TMAGIC;
 2055285      Version = " ";
 286
 2055287      Name     = "";
 2055288      LinkName = "";
 289
 2055290      UserId    = defaultUserId;
 2055291      GroupId   = defaultGroupId;
 2055292      UserName  = defaultUser;
 2055293      GroupName = defaultGroupName;
 2055294      Size      = 0;
 2055295    }
 296
 297    #endregion
 298
 299    #region Properties
 300    /// <summary>
 301    /// Get/set the name for this tar entry.
 302    /// </summary>
 303    /// <exception cref="ArgumentNullException">Thrown when attempting to set the property to null.</exception>
 304    public string Name
 305    {
 4789306      get { return name; }
 307      set {
 3489308         if ( value == null ) {
 1309          throw new ArgumentNullException(nameof(value));
 310        }
 3488311        name = value;
 3488312      }
 313    }
 314
 315    /// <summary>
 316    /// Get the name of this entry.
 317    /// </summary>
 318    /// <returns>The entry's name.</returns>
 319    [Obsolete("Use the Name property instead", true)]
 320    public string GetName()
 321    {
 0322      return name;
 323    }
 324
 325    /// <summary>
 326    /// Get/set the entry's Unix style permission mode.
 327    /// </summary>
 328    public int Mode
 329    {
 1330      get { return mode; }
 1200331      set { mode = value; }
 332    }
 333
 334
 335    /// <summary>
 336    /// The entry's user id.
 337    /// </summary>
 338    /// <remarks>
 339    /// This is only directly relevant to unix systems.
 340    /// The default is zero.
 341    /// </remarks>
 342    public int UserId
 343    {
 1062344      get { return userId; }
 8220345      set { userId = value; }
 346    }
 347
 348
 349    /// <summary>
 350    /// Get/set the entry's group id.
 351    /// </summary>
 352    /// <remarks>
 353    /// This is only directly relevant to linux/unix systems.
 354    /// The default value is zero.
 355    /// </remarks>
 356    public int GroupId
 357    {
 1062358      get { return groupId; }
 8222359      set { groupId = value; }
 360    }
 361
 362
 363    /// <summary>
 364    /// Get/set the entry's size.
 365    /// </summary>
 366    /// <exception cref="ArgumentOutOfRangeException">Thrown when setting the size to less than zero.</exception>
 367    public long Size
 368    {
 2686369      get { return size; }
 370      set {
 4179371         if ( value < 0 ) {
 372#if NETCF_1_0
 373          throw new ArgumentOutOfRangeException("value");
 374#else
 1375          throw new ArgumentOutOfRangeException(nameof(value), "Cannot be less than zero");
 376#endif
 377        }
 4178378        size = value;
 4178379      }
 380    }
 381
 382
 383    /// <summary>
 384    /// Get/set the entry's modification time.
 385    /// </summary>
 386    /// <remarks>
 387    /// The modification time is only accurate to within a second.
 388    /// </remarks>
 389    /// <exception cref="ArgumentOutOfRangeException">Thrown when setting the date time to less than 1/1/1970.</exceptio
 390    public DateTime ModTime
 391    {
 1059392      get { return modTime; }
 393      set {
 1640394         if ( value < dateTime1970 )
 395        {
 396#if NETCF_1_0
 397          throw new ArgumentOutOfRangeException("value");
 398#else
 1399          throw new ArgumentOutOfRangeException(nameof(value), "ModTime cannot be before Jan 1st 1970");
 400#endif
 401        }
 1639402        modTime = new DateTime(value.Year, value.Month, value.Day, value.Hour, value.Minute, value.Second);
 1639403      }
 404    }
 405
 406
 407    /// <summary>
 408    /// Get the entry's checksum.  This is only valid/updated after writing or reading an entry.
 409    /// </summary>
 410    public int Checksum
 411    {
 1091412      get { return checksum; }
 413    }
 414
 415
 416    /// <summary>
 417    /// Get value of true if the header checksum is valid, false otherwise.
 418    /// </summary>
 419    public bool IsChecksumValid
 420    {
 521421      get { return isChecksumValid; }
 422    }
 423
 424
 425    /// <summary>
 426    /// Get/set the entry's type flag.
 427    /// </summary>
 428    public byte TypeFlag
 429    {
 4581430      get { return typeFlag; }
 4108431      set { typeFlag = value; }
 432    }
 433
 434
 435    /// <summary>
 436    /// The entry's link name.
 437    /// </summary>
 438    /// <exception cref="ArgumentNullException">Thrown when attempting to set LinkName to null.</exception>
 439    public string LinkName
 440    {
 1057441      get { return linkName; }
 442      set {
 4112443         if ( value == null ) {
 1444          throw new ArgumentNullException(nameof(value));
 445        }
 4111446        linkName = value;
 4111447      }
 448    }
 449
 450
 451    /// <summary>
 452    /// Get/set the entry's magic tag.
 453    /// </summary>
 454    /// <exception cref="ArgumentNullException">Thrown when attempting to set Magic to null.</exception>
 455    public string Magic
 456    {
 1050457      get { return magic; }
 458      set {
 3097459         if ( value == null ) {
 1460          throw new ArgumentNullException(nameof(value));
 461        }
 3096462        magic = value;
 3096463      }
 464    }
 465
 466
 467    /// <summary>
 468    /// The entry's version.
 469    /// </summary>
 470    /// <exception cref="ArgumentNullException">Thrown when attempting to set Version to null.</exception>
 471    public string Version
 472    {
 473      get {
 1048474        return version;
 475      }
 476
 477      set {
 3097478         if ( value == null ) {
 1479          throw new ArgumentNullException(nameof(value));
 480        }
 3096481        version = value;
 3096482      }
 483    }
 484
 485
 486    /// <summary>
 487    /// The entry's user name.
 488    /// </summary>
 489    public string UserName
 490    {
 1048491      get { return userName; }
 492      set {
 4112493         if (value != null) {
 2056494          userName = value.Substring(0, Math.Min(UNAMELEN, value.Length));
 2056495        }
 496        else {
 497#if NETCF_1_0 || NETCF_2_0
 498          string currentUser = "PocketPC";
 499#else
 2056500          string currentUser = Environment.UserName;
 501#endif
 2056502           if (currentUser.Length > UNAMELEN) {
 0503            currentUser = currentUser.Substring(0, UNAMELEN);
 504          }
 2056505          userName = currentUser;
 506        }
 2056507      }
 508    }
 509
 510
 511    /// <summary>
 512    /// Get/set the entry's group name.
 513    /// </summary>
 514    /// <remarks>
 515    /// This is only directly relevant to unix systems.
 516    /// </remarks>
 517    public string GroupName
 518    {
 1047519      get { return groupName; }
 520      set {
 4112521         if ( value == null ) {
 1522          groupName = "None";
 1523        }
 524        else {
 4111525          groupName = value;
 526        }
 4111527      }
 528    }
 529
 530
 531    /// <summary>
 532    /// Get/set the entry's major device number.
 533    /// </summary>
 534    public int DevMajor
 535    {
 38536      get { return devMajor; }
 3276537      set { devMajor = value; }
 538    }
 539
 540
 541    /// <summary>
 542    /// Get/set the entry's minor device number.
 543    /// </summary>
 544    public int DevMinor
 545    {
 36546      get { return devMinor; }
 3276547      set { devMinor = value; }
 548    }
 549
 550    #endregion
 551
 552    #region ICloneable Members
 553    /// <summary>
 554    /// Create a new <see cref="TarHeader"/> that is a copy of the current instance.
 555    /// </summary>
 556    /// <returns>A new <see cref="Object"/> that is a copy of the current instance.</returns>
 557    public object Clone()
 558    {
 2559      return MemberwiseClone();
 560    }
 561    #endregion
 562
 563    /// <summary>
 564    /// Parse TarHeader information from a header buffer.
 565    /// </summary>
 566    /// <param name = "header">
 567    /// The tar entry header buffer to get information from.
 568    /// </param>
 569    public void ParseBuffer(byte[] header)
 570    {
 1039571       if ( header == null )
 572      {
 0573        throw new ArgumentNullException(nameof(header));
 574      }
 575
 1039576      int offset = 0;
 577
 1039578      name = ParseName(header, offset, NAMELEN).ToString();
 1039579      offset += NAMELEN;
 580
 1039581      mode = (int)ParseOctal(header, offset, MODELEN);
 1039582      offset += MODELEN;
 583
 1039584      UserId = (int)ParseOctal(header, offset, UIDLEN);
 1039585      offset += UIDLEN;
 586
 1039587      GroupId = (int)ParseOctal(header, offset, GIDLEN);
 1039588      offset += GIDLEN;
 589
 1039590      Size = ParseBinaryOrOctal(header, offset, SIZELEN);
 1039591      offset += SIZELEN;
 592
 1039593      ModTime = GetDateTimeFromCTime(ParseOctal(header, offset, MODTIMELEN));
 1039594      offset += MODTIMELEN;
 595
 1039596      checksum = (int)ParseOctal(header, offset, CHKSUMLEN);
 1039597      offset += CHKSUMLEN;
 598
 1039599      TypeFlag = header[ offset++ ];
 600
 1039601      LinkName = ParseName(header, offset, NAMELEN).ToString();
 1039602      offset += NAMELEN;
 603
 1039604      Magic = ParseName(header, offset, MAGICLEN).ToString();
 1039605      offset += MAGICLEN;
 606
 1039607      Version = ParseName(header, offset, VERSIONLEN).ToString();
 1039608      offset += VERSIONLEN;
 609
 1039610      UserName = ParseName(header, offset, UNAMELEN).ToString();
 1039611      offset += UNAMELEN;
 612
 1039613      GroupName = ParseName(header, offset, GNAMELEN).ToString();
 1039614      offset += GNAMELEN;
 615
 1039616      DevMajor = (int)ParseOctal(header, offset, DEVLEN);
 1039617      offset += DEVLEN;
 618
 1039619      DevMinor = (int)ParseOctal(header, offset, DEVLEN);
 620
 621      // Fields past this point not currently parsed or used...
 622
 1039623      isChecksumValid = Checksum == TarHeader.MakeCheckSum(header);
 1039624    }
 625
 626    /// <summary>
 627    /// 'Write' header information to buffer provided, updating the <see cref="Checksum">check sum</see>.
 628    /// </summary>
 629    /// <param name="outBuffer">output buffer for header information</param>
 630    public void WriteHeader(byte[] outBuffer)
 631    {
 1005632       if ( outBuffer == null )
 633      {
 0634        throw new ArgumentNullException(nameof(outBuffer));
 635      }
 636
 1005637      int offset = 0;
 638
 1005639      offset = GetNameBytes(Name, outBuffer, offset, NAMELEN);
 1005640      offset = GetOctalBytes(mode, outBuffer, offset, MODELEN);
 1005641      offset = GetOctalBytes(UserId, outBuffer, offset, UIDLEN);
 1005642      offset = GetOctalBytes(GroupId, outBuffer, offset, GIDLEN);
 643
 1005644      offset = GetBinaryOrOctalBytes(Size, outBuffer, offset, SIZELEN);
 1005645      offset = GetOctalBytes(GetCTime(ModTime), outBuffer, offset, MODTIMELEN);
 646
 1005647      int csOffset = offset;
 18090648       for (int c = 0; c < CHKSUMLEN; ++c)
 649      {
 8040650        outBuffer[offset++] = (byte)' ';
 651      }
 652
 1005653      outBuffer[offset++] = TypeFlag;
 654
 1005655      offset = GetNameBytes(LinkName, outBuffer, offset, NAMELEN);
 1005656      offset = GetAsciiBytes(Magic, 0, outBuffer, offset, MAGICLEN);
 1005657      offset = GetNameBytes(Version, outBuffer, offset, VERSIONLEN);
 1005658      offset = GetNameBytes(UserName, outBuffer, offset, UNAMELEN);
 1005659      offset = GetNameBytes(GroupName, outBuffer, offset, GNAMELEN);
 660
 1005661       if ((TypeFlag == LF_CHR) || (TypeFlag == LF_BLK))
 662      {
 0663        offset = GetOctalBytes(DevMajor, outBuffer, offset, DEVLEN);
 0664        offset = GetOctalBytes(DevMinor, outBuffer, offset, DEVLEN);
 665      }
 666
 184920667       for ( ; offset < outBuffer.Length; )
 668      {
 183915669        outBuffer[offset++] = 0;
 670      }
 671
 1005672      checksum = ComputeCheckSum(outBuffer);
 673
 1005674      GetCheckSumOctalBytes(checksum, outBuffer, csOffset, CHKSUMLEN);
 1005675      isChecksumValid = true;
 1005676    }
 677
 678    /// <summary>
 679    /// Get a hash code for the current object.
 680    /// </summary>
 681    /// <returns>A hash code for the current object.</returns>
 682    public override int GetHashCode()
 683    {
 0684      return Name.GetHashCode();
 685    }
 686
 687    /// <summary>
 688    /// Determines if this instance is equal to the specified object.
 689    /// </summary>
 690    /// <param name="obj">The object to compare with.</param>
 691    /// <returns>true if the objects are equal, false otherwise.</returns>
 692    public override bool Equals(object obj)
 693    {
 30694      var localHeader = obj as TarHeader;
 695
 696        bool result;
 30697       if ( localHeader != null )
 698      {
 30699        result = (name == localHeader.name)
 30700          && (mode == localHeader.mode)
 30701          && (UserId == localHeader.UserId)
 30702          && (GroupId == localHeader.GroupId)
 30703          && (Size == localHeader.Size)
 30704          && (ModTime == localHeader.ModTime)
 30705          && (Checksum == localHeader.Checksum)
 30706          && (TypeFlag == localHeader.TypeFlag)
 30707          && (LinkName == localHeader.LinkName)
 30708          && (Magic == localHeader.Magic)
 30709          && (Version == localHeader.Version)
 30710          && (UserName == localHeader.UserName)
 30711          && (GroupName == localHeader.GroupName)
 30712          && (DevMajor == localHeader.DevMajor)
 30713          && (DevMinor == localHeader.DevMinor);
 30714      }
 715      else
 716      {
 0717        result = false;
 718      }
 30719        return result;
 720    }
 721
 722    /// <summary>
 723    /// Set defaults for values used when constructing a TarHeader instance.
 724    /// </summary>
 725    /// <param name="userId">Value to apply as a default for userId.</param>
 726    /// <param name="userName">Value to apply as a default for userName.</param>
 727    /// <param name="groupId">Value to apply as a default for groupId.</param>
 728    /// <param name="groupName">Value to apply as a default for groupName.</param>
 729    static internal void SetValueDefaults(int userId, string userName, int groupId, string groupName)
 730    {
 0731      defaultUserId = userIdAsSet = userId;
 0732      defaultUser = userNameAsSet = userName;
 0733      defaultGroupId = groupIdAsSet = groupId;
 0734      defaultGroupName = groupNameAsSet = groupName;
 0735    }
 736
 737    static internal void RestoreSetValues()
 738    {
 0739      defaultUserId = userIdAsSet;
 0740      defaultUser = userNameAsSet;
 0741      defaultGroupId = groupIdAsSet;
 0742      defaultGroupName = groupNameAsSet;
 0743    }
 744
 745    // Return value that may be stored in octal or binary. Length must exceed 8.
 746    //
 747    static private long ParseBinaryOrOctal(byte[] header, int offset, int length) {
 1039748       if (header[offset] >= 0x80) {
 749        // File sizes over 8GB are stored in 8 right-justified bytes of binary indicated by setting the high-order bit o
 0750        long result = 0;
 0751         for (int pos = length - 8; pos < length; pos++) {
 0752          result = result << 8 | header[offset + pos];
 753        }
 0754        return result;
 755      }
 1039756      return ParseOctal(header, offset, length);
 757    }
 758
 759    /// <summary>
 760    /// Parse an octal string from a header buffer.
 761    /// </summary>
 762    /// <param name = "header">The header buffer from which to parse.</param>
 763    /// <param name = "offset">The offset into the buffer from which to parse.</param>
 764    /// <param name = "length">The number of header bytes to parse.</param>
 765    /// <returns>The long equivalent of the octal string.</returns>
 766    static public long ParseOctal(byte[] header, int offset, int length)
 767    {
 8312768       if ( header == null ) {
 0769        throw new ArgumentNullException(nameof(header));
 770      }
 771
 8312772      long result = 0;
 8312773      bool stillPadding = true;
 774
 8312775      int end = offset + length;
 118348776       for (int i = offset; i < end ; ++i) {
 59174777         if (header[i] == 0) {
 778          break;
 779        }
 780
 50862781         if (header[i] == (byte)' ' || header[i] == '0') {
 38655782           if (stillPadding) {
 783            continue;
 784          }
 785
 4314786           if (header[i] == (byte)' ') {
 787            break;
 788          }
 789        }
 790
 16521791        stillPadding = false;
 792
 16521793        result = (result << 3) + (header[i] - '0');
 794      }
 795
 8312796      return result;
 797    }
 798
 799    /// <summary>
 800    /// Parse a name from a header buffer.
 801    /// </summary>
 802    /// <param name="header">
 803    /// The header buffer from which to parse.
 804    /// </param>
 805    /// <param name="offset">
 806    /// The offset into the buffer from which to parse.
 807    /// </param>
 808    /// <param name="length">
 809    /// The number of header bytes to parse.
 810    /// </param>
 811    /// <returns>
 812    /// The name parsed.
 813    /// </returns>
 814    static public StringBuilder ParseName(byte[] header, int offset, int length)
 815    {
 6652816       if ( header == null ) {
 0817        throw new ArgumentNullException(nameof(header));
 818      }
 819
 6652820       if ( offset < 0 ) {
 821#if NETCF_1_0
 822        throw new ArgumentOutOfRangeException("offset");
 823#else
 0824        throw new ArgumentOutOfRangeException(nameof(offset), "Cannot be less than zero");
 825#endif
 826      }
 827
 6652828       if ( length < 0 )
 829      {
 830#if NETCF_1_0
 831        throw new ArgumentOutOfRangeException("length");
 832#else
 0833        throw new ArgumentOutOfRangeException(nameof(length), "Cannot be less than zero");
 834#endif
 835      }
 836
 6652837       if ( offset + length > header.Length )
 838      {
 0839        throw new ArgumentException("Exceeds header size", nameof(length));
 840      }
 841
 6652842      var result = new StringBuilder(length);
 843
 395960844       for (int i = offset; i < offset + length; ++i) {
 196940845         if (header[i] == 0) {
 846          break;
 847        }
 191328848        result.Append((char)header[i]);
 849      }
 850
 6652851      return result;
 852    }
 853
 854    /// <summary>
 855    /// Add <paramref name="name">name</paramref> to the buffer as a collection of bytes
 856    /// </summary>
 857    /// <param name="name">The name to add</param>
 858    /// <param name="nameOffset">The offset of the first character</param>
 859    /// <param name="buffer">The buffer to add to</param>
 860    /// <param name="bufferOffset">The index of the first byte to add</param>
 861    /// <param name="length">The number of characters/bytes to add</param>
 862    /// <returns>The next free index in the <paramref name="buffer"/></returns>
 863    public static int GetNameBytes(StringBuilder name, int nameOffset, byte[] buffer, int bufferOffset, int length)
 864    {
 0865       if ( name == null ) {
 0866        throw new ArgumentNullException(nameof(name));
 867      }
 868
 0869       if ( buffer == null ) {
 0870        throw new ArgumentNullException(nameof(buffer));
 871      }
 872
 0873      return GetNameBytes(name.ToString(), nameOffset, buffer, bufferOffset, length);
 874    }
 875
 876    /// <summary>
 877    /// Add <paramref name="name">name</paramref> to the buffer as a collection of bytes
 878    /// </summary>
 879    /// <param name="name">The name to add</param>
 880    /// <param name="nameOffset">The offset of the first character</param>
 881    /// <param name="buffer">The buffer to add to</param>
 882    /// <param name="bufferOffset">The index of the first byte to add</param>
 883    /// <param name="length">The number of characters/bytes to add</param>
 884    /// <returns>The next free index in the <paramref name="buffer"/></returns>
 885    public static int GetNameBytes(string name, int nameOffset, byte[] buffer, int bufferOffset, int length)
 886    {
 5025887       if ( name == null )
 888      {
 0889        throw new ArgumentNullException(nameof(name));
 890      }
 891
 5025892       if ( buffer == null )
 893      {
 0894        throw new ArgumentNullException(nameof(buffer));
 895      }
 896
 897      int i;
 898
 116878899       for (i = 0 ; i < length - 1 && nameOffset + i < name.Length; ++i) {
 53414900        buffer[bufferOffset + i] = (byte)name[nameOffset + i];
 901      }
 902
 432857903       for (; i < length ; ++i) {
 213916904        buffer[bufferOffset + i] = 0;
 905      }
 906
 5025907      return bufferOffset + length;
 908    }
 909
 910    /// <summary>
 911    /// Add an entry name to the buffer
 912    /// </summary>
 913    /// <param name="name">
 914    /// The name to add
 915    /// </param>
 916    /// <param name="buffer">
 917    /// The buffer to add to
 918    /// </param>
 919    /// <param name="offset">
 920    /// The offset into the buffer from which to start adding
 921    /// </param>
 922    /// <param name="length">
 923    /// The number of header bytes to add
 924    /// </param>
 925    /// <returns>
 926    /// The index of the next free byte in the buffer
 927    /// </returns>
 928    public static int GetNameBytes(StringBuilder name, byte[] buffer, int offset, int length)
 929    {
 930
 0931       if ( name == null ) {
 0932        throw new ArgumentNullException(nameof(name));
 933      }
 934
 0935       if ( buffer == null ) {
 0936        throw new ArgumentNullException(nameof(buffer));
 937      }
 938
 0939      return GetNameBytes(name.ToString(), 0, buffer, offset, length);
 940    }
 941
 942    /// <summary>
 943    /// Add an entry name to the buffer
 944    /// </summary>
 945    /// <param name="name">The name to add</param>
 946    /// <param name="buffer">The buffer to add to</param>
 947    /// <param name="offset">The offset into the buffer from which to start adding</param>
 948    /// <param name="length">The number of header bytes to add</param>
 949    /// <returns>The index of the next free byte in the buffer</returns>
 950    public static int GetNameBytes(string name, byte[] buffer, int offset, int length)
 951    {
 952
 5025953       if ( name == null ) {
 0954        throw new ArgumentNullException(nameof(name));
 955      }
 956
 5025957       if ( buffer == null )
 958      {
 0959        throw new ArgumentNullException(nameof(buffer));
 960      }
 961
 5025962      return GetNameBytes(name, 0, buffer, offset, length);
 963    }
 964
 965    /// <summary>
 966    /// Add a string to a buffer as a collection of ascii bytes.
 967    /// </summary>
 968    /// <param name="toAdd">The string to add</param>
 969    /// <param name="nameOffset">The offset of the first character to add.</param>
 970    /// <param name="buffer">The buffer to add to.</param>
 971    /// <param name="bufferOffset">The offset to start adding at.</param>
 972    /// <param name="length">The number of ascii characters to add.</param>
 973    /// <returns>The next free index in the buffer.</returns>
 974    public static int GetAsciiBytes(string toAdd, int nameOffset, byte[] buffer, int bufferOffset, int length )
 975    {
 1422976       if ( toAdd == null ) {
 0977        throw new ArgumentNullException(nameof(toAdd));
 978      }
 979
 1422980       if ( buffer == null ) {
 0981        throw new ArgumentNullException(nameof(buffer));
 982      }
 983
 269462984       for (int i = 0 ; i < length && nameOffset + i < toAdd.Length; ++i)
 985      {
 133309986        buffer[bufferOffset + i] = (byte)toAdd[nameOffset + i];
 987      }
 1422988      return bufferOffset + length;
 989    }
 990
 991    /// <summary>
 992    /// Put an octal representation of a value into a buffer
 993    /// </summary>
 994    /// <param name = "value">
 995    /// the value to be converted to octal
 996    /// </param>
 997    /// <param name = "buffer">
 998    /// buffer to store the octal string
 999    /// </param>
 1000    /// <param name = "offset">
 1001    /// The offset into the buffer where the value starts
 1002    /// </param>
 1003    /// <param name = "length">
 1004    /// The length of the octal string to create
 1005    /// </param>
 1006    /// <returns>
 1007    /// The offset of the character next byte after the octal string
 1008    /// </returns>
 1009    public static int GetOctalBytes(long value, byte[] buffer, int offset, int length)
 1010    {
 60301011       if ( buffer == null ) {
 01012        throw new ArgumentNullException(nameof(buffer));
 1013      }
 1014
 60301015      int localIndex = length - 1;
 1016
 1017      // Either a space or null is valid here.  We use NULL as per GNUTar
 60301018      buffer[offset + localIndex] = 0;
 60301019      --localIndex;
 1020
 60301021       if (value > 0) {
 375761022         for ( long v = value; (localIndex >= 0) && (v > 0); --localIndex ) {
 161201023          buffer[offset + localIndex] = (byte)((byte)'0' + (byte)(v & 7));
 161201024          v >>= 3;
 1025        }
 1026      }
 1027
 722801028       for ( ; localIndex >= 0; --localIndex ) {
 331251029        buffer[offset + localIndex] = (byte)'0';
 1030      }
 1031
 60301032      return offset + length;
 1033    }
 1034
 1035    /// <summary>
 1036    /// Put an octal or binary representation of a value into a buffer
 1037    /// </summary>
 1038    /// <param name = "value">Value to be convert to octal</param>
 1039    /// <param name = "buffer">The buffer to update</param>
 1040    /// <param name = "offset">The offset into the buffer to store the value</param>
 1041    /// <param name = "length">The length of the octal string. Must be 12.</param>
 1042    /// <returns>Index of next byte</returns>
 1043    private static int GetBinaryOrOctalBytes(long value, byte[] buffer, int offset, int length)
 1044    {
 10051045       if (value > 0x1FFFFFFFF) {  // Octal 77777777777 (11 digits)
 1046        // Put value as binary, right-justified into the buffer. Set high order bit of left-most byte.
 01047         for (int pos = length - 1; pos > 0; pos--) {
 01048          buffer[offset + pos] = (byte)value;
 01049          value = value >> 8;
 1050        }
 01051        buffer[offset] = 0x80;
 01052        return offset + length;
 1053      }
 10051054      return GetOctalBytes(value, buffer, offset, length);
 1055    }
 1056
 1057    /// <summary>
 1058    /// Add the checksum integer to header buffer.
 1059    /// </summary>
 1060    /// <param name = "value"></param>
 1061    /// <param name = "buffer">The header buffer to set the checksum for</param>
 1062    /// <param name = "offset">The offset into the buffer for the checksum</param>
 1063    /// <param name = "length">The number of header bytes to update.
 1064    /// It's formatted differently from the other fields: it has 6 digits, a
 1065    /// null, then a space -- rather than digits, a space, then a null.
 1066    /// The final space is already there, from checksumming
 1067    /// </param>
 1068    /// <returns>The modified buffer offset</returns>
 1069    static void GetCheckSumOctalBytes(long value, byte[] buffer, int offset, int length)
 1070    {
 10051071      GetOctalBytes(value, buffer, offset, length - 1);
 10051072    }
 1073
 1074    /// <summary>
 1075    /// Compute the checksum for a tar entry header.
 1076    /// The checksum field must be all spaces prior to this happening
 1077    /// </summary>
 1078    /// <param name = "buffer">The tar entry's header buffer.</param>
 1079    /// <returns>The computed checksum.</returns>
 1080    static int ComputeCheckSum(byte[] buffer)
 1081    {
 10051082      int sum = 0;
 10311301083       for (int i = 0; i < buffer.Length; ++i) {
 5145601084        sum += buffer[i];
 1085      }
 10051086      return sum;
 1087    }
 1088
 1089    /// <summary>
 1090    /// Make a checksum for a tar entry ignoring the checksum contents.
 1091    /// </summary>
 1092    /// <param name = "buffer">The tar entry's header buffer.</param>
 1093    /// <returns>The checksum for the buffer</returns>
 1094    static int MakeCheckSum(byte[] buffer)
 1095    {
 10391096      int sum = 0;
 3096221097       for ( int i = 0; i < CHKSUMOFS; ++i )
 1098      {
 1537721099        sum += buffer[i];
 1100      }
 1101
 187021102       for ( int i = 0; i < CHKSUMLEN; ++i)
 1103      {
 83121104        sum += (byte)' ';
 1105      }
 1106
 7418461107       for (int i = CHKSUMOFS + CHKSUMLEN; i < buffer.Length; ++i)
 1108      {
 3698841109        sum += buffer[i];
 1110      }
 10391111      return sum;
 1112    }
 1113
 1114    static int GetCTime(DateTime dateTime)
 1115    {
 10051116      return unchecked((int)((dateTime.Ticks - dateTime1970.Ticks) / timeConversionFactor));
 1117    }
 1118
 1119    static DateTime GetDateTimeFromCTime(long ticks)
 1120    {
 1121      DateTime result;
 1122
 1123      try {
 10391124        result = new DateTime(dateTime1970.Ticks + ticks * timeConversionFactor);
 10391125      }
 01126      catch(ArgumentOutOfRangeException) {
 01127        result = dateTime1970;
 01128      }
 10391129      return result;
 1130    }
 1131
 1132    #region Instance Fields
 1133    string name;
 1134    int mode;
 1135    int userId;
 1136    int groupId;
 1137    long size;
 1138    DateTime modTime;
 1139    int checksum;
 1140    bool isChecksumValid;
 1141    byte typeFlag;
 1142    string linkName;
 1143    string magic;
 1144    string version;
 1145    string userName;
 1146    string groupName;
 1147    int devMajor;
 1148    int devMinor;
 1149    #endregion
 1150
 1151    #region Class Fields
 1152    // Values used during recursive operations.
 1153    static internal int userIdAsSet;
 1154    static internal int groupIdAsSet;
 1155    static internal string userNameAsSet;
 11156    static internal string groupNameAsSet = "None";
 1157
 1158    static internal int defaultUserId;
 1159    static internal int defaultGroupId;
 11160    static internal string defaultGroupName = "None";
 1161    static internal string defaultUser;
 1162    #endregion
 1163  }
 1164}
 1165
 1166/* The original Java file had this header:
 1167 *
 1168** Authored by Timothy Gerard Endres
 1169** <mailto:time@gjt.org>  <http://www.trustice.com>
 1170**
 1171** This work has been placed into the public domain.
 1172** You may use this work in any way and for any purpose you wish.
 1173**
 1174** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
 1175** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
 1176** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
 1177** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
 1178** REDISTRIBUTION OF THIS SOFTWARE.
 1179**
 1180*/
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_TarInputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_TarInputStream.htm new file mode 100644 index 000000000..824634b27 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_TarInputStream.htm @@ -0,0 +1,755 @@ + + + + +ICSharpCode.SharpZipLib.Tar.TarInputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.TarInputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarInputStream.cs
Covered lines:78
Uncovered lines:77
Coverable lines:155
Total lines:693
Line coverage:50.3%
Branch coverage:51.5%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)1100100
Flush()100
Seek(...)100
SetLength(...)100
Write(...)100
WriteByte(...)100
ReadByte()200
Read(...)1058.9752.63
Close()1100100
SetEntryFactory(...)100
GetRecordSize()100
Skip(...)400
Mark(...)100
Reset()100
GetNextEntry()1865.0868.57
CopyEntryContents(...)200
SkipToNextEntry()28066.67
CreateEntry(...)100
CreateEntryFromFile(...)100
CreateEntry(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarInputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// TarInputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38using System.Text;
 39
 40namespace ICSharpCode.SharpZipLib.Tar
 41{
 42
 43  /// <summary>
 44  /// The TarInputStream reads a UNIX tar archive as an InputStream.
 45  /// methods are provided to position at each successive entry in
 46  /// the archive, and the read each entry as a normal input stream
 47  /// using read().
 48  /// </summary>
 49  public class TarInputStream : Stream
 50  {
 51    #region Constructors
 52    /// <summary>
 53    /// Construct a TarInputStream with default block factor
 54    /// </summary>
 55    /// <param name="inputStream">stream to source data from</param>
 56    public TarInputStream(Stream inputStream)
 52257      : this(inputStream, TarBuffer.DefaultBlockFactor)
 58    {
 52259    }
 60
 61    /// <summary>
 62    /// Construct a TarInputStream with user specified block factor
 63    /// </summary>
 64    /// <param name="inputStream">stream to source data from</param>
 65    /// <param name="blockFactor">block factor to apply to archive</param>
 52366    public TarInputStream(Stream inputStream, int blockFactor)
 67    {
 52368      this.inputStream = inputStream;
 52369      tarBuffer      = TarBuffer.CreateInputTarBuffer(inputStream, blockFactor);
 52370    }
 71
 72    #endregion
 73
 74        /// <summary>
 75        /// Get/set flag indicating ownership of the underlying stream.
 76        /// When the flag is true <see cref="Close"></see> will close the underlying stream also.
 77        /// </summary>
 78        public bool IsStreamOwner
 79        {
 080            get { return tarBuffer.IsStreamOwner; }
 281            set { tarBuffer.IsStreamOwner = value; }
 82        }
 83
 84    #region Stream Overrides
 85    /// <summary>
 86    /// Gets a value indicating whether the current stream supports reading
 87    /// </summary>
 88    public override bool CanRead
 89    {
 90      get {
 091        return inputStream.CanRead;
 92      }
 93    }
 94
 95    /// <summary>
 96    /// Gets a value indicating whether the current stream supports seeking
 97    /// This property always returns false.
 98    /// </summary>
 99    public override bool CanSeek {
 100      get {
 0101        return false;
 102      }
 103    }
 104
 105    /// <summary>
 106    /// Gets a value indicating if the stream supports writing.
 107    /// This property always returns false.
 108    /// </summary>
 109    public override bool CanWrite {
 110      get {
 0111        return false;
 112      }
 113    }
 114
 115    /// <summary>
 116    /// The length in bytes of the stream
 117    /// </summary>
 118    public override long Length {
 119      get {
 0120        return inputStream.Length;
 121      }
 122    }
 123
 124    /// <summary>
 125    /// Gets or sets the position within the stream.
 126    /// Setting the Position is not supported and throws a NotSupportedExceptionNotSupportedException
 127    /// </summary>
 128    /// <exception cref="NotSupportedException">Any attempt to set position</exception>
 129    public override long Position {
 130      get {
 0131        return inputStream.Position;
 132      }
 133      set {
 0134        throw new NotSupportedException("TarInputStream Seek not supported");
 135      }
 136    }
 137
 138    /// <summary>
 139    /// Flushes the baseInputStream
 140    /// </summary>
 141    public override void Flush()
 142    {
 0143      inputStream.Flush();
 0144    }
 145
 146    /// <summary>
 147    /// Set the streams position.  This operation is not supported and will throw a NotSupportedException
 148    /// </summary>
 149    /// <param name="offset">The offset relative to the origin to seek to.</param>
 150    /// <param name="origin">The <see cref="SeekOrigin"/> to start seeking from.</param>
 151    /// <returns>The new position in the stream.</returns>
 152    /// <exception cref="NotSupportedException">Any access</exception>
 153    public override long Seek(long offset, SeekOrigin origin)
 154    {
 0155      throw new NotSupportedException("TarInputStream Seek not supported");
 156    }
 157
 158    /// <summary>
 159    /// Sets the length of the stream
 160    /// This operation is not supported and will throw a NotSupportedException
 161    /// </summary>
 162    /// <param name="value">The new stream length.</param>
 163    /// <exception cref="NotSupportedException">Any access</exception>
 164    public override void SetLength(long value)
 165    {
 0166      throw new NotSupportedException("TarInputStream SetLength not supported");
 167    }
 168
 169    /// <summary>
 170    /// Writes a block of bytes to this stream using data from a buffer.
 171    /// This operation is not supported and will throw a NotSupportedException
 172    /// </summary>
 173    /// <param name="buffer">The buffer containing bytes to write.</param>
 174    /// <param name="offset">The offset in the buffer of the frist byte to write.</param>
 175    /// <param name="count">The number of bytes to write.</param>
 176    /// <exception cref="NotSupportedException">Any access</exception>
 177    public override void Write(byte[] buffer, int offset, int count)
 178    {
 0179      throw new NotSupportedException("TarInputStream Write not supported");
 180    }
 181
 182    /// <summary>
 183    /// Writes a byte to the current position in the file stream.
 184    /// This operation is not supported and will throw a NotSupportedException
 185    /// </summary>
 186    /// <param name="value">The byte value to write.</param>
 187    /// <exception cref="NotSupportedException">Any access</exception>
 188    public override void WriteByte(byte value)
 189    {
 0190      throw new NotSupportedException("TarInputStream WriteByte not supported");
 191    }
 192    /// <summary>
 193    /// Reads a byte from the current tar archive entry.
 194    /// </summary>
 195    /// <returns>A byte cast to an int; -1 if the at the end of the stream.</returns>
 196    public override int ReadByte()
 197    {
 0198      byte[] oneByteBuffer = new byte[1];
 0199      int num = Read(oneByteBuffer, 0, 1);
 0200       if (num <= 0)
 201      {
 202                // return -1 to indicate that no byte was read.
 0203        return -1;
 204      }
 0205      return oneByteBuffer[0];
 206    }
 207
 208    /// <summary>
 209    /// Reads bytes from the current tar archive entry.
 210    ///
 211    /// This method is aware of the boundaries of the current
 212    /// entry in the archive and will deal with them appropriately
 213    /// </summary>
 214    /// <param name="buffer">
 215    /// The buffer into which to place bytes read.
 216    /// </param>
 217    /// <param name="offset">
 218    /// The offset at which to place bytes read.
 219    /// </param>
 220    /// <param name="count">
 221    /// The number of bytes to read.
 222    /// </param>
 223    /// <returns>
 224    /// The number of bytes read, or 0 at end of stream/EOF.
 225    /// </returns>
 226    public override int Read(byte[] buffer, int offset, int count)
 227    {
 418228       if ( buffer == null )
 229      {
 0230        throw new ArgumentNullException(nameof(buffer));
 231      }
 232
 418233      int totalRead = 0;
 234
 418235       if (entryOffset >= entrySize)
 236      {
 0237        return 0;
 238      }
 239
 418240      long numToRead = count;
 241
 418242       if ((numToRead + entryOffset) > entrySize)
 243      {
 0244        numToRead = entrySize - entryOffset;
 245      }
 246
 418247       if (readBuffer != null)
 248      {
 0249         int sz = (numToRead > readBuffer.Length) ? readBuffer.Length : (int)numToRead;
 250
 0251        Array.Copy(readBuffer, 0, buffer, offset, sz);
 252
 0253         if (sz >= readBuffer.Length)
 254        {
 0255          readBuffer = null;
 0256        }
 257        else
 258        {
 0259          int newLen = readBuffer.Length - sz;
 0260          byte[] newBuf = new byte[newLen];
 0261          Array.Copy(readBuffer, sz, newBuf, 0, newLen);
 0262          readBuffer = newBuf;
 263        }
 264
 0265        totalRead += sz;
 0266        numToRead -= sz;
 0267        offset += sz;
 268      }
 269
 836270       while (numToRead > 0)
 271      {
 418272        byte[] rec = tarBuffer.ReadBlock();
 418273         if (rec == null)
 274        {
 275          // Unexpected EOF!
 0276          throw new TarException("unexpected EOF with " + numToRead + " bytes unread");
 277        }
 278
 418279        var sz     = (int)numToRead;
 418280        int recLen = rec.Length;
 281
 418282         if (recLen > sz)
 283        {
 416284          Array.Copy(rec, 0, buffer, offset, sz);
 416285          readBuffer = new byte[recLen - sz];
 416286          Array.Copy(rec, sz, readBuffer, 0, recLen - sz);
 416287        }
 288        else
 289        {
 2290          sz = recLen;
 2291          Array.Copy(rec, 0, buffer, offset, recLen);
 292        }
 293
 418294        totalRead += sz;
 418295        numToRead -= sz;
 418296        offset += sz;
 297      }
 298
 418299      entryOffset += totalRead;
 300
 418301      return totalRead;
 302    }
 303
 304    /// <summary>
 305    /// Closes this stream. Calls the TarBuffer's close() method.
 306    /// The underlying stream is closed by the TarBuffer.
 307    /// </summary>
 308    public override void Close()
 309    {
 523310      tarBuffer.Close();
 523311    }
 312
 313    #endregion
 314
 315    /// <summary>
 316    /// Set the entry factory for this instance.
 317    /// </summary>
 318    /// <param name="factory">The factory for creating new entries</param>
 319    public void SetEntryFactory(IEntryFactory factory)
 320    {
 0321      entryFactory = factory;
 0322    }
 323
 324    /// <summary>
 325    /// Get the record size being used by this stream's TarBuffer.
 326    /// </summary>
 327    public int RecordSize
 328    {
 0329      get { return tarBuffer.RecordSize; }
 330    }
 331
 332    /// <summary>
 333    /// Get the record size being used by this stream's TarBuffer.
 334    /// </summary>
 335    /// <returns>
 336    /// TarBuffer record size.
 337    /// </returns>
 338    [Obsolete("Use RecordSize property instead")]
 339    public int GetRecordSize()
 340    {
 0341      return tarBuffer.RecordSize;
 342    }
 343
 344    /// <summary>
 345    /// Get the available data that can be read from the current
 346    /// entry in the archive. This does not indicate how much data
 347    /// is left in the entire archive, only in the current entry.
 348    /// This value is determined from the entry's size header field
 349    /// and the amount of data already read from the current entry.
 350    /// </summary>
 351    /// <returns>
 352    /// The number of available bytes for the current entry.
 353    /// </returns>
 354    public long Available {
 355      get {
 0356        return entrySize - entryOffset;
 357      }
 358    }
 359
 360    /// <summary>
 361    /// Skip bytes in the input buffer. This skips bytes in the
 362    /// current entry's data, not the entire archive, and will
 363    /// stop at the end of the current entry's data if the number
 364    /// to skip extends beyond that point.
 365    /// </summary>
 366    /// <param name="skipCount">
 367    /// The number of bytes to skip.
 368    /// </param>
 369    public void Skip(long skipCount)
 370    {
 371      // TODO: REVIEW efficiency of TarInputStream.Skip
 372      // This is horribly inefficient, but it ensures that we
 373      // properly skip over bytes via the TarBuffer...
 374      //
 0375      byte[] skipBuf = new byte[8 * 1024];
 376
 0377       for (long num = skipCount; num > 0;) {
 0378         int toRead = num > skipBuf.Length ? skipBuf.Length : (int)num;
 0379        int numRead = Read(skipBuf, 0, toRead);
 380
 0381         if (numRead == -1) {
 382          break;
 383        }
 384
 0385        num -= numRead;
 386      }
 0387    }
 388
 389    /// <summary>
 390    /// Return a value of true if marking is supported; false otherwise.
 391    /// </summary>
 392    /// <remarks>Currently marking is not supported, the return value is always false.</remarks>
 393    public bool IsMarkSupported {
 394      get {
 0395        return false;
 396      }
 397    }
 398
 399    /// <summary>
 400    /// Since we do not support marking just yet, we do nothing.
 401    /// </summary>
 402    /// <param name ="markLimit">
 403    /// The limit to mark.
 404    /// </param>
 405    public void Mark(int markLimit)
 406    {
 0407    }
 408
 409    /// <summary>
 410    /// Since we do not support marking just yet, we do nothing.
 411    /// </summary>
 412    public void Reset()
 413    {
 0414    }
 415
 416    /// <summary>
 417    /// Get the next entry in this tar archive. This will skip
 418    /// over any remaining data in the current entry, if there
 419    /// is one, and place the input stream at the header of the
 420    /// next entry, and read the header and instantiate a new
 421    /// TarEntry from the header bytes and return that entry.
 422    /// If there are no more entries in the archive, null will
 423    /// be returned to indicate that the end of the archive has
 424    /// been reached.
 425    /// </summary>
 426    /// <returns>
 427    /// The next TarEntry in the archive, or null.
 428    /// </returns>
 429    public TarEntry GetNextEntry()
 430    {
 522431       if (hasHitEOF) {
 0432        return null;
 433      }
 434
 522435       if (currentEntry != null) {
 1436        SkipToNextEntry();
 437      }
 438
 522439      byte[] headerBuf = tarBuffer.ReadBlock();
 440
 522441       if (headerBuf == null) {
 0442        hasHitEOF = true;
 522443      } else hasHitEOF |= TarBuffer.IsEndOfArchiveBlock(headerBuf);
 444
 522445       if (hasHitEOF) {
 2446        currentEntry = null;
 2447      } else {
 448        try {
 520449          var header = new TarHeader();
 520450          header.ParseBuffer(headerBuf);
 520451           if ( !header.IsChecksumValid )
 452          {
 1453            throw new TarException("Header checksum is invalid");
 454          }
 519455          this.entryOffset = 0;
 519456          this.entrySize = header.Size;
 457
 519458          StringBuilder longName = null;
 459
 519460           if (header.TypeFlag == TarHeader.LF_GNU_LONGNAME) {
 461
 417462            byte[] nameBuffer = new byte[TarBuffer.BlockSize];
 417463            long numToRead = this.entrySize;
 464
 417465            longName = new StringBuilder();
 466
 835467             while (numToRead > 0) {
 418468               int numRead = this.Read(nameBuffer, 0, (numToRead > nameBuffer.Length ? nameBuffer.Length : (int)numToRead
 469
 418470               if (numRead == -1) {
 0471                throw new InvalidHeaderException("Failed to read long name entry");
 472              }
 473
 418474              longName.Append(TarHeader.ParseName(nameBuffer, 0, numRead).ToString());
 418475              numToRead -= numRead;
 476            }
 477
 417478            SkipToNextEntry();
 417479            headerBuf = this.tarBuffer.ReadBlock();
 519480           } else if (header.TypeFlag == TarHeader.LF_GHDR) {  // POSIX global extended header
 481            // Ignore things we dont understand completely for now
 0482            SkipToNextEntry();
 0483            headerBuf = this.tarBuffer.ReadBlock();
 102484           } else if (header.TypeFlag == TarHeader.LF_XHDR) {  // POSIX extended header
 485            // Ignore things we dont understand completely for now
 0486            SkipToNextEntry();
 0487            headerBuf = this.tarBuffer.ReadBlock();
 102488           } else if (header.TypeFlag == TarHeader.LF_GNU_VOLHDR) {
 489            // TODO: could show volume name when verbose
 0490            SkipToNextEntry();
 0491            headerBuf = this.tarBuffer.ReadBlock();
 102492           } else if (header.TypeFlag != TarHeader.LF_NORMAL &&
 102493                 header.TypeFlag != TarHeader.LF_OLDNORM &&
 102494                 header.TypeFlag != TarHeader.LF_DIR) {
 495            // Ignore things we dont understand completely for now
 0496            SkipToNextEntry();
 0497            headerBuf = tarBuffer.ReadBlock();
 498          }
 499
 519500           if (entryFactory == null) {
 519501            currentEntry = new TarEntry(headerBuf);
 519502             if (longName != null) {
 417503              currentEntry.Name = longName.ToString();
 504            }
 417505          } else {
 0506            currentEntry = entryFactory.CreateEntry(headerBuf);
 507          }
 508
 509          // Magic was checked here for 'ustar' but there are multiple valid possibilities
 510          // so this is not done anymore.
 511
 519512          entryOffset = 0;
 513
 514          // TODO: Review How do we resolve this discrepancy?!
 519515          entrySize = this.currentEntry.Size;
 519516        } catch (InvalidHeaderException ex) {
 0517          entrySize = 0;
 0518          entryOffset = 0;
 0519          currentEntry = null;
 0520          string errorText = string.Format("Bad header in record {0} block {1} {2}",
 0521            tarBuffer.CurrentRecord, tarBuffer.CurrentBlock, ex.Message);
 0522          throw new InvalidHeaderException(errorText);
 523        }
 524      }
 521525      return currentEntry;
 526    }
 527
 528    /// <summary>
 529    /// Copies the contents of the current tar archive entry directly into
 530    /// an output stream.
 531    /// </summary>
 532    /// <param name="outputStream">
 533    /// The OutputStream into which to write the entry's data.
 534    /// </param>
 535    public void CopyEntryContents(Stream outputStream)
 536    {
 0537      byte[] tempBuffer = new byte[32 * 1024];
 538
 0539      while (true) {
 0540        int numRead = Read(tempBuffer, 0, tempBuffer.Length);
 0541         if (numRead <= 0) {
 542          break;
 543        }
 0544        outputStream.Write(tempBuffer, 0, numRead);
 545      }
 0546    }
 547
 548    void SkipToNextEntry()
 549    {
 418550      long numToSkip = entrySize - entryOffset;
 551
 418552       if (numToSkip > 0)
 553      {
 0554        Skip(numToSkip);
 555      }
 556
 418557      readBuffer = null;
 418558    }
 559
 560    /// <summary>
 561    /// This interface is provided, along with the method <see cref="SetEntryFactory"/>, to allow
 562    /// the programmer to have their own <see cref="TarEntry"/> subclass instantiated for the
 563    /// entries return from <see cref="GetNextEntry"/>.
 564    /// </summary>
 565    public interface IEntryFactory
 566    {
 567      /// <summary>
 568      /// Create an entry based on name alone
 569      /// </summary>
 570      /// <param name="name">
 571      /// Name of the new EntryPointNotFoundException to create
 572      /// </param>
 573      /// <returns>created TarEntry or descendant class</returns>
 574      TarEntry CreateEntry(string name);
 575
 576      /// <summary>
 577      /// Create an instance based on an actual file
 578      /// </summary>
 579      /// <param name="fileName">
 580      /// Name of file to represent in the entry
 581      /// </param>
 582      /// <returns>
 583      /// Created TarEntry or descendant class
 584      /// </returns>
 585      TarEntry CreateEntryFromFile(string fileName);
 586
 587      /// <summary>
 588      /// Create a tar entry based on the header information passed
 589      /// </summary>
 590      /// <param name="headerBuffer">
 591      /// Buffer containing header information to create an an entry from.
 592      /// </param>
 593      /// <returns>
 594      /// Created TarEntry or descendant class
 595      /// </returns>
 596      TarEntry CreateEntry(byte[] headerBuffer);
 597    }
 598
 599    /// <summary>
 600    /// Standard entry factory class creating instances of the class TarEntry
 601    /// </summary>
 602    public class EntryFactoryAdapter : IEntryFactory
 603    {
 604      /// <summary>
 605      /// Create a <see cref="TarEntry"/> based on named
 606      /// </summary>
 607      /// <param name="name">The name to use for the entry</param>
 608      /// <returns>A new <see cref="TarEntry"/></returns>
 609      public TarEntry CreateEntry(string name)
 610      {
 0611        return TarEntry.CreateTarEntry(name);
 612      }
 613
 614      /// <summary>
 615      /// Create a tar entry with details obtained from <paramref name="fileName">file</paramref>
 616      /// </summary>
 617      /// <param name="fileName">The name of the file to retrieve details from.</param>
 618      /// <returns>A new <see cref="TarEntry"/></returns>
 619      public TarEntry CreateEntryFromFile(string fileName)
 620      {
 0621        return TarEntry.CreateEntryFromFile(fileName);
 622      }
 623
 624      /// <summary>
 625      /// Create an entry based on details in <paramref name="headerBuffer">header</paramref>
 626      /// </summary>
 627      /// <param name="headerBuffer">The buffer containing entry details.</param>
 628      /// <returns>A new <see cref="TarEntry"/></returns>
 629      public TarEntry CreateEntry(byte[] headerBuffer)
 630      {
 0631        return new TarEntry(headerBuffer);
 632      }
 633    }
 634
 635    #region Instance Fields
 636    /// <summary>
 637    /// Flag set when last block has been read
 638    /// </summary>
 639    protected bool hasHitEOF;
 640
 641    /// <summary>
 642    /// Size of this entry as recorded in header
 643    /// </summary>
 644    protected long entrySize;
 645
 646    /// <summary>
 647    /// Number of bytes read for this entry so far
 648    /// </summary>
 649    protected long entryOffset;
 650
 651    /// <summary>
 652    /// Buffer used with calls to <code>Read()</code>
 653    /// </summary>
 654    protected byte[] readBuffer;
 655
 656    /// <summary>
 657    /// Working buffer
 658    /// </summary>
 659    protected TarBuffer tarBuffer;
 660
 661    /// <summary>
 662    /// Current entry being read
 663    /// </summary>
 664    TarEntry  currentEntry;
 665
 666    /// <summary>
 667    /// Factory used to create TarEntry or descendant class instance
 668    /// </summary>
 669    protected IEntryFactory entryFactory;
 670
 671    /// <summary>
 672    /// Stream used as the source of input data.
 673    /// </summary>
 674    readonly Stream inputStream;
 675    #endregion
 676  }
 677}
 678
 679/* The original Java file had this header:
 680  ** Authored by Timothy Gerard Endres
 681  ** <mailto:time@gjt.org>  <http://www.trustice.com>
 682  **
 683  ** This work has been placed into the public domain.
 684  ** You may use this work in any way and for any purpose you wish.
 685  **
 686  ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
 687  ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
 688  ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
 689  ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
 690  ** REDISTRIBUTION OF THIS SOFTWARE.
 691  **
 692  */
 693
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_TarOutputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_TarOutputStream.htm new file mode 100644 index 000000000..cdb6ee68e --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_TarOutputStream.htm @@ -0,0 +1,583 @@ + + + + +ICSharpCode.SharpZipLib.Tar.TarOutputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.TarOutputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarOutputStream.cs
Covered lines:81
Uncovered lines:36
Coverable lines:117
Total lines:527
Line coverage:69.2%
Branch coverage:66.6%
+

Metrics

+ + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)287.566.67
Seek(...)100
SetLength(...)100
ReadByte()100
Read(...)100
Flush()1100100
Finish()2100100
Close()210066.67
GetRecordSize()100
PutNextEntry(...)59677.78
CloseEntry()377.7860
WriteByte(...)1100100
Write(...)1059.4668.42
WriteEofBlock()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarOutputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// TarOutputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36// HISTORY
 37//  2012-06-04  Z-1419  Last char of file name was dropped if path length > 100
 38
 39using System;
 40using System.IO;
 41
 42namespace ICSharpCode.SharpZipLib.Tar
 43{
 44
 45  /// <summary>
 46  /// The TarOutputStream writes a UNIX tar archive as an OutputStream.
 47  /// Methods are provided to put entries, and then write their contents
 48  /// by writing to this stream using write().
 49  /// </summary>
 50  /// public
 51  public class TarOutputStream : Stream
 52  {
 53    #region Constructors
 54    /// <summary>
 55    /// Construct TarOutputStream using default block factor
 56    /// </summary>
 57    /// <param name="outputStream">stream to write to</param>
 58    public TarOutputStream(Stream outputStream)
 52159      : this(outputStream, TarBuffer.DefaultBlockFactor)
 60    {
 52161    }
 62
 63    /// <summary>
 64    /// Construct TarOutputStream with user specified block factor
 65    /// </summary>
 66    /// <param name="outputStream">stream to write to</param>
 67    /// <param name="blockFactor">blocking factor</param>
 59168    public TarOutputStream(Stream outputStream, int blockFactor)
 69    {
 59170       if ( outputStream == null )
 71      {
 072        throw new ArgumentNullException(nameof(outputStream));
 73      }
 74
 59175      this.outputStream = outputStream;
 59176      buffer = TarBuffer.CreateOutputTarBuffer(outputStream, blockFactor);
 77
 59178      assemblyBuffer = new byte[TarBuffer.BlockSize];
 59179      blockBuffer  = new byte[TarBuffer.BlockSize];
 59180    }
 81    #endregion
 82
 83        /// <summary>
 84        /// Get/set flag indicating ownership of the underlying stream.
 85        /// When the flag is true <see cref="Close"></see> will close the underlying stream also.
 86        /// </summary>
 87        public bool IsStreamOwner
 88        {
 089            get { return buffer.IsStreamOwner; }
 290            set { buffer.IsStreamOwner = value; }
 91        }
 92
 93    /// <summary>
 94    /// true if the stream supports reading; otherwise, false.
 95    /// </summary>
 96    public override bool CanRead
 97    {
 98      get
 99      {
 0100        return outputStream.CanRead;
 101      }
 102    }
 103
 104    /// <summary>
 105    /// true if the stream supports seeking; otherwise, false.
 106    /// </summary>
 107    public override bool CanSeek
 108    {
 109      get
 110      {
 0111        return outputStream.CanSeek;
 112      }
 113    }
 114
 115    /// <summary>
 116    /// true if stream supports writing; otherwise, false.
 117    /// </summary>
 118    public override bool CanWrite
 119    {
 120      get
 121      {
 0122        return outputStream.CanWrite;
 123      }
 124    }
 125
 126    /// <summary>
 127    /// length of stream in bytes
 128    /// </summary>
 129    public override long Length
 130    {
 131      get
 132      {
 0133        return outputStream.Length;
 134      }
 135    }
 136
 137    /// <summary>
 138    /// gets or sets the position within the current stream.
 139    /// </summary>
 140    public override long Position
 141    {
 142      get
 143      {
 0144        return outputStream.Position;
 145      }
 146      set
 147      {
 0148        outputStream.Position = value;
 0149      }
 150    }
 151
 152    /// <summary>
 153    /// set the position within the current stream
 154    /// </summary>
 155    /// <param name="offset">The offset relative to the <paramref name="origin"/> to seek to</param>
 156    /// <param name="origin">The <see cref="SeekOrigin"/> to seek from.</param>
 157    /// <returns>The new position in the stream.</returns>
 158    public override long Seek(long offset, SeekOrigin origin)
 159    {
 0160      return outputStream.Seek(offset, origin);
 161    }
 162
 163    /// <summary>
 164    /// Set the length of the current stream
 165    /// </summary>
 166    /// <param name="value">The new stream length.</param>
 167    public override void SetLength(long value)
 168    {
 0169      outputStream.SetLength(value);
 0170    }
 171
 172    /// <summary>
 173    /// Read a byte from the stream and advance the position within the stream
 174    /// by one byte or returns -1 if at the end of the stream.
 175    /// </summary>
 176    /// <returns>The byte value or -1 if at end of stream</returns>
 177    public override int ReadByte()
 178    {
 0179      return outputStream.ReadByte();
 180    }
 181
 182    /// <summary>
 183    /// read bytes from the current stream and advance the position within the
 184    /// stream by the number of bytes read.
 185    /// </summary>
 186    /// <param name="buffer">The buffer to store read bytes in.</param>
 187    /// <param name="offset">The index into the buffer to being storing bytes at.</param>
 188    /// <param name="count">The desired number of bytes to read.</param>
 189    /// <returns>The total number of bytes read, or zero if at the end of the stream.
 190    /// The number of bytes may be less than the <paramref name="count">count</paramref>
 191    /// requested if data is not avialable.</returns>
 192    public override int Read(byte[] buffer, int offset, int count)
 193    {
 0194      return outputStream.Read(buffer, offset, count);
 195    }
 196
 197    /// <summary>
 198    /// All buffered data is written to destination
 199    /// </summary>
 200    public override void Flush()
 201    {
 1202      outputStream.Flush();
 1203    }
 204
 205    /// <summary>
 206    /// Ends the TAR archive without closing the underlying OutputStream.
 207    /// The result is that the EOF block of nulls is written.
 208    /// </summary>
 209    public void Finish()
 210    {
 591211       if ( IsEntryOpen )
 212      {
 5213        CloseEntry();
 214      }
 591215      WriteEofBlock();
 591216    }
 217
 218    /// <summary>
 219    /// Ends the TAR archive and closes the underlying OutputStream.
 220    /// </summary>
 221    /// <remarks>This means that Finish() is called followed by calling the
 222    /// TarBuffer's Close().</remarks>
 223    public override void Close()
 224    {
 591225       if ( !isClosed )
 226      {
 591227        isClosed = true;
 591228        Finish();
 591229        buffer.Close();
 230      }
 591231    }
 232
 233    /// <summary>
 234    /// Get the record size being used by this stream's TarBuffer.
 235    /// </summary>
 236    public int RecordSize
 237    {
 1238      get { return buffer.RecordSize; }
 239    }
 240
 241    /// <summary>
 242    /// Get the record size being used by this stream's TarBuffer.
 243    /// </summary>
 244    /// <returns>
 245    /// The TarBuffer record size.
 246    /// </returns>
 247    [Obsolete("Use RecordSize property instead")]
 248    public int GetRecordSize()
 249    {
 0250      return buffer.RecordSize;
 251    }
 252
 253    /// <summary>
 254    /// Get a value indicating wether an entry is open, requiring more data to be written.
 255    /// </summary>
 256    bool IsEntryOpen
 257    {
 591258      get { return (currBytes < currSize); }
 259
 260    }
 261
 262    /// <summary>
 263    /// Put an entry on the output stream. This writes the entry's
 264    /// header and positions the output stream for writing
 265    /// the contents of the entry. Once this method is called, the
 266    /// stream is ready for calls to write() to write the entry's
 267    /// contents. Once the contents are written, closeEntry()
 268    /// <B>MUST</B> be called to ensure that all buffered data
 269    /// is completely written to the output stream.
 270    /// </summary>
 271    /// <param name="entry">
 272    /// The TarEntry to be written to the archive.
 273    /// </param>
 274    public void PutNextEntry(TarEntry entry)
 275    {
 588276       if ( entry == null ) {
 0277        throw new ArgumentNullException(nameof(entry));
 278      }
 279
 588280       if (entry.TarHeader.Name.Length >= TarHeader.NAMELEN) {
 417281        var longHeader = new TarHeader();
 417282        longHeader.TypeFlag = TarHeader.LF_GNU_LONGNAME;
 417283        longHeader.Name = longHeader.Name + "././@LongLink";
 417284        longHeader.UserId = 0;
 417285        longHeader.GroupId = 0;
 417286        longHeader.GroupName = "";
 417287        longHeader.UserName = "";
 417288        longHeader.LinkName = "";
 417289                longHeader.Size = entry.TarHeader.Name.Length + 1;  // Plus one to avoid dropping last char
 290
 417291        longHeader.WriteHeader(blockBuffer);
 417292        buffer.WriteBlock(blockBuffer);  // Add special long filename header block
 293
 417294        int nameCharIndex = 0;
 295
 834296         while (nameCharIndex < entry.TarHeader.Name.Length) {
 417297          Array.Clear(blockBuffer, 0, blockBuffer.Length);
 417298          TarHeader.GetAsciiBytes(entry.TarHeader.Name, nameCharIndex, this.blockBuffer, 0, TarBuffer.BlockSize);
 417299          nameCharIndex += TarBuffer.BlockSize;
 417300          buffer.WriteBlock(blockBuffer);
 301        }
 302      }
 303
 588304      entry.WriteEntryHeader(blockBuffer);
 588305      buffer.WriteBlock(blockBuffer);
 306
 588307      currBytes = 0;
 308
 588309       currSize = entry.IsDirectory ? 0 : entry.Size;
 588310    }
 311
 312    /// <summary>
 313    /// Close an entry. This method MUST be called for all file
 314    /// entries that contain data. The reason is that we must
 315    /// buffer data written to the stream in order to satisfy
 316    /// the buffer's block based writes. Thus, there may be
 317    /// data fragments still being assembled that must be written
 318    /// to the output stream before this entry is closed and the
 319    /// next entry written.
 320    /// </summary>
 321    public void CloseEntry()
 322    {
 5323       if (assemblyBufferLength > 0) {
 5324        Array.Clear(assemblyBuffer, assemblyBufferLength, assemblyBuffer.Length - assemblyBufferLength);
 325
 5326        buffer.WriteBlock(assemblyBuffer);
 327
 5328        currBytes += assemblyBufferLength;
 5329        assemblyBufferLength = 0;
 330      }
 331
 5332       if (currBytes < currSize) {
 0333        string errorText = string.Format(
 0334          "Entry closed at '{0}' before the '{1}' bytes specified in the header were written",
 0335          currBytes, currSize);
 0336        throw new TarException(errorText);
 337      }
 5338    }
 339
 340    /// <summary>
 341    /// Writes a byte to the current tar archive entry.
 342    /// This method simply calls Write(byte[], int, int).
 343    /// </summary>
 344    /// <param name="value">
 345    /// The byte to be written.
 346    /// </param>
 347    public override void WriteByte(byte value)
 348    {
 45349      Write(new byte[] { value }, 0, 1);
 45350    }
 351
 352    /// <summary>
 353    /// Writes bytes to the current tar archive entry. This method
 354    /// is aware of the current entry and will throw an exception if
 355    /// you attempt to write bytes past the length specified for the
 356    /// current entry. The method is also (painfully) aware of the
 357    /// record buffering required by TarBuffer, and manages buffers
 358    /// that are not a multiple of recordsize in length, including
 359    /// assembling records from small buffers.
 360    /// </summary>
 361    /// <param name = "buffer">
 362    /// The buffer to write to the archive.
 363    /// </param>
 364    /// <param name = "offset">
 365    /// The offset in the buffer from which to get bytes.
 366    /// </param>
 367    /// <param name = "count">
 368    /// The number of bytes to write.
 369    /// </param>
 370    public override void Write(byte[] buffer, int offset, int count)
 371    {
 4087372       if ( buffer == null ) {
 0373        throw new ArgumentNullException(nameof(buffer));
 374      }
 375
 4087376       if ( offset < 0 )
 377      {
 378#if NETCF_1_0
 379        throw new ArgumentOutOfRangeException("offset");
 380#else
 0381        throw new ArgumentOutOfRangeException(nameof(offset), "Cannot be negative");
 382#endif
 383      }
 384
 4087385       if ( buffer.Length - offset < count )
 386      {
 0387        throw new ArgumentException("offset and count combination is invalid");
 388      }
 389
 4087390       if ( count < 0 )
 391      {
 392#if NETCF_1_0
 393        throw new ArgumentOutOfRangeException("count");
 394#else
 0395        throw new ArgumentOutOfRangeException(nameof(count), "Cannot be negative");
 396#endif
 397      }
 398
 4087399       if ( (currBytes + count) > currSize ) {
 0400        string errorText = string.Format("request to write '{0}' bytes exceeds size in header of '{1}' bytes",
 0401          count, this.currSize);
 402#if NETCF_1_0
 403        throw new ArgumentOutOfRangeException("count");
 404#else
 0405        throw new ArgumentOutOfRangeException(nameof(count), errorText);
 406#endif
 407      }
 408
 409      //
 410      // We have to deal with assembly!!!
 411      // The programmer can be writing little 32 byte chunks for all
 412      // we know, and we must assemble complete blocks for writing.
 413      // TODO  REVIEW Maybe this should be in TarBuffer? Could that help to
 414      //        eliminate some of the buffer copying.
 415      //
 4087416       if (assemblyBufferLength > 0) {
 40417         if ((assemblyBufferLength + count ) >= blockBuffer.Length) {
 0418          int aLen = blockBuffer.Length - assemblyBufferLength;
 419
 0420          Array.Copy(assemblyBuffer, 0, blockBuffer, 0, assemblyBufferLength);
 0421          Array.Copy(buffer, offset, blockBuffer, assemblyBufferLength, aLen);
 422
 0423          this.buffer.WriteBlock(blockBuffer);
 424
 0425          currBytes += blockBuffer.Length;
 426
 0427          offset    += aLen;
 0428          count -= aLen;
 429
 0430          assemblyBufferLength = 0;
 0431        } else {
 40432          Array.Copy(buffer, offset, assemblyBuffer, assemblyBufferLength, count);
 40433          offset += count;
 40434          assemblyBufferLength += count;
 40435          count -= count;
 436        }
 437      }
 438
 439      //
 440      // When we get here we have EITHER:
 441      //   o An empty "assembly" buffer.
 442      //   o No bytes to write (count == 0)
 443      //
 8129444       while (count > 0) {
 4047445         if (count < blockBuffer.Length) {
 5446          Array.Copy(buffer, offset, assemblyBuffer, assemblyBufferLength, count);
 5447          assemblyBufferLength += count;
 5448          break;
 449        }
 450
 4042451        this.buffer.WriteBlock(buffer, offset);
 452
 4042453        int bufferLength = blockBuffer.Length;
 4042454        currBytes += bufferLength;
 4042455        count -= bufferLength;
 4042456        offset += bufferLength;
 457      }
 4082458    }
 459
 460    /// <summary>
 461    /// Write an EOF (end of archive) block to the tar archive.
 462    /// An EOF block consists of all zeros.
 463    /// </summary>
 464    void WriteEofBlock()
 465    {
 591466      Array.Clear(blockBuffer, 0, blockBuffer.Length);
 591467      buffer.WriteBlock(blockBuffer);
 591468    }
 469
 470    #region Instance Fields
 471    /// <summary>
 472    /// bytes written for this entry so far
 473    /// </summary>
 474    long currBytes;
 475
 476    /// <summary>
 477    /// current 'Assembly' buffer length
 478    /// </summary>
 479    int assemblyBufferLength;
 480
 481    /// <summary>
 482    /// Flag indicating wether this instance has been closed or not.
 483    /// </summary>
 484    bool isClosed;
 485
 486    /// <summary>
 487    /// Size for the current entry
 488    /// </summary>
 489    protected long currSize;
 490
 491    /// <summary>
 492    /// single block working buffer
 493    /// </summary>
 494    protected byte[] blockBuffer;
 495
 496    /// <summary>
 497    /// 'Assembly' buffer used to assemble data before writing
 498    /// </summary>
 499    protected byte[] assemblyBuffer;
 500
 501    /// <summary>
 502    /// TarBuffer used to provide correct blocking factor
 503    /// </summary>
 504    protected TarBuffer buffer;
 505
 506    /// <summary>
 507    /// the destination stream for the archive contents
 508    /// </summary>
 509    protected Stream outputStream;
 510    #endregion
 511  }
 512}
 513
 514/* The original Java file had this header:
 515  ** Authored by Timothy Gerard Endres
 516  ** <mailto:time@gjt.org>  <http://www.trustice.com>
 517  **
 518  ** This work has been placed into the public domain.
 519  ** You may use this work in any way and for any purpose you wish.
 520  **
 521  ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
 522  ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
 523  ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
 524  ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
 525  ** REDISTRIBUTION OF THIS SOFTWARE.
 526  **
 527  */
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_TestStatus.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_TestStatus.htm new file mode 100644 index 000000000..9200bde14 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_TestStatus.htm @@ -0,0 +1,4521 @@ + + + + +ICSharpCode.SharpZipLib.Zip.TestStatus - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.TestStatus
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs
Covered lines:7
Uncovered lines:13
Coverable lines:20
Total lines:4476
Line coverage:35%
+

Metrics

+ + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
AddError()1100100
SetOperation(...)100
SetEntry(...)100
SetBytesTested(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipFile.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-03-02  Z-1650  Fixed updating ODT archives in memory. Exposed exceptions in updating.
 42//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 43//  2012-11-29  Z-1684  Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp
 44
 45using System;
 46using System.Collections;
 47using System.IO;
 48using System.Text;
 49using System.Globalization;
 50
 51#if !NETCF_1_0
 52using System.Security.Cryptography;
 53using ICSharpCode.SharpZipLib.Encryption;
 54#endif
 55
 56using ICSharpCode.SharpZipLib.Core;
 57using ICSharpCode.SharpZipLib.Checksums;
 58using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 59using ICSharpCode.SharpZipLib.Zip.Compression;
 60
 61namespace ICSharpCode.SharpZipLib.Zip
 62{
 63  #region Keys Required Event Args
 64  /// <summary>
 65  /// Arguments used with KeysRequiredEvent
 66  /// </summary>
 67  public class KeysRequiredEventArgs : EventArgs
 68  {
 69    #region Constructors
 70    /// <summary>
 71    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 72    /// </summary>
 73    /// <param name="name">The name of the file for which keys are required.</param>
 74    public KeysRequiredEventArgs(string name)
 75    {
 76      fileName = name;
 77    }
 78
 79    /// <summary>
 80    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 81    /// </summary>
 82    /// <param name="name">The name of the file for which keys are required.</param>
 83    /// <param name="keyValue">The current key value.</param>
 84    public KeysRequiredEventArgs(string name, byte[] keyValue)
 85    {
 86      fileName = name;
 87      key = keyValue;
 88    }
 89
 90    #endregion
 91    #region Properties
 92    /// <summary>
 93    /// Gets the name of the file for which keys are required.
 94    /// </summary>
 95    public string FileName
 96    {
 97      get { return fileName; }
 98    }
 99
 100    /// <summary>
 101    /// Gets or sets the key value
 102    /// </summary>
 103    public byte[] Key
 104    {
 105      get { return key; }
 106      set { key = value; }
 107    }
 108    #endregion
 109
 110    #region Instance Fields
 111    string fileName;
 112    byte[] key;
 113    #endregion
 114  }
 115  #endregion
 116
 117  #region Test Definitions
 118  /// <summary>
 119  /// The strategy to apply to testing.
 120  /// </summary>
 121  public enum TestStrategy
 122  {
 123    /// <summary>
 124    /// Find the first error only.
 125    /// </summary>
 126    FindFirstError,
 127    /// <summary>
 128    /// Find all possible errors.
 129    /// </summary>
 130    FindAllErrors,
 131  }
 132
 133  /// <summary>
 134  /// The operation in progress reported by a <see cref="ZipTestResultHandler"/> during testing.
 135  /// </summary>
 136  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 137  public enum TestOperation
 138  {
 139    /// <summary>
 140    /// Setting up testing.
 141    /// </summary>
 142    Initialising,
 143
 144    /// <summary>
 145    /// Testing an individual entries header
 146    /// </summary>
 147    EntryHeader,
 148
 149    /// <summary>
 150    /// Testing an individual entries data
 151    /// </summary>
 152    EntryData,
 153
 154    /// <summary>
 155    /// Testing an individual entry has completed.
 156    /// </summary>
 157    EntryComplete,
 158
 159    /// <summary>
 160    /// Running miscellaneous tests
 161    /// </summary>
 162    MiscellaneousTests,
 163
 164    /// <summary>
 165    /// Testing is complete
 166    /// </summary>
 167    Complete,
 168  }
 169
 170  /// <summary>
 171  /// Status returned returned by <see cref="ZipTestResultHandler"/> during testing.
 172  /// </summary>
 173  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 174  public class TestStatus
 175  {
 176    #region Constructors
 177    /// <summary>
 178    /// Initialise a new instance of <see cref="TestStatus"/>
 179    /// </summary>
 180    /// <param name="file">The <see cref="ZipFile"/> this status applies to.</param>
 96181    public TestStatus(ZipFile file)
 182    {
 96183      file_ = file;
 96184    }
 185    #endregion
 186
 187    #region Properties
 188
 189    /// <summary>
 190    /// Get the current <see cref="TestOperation"/> in progress.
 191    /// </summary>
 192    public TestOperation Operation
 193    {
 0194      get { return operation_; }
 195    }
 196
 197    /// <summary>
 198    /// Get the <see cref="ZipFile"/> this status is applicable to.
 199    /// </summary>
 200    public ZipFile File
 201    {
 0202      get { return file_; }
 203    }
 204
 205    /// <summary>
 206    /// Get the current/last entry tested.
 207    /// </summary>
 208    public ZipEntry Entry
 209    {
 0210      get { return entry_; }
 211    }
 212
 213    /// <summary>
 214    /// Get the number of errors detected so far.
 215    /// </summary>
 216    public int ErrorCount
 217    {
 96218      get { return errorCount_; }
 219    }
 220
 221    /// <summary>
 222    /// Get the number of bytes tested so far for the current entry.
 223    /// </summary>
 224    public long BytesTested
 225    {
 0226      get { return bytesTested_; }
 227    }
 228
 229    /// <summary>
 230    /// Get a value indicating wether the last entry test was valid.
 231    /// </summary>
 232    public bool EntryValid
 233    {
 0234      get { return entryValid_; }
 235    }
 236    #endregion
 237
 238    #region Internal API
 239    internal void AddError()
 240    {
 1241      errorCount_++;
 1242      entryValid_ = false;
 1243    }
 244
 245    internal void SetOperation(TestOperation operation)
 246    {
 0247      operation_ = operation;
 0248    }
 249
 250    internal void SetEntry(ZipEntry entry)
 251    {
 0252      entry_ = entry;
 0253      entryValid_ = true;
 0254      bytesTested_ = 0;
 0255    }
 256
 257    internal void SetBytesTested(long value)
 258    {
 0259      bytesTested_ = value;
 0260    }
 261    #endregion
 262
 263    #region Instance Fields
 264    ZipFile file_;
 265    ZipEntry entry_;
 266    bool entryValid_;
 267    int errorCount_;
 268    long bytesTested_;
 269    TestOperation operation_;
 270    #endregion
 271  }
 272
 273  /// <summary>
 274  /// Delegate invoked during <see cref="ZipFile.TestArchive(bool, TestStrategy, ZipTestResultHandler)">testing</see> if
 275  /// </summary>
 276  /// <remarks>If the message is non-null an error has occured.  If the message is null
 277  /// the operation as found in <see cref="TestStatus">status</see> has started.</remarks>
 278  public delegate void ZipTestResultHandler(TestStatus status, string message);
 279  #endregion
 280
 281  #region Update Definitions
 282  /// <summary>
 283  /// The possible ways of <see cref="ZipFile.CommitUpdate()">applying updates</see> to an archive.
 284  /// </summary>
 285  public enum FileUpdateMode
 286  {
 287    /// <summary>
 288    /// Perform all updates on temporary files ensuring that the original file is saved.
 289    /// </summary>
 290    Safe,
 291    /// <summary>
 292    /// Update the archive directly, which is faster but less safe.
 293    /// </summary>
 294    Direct,
 295  }
 296  #endregion
 297
 298  #region ZipFile Class
 299  /// <summary>
 300  /// This class represents a Zip archive.  You can ask for the contained
 301  /// entries, or get an input stream for a file entry.  The entry is
 302  /// automatically decompressed.
 303  ///
 304  /// You can also update the archive adding or deleting entries.
 305  ///
 306  /// This class is thread safe for input:  You can open input streams for arbitrary
 307  /// entries in different threads.
 308  /// <br/>
 309  /// <br/>Author of the original java version : Jochen Hoenicke
 310  /// </summary>
 311  /// <example>
 312  /// <code>
 313  /// using System;
 314  /// using System.Text;
 315  /// using System.Collections;
 316  /// using System.IO;
 317  ///
 318  /// using ICSharpCode.SharpZipLib.Zip;
 319  ///
 320  /// class MainClass
 321  /// {
 322  ///   static public void Main(string[] args)
 323  ///   {
 324  ///     using (ZipFile zFile = new ZipFile(args[0])) {
 325  ///       Console.WriteLine("Listing of : " + zFile.Name);
 326  ///       Console.WriteLine("");
 327  ///       Console.WriteLine("Raw Size    Size      Date     Time     Name");
 328  ///       Console.WriteLine("--------  --------  --------  ------  ---------");
 329  ///       foreach (ZipEntry e in zFile) {
 330  ///         if ( e.IsFile ) {
 331  ///           DateTime d = e.DateTime;
 332  ///           Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
 333  ///             d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
 334  ///             e.Name);
 335  ///         }
 336  ///       }
 337  ///     }
 338  ///   }
 339  /// }
 340  /// </code>
 341  /// </example>
 342  public class ZipFile : IEnumerable, IDisposable
 343  {
 344    #region KeyHandling
 345
 346    /// <summary>
 347    /// Delegate for handling keys/password setting during compresion/decompression.
 348    /// </summary>
 349    public delegate void KeysRequiredEventHandler(
 350      object sender,
 351      KeysRequiredEventArgs e
 352    );
 353
 354    /// <summary>
 355    /// Event handler for handling encryption keys.
 356    /// </summary>
 357    public KeysRequiredEventHandler KeysRequired;
 358
 359    /// <summary>
 360    /// Handles getting of encryption keys when required.
 361    /// </summary>
 362    /// <param name="fileName">The file for which encryption keys are required.</param>
 363    void OnKeysRequired(string fileName)
 364    {
 365      if (KeysRequired != null) {
 366        var krea = new KeysRequiredEventArgs(fileName, key);
 367        KeysRequired(this, krea);
 368        key = krea.Key;
 369      }
 370    }
 371
 372    /// <summary>
 373    /// Get/set the encryption key value.
 374    /// </summary>
 375    byte[] Key
 376    {
 377      get { return key; }
 378      set { key = value; }
 379    }
 380
 381#if !NETCF_1_0
 382    /// <summary>
 383    /// Password to be used for encrypting/decrypting files.
 384    /// </summary>
 385    /// <remarks>Set to null if no password is required.</remarks>
 386    public string Password
 387    {
 388      set
 389      {
 390        if ( string.IsNullOrEmpty(value)) {
 391          key = null;
 392        }
 393        else {
 394          rawPassword_ = value;
 395          key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value));
 396        }
 397      }
 398    }
 399#endif
 400
 401    /// <summary>
 402    /// Get a value indicating wether encryption keys are currently available.
 403    /// </summary>
 404    bool HaveKeys
 405    {
 406      get { return key != null; }
 407    }
 408    #endregion
 409
 410    #region Constructors
 411    /// <summary>
 412    /// Opens a Zip file with the given name for reading.
 413    /// </summary>
 414    /// <param name="name">The name of the file to open.</param>
 415    /// <exception cref="ArgumentNullException">The argument supplied is null.</exception>
 416    /// <exception cref="IOException">
 417    /// An i/o error occurs
 418    /// </exception>
 419    /// <exception cref="ZipException">
 420    /// The file doesn't contain a valid zip archive.
 421    /// </exception>
 422    public ZipFile(string name)
 423    {
 424      if ( name == null ) {
 425        throw new ArgumentNullException(nameof(name));
 426      }
 427
 428      name_ = name;
 429
 430      baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 431      isStreamOwner = true;
 432
 433      try {
 434        ReadEntries();
 435      }
 436      catch {
 437        DisposeInternal(true);
 438        throw;
 439      }
 440    }
 441
 442    /// <summary>
 443    /// Opens a Zip file reading the given <see cref="FileStream"/>.
 444    /// </summary>
 445    /// <param name="file">The <see cref="FileStream"/> to read archive data from.</param>
 446    /// <exception cref="ArgumentNullException">The supplied argument is null.</exception>
 447    /// <exception cref="IOException">
 448    /// An i/o error occurs.
 449    /// </exception>
 450    /// <exception cref="ZipException">
 451    /// The file doesn't contain a valid zip archive.
 452    /// </exception>
 453    public ZipFile(FileStream file)
 454    {
 455      if ( file == null ) {
 456        throw new ArgumentNullException(nameof(file));
 457      }
 458
 459      if ( !file.CanSeek ) {
 460        throw new ArgumentException("Stream is not seekable", nameof(file));
 461      }
 462
 463      baseStream_  = file;
 464      name_ = file.Name;
 465      isStreamOwner = true;
 466
 467      try {
 468        ReadEntries();
 469      }
 470      catch {
 471        DisposeInternal(true);
 472        throw;
 473      }
 474    }
 475
 476    /// <summary>
 477    /// Opens a Zip file reading the given <see cref="Stream"/>.
 478    /// </summary>
 479    /// <param name="stream">The <see cref="Stream"/> to read archive data from.</param>
 480    /// <exception cref="IOException">
 481    /// An i/o error occurs
 482    /// </exception>
 483    /// <exception cref="ZipException">
 484    /// The stream doesn't contain a valid zip archive.<br/>
 485    /// </exception>
 486    /// <exception cref="ArgumentException">
 487    /// The <see cref="Stream">stream</see> doesnt support seeking.
 488    /// </exception>
 489    /// <exception cref="ArgumentNullException">
 490    /// The <see cref="Stream">stream</see> argument is null.
 491    /// </exception>
 492    public ZipFile(Stream stream)
 493    {
 494      if ( stream == null ) {
 495        throw new ArgumentNullException(nameof(stream));
 496      }
 497
 498      if ( !stream.CanSeek ) {
 499        throw new ArgumentException("Stream is not seekable", nameof(stream));
 500      }
 501
 502      baseStream_  = stream;
 503      isStreamOwner = true;
 504
 505      if ( baseStream_.Length > 0 ) {
 506        try {
 507          ReadEntries();
 508        }
 509        catch {
 510          DisposeInternal(true);
 511          throw;
 512        }
 513      } else {
 514        entries_ = new ZipEntry[0];
 515        isNewArchive_ = true;
 516      }
 517    }
 518
 519    /// <summary>
 520    /// Initialises a default <see cref="ZipFile"/> instance with no entries and no file storage.
 521    /// </summary>
 522    internal ZipFile()
 523    {
 524      entries_ = new ZipEntry[0];
 525      isNewArchive_ = true;
 526    }
 527
 528    #endregion
 529
 530    #region Destructors and Closing
 531    /// <summary>
 532    /// Finalize this instance.
 533    /// </summary>
 534    ~ZipFile()
 535    {
 536      Dispose(false);
 537    }
 538
 539    /// <summary>
 540    /// Closes the ZipFile.  If the stream is <see cref="IsStreamOwner">owned</see> then this also closes the underlying
 541    /// Once closed, no further instance methods should be called.
 542    /// </summary>
 543    /// <exception cref="System.IO.IOException">
 544    /// An i/o error occurs.
 545    /// </exception>
 546    public void Close()
 547    {
 548      DisposeInternal(true);
 549      GC.SuppressFinalize(this);
 550    }
 551
 552    #endregion
 553
 554    #region Creators
 555    /// <summary>
 556    /// Create a new <see cref="ZipFile"/> whose data will be stored in a file.
 557    /// </summary>
 558    /// <param name="fileName">The name of the archive to create.</param>
 559    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 560    /// <exception cref="ArgumentNullException"><paramref name="fileName"></paramref> is null</exception>
 561    public static ZipFile Create(string fileName)
 562    {
 563      if ( fileName == null ) {
 564        throw new ArgumentNullException(nameof(fileName));
 565      }
 566
 567      FileStream fs = File.Create(fileName);
 568
 569      var result = new ZipFile();
 570      result.name_ = fileName;
 571      result.baseStream_ = fs;
 572      result.isStreamOwner = true;
 573      return result;
 574    }
 575
 576    /// <summary>
 577    /// Create a new <see cref="ZipFile"/> whose data will be stored on a stream.
 578    /// </summary>
 579    /// <param name="outStream">The stream providing data storage.</param>
 580    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 581    /// <exception cref="ArgumentNullException"><paramref name="outStream"> is null</paramref></exception>
 582    /// <exception cref="ArgumentException"><paramref name="outStream"> doesnt support writing.</paramref></exception>
 583    public static ZipFile Create(Stream outStream)
 584    {
 585      if ( outStream == null ) {
 586        throw new ArgumentNullException(nameof(outStream));
 587      }
 588
 589      if ( !outStream.CanWrite ) {
 590        throw new ArgumentException("Stream is not writeable", nameof(outStream));
 591      }
 592
 593      if ( !outStream.CanSeek ) {
 594        throw new ArgumentException("Stream is not seekable", nameof(outStream));
 595      }
 596
 597      var result = new ZipFile();
 598      result.baseStream_ = outStream;
 599      return result;
 600    }
 601
 602    #endregion
 603
 604    #region Properties
 605    /// <summary>
 606    /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance.
 607    /// If the flag is true then the stream will be closed when <see cref="Close">Close</see> is called.
 608    /// </summary>
 609    /// <remarks>
 610    /// The default value is true in all cases.
 611    /// </remarks>
 612    public bool IsStreamOwner
 613    {
 614      get { return isStreamOwner; }
 615      set { isStreamOwner = value; }
 616    }
 617
 618    /// <summary>
 619    /// Get a value indicating wether
 620    /// this archive is embedded in another file or not.
 621    /// </summary>
 622    public bool IsEmbeddedArchive
 623    {
 624      // Not strictly correct in all circumstances currently
 625      get { return offsetOfFirstEntry > 0; }
 626    }
 627
 628    /// <summary>
 629    /// Get a value indicating that this archive is a new one.
 630    /// </summary>
 631    public bool IsNewArchive
 632    {
 633      get { return isNewArchive_; }
 634    }
 635
 636    /// <summary>
 637    /// Gets the comment for the zip file.
 638    /// </summary>
 639    public string ZipFileComment
 640    {
 641      get { return comment_; }
 642    }
 643
 644    /// <summary>
 645    /// Gets the name of this zip file.
 646    /// </summary>
 647    public string Name
 648    {
 649      get { return name_; }
 650    }
 651
 652    /// <summary>
 653    /// Gets the number of entries in this zip file.
 654    /// </summary>
 655    /// <exception cref="InvalidOperationException">
 656    /// The Zip file has been closed.
 657    /// </exception>
 658    [Obsolete("Use the Count property instead")]
 659    public int Size
 660    {
 661      get
 662      {
 663        return entries_.Length;
 664      }
 665    }
 666
 667    /// <summary>
 668    /// Get the number of entries contained in this <see cref="ZipFile"/>.
 669    /// </summary>
 670    public long Count
 671    {
 672      get
 673      {
 674        return entries_.Length;
 675      }
 676    }
 677
 678    /// <summary>
 679    /// Indexer property for ZipEntries
 680    /// </summary>
 681    [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")]
 682    public ZipEntry this[int index]
 683    {
 684      get {
 685        return (ZipEntry) entries_[index].Clone();
 686      }
 687    }
 688
 689    #endregion
 690
 691    #region Input Handling
 692    /// <summary>
 693    /// Gets an enumerator for the Zip entries in this Zip file.
 694    /// </summary>
 695    /// <returns>Returns an <see cref="IEnumerator"/> for this archive.</returns>
 696    /// <exception cref="ObjectDisposedException">
 697    /// The Zip file has been closed.
 698    /// </exception>
 699    public IEnumerator GetEnumerator()
 700    {
 701      if (isDisposed_) {
 702        throw new ObjectDisposedException("ZipFile");
 703      }
 704
 705      return new ZipEntryEnumerator(entries_);
 706    }
 707
 708    /// <summary>
 709    /// Return the index of the entry with a matching name
 710    /// </summary>
 711    /// <param name="name">Entry name to find</param>
 712    /// <param name="ignoreCase">If true the comparison is case insensitive</param>
 713    /// <returns>The index position of the matching entry or -1 if not found</returns>
 714    /// <exception cref="ObjectDisposedException">
 715    /// The Zip file has been closed.
 716    /// </exception>
 717    public int FindEntry(string name, bool ignoreCase)
 718    {
 719      if (isDisposed_) {
 720        throw new ObjectDisposedException("ZipFile");
 721      }
 722
 723      // TODO: This will be slow as the next ice age for huge archives!
 724      for (int i = 0; i < entries_.Length; i++) {
 725        if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) {
 726          return i;
 727        }
 728      }
 729      return -1;
 730    }
 731
 732    /// <summary>
 733    /// Searches for a zip entry in this archive with the given name.
 734    /// String comparisons are case insensitive
 735    /// </summary>
 736    /// <param name="name">
 737    /// The name to find. May contain directory components separated by slashes ('/').
 738    /// </param>
 739    /// <returns>
 740    /// A clone of the zip entry, or null if no entry with that name exists.
 741    /// </returns>
 742    /// <exception cref="ObjectDisposedException">
 743    /// The Zip file has been closed.
 744    /// </exception>
 745    public ZipEntry GetEntry(string name)
 746    {
 747      if (isDisposed_) {
 748        throw new ObjectDisposedException("ZipFile");
 749      }
 750
 751      int index = FindEntry(name, true);
 752      return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null;
 753    }
 754
 755    /// <summary>
 756    /// Gets an input stream for reading the given zip entry data in an uncompressed form.
 757    /// Normally the <see cref="ZipEntry"/> should be an entry returned by GetEntry().
 758    /// </summary>
 759    /// <param name="entry">The <see cref="ZipEntry"/> to obtain a data <see cref="Stream"/> for</param>
 760    /// <returns>An input <see cref="Stream"/> containing data for this <see cref="ZipEntry"/></returns>
 761    /// <exception cref="ObjectDisposedException">
 762    /// The ZipFile has already been closed
 763    /// </exception>
 764    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 765    /// The compression method for the entry is unknown
 766    /// </exception>
 767    /// <exception cref="IndexOutOfRangeException">
 768    /// The entry is not found in the ZipFile
 769    /// </exception>
 770    public Stream GetInputStream(ZipEntry entry)
 771    {
 772      if ( entry == null ) {
 773        throw new ArgumentNullException(nameof(entry));
 774      }
 775
 776      if ( isDisposed_ ) {
 777        throw new ObjectDisposedException("ZipFile");
 778      }
 779
 780      long index = entry.ZipFileIndex;
 781      if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) {
 782        index = FindEntry(entry.Name, true);
 783        if (index < 0) {
 784          throw new ZipException("Entry cannot be found");
 785        }
 786      }
 787      return GetInputStream(index);
 788    }
 789
 790    /// <summary>
 791    /// Creates an input stream reading a zip entry
 792    /// </summary>
 793    /// <param name="entryIndex">The index of the entry to obtain an input stream for.</param>
 794    /// <returns>
 795    /// An input <see cref="Stream"/> containing data for this <paramref name="entryIndex"/>
 796    /// </returns>
 797    /// <exception cref="ObjectDisposedException">
 798    /// The ZipFile has already been closed
 799    /// </exception>
 800    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 801    /// The compression method for the entry is unknown
 802    /// </exception>
 803    /// <exception cref="IndexOutOfRangeException">
 804    /// The entry is not found in the ZipFile
 805    /// </exception>
 806    public Stream GetInputStream(long entryIndex)
 807    {
 808      if ( isDisposed_ ) {
 809        throw new ObjectDisposedException("ZipFile");
 810      }
 811
 812      long start = LocateEntry(entries_[entryIndex]);
 813      CompressionMethod method = entries_[entryIndex].CompressionMethod;
 814      Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize);
 815
 816      if (entries_[entryIndex].IsCrypted == true) {
 817#if NETCF_1_0
 818        throw new ZipException("decryption not supported for Compact Framework 1.0");
 819#else
 820        result = CreateAndInitDecryptionStream(result, entries_[entryIndex]);
 821        if (result == null) {
 822          throw new ZipException("Unable to decrypt this entry");
 823        }
 824#endif
 825      }
 826
 827      switch (method) {
 828        case CompressionMethod.Stored:
 829          // read as is.
 830          break;
 831
 832        case CompressionMethod.Deflated:
 833          // No need to worry about ownership and closing as underlying stream close does nothing.
 834          result = new InflaterInputStream(result, new Inflater(true));
 835          break;
 836
 837        default:
 838          throw new ZipException("Unsupported compression method " + method);
 839      }
 840
 841      return result;
 842    }
 843
 844    #endregion
 845
 846    #region Archive Testing
 847    /// <summary>
 848    /// Test an archive for integrity/validity
 849    /// </summary>
 850    /// <param name="testData">Perform low level data Crc check</param>
 851    /// <returns>true if all tests pass, false otherwise</returns>
 852    /// <remarks>Testing will terminate on the first error found.</remarks>
 853    public bool TestArchive(bool testData)
 854    {
 855      return TestArchive(testData, TestStrategy.FindFirstError, null);
 856    }
 857
 858    /// <summary>
 859    /// Test an archive for integrity/validity
 860    /// </summary>
 861    /// <param name="testData">Perform low level data Crc check</param>
 862    /// <param name="strategy">The <see cref="TestStrategy"></see> to apply.</param>
 863    /// <param name="resultHandler">The <see cref="ZipTestResultHandler"></see> handler to call during testing.</param>
 864    /// <returns>true if all tests pass, false otherwise</returns>
 865    /// <exception cref="ObjectDisposedException">The object has already been closed.</exception>
 866    public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
 867    {
 868      if (isDisposed_) {
 869        throw new ObjectDisposedException("ZipFile");
 870      }
 871
 872      var status = new TestStatus(this);
 873
 874      if ( resultHandler != null ) {
 875        resultHandler(status, null);
 876      }
 877
 878      HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header;
 879
 880      bool testing = true;
 881
 882      try {
 883        int entryIndex = 0;
 884
 885        while ( testing && (entryIndex < Count) ) {
 886          if ( resultHandler != null ) {
 887            status.SetEntry(this[entryIndex]);
 888            status.SetOperation(TestOperation.EntryHeader);
 889            resultHandler(status, null);
 890          }
 891
 892          try  {
 893            TestLocalHeader(this[entryIndex], test);
 894          }
 895          catch(ZipException ex) {
 896            status.AddError();
 897
 898            if ( resultHandler != null ) {
 899              resultHandler(status,
 900                string.Format("Exception during test - '{0}'", ex.Message));
 901            }
 902
 903            testing &= strategy != TestStrategy.FindFirstError;
 904          }
 905
 906          if ( testing && testData && this[entryIndex].IsFile ) {
 907            if ( resultHandler != null ) {
 908              status.SetOperation(TestOperation.EntryData);
 909              resultHandler(status, null);
 910            }
 911
 912                        var crc = new Crc32();
 913
 914                        using (Stream entryStream = this.GetInputStream(this[entryIndex]))
 915                        {
 916
 917                            byte[] buffer = new byte[4096];
 918                            long totalBytes = 0;
 919                            int bytesRead;
 920                            while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0)
 921                            {
 922                                crc.Update(buffer, 0, bytesRead);
 923
 924                                if (resultHandler != null)
 925                                {
 926                                    totalBytes += bytesRead;
 927                                    status.SetBytesTested(totalBytes);
 928                                    resultHandler(status, null);
 929                                }
 930                            }
 931                        }
 932
 933            if (this[entryIndex].Crc != crc.Value) {
 934              status.AddError();
 935
 936              if ( resultHandler != null ) {
 937                resultHandler(status, "CRC mismatch");
 938              }
 939
 940              testing &= strategy != TestStrategy.FindFirstError;
 941            }
 942
 943            if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) {
 944              var helper = new ZipHelperStream(baseStream_);
 945              var data = new DescriptorData();
 946              helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data);
 947              if (this[entryIndex].Crc != data.Crc) {
 948                status.AddError();
 949              }
 950
 951              if (this[entryIndex].CompressedSize != data.CompressedSize) {
 952                status.AddError();
 953              }
 954
 955              if (this[entryIndex].Size != data.Size) {
 956                status.AddError();
 957              }
 958            }
 959          }
 960
 961          if ( resultHandler != null ) {
 962            status.SetOperation(TestOperation.EntryComplete);
 963            resultHandler(status, null);
 964          }
 965
 966          entryIndex += 1;
 967        }
 968
 969        if ( resultHandler != null ) {
 970          status.SetOperation(TestOperation.MiscellaneousTests);
 971          resultHandler(status, null);
 972        }
 973
 974        // TODO: the 'Corrina Johns' test where local headers are missing from
 975        // the central directory.  They are therefore invisible to many archivers.
 976      }
 977      catch (Exception ex) {
 978        status.AddError();
 979
 980        if ( resultHandler != null ) {
 981          resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message));
 982        }
 983      }
 984
 985      if ( resultHandler != null ) {
 986        status.SetOperation(TestOperation.Complete);
 987        status.SetEntry(null);
 988        resultHandler(status, null);
 989      }
 990
 991      return (status.ErrorCount == 0);
 992    }
 993
 994    [Flags]
 995    enum HeaderTest
 996    {
 997      Extract = 0x01,     // Check that this header represents an entry whose data can be extracted
 998      Header  = 0x02,     // Check that this header contents are valid
 999    }
 1000
 1001    /// <summary>
 1002    /// Test a local header against that provided from the central directory
 1003    /// </summary>
 1004    /// <param name="entry">
 1005    /// The entry to test against
 1006    /// </param>
 1007    /// <param name="tests">The type of <see cref="HeaderTest">tests</see> to carry out.</param>
 1008    /// <returns>The offset of the entries data in the file</returns>
 1009    long TestLocalHeader(ZipEntry entry, HeaderTest tests)
 1010    {
 1011      lock(baseStream_)
 1012      {
 1013        bool testHeader = (tests & HeaderTest.Header) != 0;
 1014        bool testData = (tests & HeaderTest.Extract) != 0;
 1015
 1016        baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin);
 1017        if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) {
 1018          throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)
 1019        }
 1020
 1021        var extractVersion = ( short ) (ReadLEUshort() & 0x00ff);
 1022        var localFlags = ( short )ReadLEUshort();
 1023        var compressionMethod = ( short )ReadLEUshort();
 1024        var fileTime = ( short )ReadLEUshort();
 1025        var fileDate = ( short )ReadLEUshort();
 1026        uint crcValue = ReadLEUint();
 1027        long compressedSize = ReadLEUint();
 1028        long size = ReadLEUint();
 1029        int storedNameLength = ReadLEUshort();
 1030        int extraDataLength = ReadLEUshort();
 1031
 1032        byte[] nameData = new byte[storedNameLength];
 1033        StreamUtils.ReadFully(baseStream_, nameData);
 1034
 1035        byte[] extraData = new byte[extraDataLength];
 1036        StreamUtils.ReadFully(baseStream_, extraData);
 1037
 1038        var localExtraData = new ZipExtraData(extraData);
 1039
 1040        // Extra data / zip64 checks
 1041        if (localExtraData.Find(1))
 1042        {
 1043          // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64
 1044          // and size or compressedSize = MaxValue, due to rogue creators.
 1045
 1046          size = localExtraData.ReadLong();
 1047          compressedSize = localExtraData.ReadLong();
 1048
 1049                    if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0)
 1050                    {
 1051                        // These may be valid if patched later
 1052                        if ( (size != -1) && (size != entry.Size)) {
 1053                            throw new ZipException("Size invalid for descriptor");
 1054                        }
 1055
 1056                        if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) {
 1057                            throw new ZipException("Compressed size invalid for descriptor");
 1058                        }
 1059                    }
 1060                }
 1061        else
 1062        {
 1063          // No zip64 extra data but entry requires it.
 1064          if ((extractVersion >= ZipConstants.VersionZip64) &&
 1065            (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue)))
 1066          {
 1067            throw new ZipException("Required Zip64 extended information missing");
 1068          }
 1069        }
 1070
 1071        if ( testData ) {
 1072          if ( entry.IsFile ) {
 1073            if ( !entry.IsCompressionMethodSupported() ) {
 1074              throw new ZipException("Compression method not supported");
 1075            }
 1076
 1077            if ( (extractVersion > ZipConstants.VersionMadeBy)
 1078              || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) {
 1079              throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extract
 1080            }
 1081
 1082            if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.Enha
 1083              throw new ZipException("The library does not support the zip version required to extract this entry");
 1084            }
 1085          }
 1086        }
 1087
 1088                if (testHeader)
 1089                {
 1090                    if ((extractVersion <= 63) &&  // Ignore later versions as we dont know about them..
 1091                        (extractVersion != 10) &&
 1092                        (extractVersion != 11) &&
 1093                        (extractVersion != 20) &&
 1094                        (extractVersion != 21) &&
 1095                        (extractVersion != 25) &&
 1096                        (extractVersion != 27) &&
 1097                        (extractVersion != 45) &&
 1098                        (extractVersion != 46) &&
 1099                        (extractVersion != 50) &&
 1100                        (extractVersion != 51) &&
 1101                        (extractVersion != 52) &&
 1102                        (extractVersion != 61) &&
 1103                        (extractVersion != 62) &&
 1104                        (extractVersion != 63)
 1105                        )
 1106                    {
 1107                        throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", 
 1108                    }
 1109
 1110                    // Local entry flags dont have reserved bit set on.
 1111                    if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | General
 1112                    {
 1113                        throw new ZipException("Reserved bit flags cannot be set.");
 1114                    }
 1115
 1116                    // Encryption requires extract version >= 20
 1117                    if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20))
 1118                    {
 1119                        throw new ZipException(string.Format("Version required to extract this entry is too low for encr
 1120                    }
 1121
 1122                    // Strong encryption requires encryption flag to be set and extract version >= 50.
 1123                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1124                    {
 1125                        if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0)
 1126                        {
 1127                            throw new ZipException("Strong encryption flag set but encryption flag is not set");
 1128                        }
 1129
 1130                        if (extractVersion < 50)
 1131                        {
 1132                            throw new ZipException(string.Format("Version required to extract this entry is too low for 
 1133                        }
 1134                    }
 1135
 1136                    // Patched entries require extract version >= 27
 1137                    if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27))
 1138                    {
 1139                        throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractV
 1140                    }
 1141
 1142                    // Central header flags match local entry flags.
 1143                    if (localFlags != entry.Flags)
 1144                    {
 1145                        throw new ZipException("Central header/local header flags mismatch");
 1146                    }
 1147
 1148                    // Central header compression method matches local entry
 1149                    if (entry.CompressionMethod != (CompressionMethod)compressionMethod)
 1150                    {
 1151                        throw new ZipException("Central header/local header compression method mismatch");
 1152                    }
 1153
 1154                    if (entry.Version != extractVersion)
 1155                    {
 1156                        throw new ZipException("Extract version mismatch");
 1157                    }
 1158
 1159                    // Strong encryption and extract version match
 1160                    if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1161                    {
 1162                        if (extractVersion < 62)
 1163                        {
 1164                            throw new ZipException("Strong encryption flag set but version not high enough");
 1165                        }
 1166                    }
 1167
 1168                    if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0)
 1169                    {
 1170                        if ((fileTime != 0) || (fileDate != 0))
 1171                        {
 1172                            throw new ZipException("Header masked set but date/time values non-zero");
 1173                        }
 1174                    }
 1175
 1176                    if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0)
 1177                    {
 1178                        if (crcValue != (uint)entry.Crc)
 1179                        {
 1180                            throw new ZipException("Central header/local header crc mismatch");
 1181                        }
 1182                    }
 1183
 1184                    // Crc valid for empty entry.
 1185                    // This will also apply to streamed entries where size isnt known and the header cant be patched
 1186                    if ((size == 0) && (compressedSize == 0))
 1187                    {
 1188                        if (crcValue != 0)
 1189                        {
 1190                            throw new ZipException("Invalid CRC for empty entry");
 1191                        }
 1192                    }
 1193
 1194                    // TODO: make test more correct...  can't compare lengths as was done originally as this can fail fo
 1195                    // Assuming a code page at this point is not valid?  Best is to store the name length in the ZipEntr
 1196                    if (entry.Name.Length > storedNameLength)
 1197                    {
 1198                        throw new ZipException("File name length mismatch");
 1199                    }
 1200
 1201                    // Name data has already been read convert it and compare.
 1202                    string localName = ZipConstants.ConvertToStringExt(localFlags, nameData);
 1203
 1204                    // Central directory and local entry name match
 1205                    if (localName != entry.Name)
 1206                    {
 1207                        throw new ZipException("Central header and local header file name mismatch");
 1208                    }
 1209
 1210                    // Directories have zero actual size but can have compressed size
 1211                    if (entry.IsDirectory)
 1212                    {
 1213                        if (size > 0)
 1214                        {
 1215                            throw new ZipException("Directory cannot have size");
 1216                        }
 1217
 1218                        // There may be other cases where the compressed size can be greater than this?
 1219                        // If so until details are known we will be strict.
 1220                        if (entry.IsCrypted)
 1221                        {
 1222                            if (compressedSize > ZipConstants.CryptoHeaderSize + 2)
 1223                            {
 1224                                throw new ZipException("Directory compressed size invalid");
 1225                            }
 1226                        }
 1227                        else if (compressedSize > 2)
 1228                        {
 1229                            // When not compressed the directory size can validly be 2 bytes
 1230                            // if the true size wasnt known when data was originally being written.
 1231                            // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes
 1232                            throw new ZipException("Directory compressed size invalid");
 1233                        }
 1234                    }
 1235
 1236                    if (!ZipNameTransform.IsValidName(localName, true))
 1237                    {
 1238                        throw new ZipException("Name is invalid");
 1239                    }
 1240                }
 1241
 1242        // Tests that apply to both data and header.
 1243
 1244        // Size can be verified only if it is known in the local header.
 1245        // it will always be known in the central header.
 1246        if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) ||
 1247          ((size > 0) || (compressedSize > 0))) {
 1248
 1249          if (size != entry.Size) {
 1250            throw new ZipException(
 1251              string.Format("Size mismatch between central header({0}) and local header({1})",
 1252                entry.Size, size));
 1253          }
 1254
 1255          if (compressedSize != entry.CompressedSize &&
 1256            compressedSize != 0xFFFFFFFF && compressedSize != -1) {
 1257            throw new ZipException(
 1258              string.Format("Compressed size mismatch between central header({0}) and local header({1})",
 1259              entry.CompressedSize, compressedSize));
 1260          }
 1261        }
 1262
 1263        int extraLength = storedNameLength + extraDataLength;
 1264        return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength;
 1265      }
 1266    }
 1267
 1268    #endregion
 1269
 1270    #region Updating
 1271
 1272    const int DefaultBufferSize = 4096;
 1273
 1274    /// <summary>
 1275    /// The kind of update to apply.
 1276    /// </summary>
 1277    enum UpdateCommand
 1278    {
 1279      Copy,       // Copy original file contents.
 1280      Modify,     // Change encryption, compression, attributes, name, time etc, of an existing file.
 1281      Add,        // Add a new file to the archive.
 1282    }
 1283
 1284    #region Properties
 1285    /// <summary>
 1286    /// Get / set the <see cref="INameTransform"/> to apply to names when updating.
 1287    /// </summary>
 1288    public INameTransform NameTransform
 1289    {
 1290      get {
 1291        return updateEntryFactory_.NameTransform;
 1292      }
 1293
 1294      set {
 1295        updateEntryFactory_.NameTransform = value;
 1296      }
 1297    }
 1298
 1299    /// <summary>
 1300    /// Get/set the <see cref="IEntryFactory"/> used to generate <see cref="ZipEntry"/> values
 1301    /// during updates.
 1302    /// </summary>
 1303    public IEntryFactory EntryFactory
 1304    {
 1305      get {
 1306        return updateEntryFactory_;
 1307      }
 1308
 1309      set {
 1310        if (value == null) {
 1311          updateEntryFactory_ = new ZipEntryFactory();
 1312        }
 1313        else {
 1314          updateEntryFactory_ = value;
 1315        }
 1316      }
 1317    }
 1318
 1319    /// <summary>
 1320    /// Get /set the buffer size to be used when updating this zip file.
 1321    /// </summary>
 1322    public int BufferSize
 1323    {
 1324      get { return bufferSize_; }
 1325      set {
 1326        if ( value < 1024 ) {
 1327#if NETCF_1_0
 1328          throw new ArgumentOutOfRangeException("value");
 1329#else
 1330          throw new ArgumentOutOfRangeException(nameof(value), "cannot be below 1024");
 1331#endif
 1332        }
 1333
 1334        if ( bufferSize_ != value ) {
 1335          bufferSize_ = value;
 1336          copyBuffer_ = null;
 1337        }
 1338      }
 1339    }
 1340
 1341    /// <summary>
 1342    /// Get a value indicating an update has <see cref="BeginUpdate()">been started</see>.
 1343    /// </summary>
 1344    public bool IsUpdating
 1345    {
 1346      get { return updates_ != null; }
 1347    }
 1348
 1349    /// <summary>
 1350    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 1351    /// </summary>
 1352    public UseZip64 UseZip64
 1353    {
 1354      get { return useZip64_; }
 1355      set { useZip64_ = value; }
 1356    }
 1357
 1358    #endregion
 1359
 1360    #region Immediate updating
 1361//    TBD: Direct form of updating
 1362//
 1363//    public void Update(IEntryMatcher deleteMatcher)
 1364//    {
 1365//    }
 1366//
 1367//    public void Update(IScanner addScanner)
 1368//    {
 1369//    }
 1370    #endregion
 1371
 1372    #region Deferred Updating
 1373    /// <summary>
 1374    /// Begin updating this <see cref="ZipFile"/> archive.
 1375    /// </summary>
 1376    /// <param name="archiveStorage">The <see cref="IArchiveStorage">archive storage</see> for use during the update.</p
 1377    /// <param name="dataSource">The <see cref="IDynamicDataSource">data source</see> to utilise during updating.</param
 1378    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1379    /// <exception cref="ArgumentNullException">One of the arguments provided is null</exception>
 1380    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1381    public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
 1382    {
 1383      if ( archiveStorage == null ) {
 1384        throw new ArgumentNullException(nameof(archiveStorage));
 1385      }
 1386
 1387      if ( dataSource == null ) {
 1388        throw new ArgumentNullException(nameof(dataSource));
 1389      }
 1390
 1391      if ( isDisposed_ ) {
 1392        throw new ObjectDisposedException("ZipFile");
 1393      }
 1394
 1395      if ( IsEmbeddedArchive ) {
 1396        throw new ZipException ("Cannot update embedded/SFX archives");
 1397      }
 1398
 1399      archiveStorage_ = archiveStorage;
 1400      updateDataSource_ = dataSource;
 1401
 1402      // NOTE: the baseStream_ may not currently support writing or seeking.
 1403
 1404      updateIndex_ = new Hashtable();
 1405
 1406      updates_ = new ArrayList(entries_.Length);
 1407      foreach(ZipEntry entry in entries_) {
 1408        int index = updates_.Add(new ZipUpdate(entry));
 1409        updateIndex_.Add(entry.Name, index);
 1410      }
 1411
 1412      // We must sort by offset before using offset's calculated sizes
 1413      updates_.Sort(new UpdateComparer());
 1414
 1415      int idx = 0;
 1416      foreach (ZipUpdate update in updates_) {
 1417        //If last entry, there is no next entry offset to use
 1418        if (idx == updates_.Count - 1)
 1419          break;
 1420
 1421        update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset;
 1422        idx++;
 1423      }
 1424      updateCount_ = updates_.Count;
 1425
 1426      contentsEdited_ = false;
 1427      commentEdited_ = false;
 1428      newComment_ = null;
 1429    }
 1430
 1431    /// <summary>
 1432    /// Begin updating to this <see cref="ZipFile"/> archive.
 1433    /// </summary>
 1434    /// <param name="archiveStorage">The storage to use during the update.</param>
 1435    public void BeginUpdate(IArchiveStorage archiveStorage)
 1436    {
 1437      BeginUpdate(archiveStorage, new DynamicDiskDataSource());
 1438    }
 1439
 1440    /// <summary>
 1441    /// Begin updating this <see cref="ZipFile"/> archive.
 1442    /// </summary>
 1443    /// <seealso cref="BeginUpdate(IArchiveStorage)"/>
 1444    /// <seealso cref="CommitUpdate"></seealso>
 1445    /// <seealso cref="AbortUpdate"></seealso>
 1446    public void BeginUpdate()
 1447    {
 1448      if ( Name == null ) {
 1449        BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource());
 1450      }
 1451      else {
 1452        BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource());
 1453      }
 1454    }
 1455
 1456    /// <summary>
 1457    /// Commit current updates, updating this archive.
 1458    /// </summary>
 1459    /// <seealso cref="BeginUpdate()"></seealso>
 1460    /// <seealso cref="AbortUpdate"></seealso>
 1461    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1462    public void CommitUpdate()
 1463    {
 1464      if ( isDisposed_ ) {
 1465        throw new ObjectDisposedException("ZipFile");
 1466      }
 1467
 1468      CheckUpdating();
 1469
 1470      try {
 1471        updateIndex_.Clear();
 1472        updateIndex_=null;
 1473
 1474        if( contentsEdited_ ) {
 1475          RunUpdates();
 1476        }
 1477        else if( commentEdited_ ) {
 1478          UpdateCommentOnly();
 1479        }
 1480        else {
 1481          // Create an empty archive if none existed originally.
 1482          if( entries_.Length==0 ) {
 1483            byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_);
 1484            using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) {
 1485              zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment);
 1486            }
 1487          }
 1488        }
 1489
 1490      }
 1491      finally {
 1492        PostUpdateCleanup();
 1493      }
 1494    }
 1495
 1496    /// <summary>
 1497    /// Abort updating leaving the archive unchanged.
 1498    /// </summary>
 1499    /// <seealso cref="BeginUpdate()"></seealso>
 1500    /// <seealso cref="CommitUpdate"></seealso>
 1501    public void AbortUpdate()
 1502    {
 1503      PostUpdateCleanup();
 1504    }
 1505
 1506    /// <summary>
 1507    /// Set the file comment to be recorded when the current update is <see cref="CommitUpdate">commited</see>.
 1508    /// </summary>
 1509    /// <param name="comment">The comment to record.</param>
 1510    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1511    public void SetComment(string comment)
 1512    {
 1513      if ( isDisposed_ ) {
 1514        throw new ObjectDisposedException("ZipFile");
 1515      }
 1516
 1517      CheckUpdating();
 1518
 1519      newComment_ = new ZipString(comment);
 1520
 1521      if ( newComment_.RawLength  > 0xffff ) {
 1522        newComment_ = null;
 1523        throw new ZipException("Comment length exceeds maximum - 65535");
 1524      }
 1525
 1526      // We dont take account of the original and current comment appearing to be the same
 1527      // as encoding may be different.
 1528      commentEdited_ = true;
 1529    }
 1530
 1531    #endregion
 1532
 1533    #region Adding Entries
 1534
 1535    void AddUpdate(ZipUpdate update)
 1536    {
 1537      contentsEdited_ = true;
 1538
 1539      int index = FindExistingUpdate(update.Entry.Name);
 1540
 1541      if (index >= 0) {
 1542        if ( updates_[index] == null ) {
 1543          updateCount_ += 1;
 1544        }
 1545
 1546        // Direct replacement is faster than delete and add.
 1547        updates_[index] = update;
 1548      }
 1549      else {
 1550        index = updates_.Add(update);
 1551        updateCount_ += 1;
 1552        updateIndex_.Add(update.Entry.Name, index);
 1553      }
 1554    }
 1555
 1556    /// <summary>
 1557    /// Add a new entry to the archive.
 1558    /// </summary>
 1559    /// <param name="fileName">The name of the file to add.</param>
 1560    /// <param name="compressionMethod">The compression method to use.</param>
 1561    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comment for this entry.</param>
 1562    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1563    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1564    /// <exception cref="ArgumentOutOfRangeException">Compression method is not supported.</exception>
 1565    public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText )
 1566    {
 1567      if (fileName == null) {
 1568        throw new ArgumentNullException(nameof(fileName));
 1569      }
 1570
 1571      if ( isDisposed_ ) {
 1572        throw new ObjectDisposedException("ZipFile");
 1573      }
 1574
 1575      if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) {
 1576        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1577      }
 1578
 1579      CheckUpdating();
 1580      contentsEdited_ = true;
 1581
 1582      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1583      entry.IsUnicodeText = useUnicodeText;
 1584      entry.CompressionMethod = compressionMethod;
 1585
 1586      AddUpdate(new ZipUpdate(fileName, entry));
 1587    }
 1588
 1589    /// <summary>
 1590    /// Add a new entry to the archive.
 1591    /// </summary>
 1592    /// <param name="fileName">The name of the file to add.</param>
 1593    /// <param name="compressionMethod">The compression method to use.</param>
 1594    /// <exception cref="ArgumentNullException">ZipFile has been closed.</exception>
 1595    /// <exception cref="ArgumentOutOfRangeException">The compression method is not supported.</exception>
 1596    public void Add(string fileName, CompressionMethod compressionMethod)
 1597    {
 1598      if ( fileName == null ) {
 1599        throw new ArgumentNullException(nameof(fileName));
 1600      }
 1601
 1602      if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) {
 1603        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1604      }
 1605
 1606      CheckUpdating();
 1607      contentsEdited_ = true;
 1608
 1609      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 1610      entry.CompressionMethod = compressionMethod;
 1611      AddUpdate(new ZipUpdate(fileName, entry));
 1612    }
 1613
 1614    /// <summary>
 1615    /// Add a file to the archive.
 1616    /// </summary>
 1617    /// <param name="fileName">The name of the file to add.</param>
 1618    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1619    public void Add(string fileName)
 1620    {
 1621      if ( fileName == null ) {
 1622        throw new ArgumentNullException(nameof(fileName));
 1623      }
 1624
 1625      CheckUpdating();
 1626      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName)));
 1627    }
 1628
 1629    /// <summary>
 1630    /// Add a file to the archive.
 1631    /// </summary>
 1632    /// <param name="fileName">The name of the file to add.</param>
 1633    /// <param name="entryName">The name to use for the <see cref="ZipEntry"/> on the Zip file created.</param>
 1634    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1635    public void Add(string fileName, string entryName)
 1636    {
 1637      if (fileName == null) {
 1638        throw new ArgumentNullException(nameof(fileName));
 1639      }
 1640
 1641      if ( entryName == null ) {
 1642        throw new ArgumentNullException(nameof(entryName));
 1643      }
 1644
 1645      CheckUpdating();
 1646      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true)));
 1647    }
 1648
 1649
 1650    /// <summary>
 1651    /// Add a file entry with data.
 1652    /// </summary>
 1653    /// <param name="dataSource">The source of the data for this entry.</param>
 1654    /// <param name="entryName">The name to give to the entry.</param>
 1655    public void Add(IStaticDataSource dataSource, string entryName)
 1656    {
 1657      if ( dataSource == null ) {
 1658        throw new ArgumentNullException(nameof(dataSource));
 1659      }
 1660
 1661      if ( entryName == null ) {
 1662        throw new ArgumentNullException(nameof(entryName));
 1663      }
 1664
 1665      CheckUpdating();
 1666      AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false)));
 1667    }
 1668
 1669    /// <summary>
 1670    /// Add a file entry with data.
 1671    /// </summary>
 1672    /// <param name="dataSource">The source of the data for this entry.</param>
 1673    /// <param name="entryName">The name to give to the entry.</param>
 1674    /// <param name="compressionMethod">The compression method to use.</param>
 1675    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 1676    {
 1677      if ( dataSource == null ) {
 1678        throw new ArgumentNullException(nameof(dataSource));
 1679      }
 1680
 1681      if ( entryName == null ) {
 1682        throw new ArgumentNullException(nameof(entryName));
 1683      }
 1684
 1685      CheckUpdating();
 1686
 1687      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1688      entry.CompressionMethod = compressionMethod;
 1689
 1690      AddUpdate(new ZipUpdate(dataSource, entry));
 1691    }
 1692
 1693    /// <summary>
 1694    /// Add a file entry with data.
 1695    /// </summary>
 1696    /// <param name="dataSource">The source of the data for this entry.</param>
 1697    /// <param name="entryName">The name to give to the entry.</param>
 1698    /// <param name="compressionMethod">The compression method to use.</param>
 1699    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comments for this entry.</param>
 1700    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicode
 1701    {
 1702      if (dataSource == null) {
 1703        throw new ArgumentNullException(nameof(dataSource));
 1704      }
 1705
 1706      if ( entryName == null ) {
 1707        throw new ArgumentNullException(nameof(entryName));
 1708      }
 1709
 1710      CheckUpdating();
 1711
 1712      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 1713      entry.IsUnicodeText = useUnicodeText;
 1714      entry.CompressionMethod = compressionMethod;
 1715
 1716      AddUpdate(new ZipUpdate(dataSource, entry));
 1717    }
 1718
 1719    /// <summary>
 1720    /// Add a <see cref="ZipEntry"/> that contains no data.
 1721    /// </summary>
 1722    /// <param name="entry">The entry to add.</param>
 1723    /// <remarks>This can be used to add directories, volume labels, or empty file entries.</remarks>
 1724    public void Add(ZipEntry entry)
 1725    {
 1726      if ( entry == null ) {
 1727        throw new ArgumentNullException(nameof(entry));
 1728      }
 1729
 1730      CheckUpdating();
 1731
 1732      if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) {
 1733        throw new ZipException("Entry cannot have any data");
 1734      }
 1735
 1736      AddUpdate(new ZipUpdate(UpdateCommand.Add, entry));
 1737    }
 1738
 1739    /// <summary>
 1740    /// Add a directory entry to the archive.
 1741    /// </summary>
 1742    /// <param name="directoryName">The directory to add.</param>
 1743    public void AddDirectory(string directoryName)
 1744    {
 1745      if ( directoryName == null ) {
 1746        throw new ArgumentNullException(nameof(directoryName));
 1747      }
 1748
 1749      CheckUpdating();
 1750
 1751      ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName);
 1752      AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry));
 1753    }
 1754
 1755    #endregion
 1756
 1757    #region Modifying Entries
 1758/* Modify not yet ready for public consumption.
 1759   Direct modification of an entry should not overwrite original data before its read.
 1760   Safe mode is trivial in this sense.
 1761    public void Modify(ZipEntry original, ZipEntry updated)
 1762    {
 1763      if ( original == null ) {
 1764        throw new ArgumentNullException("original");
 1765      }
 1766
 1767      if ( updated == null ) {
 1768        throw new ArgumentNullException("updated");
 1769      }
 1770
 1771      CheckUpdating();
 1772      contentsEdited_ = true;
 1773      updates_.Add(new ZipUpdate(original, updated));
 1774    }
 1775*/
 1776    #endregion
 1777
 1778    #region Deleting Entries
 1779    /// <summary>
 1780    /// Delete an entry by name
 1781    /// </summary>
 1782    /// <param name="fileName">The filename to delete</param>
 1783    /// <returns>True if the entry was found and deleted; false otherwise.</returns>
 1784    public bool Delete(string fileName)
 1785    {
 1786      if ( fileName == null ) {
 1787        throw new ArgumentNullException(nameof(fileName));
 1788      }
 1789
 1790      CheckUpdating();
 1791
 1792      bool result = false;
 1793      int index = FindExistingUpdate(fileName);
 1794      if ( (index >= 0) && (updates_[index] != null) ) {
 1795        result = true;
 1796        contentsEdited_ = true;
 1797        updates_[index] = null;
 1798        updateCount_ -= 1;
 1799      }
 1800      else {
 1801        throw new ZipException("Cannot find entry to delete");
 1802      }
 1803      return result;
 1804    }
 1805
 1806    /// <summary>
 1807    /// Delete a <see cref="ZipEntry"/> from the archive.
 1808    /// </summary>
 1809    /// <param name="entry">The entry to delete.</param>
 1810    public void Delete(ZipEntry entry)
 1811    {
 1812      if ( entry == null ) {
 1813        throw new ArgumentNullException(nameof(entry));
 1814      }
 1815
 1816      CheckUpdating();
 1817
 1818      int index = FindExistingUpdate(entry);
 1819      if ( index >= 0 ) {
 1820        contentsEdited_ = true;
 1821        updates_[index] = null;
 1822        updateCount_ -= 1;
 1823      }
 1824      else {
 1825        throw new ZipException("Cannot find entry to delete");
 1826      }
 1827    }
 1828
 1829    #endregion
 1830
 1831    #region Update Support
 1832
 1833    #region Writing Values/Headers
 1834    void WriteLEShort(int value)
 1835    {
 1836      baseStream_.WriteByte(( byte )(value & 0xff));
 1837      baseStream_.WriteByte(( byte )((value >> 8) & 0xff));
 1838    }
 1839
 1840    /// <summary>
 1841    /// Write an unsigned short in little endian byte order.
 1842    /// </summary>
 1843    void WriteLEUshort(ushort value)
 1844    {
 1845      baseStream_.WriteByte(( byte )(value & 0xff));
 1846      baseStream_.WriteByte(( byte )(value >> 8));
 1847    }
 1848
 1849    /// <summary>
 1850    /// Write an int in little endian byte order.
 1851    /// </summary>
 1852    void WriteLEInt(int value)
 1853    {
 1854      WriteLEShort(value & 0xffff);
 1855      WriteLEShort(value >> 16);
 1856    }
 1857
 1858    /// <summary>
 1859    /// Write an unsigned int in little endian byte order.
 1860    /// </summary>
 1861    void WriteLEUint(uint value)
 1862    {
 1863      WriteLEUshort((ushort)(value & 0xffff));
 1864      WriteLEUshort((ushort)(value >> 16));
 1865    }
 1866
 1867    /// <summary>
 1868    /// Write a long in little endian byte order.
 1869    /// </summary>
 1870    void WriteLeLong(long value)
 1871    {
 1872      WriteLEInt(( int )(value & 0xffffffff));
 1873      WriteLEInt(( int )(value >> 32));
 1874    }
 1875
 1876    void WriteLEUlong(ulong value)
 1877    {
 1878      WriteLEUint(( uint )(value & 0xffffffff));
 1879      WriteLEUint(( uint )(value >> 32));
 1880    }
 1881
 1882    void WriteLocalEntryHeader(ZipUpdate update)
 1883    {
 1884      ZipEntry entry = update.OutEntry;
 1885
 1886      // TODO: Local offset will require adjusting for multi-disk zip files.
 1887      entry.Offset = baseStream_.Position;
 1888
 1889      // TODO: Need to clear any entry flags that dont make sense or throw an exception here.
 1890      if (update.Command != UpdateCommand.Copy) {
 1891        if (entry.CompressionMethod == CompressionMethod.Deflated) {
 1892          if (entry.Size == 0) {
 1893            // No need to compress - no data.
 1894            entry.CompressedSize = entry.Size;
 1895            entry.Crc = 0;
 1896            entry.CompressionMethod = CompressionMethod.Stored;
 1897          }
 1898        }
 1899        else if (entry.CompressionMethod == CompressionMethod.Stored) {
 1900          entry.Flags &= ~(int)GeneralBitFlags.Descriptor;
 1901        }
 1902
 1903        if (HaveKeys) {
 1904          entry.IsCrypted = true;
 1905          if (entry.Crc < 0) {
 1906            entry.Flags |= (int)GeneralBitFlags.Descriptor;
 1907          }
 1908        }
 1909        else {
 1910          entry.IsCrypted = false;
 1911        }
 1912
 1913        switch (useZip64_) {
 1914          case UseZip64.Dynamic:
 1915            if (entry.Size < 0) {
 1916              entry.ForceZip64();
 1917            }
 1918            break;
 1919
 1920          case UseZip64.On:
 1921            entry.ForceZip64();
 1922            break;
 1923
 1924          case UseZip64.Off:
 1925            // Do nothing.  The entry itself may be using Zip64 independantly.
 1926            break;
 1927        }
 1928      }
 1929
 1930      // Write the local file header
 1931      WriteLEInt(ZipConstants.LocalHeaderSignature);
 1932
 1933      WriteLEShort(entry.Version);
 1934      WriteLEShort(entry.Flags);
 1935
 1936      WriteLEShort((byte)entry.CompressionMethod);
 1937      WriteLEInt(( int )entry.DosTime);
 1938
 1939      if ( !entry.HasCrc ) {
 1940        // Note patch address for updating CRC later.
 1941        update.CrcPatchOffset = baseStream_.Position;
 1942        WriteLEInt(( int )0);
 1943      }
 1944      else {
 1945        WriteLEInt(unchecked(( int )entry.Crc));
 1946      }
 1947
 1948      if (entry.LocalHeaderRequiresZip64) {
 1949        WriteLEInt(-1);
 1950        WriteLEInt(-1);
 1951      }
 1952      else {
 1953        if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) {
 1954          update.SizePatchOffset = baseStream_.Position;
 1955        }
 1956
 1957        WriteLEInt(( int )entry.CompressedSize);
 1958        WriteLEInt(( int )entry.Size);
 1959      }
 1960
 1961      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 1962
 1963      if ( name.Length > 0xFFFF ) {
 1964        throw new ZipException("Entry name too long.");
 1965      }
 1966
 1967      var ed = new ZipExtraData(entry.ExtraData);
 1968
 1969      if ( entry.LocalHeaderRequiresZip64 ) {
 1970        ed.StartNewEntry();
 1971
 1972        // Local entry header always includes size and compressed size.
 1973        // NOTE the order of these fields is reversed when compared to the normal headers!
 1974        ed.AddLeLong(entry.Size);
 1975        ed.AddLeLong(entry.CompressedSize);
 1976        ed.AddNewEntry(1);
 1977      }
 1978      else {
 1979        ed.Delete(1);
 1980      }
 1981
 1982      entry.ExtraData = ed.GetEntryData();
 1983
 1984      WriteLEShort(name.Length);
 1985      WriteLEShort(entry.ExtraData.Length);
 1986
 1987      if ( name.Length > 0 ) {
 1988        baseStream_.Write(name, 0, name.Length);
 1989      }
 1990
 1991      if ( entry.LocalHeaderRequiresZip64 ) {
 1992        if ( !ed.Find(1) ) {
 1993          throw new ZipException("Internal error cannot find extra data");
 1994        }
 1995
 1996        update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex;
 1997      }
 1998
 1999      if ( entry.ExtraData.Length > 0 ) {
 2000        baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length);
 2001      }
 2002    }
 2003
 2004    int WriteCentralDirectoryHeader(ZipEntry entry)
 2005    {
 2006      if ( entry.CompressedSize < 0 ) {
 2007        throw new ZipException("Attempt to write central directory entry with unknown csize");
 2008      }
 2009
 2010      if ( entry.Size < 0 ) {
 2011        throw new ZipException("Attempt to write central directory entry with unknown size");
 2012      }
 2013
 2014      if ( entry.Crc < 0 ) {
 2015        throw new ZipException("Attempt to write central directory entry with unknown crc");
 2016      }
 2017
 2018      // Write the central file header
 2019      WriteLEInt(ZipConstants.CentralHeaderSignature);
 2020
 2021      // Version made by
 2022      WriteLEShort(ZipConstants.VersionMadeBy);
 2023
 2024      // Version required to extract
 2025      WriteLEShort(entry.Version);
 2026
 2027      WriteLEShort(entry.Flags);
 2028
 2029      unchecked {
 2030        WriteLEShort((byte)entry.CompressionMethod);
 2031        WriteLEInt((int)entry.DosTime);
 2032        WriteLEInt((int)entry.Crc);
 2033      }
 2034
 2035      if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) {
 2036        WriteLEInt(-1);
 2037      }
 2038      else {
 2039        WriteLEInt((int)(entry.CompressedSize & 0xffffffff));
 2040      }
 2041
 2042      if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) {
 2043        WriteLEInt(-1);
 2044      }
 2045      else {
 2046        WriteLEInt((int)entry.Size);
 2047      }
 2048
 2049      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 2050
 2051      if ( name.Length > 0xFFFF ) {
 2052        throw new ZipException("Entry name is too long.");
 2053      }
 2054
 2055      WriteLEShort(name.Length);
 2056
 2057      // Central header extra data is different to local header version so regenerate.
 2058      var ed = new ZipExtraData(entry.ExtraData);
 2059
 2060      if ( entry.CentralHeaderRequiresZip64 ) {
 2061        ed.StartNewEntry();
 2062
 2063        if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2064        {
 2065          ed.AddLeLong(entry.Size);
 2066        }
 2067
 2068        if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2069        {
 2070          ed.AddLeLong(entry.CompressedSize);
 2071        }
 2072
 2073        if ( entry.Offset >= 0xffffffff ) {
 2074          ed.AddLeLong(entry.Offset);
 2075        }
 2076
 2077        // Number of disk on which this file starts isnt supported and is never written here.
 2078        ed.AddNewEntry(1);
 2079      }
 2080      else {
 2081        // Should have already be done when local header was added.
 2082        ed.Delete(1);
 2083      }
 2084
 2085      byte[] centralExtraData = ed.GetEntryData();
 2086
 2087      WriteLEShort(centralExtraData.Length);
 2088      WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0);
 2089
 2090      WriteLEShort(0);  // disk number
 2091      WriteLEShort(0);  // internal file attributes
 2092
 2093      // External file attributes...
 2094      if ( entry.ExternalFileAttributes != -1 ) {
 2095        WriteLEInt(entry.ExternalFileAttributes);
 2096      }
 2097      else {
 2098        if ( entry.IsDirectory ) {
 2099          WriteLEUint(16);
 2100        }
 2101        else {
 2102          WriteLEUint(0);
 2103        }
 2104      }
 2105
 2106      if ( entry.Offset >= 0xffffffff ) {
 2107        WriteLEUint(0xffffffff);
 2108      }
 2109      else {
 2110        WriteLEUint((uint)(int)entry.Offset);
 2111      }
 2112
 2113      if ( name.Length > 0 ) {
 2114        baseStream_.Write(name, 0, name.Length);
 2115      }
 2116
 2117      if ( centralExtraData.Length > 0 ) {
 2118        baseStream_.Write(centralExtraData, 0, centralExtraData.Length);
 2119      }
 2120
 2121      byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0];
 2122
 2123      if ( rawComment.Length > 0 ) {
 2124        baseStream_.Write(rawComment, 0, rawComment.Length);
 2125      }
 2126
 2127      return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length;
 2128    }
 2129    #endregion
 2130
 2131    void PostUpdateCleanup()
 2132    {
 2133            updateDataSource_ = null;
 2134            updates_ = null;
 2135            updateIndex_ = null;
 2136
 2137            if (archiveStorage_ != null)
 2138            {
 2139        archiveStorage_.Dispose();
 2140        archiveStorage_=null;
 2141      }
 2142    }
 2143
 2144    string GetTransformedFileName(string name)
 2145    {
 2146            INameTransform transform = NameTransform;
 2147      return (transform != null) ?
 2148        transform.TransformFile(name) :
 2149        name;
 2150    }
 2151
 2152    string GetTransformedDirectoryName(string name)
 2153    {
 2154            INameTransform transform = NameTransform;
 2155            return (transform != null) ?
 2156        transform.TransformDirectory(name) :
 2157        name;
 2158    }
 2159
 2160    /// <summary>
 2161    /// Get a raw memory buffer.
 2162    /// </summary>
 2163    /// <returns>Returns a raw memory buffer.</returns>
 2164    byte[] GetBuffer()
 2165    {
 2166      if ( copyBuffer_ == null ) {
 2167        copyBuffer_ = new byte[bufferSize_];
 2168      }
 2169      return copyBuffer_;
 2170    }
 2171
 2172    void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
 2173    {
 2174      int bytesToCopy = GetDescriptorSize(update);
 2175
 2176      if ( bytesToCopy > 0 ) {
 2177        byte[] buffer = GetBuffer();
 2178
 2179        while ( bytesToCopy > 0 ) {
 2180          int readSize = Math.Min(buffer.Length, bytesToCopy);
 2181
 2182          int bytesRead = source.Read(buffer, 0, readSize);
 2183          if ( bytesRead > 0 ) {
 2184            dest.Write(buffer, 0, bytesRead);
 2185            bytesToCopy -= bytesRead;
 2186          }
 2187          else {
 2188            throw new ZipException("Unxpected end of stream");
 2189          }
 2190        }
 2191      }
 2192    }
 2193
 2194    void CopyBytes(ZipUpdate update, Stream destination, Stream source,
 2195      long bytesToCopy, bool updateCrc)
 2196    {
 2197      if ( destination == source ) {
 2198        throw new InvalidOperationException("Destination and source are the same");
 2199      }
 2200
 2201      // NOTE: Compressed size is updated elsewhere.
 2202      var crc = new Crc32();
 2203      byte[] buffer = GetBuffer();
 2204
 2205      long targetBytes = bytesToCopy;
 2206      long totalBytesRead = 0;
 2207
 2208      int bytesRead;
 2209      do {
 2210        int readSize = buffer.Length;
 2211
 2212        if ( bytesToCopy < readSize ) {
 2213          readSize = (int)bytesToCopy;
 2214        }
 2215
 2216        bytesRead = source.Read(buffer, 0, readSize);
 2217        if ( bytesRead > 0 ) {
 2218          if ( updateCrc ) {
 2219            crc.Update(buffer, 0, bytesRead);
 2220          }
 2221          destination.Write(buffer, 0, bytesRead);
 2222          bytesToCopy -= bytesRead;
 2223          totalBytesRead += bytesRead;
 2224        }
 2225      }
 2226      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2227
 2228      if ( totalBytesRead != targetBytes ) {
 2229        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2230      }
 2231
 2232      if ( updateCrc ) {
 2233        update.OutEntry.Crc = crc.Value;
 2234      }
 2235    }
 2236
 2237    /// <summary>
 2238    /// Get the size of the source descriptor for a <see cref="ZipUpdate"/>.
 2239    /// </summary>
 2240    /// <param name="update">The update to get the size for.</param>
 2241    /// <returns>The descriptor size, zero if there isnt one.</returns>
 2242    int GetDescriptorSize(ZipUpdate update)
 2243    {
 2244      int result = 0;
 2245      if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) {
 2246        result = ZipConstants.DataDescriptorSize - 4;
 2247        if ( update.Entry.LocalHeaderRequiresZip64 ) {
 2248          result = ZipConstants.Zip64DataDescriptorSize - 4;
 2249        }
 2250      }
 2251      return result;
 2252    }
 2253
 2254    void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition)
 2255    {
 2256      int bytesToCopy = GetDescriptorSize(update);
 2257
 2258      while ( bytesToCopy > 0 ) {
 2259        var readSize = (int)bytesToCopy;
 2260        byte[] buffer = GetBuffer();
 2261
 2262        stream.Position = sourcePosition;
 2263        int bytesRead = stream.Read(buffer, 0, readSize);
 2264        if ( bytesRead > 0 ) {
 2265          stream.Position = destinationPosition;
 2266          stream.Write(buffer, 0, bytesRead);
 2267          bytesToCopy -= bytesRead;
 2268          destinationPosition += bytesRead;
 2269          sourcePosition += bytesRead;
 2270        }
 2271        else {
 2272          throw new ZipException("Unxpected end of stream");
 2273        }
 2274      }
 2275    }
 2276
 2277    void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sou
 2278    {
 2279      long bytesToCopy = update.Entry.CompressedSize;
 2280
 2281      // NOTE: Compressed size is updated elsewhere.
 2282      var crc = new Crc32();
 2283      byte[] buffer = GetBuffer();
 2284
 2285      long targetBytes = bytesToCopy;
 2286      long totalBytesRead = 0;
 2287
 2288      int bytesRead;
 2289      do
 2290      {
 2291        int readSize = buffer.Length;
 2292
 2293        if ( bytesToCopy < readSize ) {
 2294          readSize = (int)bytesToCopy;
 2295        }
 2296
 2297        stream.Position = sourcePosition;
 2298        bytesRead = stream.Read(buffer, 0, readSize);
 2299        if ( bytesRead > 0 ) {
 2300          if ( updateCrc ) {
 2301            crc.Update(buffer, 0, bytesRead);
 2302          }
 2303          stream.Position = destinationPosition;
 2304          stream.Write(buffer, 0, bytesRead);
 2305
 2306          destinationPosition += bytesRead;
 2307          sourcePosition += bytesRead;
 2308          bytesToCopy -= bytesRead;
 2309          totalBytesRead += bytesRead;
 2310        }
 2311      }
 2312      while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2313
 2314      if ( totalBytesRead != targetBytes ) {
 2315        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2316      }
 2317
 2318      if ( updateCrc ) {
 2319        update.OutEntry.Crc = crc.Value;
 2320      }
 2321    }
 2322
 2323    int FindExistingUpdate(ZipEntry entry)
 2324    {
 2325      int result = -1;
 2326      string convertedName = GetTransformedFileName(entry.Name);
 2327
 2328      if (updateIndex_.ContainsKey(convertedName)) {
 2329        result = (int)updateIndex_[convertedName];
 2330      }
 2331/*
 2332      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2333      // for CF?
 2334      for (int index = 0; index < updates_.Count; ++index)
 2335      {
 2336        ZipUpdate zu = ( ZipUpdate )updates_[index];
 2337        if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) &&
 2338          (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) {
 2339          result = index;
 2340          break;
 2341        }
 2342      }
 2343 */
 2344      return result;
 2345    }
 2346
 2347    int FindExistingUpdate(string fileName)
 2348    {
 2349      int result = -1;
 2350
 2351      string convertedName = GetTransformedFileName(fileName);
 2352
 2353      if (updateIndex_.ContainsKey(convertedName)) {
 2354        result = (int)updateIndex_[convertedName];
 2355      }
 2356
 2357/*
 2358      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2359      // for CF?
 2360      for ( int index = 0; index < updates_.Count; ++index ) {
 2361        if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name,
 2362          true, CultureInfo.InvariantCulture) == 0 ) {
 2363          result = index;
 2364          break;
 2365        }
 2366      }
 2367 */
 2368
 2369      return result;
 2370    }
 2371
 2372    /// <summary>
 2373    /// Get an output stream for the specified <see cref="ZipEntry"/>
 2374    /// </summary>
 2375    /// <param name="entry">The entry to get an output stream for.</param>
 2376    /// <returns>The output stream obtained for the entry.</returns>
 2377    Stream GetOutputStream(ZipEntry entry)
 2378    {
 2379      Stream result = baseStream_;
 2380
 2381      if ( entry.IsCrypted == true ) {
 2382#if NETCF_1_0
 2383        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 2384#else
 2385        result = CreateAndInitEncryptionStream(result, entry);
 2386#endif
 2387      }
 2388
 2389      switch ( entry.CompressionMethod ) {
 2390        case CompressionMethod.Stored:
 2391          result = new UncompressedStream(result);
 2392          break;
 2393
 2394        case CompressionMethod.Deflated:
 2395          var dos = new DeflaterOutputStream(result, new Deflater(9, true));
 2396          dos.IsStreamOwner = false;
 2397          result = dos;
 2398          break;
 2399
 2400        default:
 2401          throw new ZipException("Unknown compression method " + entry.CompressionMethod);
 2402      }
 2403      return result;
 2404    }
 2405
 2406    void AddEntry(ZipFile workFile, ZipUpdate update)
 2407    {
 2408      Stream source = null;
 2409
 2410      if ( update.Entry.IsFile ) {
 2411        source = update.GetSource();
 2412
 2413        if ( source == null ) {
 2414          source = updateDataSource_.GetSource(update.Entry, update.Filename);
 2415        }
 2416      }
 2417
 2418      if ( source != null ) {
 2419        using ( source ) {
 2420          long sourceStreamLength = source.Length;
 2421          if ( update.OutEntry.Size < 0 ) {
 2422            update.OutEntry.Size = sourceStreamLength;
 2423          }
 2424          else {
 2425            // Check for errant entries.
 2426            if ( update.OutEntry.Size != sourceStreamLength ) {
 2427              throw new ZipException("Entry size/stream size mismatch");
 2428            }
 2429          }
 2430
 2431          workFile.WriteLocalEntryHeader(update);
 2432
 2433          long dataStart = workFile.baseStream_.Position;
 2434
 2435          using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2436            CopyBytes(update, output, source, sourceStreamLength, true);
 2437          }
 2438
 2439          long dataEnd = workFile.baseStream_.Position;
 2440          update.OutEntry.CompressedSize = dataEnd - dataStart;
 2441
 2442          if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor)
 2443          {
 2444            var helper = new ZipHelperStream(workFile.baseStream_);
 2445            helper.WriteDataDescriptor(update.OutEntry);
 2446          }
 2447        }
 2448      }
 2449      else {
 2450        workFile.WriteLocalEntryHeader(update);
 2451        update.OutEntry.CompressedSize = 0;
 2452      }
 2453
 2454    }
 2455
 2456    void ModifyEntry(ZipFile workFile, ZipUpdate update)
 2457    {
 2458      workFile.WriteLocalEntryHeader(update);
 2459      long dataStart = workFile.baseStream_.Position;
 2460
 2461      // TODO: This is slow if the changes don't effect the data!!
 2462      if ( update.Entry.IsFile && (update.Filename != null) ) {
 2463        using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 2464          using ( Stream source = this.GetInputStream(update.Entry) ) {
 2465            CopyBytes(update, output, source, source.Length, true);
 2466          }
 2467        }
 2468      }
 2469
 2470      long dataEnd = workFile.baseStream_.Position;
 2471      update.Entry.CompressedSize = dataEnd - dataStart;
 2472    }
 2473
 2474    void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition)
 2475    {
 2476      bool skipOver = false || update.Entry.Offset == destinationPosition;
 2477
 2478      if ( !skipOver ) {
 2479        baseStream_.Position = destinationPosition;
 2480        workFile.WriteLocalEntryHeader(update);
 2481        destinationPosition = baseStream_.Position;
 2482      }
 2483
 2484      long sourcePosition = 0;
 2485
 2486      const int NameLengthOffset = 26;
 2487
 2488      // TODO: Add base for SFX friendly handling
 2489      long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2490
 2491      baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2492
 2493      // Clumsy way of handling retrieving the original name and extra data length for now.
 2494      // TODO: Stop re-reading name and data length in CopyEntryDirect.
 2495      uint nameLength = ReadLEUshort();
 2496      uint extraLength = ReadLEUshort();
 2497
 2498      sourcePosition = baseStream_.Position + nameLength + extraLength;
 2499
 2500      if (skipOver) {
 2501        if (update.OffsetBasedSize != -1)
 2502          destinationPosition += update.OffsetBasedSize;
 2503        else
 2504          // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) ar
 2505          // WinZip produces a warning on these entries:
 2506          // "caution: value of lrec.csize (compressed size) changed from ..."
 2507          destinationPosition +=
 2508            (sourcePosition - entryDataOffset) + NameLengthOffset +  // Header size
 2509            update.Entry.CompressedSize + GetDescriptorSize(update);
 2510      }
 2511      else {
 2512        if ( update.Entry.CompressedSize > 0 ) {
 2513          CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition );
 2514        }
 2515        CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition);
 2516      }
 2517    }
 2518
 2519    void CopyEntry(ZipFile workFile, ZipUpdate update)
 2520    {
 2521      workFile.WriteLocalEntryHeader(update);
 2522
 2523      if ( update.Entry.CompressedSize > 0 ) {
 2524        const int NameLengthOffset = 26;
 2525
 2526        long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2527
 2528        // TODO: This wont work for SFX files!
 2529        baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2530
 2531        uint nameLength = ReadLEUshort();
 2532        uint extraLength = ReadLEUshort();
 2533
 2534        baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current);
 2535
 2536        CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false);
 2537      }
 2538      CopyDescriptorBytes(update, workFile.baseStream_, baseStream_);
 2539    }
 2540
 2541    void Reopen(Stream source)
 2542    {
 2543      if ( source == null ) {
 2544        throw new ZipException("Failed to reopen archive - no source");
 2545      }
 2546
 2547      isNewArchive_ = false;
 2548      baseStream_ = source;
 2549      ReadEntries();
 2550    }
 2551
 2552    void Reopen()
 2553    {
 2554      if (Name == null) {
 2555        throw new InvalidOperationException("Name is not known cannot Reopen");
 2556      }
 2557
 2558      Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read));
 2559    }
 2560
 2561    void UpdateCommentOnly()
 2562    {
 2563      long baseLength = baseStream_.Length;
 2564
 2565      ZipHelperStream updateFile = null;
 2566
 2567      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2568        Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_);
 2569        updateFile = new ZipHelperStream(copyStream);
 2570        updateFile.IsStreamOwner = true;
 2571
 2572        baseStream_.Close();
 2573        baseStream_ = null;
 2574      }
 2575      else {
 2576        if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) {
 2577          // TODO: archiveStorage wasnt originally intended for this use.
 2578          // Need to revisit this to tidy up handling as archive storage currently doesnt
 2579          // handle the original stream well.
 2580          // The problem is when using an existing zip archive with an in memory archive storage.
 2581          // The open stream wont support writing but the memory storage should open the same file not an in memory one.
 2582
 2583          // Need to tidy up the archive storage interface and contract basically.
 2584          baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_);
 2585          updateFile = new ZipHelperStream(baseStream_);
 2586        }
 2587        else {
 2588          baseStream_.Close();
 2589          baseStream_ = null;
 2590          updateFile = new ZipHelperStream(Name);
 2591        }
 2592      }
 2593
 2594      using ( updateFile ) {
 2595        long locatedCentralDirOffset =
 2596          updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 2597                            baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 2598        if ( locatedCentralDirOffset < 0 ) {
 2599          throw new ZipException("Cannot find central directory");
 2600        }
 2601
 2602        const int CentralHeaderCommentSizeOffset = 16;
 2603        updateFile.Position += CentralHeaderCommentSizeOffset;
 2604
 2605        byte[] rawComment = newComment_.RawComment;
 2606
 2607        updateFile.WriteLEShort(rawComment.Length);
 2608        updateFile.Write(rawComment, 0, rawComment.Length);
 2609        updateFile.SetLength(updateFile.Position);
 2610      }
 2611
 2612      if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 2613        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2614      }
 2615      else {
 2616        ReadEntries();
 2617      }
 2618    }
 2619
 2620    /// <summary>
 2621    /// Class used to sort updates.
 2622    /// </summary>
 2623    class UpdateComparer : IComparer
 2624    {
 2625      /// <summary>
 2626      /// Compares two objects and returns a value indicating whether one is
 2627      /// less than, equal to or greater than the other.
 2628      /// </summary>
 2629      /// <param name="x">First object to compare</param>
 2630      /// <param name="y">Second object to compare.</param>
 2631      /// <returns>Compare result.</returns>
 2632      public int Compare(
 2633        object x,
 2634        object y)
 2635      {
 2636        var zx = x as ZipUpdate;
 2637        var zy = y as ZipUpdate;
 2638
 2639        int result;
 2640
 2641        if (zx == null) {
 2642          if (zy == null) {
 2643            result = 0;
 2644          }
 2645          else {
 2646            result = -1;
 2647          }
 2648        }
 2649        else if (zy == null) {
 2650          result = 1;
 2651        }
 2652        else {
 2653          int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1;
 2654          int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1;
 2655
 2656          result = xCmdValue - yCmdValue;
 2657          if (result == 0) {
 2658            long offsetDiff = zx.Entry.Offset - zy.Entry.Offset;
 2659            if (offsetDiff < 0) {
 2660              result = -1;
 2661            }
 2662            else if (offsetDiff == 0) {
 2663              result = 0;
 2664            }
 2665            else {
 2666              result = 1;
 2667            }
 2668          }
 2669        }
 2670        return result;
 2671      }
 2672    }
 2673
 2674    void RunUpdates()
 2675    {
 2676      long sizeEntries = 0;
 2677      long endOfStream = 0;
 2678      bool directUpdate = false;
 2679      long destinationPosition = 0; // NOT SFX friendly
 2680
 2681      ZipFile workFile;
 2682
 2683      if ( IsNewArchive ) {
 2684        workFile = this;
 2685        workFile.baseStream_.Position = 0;
 2686        directUpdate = true;
 2687      }
 2688      else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) {
 2689        workFile = this;
 2690        workFile.baseStream_.Position = 0;
 2691        directUpdate = true;
 2692
 2693        // Sort the updates by offset within copies/modifies, then adds.
 2694        // This ensures that data required by copies will not be overwritten.
 2695        updates_.Sort(new UpdateComparer());
 2696      }
 2697      else {
 2698        workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput());
 2699        workFile.UseZip64 = UseZip64;
 2700
 2701        if (key != null) {
 2702          workFile.key = (byte[])key.Clone();
 2703        }
 2704      }
 2705
 2706      try {
 2707        foreach ( ZipUpdate update in updates_ ) {
 2708          if (update != null) {
 2709            switch (update.Command) {
 2710              case UpdateCommand.Copy:
 2711                if (directUpdate) {
 2712                  CopyEntryDirect(workFile, update, ref destinationPosition);
 2713                }
 2714                else {
 2715                  CopyEntry(workFile, update);
 2716                }
 2717                break;
 2718
 2719              case UpdateCommand.Modify:
 2720                // TODO: Direct modifying of an entry will take some legwork.
 2721                ModifyEntry(workFile, update);
 2722                break;
 2723
 2724              case UpdateCommand.Add:
 2725                if (!IsNewArchive && directUpdate) {
 2726                  workFile.baseStream_.Position = destinationPosition;
 2727                }
 2728
 2729                AddEntry(workFile, update);
 2730
 2731                if (directUpdate) {
 2732                  destinationPosition = workFile.baseStream_.Position;
 2733                }
 2734                break;
 2735            }
 2736          }
 2737        }
 2738
 2739        if ( !IsNewArchive && directUpdate ) {
 2740          workFile.baseStream_.Position = destinationPosition;
 2741        }
 2742
 2743        long centralDirOffset = workFile.baseStream_.Position;
 2744
 2745        foreach ( ZipUpdate update in updates_ ) {
 2746          if (update != null) {
 2747            sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry);
 2748          }
 2749        }
 2750
 2751        byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_);
 2752        using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) {
 2753          zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment);
 2754        }
 2755
 2756        endOfStream = workFile.baseStream_.Position;
 2757
 2758        // And now patch entries...
 2759        foreach ( ZipUpdate update in updates_ ) {
 2760          if (update != null)
 2761          {
 2762            // If the size of the entry is zero leave the crc as 0 as well.
 2763            // The calculated crc will be all bits on...
 2764            if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) {
 2765              workFile.baseStream_.Position = update.CrcPatchOffset;
 2766              workFile.WriteLEInt((int)update.OutEntry.Crc);
 2767            }
 2768
 2769            if (update.SizePatchOffset > 0) {
 2770              workFile.baseStream_.Position = update.SizePatchOffset;
 2771              if (update.OutEntry.LocalHeaderRequiresZip64) {
 2772                workFile.WriteLeLong(update.OutEntry.Size);
 2773                workFile.WriteLeLong(update.OutEntry.CompressedSize);
 2774              }
 2775              else {
 2776                workFile.WriteLEInt((int)update.OutEntry.CompressedSize);
 2777                workFile.WriteLEInt((int)update.OutEntry.Size);
 2778              }
 2779            }
 2780          }
 2781        }
 2782      }
 2783      catch {
 2784        workFile.Close();
 2785        if (!directUpdate && (workFile.Name != null)) {
 2786          File.Delete(workFile.Name);
 2787        }
 2788        throw;
 2789      }
 2790
 2791      if (directUpdate) {
 2792        workFile.baseStream_.SetLength(endOfStream);
 2793        workFile.baseStream_.Flush();
 2794        isNewArchive_ = false;
 2795        ReadEntries();
 2796      }
 2797      else {
 2798        baseStream_.Close();
 2799        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2800      }
 2801    }
 2802
 2803    void CheckUpdating()
 2804    {
 2805      if ( updates_ == null ) {
 2806        throw new InvalidOperationException("BeginUpdate has not been called");
 2807      }
 2808    }
 2809
 2810    #endregion
 2811
 2812    #region ZipUpdate class
 2813    /// <summary>
 2814    /// Represents a pending update to a Zip file.
 2815    /// </summary>
 2816    class ZipUpdate
 2817    {
 2818      #region Constructors
 2819      public ZipUpdate(string fileName, ZipEntry entry)
 2820      {
 2821        command_ = UpdateCommand.Add;
 2822        entry_ = entry;
 2823        filename_ = fileName;
 2824      }
 2825
 2826      [Obsolete]
 2827      public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod)
 2828      {
 2829        command_ = UpdateCommand.Add;
 2830        entry_ = new ZipEntry(entryName);
 2831        entry_.CompressionMethod = compressionMethod;
 2832        filename_ = fileName;
 2833      }
 2834
 2835      [Obsolete]
 2836      public ZipUpdate(string fileName, string entryName)
 2837        : this(fileName, entryName, CompressionMethod.Deflated)
 2838      {
 2839        // Do nothing.
 2840      }
 2841
 2842      [Obsolete]
 2843      public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 2844      {
 2845        command_ = UpdateCommand.Add;
 2846        entry_ = new ZipEntry(entryName);
 2847        entry_.CompressionMethod = compressionMethod;
 2848        dataSource_ = dataSource;
 2849      }
 2850
 2851      public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry)
 2852      {
 2853        command_ = UpdateCommand.Add;
 2854        entry_ = entry;
 2855        dataSource_ = dataSource;
 2856      }
 2857
 2858      public ZipUpdate(ZipEntry original, ZipEntry updated)
 2859      {
 2860        throw new ZipException("Modify not currently supported");
 2861      /*
 2862        command_ = UpdateCommand.Modify;
 2863        entry_ = ( ZipEntry )original.Clone();
 2864        outEntry_ = ( ZipEntry )updated.Clone();
 2865      */
 2866      }
 2867
 2868      public ZipUpdate(UpdateCommand command, ZipEntry entry)
 2869      {
 2870        command_ = command;
 2871        entry_ = ( ZipEntry )entry.Clone();
 2872      }
 2873
 2874
 2875      /// <summary>
 2876      /// Copy an existing entry.
 2877      /// </summary>
 2878      /// <param name="entry">The existing entry to copy.</param>
 2879      public ZipUpdate(ZipEntry entry)
 2880        : this(UpdateCommand.Copy, entry)
 2881      {
 2882        // Do nothing.
 2883      }
 2884      #endregion
 2885
 2886      /// <summary>
 2887      /// Get the <see cref="ZipEntry"/> for this update.
 2888      /// </summary>
 2889      /// <remarks>This is the source or original entry.</remarks>
 2890      public ZipEntry Entry
 2891      {
 2892        get { return entry_; }
 2893      }
 2894
 2895      /// <summary>
 2896      /// Get the <see cref="ZipEntry"/> that will be written to the updated/new file.
 2897      /// </summary>
 2898      public ZipEntry OutEntry
 2899      {
 2900        get {
 2901          if ( outEntry_ == null ) {
 2902            outEntry_ = (ZipEntry)entry_.Clone();
 2903          }
 2904
 2905          return outEntry_;
 2906        }
 2907      }
 2908
 2909      /// <summary>
 2910      /// Get the command for this update.
 2911      /// </summary>
 2912      public UpdateCommand Command
 2913      {
 2914        get { return command_; }
 2915      }
 2916
 2917      /// <summary>
 2918      /// Get the filename if any for this update.  Null if none exists.
 2919      /// </summary>
 2920      public string Filename
 2921      {
 2922        get { return filename_; }
 2923      }
 2924
 2925      /// <summary>
 2926      /// Get/set the location of the size patch for this update.
 2927      /// </summary>
 2928      public long SizePatchOffset
 2929      {
 2930        get { return sizePatchOffset_; }
 2931        set { sizePatchOffset_ = value; }
 2932      }
 2933
 2934      /// <summary>
 2935      /// Get /set the location of the crc patch for this update.
 2936      /// </summary>
 2937      public long CrcPatchOffset
 2938      {
 2939        get { return crcPatchOffset_; }
 2940        set { crcPatchOffset_ = value; }
 2941      }
 2942
 2943      /// <summary>
 2944      /// Get/set the size calculated by offset.
 2945      /// Specifically, the difference between this and next entry's starting offset.
 2946      /// </summary>
 2947      public long OffsetBasedSize
 2948      {
 2949        get { return _offsetBasedSize; }
 2950        set { _offsetBasedSize = value; }
 2951      }
 2952
 2953      public Stream GetSource()
 2954      {
 2955        Stream result = null;
 2956        if ( dataSource_ != null ) {
 2957          result = dataSource_.GetSource();
 2958        }
 2959
 2960        return result;
 2961      }
 2962
 2963      #region Instance Fields
 2964      ZipEntry entry_;
 2965      ZipEntry outEntry_;
 2966      UpdateCommand command_;
 2967      IStaticDataSource dataSource_;
 2968      string filename_;
 2969      long sizePatchOffset_ = -1;
 2970      long crcPatchOffset_ = -1;
 2971      long _offsetBasedSize = -1;
 2972      #endregion
 2973    }
 2974
 2975    #endregion
 2976    #endregion
 2977
 2978    #region Disposing
 2979
 2980    #region IDisposable Members
 2981    void IDisposable.Dispose()
 2982    {
 2983      Close();
 2984    }
 2985    #endregion
 2986
 2987    void DisposeInternal(bool disposing)
 2988    {
 2989      if ( !isDisposed_ ) {
 2990        isDisposed_ = true;
 2991        entries_ = new ZipEntry[0];
 2992
 2993        if ( IsStreamOwner && (baseStream_ != null) ) {
 2994          lock(baseStream_) {
 2995            baseStream_.Close();
 2996          }
 2997        }
 2998
 2999        PostUpdateCleanup();
 3000      }
 3001    }
 3002
 3003    /// <summary>
 3004    /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
 3005    /// </summary>
 3006    /// <param name="disposing">true to release both managed and unmanaged resources;
 3007    /// false to release only unmanaged resources.</param>
 3008    protected virtual void Dispose(bool disposing)
 3009    {
 3010      DisposeInternal(disposing);
 3011    }
 3012
 3013    #endregion
 3014
 3015    #region Internal routines
 3016    #region Reading
 3017    /// <summary>
 3018    /// Read an unsigned short in little endian byte order.
 3019    /// </summary>
 3020    /// <returns>Returns the value read.</returns>
 3021    /// <exception cref="EndOfStreamException">
 3022    /// The stream ends prematurely
 3023    /// </exception>
 3024    ushort ReadLEUshort()
 3025    {
 3026      int data1 = baseStream_.ReadByte();
 3027
 3028      if ( data1 < 0 ) {
 3029        throw new EndOfStreamException("End of stream");
 3030      }
 3031
 3032      int data2 = baseStream_.ReadByte();
 3033
 3034      if ( data2 < 0 ) {
 3035        throw new EndOfStreamException("End of stream");
 3036      }
 3037
 3038
 3039      return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8)));
 3040    }
 3041
 3042    /// <summary>
 3043    /// Read a uint in little endian byte order.
 3044    /// </summary>
 3045    /// <returns>Returns the value read.</returns>
 3046    /// <exception cref="IOException">
 3047    /// An i/o error occurs.
 3048    /// </exception>
 3049    /// <exception cref="System.IO.EndOfStreamException">
 3050    /// The file ends prematurely
 3051    /// </exception>
 3052    uint ReadLEUint()
 3053    {
 3054      return (uint)(ReadLEUshort() | (ReadLEUshort() << 16));
 3055    }
 3056
 3057    ulong ReadLEUlong()
 3058    {
 3059      return ReadLEUint() | ((ulong)ReadLEUint() << 32);
 3060    }
 3061
 3062    #endregion
 3063    // NOTE this returns the offset of the first byte after the signature.
 3064    long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 3065    {
 3066      using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) {
 3067        return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData);
 3068      }
 3069    }
 3070
 3071    /// <summary>
 3072    /// Search for and read the central directory of a zip file filling the entries array.
 3073    /// </summary>
 3074    /// <exception cref="System.IO.IOException">
 3075    /// An i/o error occurs.
 3076    /// </exception>
 3077    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3078    /// The central directory is malformed or cannot be found
 3079    /// </exception>
 3080    void ReadEntries()
 3081    {
 3082      // Search for the End Of Central Directory.  When a zip comment is
 3083      // present the directory will start earlier
 3084      //
 3085      // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed.
 3086      // This should be compatible with both SFX and ZIP files but has only been tested for Zip files
 3087      // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then
 3088      // this could be invalid.
 3089      // Could also speed this up by reading memory in larger blocks.
 3090
 3091      if (baseStream_.CanSeek == false) {
 3092        throw new ZipException("ZipFile stream must be seekable");
 3093      }
 3094
 3095      long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 3096        baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 3097
 3098      if (locatedEndOfCentralDir < 0) {
 3099        throw new ZipException("Cannot find central directory");
 3100      }
 3101
 3102      // Read end of central directory record
 3103      ushort thisDiskNumber           = ReadLEUshort();
 3104      ushort startCentralDirDisk      = ReadLEUshort();
 3105      ulong entriesForThisDisk        = ReadLEUshort();
 3106      ulong entriesForWholeCentralDir = ReadLEUshort();
 3107      ulong centralDirSize            = ReadLEUint();
 3108      long offsetOfCentralDir         = ReadLEUint();
 3109      uint commentSize                = ReadLEUshort();
 3110
 3111      if ( commentSize > 0 ) {
 3112        byte[] comment = new byte[commentSize];
 3113
 3114        StreamUtils.ReadFully(baseStream_, comment);
 3115        comment_ = ZipConstants.ConvertToString(comment);
 3116      }
 3117      else {
 3118        comment_ = string.Empty;
 3119      }
 3120
 3121      bool isZip64 = false;
 3122
 3123      // Check if zip64 header information is required.
 3124      if ( (thisDiskNumber == 0xffff) ||
 3125        (startCentralDirDisk == 0xffff) ||
 3126        (entriesForThisDisk == 0xffff) ||
 3127        (entriesForWholeCentralDir == 0xffff) ||
 3128        (centralDirSize == 0xffffffff) ||
 3129        (offsetOfCentralDir == 0xffffffff) ) {
 3130        isZip64 = true;
 3131
 3132        long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 
 3133        if ( offset < 0 ) {
 3134          throw new ZipException("Cannot find Zip64 locator");
 3135        }
 3136
 3137        // number of the disk with the start of the zip64 end of central directory 4 bytes
 3138        // relative offset of the zip64 end of central directory record 8 bytes
 3139        // total number of disks 4 bytes
 3140        ReadLEUint(); // startDisk64 is not currently used
 3141        ulong offset64 = ReadLEUlong();
 3142        uint totalDisks = ReadLEUint();
 3143
 3144        baseStream_.Position = (long)offset64;
 3145        long sig64 = ReadLEUint();
 3146
 3147        if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) {
 3148          throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64));
 3149        }
 3150
 3151        // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12.
 3152        ulong recordSize = ReadLEUlong();
 3153        int versionMadeBy = ReadLEUshort();
 3154        int versionToExtract = ReadLEUshort();
 3155        uint thisDisk = ReadLEUint();
 3156        uint centralDirDisk = ReadLEUint();
 3157        entriesForThisDisk = ReadLEUlong();
 3158        entriesForWholeCentralDir = ReadLEUlong();
 3159        centralDirSize = ReadLEUlong();
 3160        offsetOfCentralDir = (long)ReadLEUlong();
 3161
 3162        // NOTE: zip64 extensible data sector (variable size) is ignored.
 3163      }
 3164
 3165      entries_ = new ZipEntry[entriesForThisDisk];
 3166
 3167      // SFX/embedded support, find the offset of the first entry vis the start of the stream
 3168      // This applies to Zip files that are appended to the end of an SFX stub.
 3169      // Or are appended as a resource to an executable.
 3170      // Zip files created by some archivers have the offsets altered to reflect the true offsets
 3171      // and so dont require any adjustment here...
 3172      // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths?
 3173      if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) {
 3174        offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir);
 3175        if (offsetOfFirstEntry <= 0) {
 3176          throw new ZipException("Invalid embedded zip archive");
 3177        }
 3178      }
 3179
 3180      baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin);
 3181
 3182      for (ulong i = 0; i < entriesForThisDisk; i++) {
 3183        if (ReadLEUint() != ZipConstants.CentralHeaderSignature) {
 3184          throw new ZipException("Wrong Central Directory signature");
 3185        }
 3186
 3187        int versionMadeBy      = ReadLEUshort();
 3188        int versionToExtract   = ReadLEUshort();
 3189        int bitFlags           = ReadLEUshort();
 3190        int method             = ReadLEUshort();
 3191        uint dostime           = ReadLEUint();
 3192        uint crc               = ReadLEUint();
 3193        var csize             = (long)ReadLEUint();
 3194        var size              = (long)ReadLEUint();
 3195        int nameLen            = ReadLEUshort();
 3196        int extraLen           = ReadLEUshort();
 3197        int commentLen         = ReadLEUshort();
 3198
 3199        int diskStartNo        = ReadLEUshort();  // Not currently used
 3200        int internalAttributes = ReadLEUshort();  // Not currently used
 3201
 3202        uint externalAttributes = ReadLEUint();
 3203        long offset             = ReadLEUint();
 3204
 3205        byte[] buffer = new byte[Math.Max(nameLen, commentLen)];
 3206
 3207        StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen);
 3208        string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen);
 3209
 3210        var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method);
 3211        entry.Crc = crc & 0xffffffffL;
 3212        entry.Size = size & 0xffffffffL;
 3213        entry.CompressedSize = csize & 0xffffffffL;
 3214        entry.Flags = bitFlags;
 3215        entry.DosTime = (uint)dostime;
 3216        entry.ZipFileIndex = (long)i;
 3217        entry.Offset = offset;
 3218        entry.ExternalFileAttributes = (int)externalAttributes;
 3219
 3220        if ((bitFlags & 8) == 0) {
 3221          entry.CryptoCheckValue = (byte)(crc >> 24);
 3222        }
 3223        else {
 3224          entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 3225        }
 3226
 3227        if (extraLen > 0) {
 3228          byte[] extra = new byte[extraLen];
 3229          StreamUtils.ReadFully(baseStream_, extra);
 3230          entry.ExtraData = extra;
 3231        }
 3232
 3233        entry.ProcessExtraData(false);
 3234
 3235        if (commentLen > 0) {
 3236          StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen);
 3237          entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen);
 3238        }
 3239
 3240        entries_[i] = entry;
 3241      }
 3242    }
 3243
 3244    /// <summary>
 3245    /// Locate the data for a given entry.
 3246    /// </summary>
 3247    /// <returns>
 3248    /// The start offset of the data.
 3249    /// </returns>
 3250    /// <exception cref="System.IO.EndOfStreamException">
 3251    /// The stream ends prematurely
 3252    /// </exception>
 3253    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3254    /// The local header signature is invalid, the entry and central header file name lengths are different
 3255    /// or the local and entry compression methods dont match
 3256    /// </exception>
 3257    long LocateEntry(ZipEntry entry)
 3258    {
 3259      return TestLocalHeader(entry, HeaderTest.Extract);
 3260    }
 3261
 3262#if !NETCF_1_0
 3263    Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry)
 3264    {
 3265      CryptoStream result = null;
 3266
 3267      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3268        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3269        var classicManaged = new PkzipClassicManaged();
 3270
 3271        OnKeysRequired(entry.Name);
 3272        if (HaveKeys == false) {
 3273          throw new ZipException("No password available for encrypted stream");
 3274        }
 3275
 3276        result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read);
 3277        CheckClassicPassword(result, entry);
 3278      }
 3279      else {
 3280#if !NET_1_1 && !NETCF_2_0
 3281        if (entry.Version == ZipConstants.VERSION_AES) {
 3282          //
 3283          OnKeysRequired(entry.Name);
 3284          if (HaveKeys == false) {
 3285            throw new ZipException("No password available for AES encrypted stream");
 3286          }
 3287          int saltLen = entry.AESSaltLen;
 3288          byte[] saltBytes = new byte[saltLen];
 3289          int saltIn = baseStream.Read(saltBytes, 0, saltLen);
 3290          if (saltIn != saltLen)
 3291            throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn);
 3292          //
 3293          byte[] pwdVerifyRead = new byte[2];
 3294          baseStream.Read(pwdVerifyRead, 0, 2);
 3295          int blockSize = entry.AESKeySize / 8;  // bits to bytes
 3296
 3297          var decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false);
 3298          byte[] pwdVerifyCalc = decryptor.PwdVerifier;
 3299          if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1])
 3300            throw new Exception("Invalid password for AES");
 3301          result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read);
 3302        }
 3303        else
 3304#endif
 3305        {
 3306          throw new ZipException("Decryption method not supported");
 3307        }
 3308      }
 3309
 3310      return result;
 3311    }
 3312
 3313    Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry)
 3314    {
 3315      CryptoStream result = null;
 3316      if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 3317        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 3318        var classicManaged = new PkzipClassicManaged();
 3319
 3320        OnKeysRequired(entry.Name);
 3321        if (HaveKeys == false) {
 3322          throw new ZipException("No password available for encrypted stream");
 3323        }
 3324
 3325        // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
 3326        // which doesnt do this.
 3327        result = new CryptoStream(new UncompressedStream(baseStream),
 3328          classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
 3329
 3330        if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) {
 3331          WriteEncryptionHeader(result, entry.DosTime << 16);
 3332        }
 3333        else {
 3334          WriteEncryptionHeader(result, entry.Crc);
 3335        }
 3336      }
 3337      return result;
 3338    }
 3339
 3340    static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry)
 3341    {
 3342      byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 3343      StreamUtils.ReadFully(classicCryptoStream, cryptbuffer);
 3344      if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 3345        throw new ZipException("Invalid password");
 3346      }
 3347    }
 3348#endif
 3349
 3350    static void WriteEncryptionHeader(Stream stream, long crcValue)
 3351    {
 3352      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 3353      var rnd = new Random();
 3354      rnd.NextBytes(cryptBuffer);
 3355      cryptBuffer[11] = (byte)(crcValue >> 24);
 3356      stream.Write(cryptBuffer, 0, cryptBuffer.Length);
 3357    }
 3358
 3359    #endregion
 3360
 3361    #region Instance Fields
 3362    bool       isDisposed_;
 3363    string     name_;
 3364    string     comment_;
 3365    string     rawPassword_;
 3366    Stream     baseStream_;
 3367    bool       isStreamOwner;
 3368    long       offsetOfFirstEntry;
 3369    ZipEntry[] entries_;
 3370    byte[] key;
 3371    bool isNewArchive_;
 3372
 3373    // Default is dynamic which is not backwards compatible and can cause problems
 3374    // with XP's built in compression which cant read Zip64 archives.
 3375    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 3376    // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed.
 3377    UseZip64 useZip64_ = UseZip64.Dynamic ;
 3378
 3379    #region Zip Update Instance Fields
 3380    ArrayList updates_;
 3381    long updateCount_; // Count is managed manually as updates_ can contain nulls!
 3382    Hashtable updateIndex_;
 3383    IArchiveStorage archiveStorage_;
 3384    IDynamicDataSource updateDataSource_;
 3385    bool contentsEdited_;
 3386    int bufferSize_ = DefaultBufferSize;
 3387    byte[] copyBuffer_;
 3388    ZipString newComment_;
 3389    bool commentEdited_;
 3390    IEntryFactory updateEntryFactory_ = new ZipEntryFactory();
 3391    #endregion
 3392    #endregion
 3393
 3394    #region Support Classes
 3395    /// <summary>
 3396    /// Represents a string from a <see cref="ZipFile"/> which is stored as an array of bytes.
 3397    /// </summary>
 3398    class ZipString
 3399    {
 3400      #region Constructors
 3401      /// <summary>
 3402      /// Initialise a <see cref="ZipString"/> with a string.
 3403      /// </summary>
 3404      /// <param name="comment">The textual string form.</param>
 3405      public ZipString(string comment)
 3406      {
 3407        comment_ = comment;
 3408        isSourceString_ = true;
 3409      }
 3410
 3411      /// <summary>
 3412      /// Initialise a <see cref="ZipString"/> using a string in its binary 'raw' form.
 3413      /// </summary>
 3414      /// <param name="rawString"></param>
 3415      public ZipString(byte[] rawString)
 3416      {
 3417        rawComment_ = rawString;
 3418      }
 3419      #endregion
 3420
 3421      /// <summary>
 3422      /// Get a value indicating the original source of data for this instance.
 3423      /// True if the source was a string; false if the source was binary data.
 3424      /// </summary>
 3425      public bool IsSourceString
 3426      {
 3427        get { return isSourceString_; }
 3428      }
 3429
 3430      /// <summary>
 3431      /// Get the length of the comment when represented as raw bytes.
 3432      /// </summary>
 3433      public int RawLength
 3434      {
 3435        get {
 3436          MakeBytesAvailable();
 3437          return rawComment_.Length;
 3438        }
 3439      }
 3440
 3441      /// <summary>
 3442      /// Get the comment in its 'raw' form as plain bytes.
 3443      /// </summary>
 3444      public byte[] RawComment
 3445      {
 3446        get {
 3447          MakeBytesAvailable();
 3448          return (byte[])rawComment_.Clone();
 3449        }
 3450      }
 3451
 3452      /// <summary>
 3453      /// Reset the comment to its initial state.
 3454      /// </summary>
 3455      public void Reset()
 3456      {
 3457        if ( isSourceString_ ) {
 3458          rawComment_ = null;
 3459        }
 3460        else {
 3461          comment_ = null;
 3462        }
 3463      }
 3464
 3465      void MakeTextAvailable()
 3466      {
 3467        if ( comment_ == null ) {
 3468          comment_ = ZipConstants.ConvertToString(rawComment_);
 3469        }
 3470      }
 3471
 3472      void MakeBytesAvailable()
 3473      {
 3474        if ( rawComment_ == null ) {
 3475          rawComment_ = ZipConstants.ConvertToArray(comment_);
 3476        }
 3477      }
 3478
 3479      /// <summary>
 3480      /// Implicit conversion of comment to a string.
 3481      /// </summary>
 3482      /// <param name="zipString">The <see cref="ZipString"/> to convert to a string.</param>
 3483      /// <returns>The textual equivalent for the input value.</returns>
 3484      static public implicit operator string(ZipString zipString)
 3485      {
 3486        zipString.MakeTextAvailable();
 3487        return zipString.comment_;
 3488      }
 3489
 3490      #region Instance Fields
 3491      string comment_;
 3492      byte[] rawComment_;
 3493      bool isSourceString_;
 3494      #endregion
 3495    }
 3496
 3497    /// <summary>
 3498    /// An <see cref="IEnumerator">enumerator</see> for <see cref="ZipEntry">Zip entries</see>
 3499    /// </summary>
 3500    class ZipEntryEnumerator : IEnumerator
 3501    {
 3502      #region Constructors
 3503      public ZipEntryEnumerator(ZipEntry[] entries)
 3504      {
 3505        array = entries;
 3506      }
 3507
 3508      #endregion
 3509      #region IEnumerator Members
 3510      public object Current
 3511      {
 3512        get {
 3513          return array[index];
 3514        }
 3515      }
 3516
 3517      public void Reset()
 3518      {
 3519        index = -1;
 3520      }
 3521
 3522      public bool MoveNext()
 3523      {
 3524        return (++index < array.Length);
 3525      }
 3526      #endregion
 3527      #region Instance Fields
 3528      ZipEntry[] array;
 3529      int index = -1;
 3530      #endregion
 3531    }
 3532
 3533    /// <summary>
 3534    /// An <see cref="UncompressedStream"/> is a stream that you can write uncompressed data
 3535    /// to and flush, but cannot read, seek or do anything else to.
 3536    /// </summary>
 3537    class UncompressedStream : Stream
 3538    {
 3539      #region Constructors
 3540      public UncompressedStream(Stream baseStream)
 3541      {
 3542        baseStream_ = baseStream;
 3543      }
 3544
 3545      #endregion
 3546
 3547      /// <summary>
 3548      /// Close this stream instance.
 3549      /// </summary>
 3550      public override void Close()
 3551      {
 3552        // Do nothing
 3553      }
 3554
 3555      /// <summary>
 3556      /// Gets a value indicating whether the current stream supports reading.
 3557      /// </summary>
 3558      public override bool CanRead
 3559      {
 3560        get {
 3561          return false;
 3562        }
 3563      }
 3564
 3565      /// <summary>
 3566      /// Write any buffered data to underlying storage.
 3567      /// </summary>
 3568      public override void Flush()
 3569      {
 3570        baseStream_.Flush();
 3571      }
 3572
 3573      /// <summary>
 3574      /// Gets a value indicating whether the current stream supports writing.
 3575      /// </summary>
 3576      public override bool CanWrite
 3577      {
 3578        get {
 3579          return baseStream_.CanWrite;
 3580        }
 3581      }
 3582
 3583      /// <summary>
 3584      /// Gets a value indicating whether the current stream supports seeking.
 3585      /// </summary>
 3586      public override bool CanSeek
 3587      {
 3588        get {
 3589          return false;
 3590        }
 3591      }
 3592
 3593      /// <summary>
 3594      /// Get the length in bytes of the stream.
 3595      /// </summary>
 3596      public override long Length
 3597      {
 3598        get {
 3599          return 0;
 3600        }
 3601      }
 3602
 3603      /// <summary>
 3604      /// Gets or sets the position within the current stream.
 3605      /// </summary>
 3606      public override long Position
 3607      {
 3608        get  {
 3609          return baseStream_.Position;
 3610        }
 3611                set {
 3612                    throw new NotImplementedException();
 3613                }
 3614            }
 3615
 3616            /// <summary>
 3617            /// Reads a sequence of bytes from the current stream and advances the position within the stream by the num
 3618            /// </summary>
 3619            /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte
 3620            /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from t
 3621            /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3622            /// <returns>
 3623            /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if t
 3624            /// </returns>
 3625            /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer lengt
 3626            /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </ex
 3627            /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3628            /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3629            /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3630            /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3631            public override int Read(byte[] buffer, int offset, int count)
 3632      {
 3633        return 0;
 3634      }
 3635
 3636      /// <summary>
 3637      /// Sets the position within the current stream.
 3638      /// </summary>
 3639      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3640      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3641      /// <returns>
 3642      /// The new position within the current stream.
 3643      /// </returns>
 3644      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3645      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3646      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3647      public override long Seek(long offset, SeekOrigin origin)
 3648      {
 3649        return 0;
 3650      }
 3651
 3652      /// <summary>
 3653      /// Sets the length of the current stream.
 3654      /// </summary>
 3655      /// <param name="value">The desired length of the current stream in bytes.</param>
 3656      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3657      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3658      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3659      public override void SetLength(long value)
 3660      {
 3661      }
 3662
 3663      /// <summary>
 3664      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3665      /// </summary>
 3666      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3667      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3668      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3669      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3670      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3671      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3672      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3673      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3674      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3675      public override void Write(byte[] buffer, int offset, int count)
 3676      {
 3677        baseStream_.Write(buffer, offset, count);
 3678      }
 3679
 3680      readonly
 3681
 3682      #region Instance Fields
 3683      Stream baseStream_;
 3684      #endregion
 3685    }
 3686
 3687    /// <summary>
 3688    /// A <see cref="PartialInputStream"/> is an <see cref="InflaterInputStream"/>
 3689    /// whose data is only a part or subsection of a file.
 3690    /// </summary>
 3691    class PartialInputStream : Stream
 3692    {
 3693      #region Constructors
 3694      /// <summary>
 3695      /// Initialise a new instance of the <see cref="PartialInputStream"/> class.
 3696      /// </summary>
 3697      /// <param name="zipFile">The <see cref="ZipFile"/> containing the underlying stream to use for IO.</param>
 3698      /// <param name="start">The start of the partial data.</param>
 3699      /// <param name="length">The length of the partial data.</param>
 3700      public PartialInputStream(ZipFile zipFile, long start, long length)
 3701      {
 3702        start_ = start;
 3703        length_ = length;
 3704
 3705        // Although this is the only time the zipfile is used
 3706        // keeping a reference here prevents premature closure of
 3707        // this zip file and thus the baseStream_.
 3708
 3709        // Code like this will cause apparently random failures depending
 3710        // on the size of the files and when garbage is collected.
 3711        //
 3712        // ZipFile z = new ZipFile (stream);
 3713        // Stream reader = z.GetInputStream(0);
 3714        // uses reader here....
 3715        zipFile_ = zipFile;
 3716        baseStream_ = zipFile_.baseStream_;
 3717        readPos_ = start;
 3718        end_ = start + length;
 3719      }
 3720      #endregion
 3721
 3722      /// <summary>
 3723      /// Read a byte from this stream.
 3724      /// </summary>
 3725      /// <returns>Returns the byte read or -1 on end of stream.</returns>
 3726      public override int ReadByte()
 3727      {
 3728        if (readPos_ >= end_) {
 3729           // -1 is the correct value at end of stream.
 3730          return -1;
 3731        }
 3732
 3733        lock( baseStream_ ) {
 3734          baseStream_.Seek(readPos_++, SeekOrigin.Begin);
 3735          return baseStream_.ReadByte();
 3736        }
 3737      }
 3738
 3739      /// <summary>
 3740      /// Close this <see cref="PartialInputStream">partial input stream</see>.
 3741      /// </summary>
 3742      /// <remarks>
 3743      /// The underlying stream is not closed.  Close the parent ZipFile class to do that.
 3744      /// </remarks>
 3745      public override void Close()
 3746      {
 3747        // Do nothing at all!
 3748      }
 3749
 3750      /// <summary>
 3751      /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of
 3752      /// </summary>
 3753      /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte array
 3754      /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the cur
 3755      /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3756      /// <returns>
 3757      /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that ma
 3758      /// </returns>
 3759      /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer length. </e
 3760      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3761      /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3762      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3763      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3764      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3765      public override int Read(byte[] buffer, int offset, int count)
 3766      {
 3767        lock(baseStream_) {
 3768          if (count > end_ - readPos_) {
 3769            count = (int) (end_ - readPos_);
 3770            if (count == 0) {
 3771              return 0;
 3772            }
 3773          }
 3774
 3775          baseStream_.Seek(readPos_, SeekOrigin.Begin);
 3776          int readCount = baseStream_.Read(buffer, offset, count);
 3777          if (readCount > 0) {
 3778            readPos_ += readCount;
 3779          }
 3780          return readCount;
 3781        }
 3782      }
 3783
 3784      /// <summary>
 3785      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3786      /// </summary>
 3787      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3788      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3789      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3790      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3791      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3792      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3793      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3794      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3795      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3796      public override void Write(byte[] buffer, int offset, int count)
 3797      {
 3798        throw new NotSupportedException();
 3799      }
 3800
 3801      /// <summary>
 3802      /// When overridden in a derived class, sets the length of the current stream.
 3803      /// </summary>
 3804      /// <param name="value">The desired length of the current stream in bytes.</param>
 3805      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3806      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3807      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3808      public override void SetLength(long value)
 3809      {
 3810        throw new NotSupportedException();
 3811      }
 3812
 3813      /// <summary>
 3814      /// When overridden in a derived class, sets the position within the current stream.
 3815      /// </summary>
 3816      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3817      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3818      /// <returns>
 3819      /// The new position within the current stream.
 3820      /// </returns>
 3821      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3822      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3823      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3824      public override long Seek(long offset, SeekOrigin origin)
 3825      {
 3826        long newPos = readPos_;
 3827
 3828        switch ( origin )
 3829        {
 3830          case SeekOrigin.Begin:
 3831            newPos = start_ + offset;
 3832            break;
 3833
 3834          case SeekOrigin.Current:
 3835            newPos = readPos_ + offset;
 3836            break;
 3837
 3838          case SeekOrigin.End:
 3839            newPos = end_ + offset;
 3840            break;
 3841        }
 3842
 3843        if ( newPos < start_ ) {
 3844          throw new ArgumentException("Negative position is invalid");
 3845        }
 3846
 3847        if ( newPos >= end_ ) {
 3848          throw new IOException("Cannot seek past end");
 3849        }
 3850        readPos_ = newPos;
 3851        return readPos_;
 3852      }
 3853
 3854      /// <summary>
 3855      /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device.
 3856      /// </summary>
 3857      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3858      public override void Flush()
 3859      {
 3860        // Nothing to do.
 3861      }
 3862
 3863      /// <summary>
 3864      /// Gets or sets the position within the current stream.
 3865      /// </summary>
 3866      /// <value></value>
 3867      /// <returns>The current position within the stream.</returns>
 3868      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3869      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking. </exception>
 3870      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3871      public override long Position {
 3872        get { return readPos_ - start_; }
 3873        set {
 3874          long newPos = start_ + value;
 3875
 3876          if ( newPos < start_ ) {
 3877            throw new ArgumentException("Negative position is invalid");
 3878          }
 3879
 3880          if ( newPos >= end_ ) {
 3881            throw new InvalidOperationException("Cannot seek past end");
 3882          }
 3883          readPos_ = newPos;
 3884        }
 3885      }
 3886
 3887      /// <summary>
 3888      /// Gets the length in bytes of the stream.
 3889      /// </summary>
 3890      /// <value></value>
 3891      /// <returns>A long value representing the length of the stream in bytes.</returns>
 3892      /// <exception cref="T:System.NotSupportedException">A class derived from Stream does not support seeking. </excep
 3893      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3894      public override long Length {
 3895        get { return length_; }
 3896      }
 3897
 3898      /// <summary>
 3899      /// Gets a value indicating whether the current stream supports writing.
 3900      /// </summary>
 3901      /// <value>false</value>
 3902      /// <returns>true if the stream supports writing; otherwise, false.</returns>
 3903      public override bool CanWrite {
 3904        get { return false; }
 3905      }
 3906
 3907      /// <summary>
 3908      /// Gets a value indicating whether the current stream supports seeking.
 3909      /// </summary>
 3910      /// <value>true</value>
 3911      /// <returns>true if the stream supports seeking; otherwise, false.</returns>
 3912      public override bool CanSeek {
 3913        get { return true; }
 3914      }
 3915
 3916      /// <summary>
 3917      /// Gets a value indicating whether the current stream supports reading.
 3918      /// </summary>
 3919      /// <value>true.</value>
 3920      /// <returns>true if the stream supports reading; otherwise, false.</returns>
 3921      public override bool CanRead {
 3922        get { return true; }
 3923      }
 3924
 3925#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 3926      /// <summary>
 3927      /// Gets a value that determines whether the current stream can time out.
 3928      /// </summary>
 3929      /// <value></value>
 3930      /// <returns>A value that determines whether the current stream can time out.</returns>
 3931      public override bool CanTimeout {
 3932        get { return baseStream_.CanTimeout; }
 3933      }
 3934#endif
 3935      #region Instance Fields
 3936      ZipFile zipFile_;
 3937      Stream baseStream_;
 3938      long start_;
 3939      long length_;
 3940      long readPos_;
 3941      long end_;
 3942      #endregion
 3943    }
 3944    #endregion
 3945  }
 3946
 3947  #endregion
 3948
 3949  #region DataSources
 3950  /// <summary>
 3951  /// Provides a static way to obtain a source of data for an entry.
 3952  /// </summary>
 3953  public interface IStaticDataSource
 3954  {
 3955    /// <summary>
 3956    /// Get a source of data by creating a new stream.
 3957    /// </summary>
 3958    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3959    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3960    Stream GetSource();
 3961  }
 3962
 3963  /// <summary>
 3964  /// Represents a source of data that can dynamically provide
 3965  /// multiple <see cref="Stream">data sources</see> based on the parameters passed.
 3966  /// </summary>
 3967  public interface IDynamicDataSource
 3968  {
 3969    /// <summary>
 3970    /// Get a data source.
 3971    /// </summary>
 3972    /// <param name="entry">The <see cref="ZipEntry"/> to get a source for.</param>
 3973    /// <param name="name">The name for data if known.</param>
 3974    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3975    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3976    Stream GetSource(ZipEntry entry, string name);
 3977  }
 3978
 3979  /// <summary>
 3980  /// Default implementation of a <see cref="IStaticDataSource"/> for use with files stored on disk.
 3981  /// </summary>
 3982  public class StaticDiskDataSource : IStaticDataSource
 3983  {
 3984    /// <summary>
 3985    /// Initialise a new instnace of <see cref="StaticDiskDataSource"/>
 3986    /// </summary>
 3987    /// <param name="fileName">The name of the file to obtain data from.</param>
 3988    public StaticDiskDataSource(string fileName)
 3989    {
 3990      fileName_ = fileName;
 3991    }
 3992
 3993    #region IDataSource Members
 3994
 3995    /// <summary>
 3996    /// Get a <see cref="Stream"/> providing data.
 3997    /// </summary>
 3998    /// <returns>Returns a <see cref="Stream"/> provising data.</returns>
 3999    public Stream GetSource()
 4000    {
 4001      return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4002    }
 4003
 4004    readonly
 4005
 4006    #endregion
 4007    #region Instance Fields
 4008    string fileName_;
 4009    #endregion
 4010  }
 4011
 4012
 4013  /// <summary>
 4014  /// Default implementation of <see cref="IDynamicDataSource"/> for files stored on disk.
 4015  /// </summary>
 4016  public class DynamicDiskDataSource : IDynamicDataSource
 4017  {
 4018
 4019    #region IDataSource Members
 4020    /// <summary>
 4021    /// Get a <see cref="Stream"/> providing data for an entry.
 4022    /// </summary>
 4023    /// <param name="entry">The entry to provide data for.</param>
 4024    /// <param name="name">The file name for data if known.</param>
 4025    /// <returns>Returns a stream providing data; or null if not available</returns>
 4026    public Stream GetSource(ZipEntry entry, string name)
 4027    {
 4028      Stream result = null;
 4029
 4030      if ( name != null ) {
 4031        result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 4032      }
 4033
 4034      return result;
 4035    }
 4036
 4037    #endregion
 4038  }
 4039
 4040  #endregion
 4041
 4042  #region Archive Storage
 4043  /// <summary>
 4044  /// Defines facilities for data storage when updating Zip Archives.
 4045  /// </summary>
 4046  public interface IArchiveStorage
 4047  {
 4048    /// <summary>
 4049    /// Get the <see cref="FileUpdateMode"/> to apply during updates.
 4050    /// </summary>
 4051    FileUpdateMode UpdateMode { get; }
 4052
 4053    /// <summary>
 4054    /// Get an empty <see cref="Stream"/> that can be used for temporary output.
 4055    /// </summary>
 4056    /// <returns>Returns a temporary output <see cref="Stream"/></returns>
 4057    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4058    Stream GetTemporaryOutput();
 4059
 4060    /// <summary>
 4061    /// Convert a temporary output stream to a final stream.
 4062    /// </summary>
 4063    /// <returns>The resulting final <see cref="Stream"/></returns>
 4064    /// <seealso cref="GetTemporaryOutput"/>
 4065    Stream ConvertTemporaryToFinal();
 4066
 4067    /// <summary>
 4068    /// Make a temporary copy of the original stream.
 4069    /// </summary>
 4070    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4071    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4072    Stream MakeTemporaryCopy(Stream stream);
 4073
 4074    /// <summary>
 4075    /// Return a stream suitable for performing direct updates on the original source.
 4076    /// </summary>
 4077    /// <param name="stream">The current stream.</param>
 4078    /// <returns>Returns a stream suitable for direct updating.</returns>
 4079    /// <remarks>This may be the current stream passed.</remarks>
 4080    Stream OpenForDirectUpdate(Stream stream);
 4081
 4082    /// <summary>
 4083    /// Dispose of this instance.
 4084    /// </summary>
 4085    void Dispose();
 4086  }
 4087
 4088  /// <summary>
 4089  /// An abstract <see cref="IArchiveStorage"/> suitable for extension by inheritance.
 4090  /// </summary>
 4091  abstract public class BaseArchiveStorage : IArchiveStorage
 4092  {
 4093    #region Constructors
 4094    /// <summary>
 4095    /// Initializes a new instance of the <see cref="BaseArchiveStorage"/> class.
 4096    /// </summary>
 4097    /// <param name="updateMode">The update mode.</param>
 4098    protected BaseArchiveStorage(FileUpdateMode updateMode)
 4099    {
 4100      updateMode_ = updateMode;
 4101    }
 4102    #endregion
 4103
 4104    #region IArchiveStorage Members
 4105
 4106    /// <summary>
 4107    /// Gets a temporary output <see cref="Stream"/>
 4108    /// </summary>
 4109    /// <returns>Returns the temporary output stream.</returns>
 4110    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4111    public abstract Stream GetTemporaryOutput();
 4112
 4113    /// <summary>
 4114    /// Converts the temporary <see cref="Stream"/> to its final form.
 4115    /// </summary>
 4116    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4117    /// the final storage for the archive.</returns>
 4118    /// <seealso cref="GetTemporaryOutput"/>
 4119    public abstract Stream ConvertTemporaryToFinal();
 4120
 4121    /// <summary>
 4122    /// Make a temporary copy of a <see cref="Stream"/>.
 4123    /// </summary>
 4124    /// <param name="stream">The <see cref="Stream"/> to make a copy of.</param>
 4125    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4126    public abstract Stream MakeTemporaryCopy(Stream stream);
 4127
 4128    /// <summary>
 4129    /// Return a stream suitable for performing direct updates on the original source.
 4130    /// </summary>
 4131    /// <param name="stream">The <see cref="Stream"/> to open for direct update.</param>
 4132    /// <returns>Returns a stream suitable for direct updating.</returns>
 4133    public abstract Stream OpenForDirectUpdate(Stream stream);
 4134
 4135    /// <summary>
 4136    /// Disposes this instance.
 4137    /// </summary>
 4138    public abstract void Dispose();
 4139
 4140    /// <summary>
 4141    /// Gets the update mode applicable.
 4142    /// </summary>
 4143    /// <value>The update mode.</value>
 4144    public FileUpdateMode UpdateMode
 4145    {
 4146      get {
 4147        return updateMode_;
 4148      }
 4149    }
 4150
 4151    #endregion
 4152
 4153    #region Instance Fields
 4154    FileUpdateMode updateMode_;
 4155    #endregion
 4156  }
 4157
 4158  /// <summary>
 4159  /// An <see cref="IArchiveStorage"/> implementation suitable for hard disks.
 4160  /// </summary>
 4161  public class DiskArchiveStorage : BaseArchiveStorage
 4162  {
 4163    #region Constructors
 4164    /// <summary>
 4165    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4166    /// </summary>
 4167    /// <param name="file">The file.</param>
 4168    /// <param name="updateMode">The update mode.</param>
 4169    public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode)
 4170      : base(updateMode)
 4171    {
 4172      if ( file.Name == null ) {
 4173        throw new ZipException("Cant handle non file archives");
 4174      }
 4175
 4176      fileName_ = file.Name;
 4177    }
 4178
 4179    /// <summary>
 4180    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4181    /// </summary>
 4182    /// <param name="file">The file.</param>
 4183    public DiskArchiveStorage(ZipFile file)
 4184      : this(file, FileUpdateMode.Safe)
 4185    {
 4186    }
 4187    #endregion
 4188
 4189    #region IArchiveStorage Members
 4190
 4191    /// <summary>
 4192    /// Gets a temporary output <see cref="Stream"/> for performing updates on.
 4193    /// </summary>
 4194    /// <returns>Returns the temporary output stream.</returns>
 4195    public override Stream GetTemporaryOutput()
 4196    {
 4197      if ( temporaryName_ != null ) {
 4198        temporaryName_ = GetTempFileName(temporaryName_, true);
 4199        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4200      }
 4201      else {
 4202        // Determine where to place files based on internal strategy.
 4203        // Currently this is always done in system temp directory.
 4204        temporaryName_ = Path.GetTempFileName();
 4205        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4206      }
 4207
 4208      return temporaryStream_;
 4209    }
 4210
 4211    /// <summary>
 4212    /// Converts a temporary <see cref="Stream"/> to its final form.
 4213    /// </summary>
 4214    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4215    /// the final storage for the archive.</returns>
 4216    public override Stream ConvertTemporaryToFinal()
 4217    {
 4218      if ( temporaryStream_ == null ) {
 4219        throw new ZipException("No temporary stream has been created");
 4220      }
 4221
 4222      Stream result = null;
 4223
 4224      string moveTempName = GetTempFileName(fileName_, false);
 4225      bool newFileCreated = false;
 4226
 4227      try  {
 4228        temporaryStream_.Close();
 4229        File.Move(fileName_, moveTempName);
 4230        File.Move(temporaryName_, fileName_);
 4231        newFileCreated = true;
 4232        File.Delete(moveTempName);
 4233
 4234        result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4235      }
 4236      catch(Exception) {
 4237        result  = null;
 4238
 4239        // Try to roll back changes...
 4240        if ( !newFileCreated ) {
 4241          File.Move(moveTempName, fileName_);
 4242          File.Delete(temporaryName_);
 4243        }
 4244
 4245        throw;
 4246      }
 4247
 4248      return result;
 4249    }
 4250
 4251    /// <summary>
 4252    /// Make a temporary copy of a stream.
 4253    /// </summary>
 4254    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4255    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4256    public override Stream MakeTemporaryCopy(Stream stream)
 4257    {
 4258      stream.Close();
 4259
 4260      temporaryName_ = GetTempFileName(fileName_, true);
 4261      File.Copy(fileName_, temporaryName_, true);
 4262
 4263      temporaryStream_ = new FileStream(temporaryName_,
 4264        FileMode.Open,
 4265        FileAccess.ReadWrite);
 4266      return temporaryStream_;
 4267    }
 4268
 4269    /// <summary>
 4270    /// Return a stream suitable for performing direct updates on the original source.
 4271    /// </summary>
 4272    /// <param name="stream">The current stream.</param>
 4273    /// <returns>Returns a stream suitable for direct updating.</returns>
 4274    /// <remarks>If the <paramref name="stream"/> is not null this is used as is.</remarks>
 4275    public override Stream OpenForDirectUpdate(Stream stream)
 4276    {
 4277      Stream result;
 4278      if ((stream == null) || !stream.CanWrite)
 4279      {
 4280        if (stream != null) {
 4281          stream.Close();
 4282        }
 4283
 4284        result = new FileStream(fileName_,
 4285            FileMode.Open,
 4286            FileAccess.ReadWrite);
 4287      }
 4288      else
 4289      {
 4290        result = stream;
 4291      }
 4292
 4293      return result;
 4294    }
 4295
 4296    /// <summary>
 4297    /// Disposes this instance.
 4298    /// </summary>
 4299    public override void Dispose()
 4300    {
 4301      if ( temporaryStream_ != null ) {
 4302        temporaryStream_.Close();
 4303      }
 4304    }
 4305
 4306    #endregion
 4307
 4308    #region Internal routines
 4309    static string GetTempFileName(string original, bool makeTempFile)
 4310    {
 4311      string result = null;
 4312
 4313      if ( original == null ) {
 4314        result = Path.GetTempFileName();
 4315      }
 4316      else {
 4317        int counter = 0;
 4318        int suffixSeed = DateTime.Now.Second;
 4319
 4320        while ( result == null ) {
 4321          counter += 1;
 4322          string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter);
 4323          if ( !File.Exists(newName) ) {
 4324            if ( makeTempFile) {
 4325              try  {
 4326                // Try and create the file.
 4327                using ( FileStream stream = File.Create(newName) ) {
 4328                }
 4329                result = newName;
 4330              }
 4331              catch {
 4332                suffixSeed = DateTime.Now.Second;
 4333              }
 4334            }
 4335            else {
 4336              result = newName;
 4337            }
 4338          }
 4339        }
 4340      }
 4341      return result;
 4342    }
 4343    #endregion
 4344
 4345    #region Instance Fields
 4346    Stream temporaryStream_;
 4347    string fileName_;
 4348    string temporaryName_;
 4349    #endregion
 4350  }
 4351
 4352  /// <summary>
 4353  /// An <see cref="IArchiveStorage"/> implementation suitable for in memory streams.
 4354  /// </summary>
 4355  public class MemoryArchiveStorage : BaseArchiveStorage
 4356  {
 4357    #region Constructors
 4358    /// <summary>
 4359    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4360    /// </summary>
 4361    public MemoryArchiveStorage()
 4362      : base(FileUpdateMode.Direct)
 4363    {
 4364    }
 4365
 4366    /// <summary>
 4367    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4368    /// </summary>
 4369    /// <param name="updateMode">The <see cref="FileUpdateMode"/> to use</param>
 4370    /// <remarks>This constructor is for testing as memory streams dont really require safe mode.</remarks>
 4371    public MemoryArchiveStorage(FileUpdateMode updateMode)
 4372      : base(updateMode)
 4373    {
 4374    }
 4375
 4376    #endregion
 4377
 4378    #region Properties
 4379    /// <summary>
 4380    /// Get the stream returned by <see cref="ConvertTemporaryToFinal"/> if this was in fact called.
 4381    /// </summary>
 4382    public MemoryStream FinalStream
 4383    {
 4384      get { return finalStream_; }
 4385    }
 4386
 4387    #endregion
 4388
 4389    #region IArchiveStorage Members
 4390
 4391    /// <summary>
 4392    /// Gets the temporary output <see cref="Stream"/>
 4393    /// </summary>
 4394    /// <returns>Returns the temporary output stream.</returns>
 4395    public override Stream GetTemporaryOutput()
 4396    {
 4397      temporaryStream_ = new MemoryStream();
 4398      return temporaryStream_;
 4399    }
 4400
 4401    /// <summary>
 4402    /// Converts the temporary <see cref="Stream"/> to its final form.
 4403    /// </summary>
 4404    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4405    /// the final storage for the archive.</returns>
 4406    public override Stream ConvertTemporaryToFinal()
 4407    {
 4408      if ( temporaryStream_ == null ) {
 4409        throw new ZipException("No temporary stream has been created");
 4410      }
 4411
 4412      finalStream_ = new MemoryStream(temporaryStream_.ToArray());
 4413      return finalStream_;
 4414    }
 4415
 4416    /// <summary>
 4417    /// Make a temporary copy of the original stream.
 4418    /// </summary>
 4419    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4420    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4421    public override Stream MakeTemporaryCopy(Stream stream)
 4422    {
 4423      temporaryStream_ = new MemoryStream();
 4424      stream.Position = 0;
 4425      StreamUtils.Copy(stream, temporaryStream_, new byte[4096]);
 4426      return temporaryStream_;
 4427    }
 4428
 4429    /// <summary>
 4430    /// Return a stream suitable for performing direct updates on the original source.
 4431    /// </summary>
 4432    /// <param name="stream">The original source stream</param>
 4433    /// <returns>Returns a stream suitable for direct updating.</returns>
 4434    /// <remarks>If the <paramref name="stream"/> passed is not null this is used;
 4435    /// otherwise a new <see cref="MemoryStream"/> is returned.</remarks>
 4436    public override Stream OpenForDirectUpdate(Stream stream)
 4437    {
 4438      Stream result;
 4439      if ((stream == null) || !stream.CanWrite) {
 4440
 4441        result = new MemoryStream();
 4442
 4443        if (stream != null) {
 4444          stream.Position = 0;
 4445          StreamUtils.Copy(stream, result, new byte[4096]);
 4446
 4447          stream.Close();
 4448        }
 4449      }
 4450      else {
 4451        result = stream;
 4452      }
 4453
 4454      return result;
 4455    }
 4456
 4457    /// <summary>
 4458    /// Disposes this instance.
 4459    /// </summary>
 4460    public override void Dispose()
 4461    {
 4462      if ( temporaryStream_ != null ) {
 4463        temporaryStream_.Close();
 4464      }
 4465    }
 4466
 4467    #endregion
 4468
 4469    #region Instance Fields
 4470    MemoryStream temporaryStream_;
 4471    MemoryStream finalStream_;
 4472    #endregion
 4473  }
 4474
 4475  #endregion
 4476}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsNameTransform.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsNameTransform.htm new file mode 100644 index 000000000..621b42840 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsNameTransform.htm @@ -0,0 +1,320 @@ + + + + +ICSharpCode.SharpZipLib.Zip.WindowsNameTransform - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.WindowsNameTransform
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\WindowsNameTransform.cs
Covered lines:56
Uncovered lines:21
Coverable lines:77
Total lines:272
Line coverage:72.7%
Branch coverage:71.4%
+

Metrics

+ + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)283.3366.67
.ctor()1100100
TransformDirectory(...)371.4360
TransformFile(...)477.7871.43
IsValidName(...)300
.cctor()1100100
MakeValidName(...)1183.3376.19
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\WindowsNameTransform.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// WindowsNameTransform.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38using System.Text;
 39
 40using ICSharpCode.SharpZipLib.Core;
 41
 42namespace ICSharpCode.SharpZipLib.Zip
 43{
 44  /// <summary>
 45  /// WindowsNameTransform transforms <see cref="ZipFile"/> names to windows compatible ones.
 46  /// </summary>
 47  public class WindowsNameTransform : INameTransform
 48  {
 49    /// <summary>
 50    /// Initialises a new instance of <see cref="WindowsNameTransform"/>
 51    /// </summary>
 52    /// <param name="baseDirectory"></param>
 153    public WindowsNameTransform(string baseDirectory)
 54    {
 155       if ( baseDirectory == null ) {
 056        throw new ArgumentNullException(nameof(baseDirectory), "Directory name is invalid");
 57      }
 58
 159      BaseDirectory = baseDirectory;
 160    }
 61
 62    /// <summary>
 63    /// Initialise a default instance of <see cref="WindowsNameTransform"/>
 64    /// </summary>
 665    public WindowsNameTransform()
 66    {
 67      // Do nothing.
 668    }
 69
 70    /// <summary>
 71    /// Gets or sets a value containing the target directory to prefix values with.
 72    /// </summary>
 73    public string BaseDirectory
 74    {
 075      get { return _baseDirectory; }
 76      set {
 277         if ( value == null ) {
 078          throw new ArgumentNullException(nameof(value));
 79        }
 80
 281        _baseDirectory = Path.GetFullPath(value);
 282      }
 83    }
 84
 85    /// <summary>
 86    /// Gets or sets a value indicating wether paths on incoming values should be removed.
 87    /// </summary>
 88    public bool TrimIncomingPaths
 89    {
 090      get { return _trimIncomingPaths; }
 691      set { _trimIncomingPaths = value; }
 92    }
 93
 94    /// <summary>
 95    /// Transform a Zip directory name to a windows directory name.
 96    /// </summary>
 97    /// <param name="name">The directory name to transform.</param>
 98    /// <returns>The transformed name.</returns>
 99    public string TransformDirectory(string name)
 100    {
 7101      name = TransformFile(name);
 6102       if (name.Length > 0) {
 6103         while (name.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) {
 0104          name = name.Remove(name.Length - 1, 1);
 105        }
 6106      }
 107      else {
 0108        throw new ZipException("Cannot have an empty directory name");
 109      }
 6110      return name;
 111    }
 112
 113    /// <summary>
 114    /// Transform a Zip format file name to a windows style one.
 115    /// </summary>
 116    /// <param name="name">The file name to transform.</param>
 117    /// <returns>The transformed name.</returns>
 118    public string TransformFile(string name)
 119    {
 12120       if (name != null) {
 12121        name = MakeValidName(name, _replacementChar);
 122
 11123         if ( _trimIncomingPaths ) {
 0124          name = Path.GetFileName(name);
 125        }
 126
 127        // This may exceed windows length restrictions.
 128        // Combine will throw a PathTooLongException in that case.
 11129         if ( _baseDirectory != null ) {
 2130          name = Path.Combine(_baseDirectory, name);
 131        }
 2132      }
 133      else {
 0134        name = string.Empty;
 135      }
 11136      return name;
 137    }
 138
 139    /// <summary>
 140    /// Test a name to see if it is a valid name for a windows filename as extracted from a Zip archive.
 141    /// </summary>
 142    /// <param name="name">The name to test.</param>
 143    /// <returns>Returns true if the name is a valid zip name; false otherwise.</returns>
 144    /// <remarks>The filename isnt a true windows path in some fundamental ways like no absolute paths, no rooted paths 
 145    public static bool IsValidName(string name)
 146    {
 0147      bool result =
 0148        (name != null) &&
 0149        (name.Length <= MaxPath) &&
 0150        (string.Compare(name, MakeValidName(name, '_'), StringComparison.Ordinal) == 0)
 0151        ;
 152
 0153      return result;
 154    }
 155
 156    /// <summary>
 157    /// Initialise static class information.
 158    /// </summary>
 159    static WindowsNameTransform()
 160    {
 161      char[] invalidPathChars;
 162
 163#if NET_1_0 || NET_1_1 || NETCF_1_0
 164      invalidPathChars = Path.InvalidPathChars;
 165#else
 1166      invalidPathChars = Path.GetInvalidPathChars();
 167#endif
 1168      int howMany = invalidPathChars.Length + 3;
 169
 1170      InvalidEntryChars = new char[howMany];
 1171      Array.Copy(invalidPathChars, 0, InvalidEntryChars, 0, invalidPathChars.Length);
 1172      InvalidEntryChars[howMany - 1] = '*';
 1173      InvalidEntryChars[howMany - 2] = '?';
 1174      InvalidEntryChars[howMany - 3] = ':';
 1175    }
 176
 177    /// <summary>
 178    /// Force a name to be valid by replacing invalid characters with a fixed value
 179    /// </summary>
 180    /// <param name="name">The name to make valid</param>
 181    /// <param name="replacement">The replacement character to use for any invalid characters.</param>
 182    /// <returns>Returns a valid name</returns>
 183    public static string MakeValidName(string name, char replacement)
 184    {
 12185       if ( name == null ) {
 0186        throw new ArgumentNullException(nameof(name));
 187      }
 188
 12189      name = WindowsPathUtils.DropPathRoot(name.Replace("/", Path.DirectorySeparatorChar.ToString()));
 190
 191      // Drop any leading slashes.
 12192       while ( (name.Length > 0) && (name[0] == Path.DirectorySeparatorChar)) {
 0193        name = name.Remove(0, 1);
 194      }
 195
 196      // Drop any trailing slashes.
 14197       while ( (name.Length > 0) && (name[name.Length - 1] == Path.DirectorySeparatorChar)) {
 2198        name = name.Remove(name.Length - 1, 1);
 199      }
 200
 201      // Convert consecutive \\ characters to \
 12202      int index = name.IndexOf(string.Format("{0}{0}", Path.DirectorySeparatorChar), StringComparison.Ordinal);
 23203       while (index >= 0) {
 11204        name = name.Remove(index, 1);
 11205        index = name.IndexOf(Path.DirectorySeparatorChar);
 206      }
 207
 208      // Convert any invalid characters using the replacement one.
 12209      index = name.IndexOfAny(InvalidEntryChars);
 12210       if (index >= 0) {
 2211        var builder = new StringBuilder(name);
 212
 4213         while (index >= 0 ) {
 2214          builder[index] = replacement;
 215
 2216           if (index >= name.Length) {
 0217            index = -1;
 0218          }
 219          else {
 2220            index = name.IndexOfAny(InvalidEntryChars, index + 1);
 221          }
 222        }
 2223        name = builder.ToString();
 224      }
 225
 226      // Check for names greater than MaxPath characters.
 227      // TODO: Were is CLR version of MaxPath defined?  Can't find it in Environment.
 12228       if ( name.Length > MaxPath ) {
 1229        throw new PathTooLongException();
 230      }
 231
 11232      return name;
 233    }
 234
 235    /// <summary>
 236    /// Gets or set the character to replace invalid characters during transformations.
 237    /// </summary>
 238    public char Replacement
 239    {
 0240      get { return _replacementChar; }
 241      set {
 388242         for ( int i = 0; i < InvalidEntryChars.Length; ++i ) {
 192243           if ( InvalidEntryChars[i] == value ) {
 3244            throw new ArgumentException("invalid path character");
 245          }
 246        }
 247
 2248         if ((value == Path.DirectorySeparatorChar) || (value == Path.AltDirectorySeparatorChar)) {
 2249          throw new ArgumentException("invalid replacement character");
 250        }
 251
 0252        _replacementChar = value;
 0253      }
 254    }
 255
 256    /// <summary>
 257    ///  The maximum windows path name permitted.
 258    /// </summary>
 259    /// <remarks>This may not valid for all windows systems - CE?, etc but I cant find the equivalent in the CLR.</remar
 260    const int MaxPath = 260;
 261
 262    #region Instance Fields
 263    string _baseDirectory;
 264    bool _trimIncomingPaths;
 7265    char _replacementChar = '_';
 266    #endregion
 267
 268    #region Class Fields
 269    static readonly char[] InvalidEntryChars;
 270    #endregion
 271  }
 272}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsPathUtils.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsPathUtils.htm new file mode 100644 index 000000000..e21aab081 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsPathUtils.htm @@ -0,0 +1,137 @@ + + + + +ICSharpCode.SharpZipLib.Core.WindowsPathUtils - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.WindowsPathUtils
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\WindowsPathUtils.cs
Covered lines:19
Uncovered lines:4
Coverable lines:23
Total lines:94
Line coverage:82.6%
Branch coverage:76.6%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
DropPathRoot(...)179077.42
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\WindowsPathUtils.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// WindowsPathUtils.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36namespace ICSharpCode.SharpZipLib.Core
 37{
 38  /// <summary>
 39  /// WindowsPathUtils provides simple utilities for handling windows paths.
 40  /// </summary>
 41  public abstract class WindowsPathUtils
 42  {
 43    /// <summary>
 44    /// Initializes a new instance of the <see cref="WindowsPathUtils"/> class.
 45    /// </summary>
 046    internal WindowsPathUtils()
 47    {
 048    }
 49
 50    /// <summary>
 51    /// Remove any path root present in the path
 52    /// </summary>
 53    /// <param name="path">A <see cref="string"/> containing path information.</param>
 54    /// <returns>The path with the root removed if it was present; path otherwise.</returns>
 55    /// <remarks>Unlike the <see cref="System.IO.Path"/> class the path isnt otherwise checked for validity.</remarks>
 56    public static string DropPathRoot(string path)
 57    {
 6594858      string result = path;
 59
 6594860       if ( !string.IsNullOrEmpty(path)) {
 6594861         if ((path[0] == '\\') || (path[0] == '/')) {
 62          // UNC name ?
 663           if ((path.Length > 1) && ((path[1] == '\\') || (path[1] == '/'))) {
 164            int index = 2;
 165            int elements = 2;
 66
 67            // Scan for two separate elements \\machine\share\restofpath
 1168             while ((index <= path.Length) &&
 1169              (((path[index] != '\\') && (path[index] != '/')) || (--elements > 0))) {
 1070              index++;
 71            }
 72
 173            index++;
 74
 175             if (index < path.Length) {
 176              result = path.Substring(index);
 177            }
 78            else {
 079              result = "";
 80            }
 81          }
 082        }
 6594283         else if ((path.Length > 1) && (path[1] == ':')) {
 1884          int dropCount = 2;
 1885           if ((path.Length > 2) && ((path[2] == '\\') || (path[2] == '/'))) {
 1686            dropCount = 3;
 87          }
 1888          result = result.Remove(0, dropCount);
 89        }
 90      }
 6594891      return result;
 92    }
 93  }
 94}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESStream.htm new file mode 100644 index 000000000..3b050f522 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESStream.htm @@ -0,0 +1,214 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.ZipAESStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.ZipAESStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\ZipAESStream.cs
Covered lines:0
Uncovered lines:51
Coverable lines:51
Total lines:170
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)200
Read(...)900
Write(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\ZipAESStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// ZipAESStream.cs
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36//
 37
 38#if !NET_1_1 && !NETCF_2_0
 39
 40using System;
 41using System.IO;
 42using System.Security.Cryptography;
 43
 44namespace ICSharpCode.SharpZipLib.Encryption {
 45
 46  // Based on information from http://www.winzip.com/aes_info.htm
 47  // and http://www.gladman.me.uk/cryptography_technology/fileencrypt/
 48
 49  /// <summary>
 50  /// Encrypts and decrypts AES ZIP
 51  /// </summary>
 52  internal class ZipAESStream : CryptoStream {
 53
 54    /// <summary>
 55    /// Constructor
 56    /// </summary>
 57    /// <param name="stream">The stream on which to perform the cryptographic transformation.</param>
 58    /// <param name="transform">Instance of ZipAESTransform</param>
 59    /// <param name="mode">Read or Write</param>
 60    public ZipAESStream(Stream stream, ZipAESTransform transform, CryptoStreamMode mode)
 061      : base(stream, transform, mode) {
 62
 063      _stream = stream;
 064      _transform = transform;
 065      _slideBuffer = new byte[1024];
 66
 067      _blockAndAuth = CRYPTO_BLOCK_SIZE + AUTH_CODE_LENGTH;
 68
 69      // mode:
 70      //  CryptoStreamMode.Read means we read from "stream" and pass decrypted to our Read() method.
 71      //  Write bypasses this stream and uses the Transform directly.
 072       if (mode != CryptoStreamMode.Read) {
 073        throw new Exception("ZipAESStream only for read");
 74      }
 075    }
 76
 77    // The final n bytes of the AES stream contain the Auth Code.
 78    private const int AUTH_CODE_LENGTH = 10;
 79
 80    private Stream _stream;
 81    private ZipAESTransform _transform;
 82    private byte[] _slideBuffer;
 83    private int _slideBufStartPos;
 84    private int _slideBufFreePos;
 85    // Blocksize is always 16 here, even for AES-256 which has transform.InputBlockSize of 32.
 86    private const int CRYPTO_BLOCK_SIZE = 16;
 87    private int _blockAndAuth;
 88
 89    /// <summary>
 90    /// Reads a sequence of bytes from the current CryptoStream into buffer,
 91    /// and advances the position within the stream by the number of bytes read.
 92    /// </summary>
 93    public override int Read(byte[] buffer, int offset, int count) {
 094      int nBytes = 0;
 095       while (nBytes < count) {
 96        // Calculate buffer quantities vs read-ahead size, and check for sufficient free space
 097        int byteCount = _slideBufFreePos - _slideBufStartPos;
 98
 99        // Need to handle final block and Auth Code specially, but don't know total data length.
 100        // Maintain a read-ahead equal to the length of (crypto block + Auth Code).
 101        // When that runs out we can detect these final sections.
 0102        int lengthToRead = _blockAndAuth - byteCount;
 0103         if (_slideBuffer.Length - _slideBufFreePos < lengthToRead) {
 104          // Shift the data to the beginning of the buffer
 0105          int iTo = 0;
 0106           for (int iFrom = _slideBufStartPos; iFrom < _slideBufFreePos; iFrom++, iTo++) {
 0107            _slideBuffer[iTo] = _slideBuffer[iFrom];
 108          }
 0109          _slideBufFreePos -= _slideBufStartPos;    // Note the -=
 0110          _slideBufStartPos = 0;
 111        }
 0112        int obtained = _stream.Read(_slideBuffer, _slideBufFreePos, lengthToRead);
 0113        _slideBufFreePos += obtained;
 114
 115        // Recalculate how much data we now have
 0116        byteCount = _slideBufFreePos - _slideBufStartPos;
 0117         if (byteCount >= _blockAndAuth) {
 118          // At least a 16 byte block and an auth code remains.
 0119          _transform.TransformBlock(_slideBuffer,
 0120                        _slideBufStartPos,
 0121                        CRYPTO_BLOCK_SIZE,
 0122                        buffer,
 0123                        offset);
 0124          nBytes += CRYPTO_BLOCK_SIZE;
 0125          offset += CRYPTO_BLOCK_SIZE;
 0126          _slideBufStartPos += CRYPTO_BLOCK_SIZE;
 0127        } else {
 128          // Last round.
 0129           if (byteCount > AUTH_CODE_LENGTH) {
 130            // At least one byte of data plus auth code
 0131            int finalBlock = byteCount - AUTH_CODE_LENGTH;
 0132            _transform.TransformBlock(_slideBuffer,
 0133                          _slideBufStartPos,
 0134                          finalBlock,
 0135                          buffer,
 0136                          offset);
 137
 0138            nBytes += finalBlock;
 0139            _slideBufStartPos += finalBlock;
 0140          }
 0141           else if (byteCount < AUTH_CODE_LENGTH)
 0142            throw new Exception("Internal error missed auth code");  // Coding bug
 143          // Final block done. Check Auth code.
 0144          byte[] calcAuthCode = _transform.GetAuthCode();
 0145           for (int i = 0; i < AUTH_CODE_LENGTH; i++) {
 0146             if (calcAuthCode[i] != _slideBuffer[_slideBufStartPos + i]) {
 0147              throw new Exception("AES Authentication Code does not match. This is a super-CRC check on the data in the 
 0148                + "The file may be damaged.");
 149            }
 150          }
 151
 0152          break;  // Reached the auth code
 153        }
 154      }
 0155      return nBytes;
 156    }
 157
 158    /// <summary>
 159    /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the num
 160    /// </summary>
 161    /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream. </para
 162    /// <param name="offset">The byte offset in buffer at which to begin copying bytes to the current stream. </param>
 163    /// <param name="count">The number of bytes to be written to the current stream. </param>
 164    public override void Write(byte[] buffer, int offset, int count) {
 165      // ZipAESStream is used for reading but not for writing. Writing uses the ZipAESTransform directly.
 0166      throw new NotImplementedException();
 167    }
 168  }
 169}
 170#endif
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESTransform.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESTransform.htm new file mode 100644 index 000000000..9e359af8e --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESTransform.htm @@ -0,0 +1,265 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.ZipAESTransform - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.ZipAESTransform
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\ZipAESTransform.cs
Covered lines:0
Uncovered lines:47
Coverable lines:47
Total lines:219
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)400
TransformBlock(...)600
GetAuthCode()200
TransformFinalBlock(...)100
Dispose()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\ZipAESTransform.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// ZipAESTransform.cs
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36//
 37
 38#if !NET_1_1 && !NETCF_2_0
 39// Framework version 2.0 required for Rfc2898DeriveBytes
 40
 41using System;
 42using System.Security.Cryptography;
 43
 44namespace ICSharpCode.SharpZipLib.Encryption {
 45
 46  /// <summary>
 47  /// Transforms stream using AES in CTR mode
 48  /// </summary>
 49  internal class ZipAESTransform : ICryptoTransform {
 50
 51    private const int PWD_VER_LENGTH = 2;
 52
 53    // WinZip use iteration count of 1000 for PBKDF2 key generation
 54    private const int KEY_ROUNDS = 1000;
 55
 56    // For 128-bit AES (16 bytes) the encryption is implemented as expected.
 57    // For 256-bit AES (32 bytes) WinZip do full 256 bit AES of the nonce to create the encryption
 58    // block but use only the first 16 bytes of it, and discard the second half.
 59    private const int ENCRYPT_BLOCK = 16;
 60
 61    private int _blockSize;
 62    private readonly ICryptoTransform _encryptor;
 63    private readonly byte[] _counterNonce;
 64    private byte[] _encryptBuffer;
 65    private int _encrPos;
 66    private byte[] _pwdVerifier;
 67    private HMACSHA1 _hmacsha1;
 68    private bool _finalised;
 69
 70    private bool _writeMode;
 71
 72    /// <summary>
 73    /// Constructor.
 74    /// </summary>
 75    /// <param name="key">Password string</param>
 76    /// <param name="saltBytes">Random bytes, length depends on encryption strength.
 77    /// 128 bits = 8 bytes, 192 bits = 12 bytes, 256 bits = 16 bytes.</param>
 78    /// <param name="blockSize">The encryption strength, in bytes eg 16 for 128 bits.</param>
 79    /// <param name="writeMode">True when creating a zip, false when reading. For the AuthCode.</param>
 80    ///
 081    public ZipAESTransform(string key, byte[] saltBytes, int blockSize, bool writeMode) {
 82
 083       if (blockSize != 16 && blockSize != 32)  // 24 valid for AES but not supported by Winzip
 084        throw new Exception("Invalid blocksize " + blockSize + ". Must be 16 or 32.");
 085       if (saltBytes.Length != blockSize / 2)
 086        throw new Exception("Invalid salt len. Must be " + blockSize / 2 + " for blocksize " + blockSize);
 87      // initialise the encryption buffer and buffer pos
 088      _blockSize = blockSize;
 089      _encryptBuffer = new byte[_blockSize];
 090      _encrPos = ENCRYPT_BLOCK;
 91
 92      // Performs the equivalent of derive_key in Dr Brian Gladman's pwd2key.c
 093      var pdb = new Rfc2898DeriveBytes(key, saltBytes, KEY_ROUNDS);
 094      var rm = new RijndaelManaged();
 095      rm.Mode = CipherMode.ECB;      // No feedback from cipher for CTR mode
 096      _counterNonce = new byte[_blockSize];
 097      byte[] byteKey1 = pdb.GetBytes(_blockSize);
 098      byte[] byteKey2 = pdb.GetBytes(_blockSize);
 099      _encryptor = rm.CreateEncryptor(byteKey1, byteKey2);
 0100      _pwdVerifier = pdb.GetBytes(PWD_VER_LENGTH);
 101      //
 0102      _hmacsha1 = new HMACSHA1(byteKey2);
 0103      _writeMode = writeMode;
 0104    }
 105
 106    /// <summary>
 107    /// Implement the ICryptoTransform method.
 108    /// </summary>
 109    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 110
 111      // Pass the data stream to the hash algorithm for generating the Auth Code.
 112      // This does not change the inputBuffer. Do this before decryption for read mode.
 0113       if (!_writeMode) {
 0114        _hmacsha1.TransformBlock(inputBuffer, inputOffset, inputCount, inputBuffer, inputOffset);
 115      }
 116      // Encrypt with AES in CTR mode. Regards to Dr Brian Gladman for this.
 0117      int ix = 0;
 0118       while (ix < inputCount) {
 0119         if (_encrPos == ENCRYPT_BLOCK) {
 120          /* increment encryption nonce   */
 0121          int j = 0;
 0122           while (++_counterNonce[j] == 0) {
 0123            ++j;
 124          }
 125          /* encrypt the nonce to form next xor buffer    */
 0126          _encryptor.TransformBlock(_counterNonce, 0, _blockSize, _encryptBuffer, 0);
 0127          _encrPos = 0;
 128        }
 0129        outputBuffer[ix + outputOffset] = (byte)(inputBuffer[ix + inputOffset] ^ _encryptBuffer[_encrPos++]);
 130        //
 0131        ix++;
 132      }
 0133       if (_writeMode) {
 134        // This does not change the buffer.
 0135        _hmacsha1.TransformBlock(outputBuffer, outputOffset, inputCount, outputBuffer, outputOffset);
 136      }
 0137      return inputCount;
 138    }
 139
 140    /// <summary>
 141    /// Returns the 2 byte password verifier
 142    /// </summary>
 143    public byte[] PwdVerifier {
 144      get {
 0145        return _pwdVerifier;
 146      }
 147    }
 148
 149    /// <summary>
 150    /// Returns the 10 byte AUTH CODE to be checked or appended immediately following the AES data stream.
 151    /// </summary>
 152    public byte[] GetAuthCode() {
 153      // We usually don't get advance notice of final block. Hash requres a TransformFinal.
 0154       if (!_finalised) {
 0155        byte[] dummy = new byte[0];
 0156        _hmacsha1.TransformFinalBlock(dummy, 0, 0);
 0157        _finalised = true;
 158      }
 0159      return _hmacsha1.Hash;
 160    }
 161
 162    #region ICryptoTransform Members
 163
 164    /// <summary>
 165    /// Not implemented.
 166    /// </summary>
 167    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) {
 168
 0169      throw new NotImplementedException("ZipAESTransform.TransformFinalBlock");
 170    }
 171
 172    /// <summary>
 173    /// Gets the size of the input data blocks in bytes.
 174    /// </summary>
 175    public int InputBlockSize {
 176      get {
 0177        return _blockSize;
 178      }
 179    }
 180
 181    /// <summary>
 182    /// Gets the size of the output data blocks in bytes.
 183    /// </summary>
 184    public int OutputBlockSize {
 185      get {
 0186        return _blockSize;
 187      }
 188    }
 189
 190    /// <summary>
 191    /// Gets a value indicating whether multiple blocks can be transformed.
 192    /// </summary>
 193    public bool CanTransformMultipleBlocks {
 194      get {
 0195        return true;
 196      }
 197    }
 198
 199    /// <summary>
 200    /// Gets a value indicating whether the current transform can be reused.
 201    /// </summary>
 202    public bool CanReuseTransform {
 203      get {
 0204        return true;
 205      }
 206    }
 207
 208    /// <summary>
 209    /// Cleanup internal state.
 210    /// </summary>
 211    public void Dispose() {
 0212      _encryptor.Dispose();
 0213    }
 214
 215    #endregion
 216
 217  }
 218}
 219#endif
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipConstants.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipConstants.htm new file mode 100644 index 000000000..d0efd1e5e --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipConstants.htm @@ -0,0 +1,696 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipConstants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipConstants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipConstants.cs
Covered lines:29
Uncovered lines:8
Coverable lines:37
Total lines:647
Line coverage:78.3%
Branch coverage:63.3%
+

Metrics

+ + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
ConvertToString(...)266.6766.67
ConvertToString(...)266.6766.67
ConvertToStringExt(...)38080
ConvertToStringExt(...)38080
ConvertToArray(...)2100100
ConvertToArray(...)38080
.ctor()100
.cctor()5100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipConstants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipConstants.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  22-12-2009  DavidPierson  Added AES support
 41
 42using System;
 43using System.Text;
 44using System.Threading;
 45
 46#if NETCF_1_0 || NETCF_2_0
 47using System.Globalization;
 48#endif
 49
 50namespace ICSharpCode.SharpZipLib.Zip
 51{
 52
 53  #region Enumerations
 54
 55  /// <summary>
 56  /// Determines how entries are tested to see if they should use Zip64 extensions or not.
 57  /// </summary>
 58  public enum UseZip64
 59  {
 60    /// <summary>
 61    /// Zip64 will not be forced on entries during processing.
 62    /// </summary>
 63    /// <remarks>An entry can have this overridden if required <see cref="ZipEntry.ForceZip64"></see></remarks>
 64    Off,
 65    /// <summary>
 66    /// Zip64 should always be used.
 67    /// </summary>
 68    On,
 69    /// <summary>
 70    /// #ZipLib will determine use based on entry values when added to archive.
 71    /// </summary>
 72    Dynamic,
 73  }
 74
 75  /// <summary>
 76  /// The kind of compression used for an entry in an archive
 77  /// </summary>
 78  public enum CompressionMethod
 79  {
 80    /// <summary>
 81    /// A direct copy of the file contents is held in the archive
 82    /// </summary>
 83    Stored     = 0,
 84
 85    /// <summary>
 86    /// Common Zip compression method using a sliding dictionary
 87    /// of up to 32KB and secondary compression from Huffman/Shannon-Fano trees
 88    /// </summary>
 89    Deflated   = 8,
 90
 91    /// <summary>
 92    /// An extension to deflate with a 64KB window. Not supported by #Zip currently
 93    /// </summary>
 94    Deflate64  = 9,
 95
 96    /// <summary>
 97    /// BZip2 compression. Not supported by #Zip.
 98    /// </summary>
 99    BZip2      = 11,
 100
 101    /// <summary>
 102    /// WinZip special for AES encryption, Now supported by #Zip.
 103    /// </summary>
 104    WinZipAES  = 99,
 105
 106  }
 107
 108  /// <summary>
 109  /// Identifies the encryption algorithm used for an entry
 110  /// </summary>
 111  public enum EncryptionAlgorithm
 112  {
 113    /// <summary>
 114    /// No encryption has been used.
 115    /// </summary>
 116    None           = 0,
 117    /// <summary>
 118    /// Encrypted using PKZIP 2.0 or 'classic' encryption.
 119    /// </summary>
 120    PkzipClassic   = 1,
 121    /// <summary>
 122    /// DES encryption has been used.
 123    /// </summary>
 124    Des            = 0x6601,
 125    /// <summary>
 126    /// RC2 encryption has been used for encryption.
 127    /// </summary>
 128    RC2            = 0x6602,
 129    /// <summary>
 130    /// Triple DES encryption with 168 bit keys has been used for this entry.
 131    /// </summary>
 132    TripleDes168   = 0x6603,
 133    /// <summary>
 134    /// Triple DES with 112 bit keys has been used for this entry.
 135    /// </summary>
 136    TripleDes112   = 0x6609,
 137    /// <summary>
 138    /// AES 128 has been used for encryption.
 139    /// </summary>
 140    Aes128         = 0x660e,
 141    /// <summary>
 142    /// AES 192 has been used for encryption.
 143    /// </summary>
 144    Aes192         = 0x660f,
 145    /// <summary>
 146    /// AES 256 has been used for encryption.
 147    /// </summary>
 148    Aes256         = 0x6610,
 149    /// <summary>
 150    /// RC2 corrected has been used for encryption.
 151    /// </summary>
 152    RC2Corrected   = 0x6702,
 153    /// <summary>
 154    /// Blowfish has been used for encryption.
 155    /// </summary>
 156    Blowfish = 0x6720,
 157    /// <summary>
 158    /// Twofish has been used for encryption.
 159    /// </summary>
 160    Twofish = 0x6721,
 161    /// <summary>
 162    /// RC4 has been used for encryption.
 163    /// </summary>
 164    RC4            = 0x6801,
 165    /// <summary>
 166    /// An unknown algorithm has been used for encryption.
 167    /// </summary>
 168    Unknown        = 0xffff
 169  }
 170
 171  /// <summary>
 172  /// Defines the contents of the general bit flags field for an archive entry.
 173  /// </summary>
 174  [Flags]
 175  public enum GeneralBitFlags
 176  {
 177    /// <summary>
 178    /// Bit 0 if set indicates that the file is encrypted
 179    /// </summary>
 180    Encrypted = 0x0001,
 181    /// <summary>
 182    /// Bits 1 and 2 - Two bits defining the compression method (only for Method 6 Imploding and 8,9 Deflating)
 183    /// </summary>
 184    Method = 0x0006,
 185    /// <summary>
 186    /// Bit 3 if set indicates a trailing data desciptor is appended to the entry data
 187    /// </summary>
 188    Descriptor = 0x0008,
 189    /// <summary>
 190    /// Bit 4 is reserved for use with method 8 for enhanced deflation
 191    /// </summary>
 192    ReservedPKware4 = 0x0010,
 193    /// <summary>
 194    /// Bit 5 if set indicates the file contains Pkzip compressed patched data.
 195    /// Requires version 2.7 or greater.
 196    /// </summary>
 197    Patched = 0x0020,
 198    /// <summary>
 199    /// Bit 6 if set indicates strong encryption has been used for this entry.
 200    /// </summary>
 201    StrongEncryption = 0x0040,
 202    /// <summary>
 203    /// Bit 7 is currently unused
 204    /// </summary>
 205    Unused7 = 0x0080,
 206    /// <summary>
 207    /// Bit 8 is currently unused
 208    /// </summary>
 209    Unused8 = 0x0100,
 210    /// <summary>
 211    /// Bit 9 is currently unused
 212    /// </summary>
 213    Unused9 = 0x0200,
 214    /// <summary>
 215    /// Bit 10 is currently unused
 216    /// </summary>
 217    Unused10 = 0x0400,
 218    /// <summary>
 219    /// Bit 11 if set indicates the filename and
 220    /// comment fields for this file must be encoded using UTF-8.
 221    /// </summary>
 222    UnicodeText = 0x0800,
 223    /// <summary>
 224    /// Bit 12 is documented as being reserved by PKware for enhanced compression.
 225    /// </summary>
 226    EnhancedCompress = 0x1000,
 227    /// <summary>
 228    /// Bit 13 if set indicates that values in the local header are masked to hide
 229    /// their actual values, and the central directory is encrypted.
 230    /// </summary>
 231    /// <remarks>
 232    /// Used when encrypting the central directory contents.
 233    /// </remarks>
 234    HeaderMasked = 0x2000,
 235    /// <summary>
 236    /// Bit 14 is documented as being reserved for use by PKware
 237    /// </summary>
 238    ReservedPkware14 = 0x4000,
 239    /// <summary>
 240    /// Bit 15 is documented as being reserved for use by PKware
 241    /// </summary>
 242    ReservedPkware15 = 0x8000
 243  }
 244
 245  #endregion
 246
 247  /// <summary>
 248  /// This class contains constants used for Zip format files
 249  /// </summary>
 250  public sealed class ZipConstants
 251  {
 252    #region Versions
 253    /// <summary>
 254    /// The version made by field for entries in the central header when created by this library
 255    /// </summary>
 256    /// <remarks>
 257    /// This is also the Zip version for the library when comparing against the version required to extract
 258    /// for an entry.  See <see cref="ZipEntry.CanDecompress"/>.
 259    /// </remarks>
 260    public const int VersionMadeBy = 51; // was 45 before AES
 261
 262    /// <summary>
 263    /// The version made by field for entries in the central header when created by this library
 264    /// </summary>
 265    /// <remarks>
 266    /// This is also the Zip version for the library when comparing against the version required to extract
 267    /// for an entry.  See <see cref="ZipInputStream.CanDecompressEntry">ZipInputStream.CanDecompressEntry</see>.
 268    /// </remarks>
 269    [Obsolete("Use VersionMadeBy instead")]
 270    public const int VERSION_MADE_BY = 51;
 271
 272    /// <summary>
 273    /// The minimum version required to support strong encryption
 274    /// </summary>
 275    public const int VersionStrongEncryption = 50;
 276
 277    /// <summary>
 278    /// The minimum version required to support strong encryption
 279    /// </summary>
 280    [Obsolete("Use VersionStrongEncryption instead")]
 281    public const int VERSION_STRONG_ENCRYPTION = 50;
 282
 283    /// <summary>
 284    /// Version indicating AES encryption
 285    /// </summary>
 286    public const int VERSION_AES = 51;
 287
 288    /// <summary>
 289    /// The version required for Zip64 extensions (4.5 or higher)
 290    /// </summary>
 291    public const int VersionZip64 = 45;
 292    #endregion
 293
 294    #region Header Sizes
 295    /// <summary>
 296    /// Size of local entry header (excluding variable length fields at end)
 297    /// </summary>
 298    public const int LocalHeaderBaseSize = 30;
 299
 300    /// <summary>
 301    /// Size of local entry header (excluding variable length fields at end)
 302    /// </summary>
 303    [Obsolete("Use LocalHeaderBaseSize instead")]
 304    public const int LOCHDR = 30;
 305
 306    /// <summary>
 307    /// Size of Zip64 data descriptor
 308    /// </summary>
 309    public const int Zip64DataDescriptorSize = 24;
 310
 311    /// <summary>
 312    /// Size of data descriptor
 313    /// </summary>
 314    public const int DataDescriptorSize = 16;
 315
 316    /// <summary>
 317    /// Size of data descriptor
 318    /// </summary>
 319    [Obsolete("Use DataDescriptorSize instead")]
 320    public const int EXTHDR = 16;
 321
 322    /// <summary>
 323    /// Size of central header entry (excluding variable fields)
 324    /// </summary>
 325    public const int CentralHeaderBaseSize = 46;
 326
 327    /// <summary>
 328    /// Size of central header entry
 329    /// </summary>
 330    [Obsolete("Use CentralHeaderBaseSize instead")]
 331    public const int CENHDR = 46;
 332
 333    /// <summary>
 334    /// Size of end of central record (excluding variable fields)
 335    /// </summary>
 336    public const int EndOfCentralRecordBaseSize = 22;
 337
 338    /// <summary>
 339    /// Size of end of central record (excluding variable fields)
 340    /// </summary>
 341    [Obsolete("Use EndOfCentralRecordBaseSize instead")]
 342    public const int ENDHDR = 22;
 343
 344    /// <summary>
 345    /// Size of 'classic' cryptographic header stored before any entry data
 346    /// </summary>
 347    public const int CryptoHeaderSize = 12;
 348
 349    /// <summary>
 350    /// Size of cryptographic header stored before entry data
 351    /// </summary>
 352    [Obsolete("Use CryptoHeaderSize instead")]
 353    public const int CRYPTO_HEADER_SIZE = 12;
 354    #endregion
 355
 356    #region Header Signatures
 357
 358    /// <summary>
 359    /// Signature for local entry header
 360    /// </summary>
 361    public const int LocalHeaderSignature = 'P' | ('K' << 8) | (3 << 16) | (4 << 24);
 362
 363    /// <summary>
 364    /// Signature for local entry header
 365    /// </summary>
 366    [Obsolete("Use LocalHeaderSignature instead")]
 367    public const int LOCSIG = 'P' | ('K' << 8) | (3 << 16) | (4 << 24);
 368
 369    /// <summary>
 370    /// Signature for spanning entry
 371    /// </summary>
 372    public const int SpanningSignature = 'P' | ('K' << 8) | (7 << 16) | (8 << 24);
 373
 374    /// <summary>
 375    /// Signature for spanning entry
 376    /// </summary>
 377    [Obsolete("Use SpanningSignature instead")]
 378    public const int SPANNINGSIG = 'P' | ('K' << 8) | (7 << 16) | (8 << 24);
 379
 380    /// <summary>
 381    /// Signature for temporary spanning entry
 382    /// </summary>
 383    public const int SpanningTempSignature = 'P' | ('K' << 8) | ('0' << 16) | ('0' << 24);
 384
 385    /// <summary>
 386    /// Signature for temporary spanning entry
 387    /// </summary>
 388    [Obsolete("Use SpanningTempSignature instead")]
 389    public const int SPANTEMPSIG = 'P' | ('K' << 8) | ('0' << 16) | ('0' << 24);
 390
 391    /// <summary>
 392    /// Signature for data descriptor
 393    /// </summary>
 394    /// <remarks>
 395    /// This is only used where the length, Crc, or compressed size isnt known when the
 396    /// entry is created and the output stream doesnt support seeking.
 397    /// The local entry cannot be 'patched' with the correct values in this case
 398    /// so the values are recorded after the data prefixed by this header, as well as in the central directory.
 399    /// </remarks>
 400    public const int DataDescriptorSignature = 'P' | ('K' << 8) | (7 << 16) | (8 << 24);
 401
 402    /// <summary>
 403    /// Signature for data descriptor
 404    /// </summary>
 405    /// <remarks>
 406    /// This is only used where the length, Crc, or compressed size isnt known when the
 407    /// entry is created and the output stream doesnt support seeking.
 408    /// The local entry cannot be 'patched' with the correct values in this case
 409    /// so the values are recorded after the data prefixed by this header, as well as in the central directory.
 410    /// </remarks>
 411    [Obsolete("Use DataDescriptorSignature instead")]
 412    public const int EXTSIG = 'P' | ('K' << 8) | (7 << 16) | (8 << 24);
 413
 414    /// <summary>
 415    /// Signature for central header
 416    /// </summary>
 417    [Obsolete("Use CentralHeaderSignature instead")]
 418    public const int CENSIG = 'P' | ('K' << 8) | (1 << 16) | (2 << 24);
 419
 420    /// <summary>
 421    /// Signature for central header
 422    /// </summary>
 423    public const int CentralHeaderSignature = 'P' | ('K' << 8) | (1 << 16) | (2 << 24);
 424
 425    /// <summary>
 426    /// Signature for Zip64 central file header
 427    /// </summary>
 428    public const int Zip64CentralFileHeaderSignature = 'P' | ('K' << 8) | (6 << 16) | (6 << 24);
 429
 430    /// <summary>
 431    /// Signature for Zip64 central file header
 432    /// </summary>
 433    [Obsolete("Use Zip64CentralFileHeaderSignature instead")]
 434    public const int CENSIG64 = 'P' | ('K' << 8) | (6 << 16) | (6 << 24);
 435
 436    /// <summary>
 437    /// Signature for Zip64 central directory locator
 438    /// </summary>
 439    public const int Zip64CentralDirLocatorSignature = 'P' | ('K' << 8) | (6 << 16) | (7 << 24);
 440
 441    /// <summary>
 442    /// Signature for archive extra data signature (were headers are encrypted).
 443    /// </summary>
 444    public const int ArchiveExtraDataSignature = 'P' | ('K' << 8) | (6 << 16) | (7 << 24);
 445
 446    /// <summary>
 447    /// Central header digitial signature
 448    /// </summary>
 449    public const int CentralHeaderDigitalSignature = 'P' | ('K' << 8) | (5 << 16) | (5 << 24);
 450
 451    /// <summary>
 452    /// Central header digitial signature
 453    /// </summary>
 454    [Obsolete("Use CentralHeaderDigitalSignaure instead")]
 455    public const int CENDIGITALSIG = 'P' | ('K' << 8) | (5 << 16) | (5 << 24);
 456
 457    /// <summary>
 458    /// End of central directory record signature
 459    /// </summary>
 460    public const int EndOfCentralDirectorySignature = 'P' | ('K' << 8) | (5 << 16) | (6 << 24);
 461
 462    /// <summary>
 463    /// End of central directory record signature
 464    /// </summary>
 465    [Obsolete("Use EndOfCentralDirectorySignature instead")]
 466    public const int ENDSIG = 'P' | ('K' << 8) | (5 << 16) | (6 << 24);
 467    #endregion
 468
 469#if NETCF_1_0 || NETCF_2_0
 470    // This isnt so great but is better than nothing.
 471        // Trying to work out an appropriate OEM code page would be good.
 472        // 850 is a good default for english speakers particularly in Europe.
 473    static int defaultCodePage = CultureInfo.CurrentCulture.TextInfo.ANSICodePage;
 474#else
 475      /// <remarks>
 476      /// Get OEM codepage from NetFX, which parses the NLP file with culture info table etc etc.
 477      /// But sometimes it yields the special value of 1 which is nicknamed <c>CodePageNoOEM</c> in <see cref="Encoding"
 478      /// This was observed on Ukranian and Hindu systems.
 479      /// Given this value, <see cref="Encoding.GetEncoding(int)"/> throws an <see cref="ArgumentException"/>.
 480      /// So replace it with some fallback, e.g. 437 which is the default cpcp in a console in a default Windows install
 481      /// </remarks>
 1482      static int defaultCodePage =
 1483            // these values cause ArgumentException in subsequent calls to Encoding::GetEncoding()
 1484            ((Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage == 1) || (Thread.CurrentThread.CurrentCulture.Tex
 1485            ? 437 // The default OEM encoding in a console in a default Windows installation, as a fallback.
 1486          : Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage;
 487#endif
 488
 489    /// <summary>
 490    /// Default encoding used for string conversion.  0 gives the default system OEM code page.
 491    /// Dont use unicode encodings if you want to be Zip compatible!
 492    /// Using the default code page isnt the full solution neccessarily
 493    /// there are many variable factors, codepage 850 is often a good choice for
 494    /// European users, however be careful about compatability.
 495    /// </summary>
 496    public static int DefaultCodePage {
 497      get {
 263846498        return defaultCodePage;
 499      }
 500      set {
 1501                 if ((value < 0) || (value > 65535) ||
 1502                    (value == 1) || (value == 2) || (value == 3) || (value == 42)) {
 0503                    throw new ArgumentOutOfRangeException(nameof(value));
 504                }
 505
 1506                defaultCodePage = value;
 1507      }
 508    }
 509
 510      /// <summary>
 511    /// Convert a portion of a byte array to a string.
 512    /// </summary>
 513    /// <param name="data">
 514    /// Data to convert to string
 515    /// </param>
 516    /// <param name="count">
 517    /// Number of bytes to convert starting from index 0
 518    /// </param>
 519    /// <returns>
 520    /// data[0]..data[count - 1] converted to a string
 521    /// </returns>
 522    public static string ConvertToString(byte[] data, int count)
 523    {
 131960524       if ( data == null ) {
 0525        return string.Empty;
 526      }
 527
 131960528      return Encoding.GetEncoding(DefaultCodePage).GetString(data, 0, count);
 529    }
 530
 531    /// <summary>
 532    /// Convert a byte array to string
 533    /// </summary>
 534    /// <param name="data">
 535    /// Byte array to convert
 536    /// </param>
 537    /// <returns>
 538    /// <paramref name="data">data</paramref>converted to a string
 539    /// </returns>
 540    public static string ConvertToString(byte[] data)
 541    {
 12542       if ( data == null ) {
 0543        return string.Empty;
 544      }
 12545      return ConvertToString(data, data.Length);
 546    }
 547
 548    /// <summary>
 549    /// Convert a byte array to string
 550    /// </summary>
 551    /// <param name="flags">The applicable general purpose bits flags</param>
 552    /// <param name="data">
 553    /// Byte array to convert
 554    /// </param>
 555    /// <param name="count">The number of bytes to convert.</param>
 556    /// <returns>
 557    /// <paramref name="data">data</paramref>converted to a string
 558    /// </returns>
 559    public static string ConvertToStringExt(int flags, byte[] data, int count)
 560    {
 65956561       if ( data == null ) {
 0562        return string.Empty;
 563      }
 564
 65956565       if ( (flags & (int)GeneralBitFlags.UnicodeText) != 0 ) {
 5566        return Encoding.UTF8.GetString(data, 0, count);
 567      }
 568      else {
 65951569        return ConvertToString(data, count);
 570      }
 571    }
 572
 573    /// <summary>
 574    /// Convert a byte array to string
 575    /// </summary>
 576    /// <param name="data">
 577    /// Byte array to convert
 578    /// </param>
 579    /// <param name="flags">The applicable general purpose bits flags</param>
 580    /// <returns>
 581    /// <paramref name="data">data</paramref>converted to a string
 582    /// </returns>
 583    public static string ConvertToStringExt(int flags, byte[] data)
 584    {
 66004585       if ( data == null ) {
 0586        return string.Empty;
 587      }
 588
 66004589       if ( (flags & (int)GeneralBitFlags.UnicodeText) != 0 ) {
 7590        return Encoding.UTF8.GetString(data, 0, data.Length);
 591      }
 592      else {
 65997593        return ConvertToString(data, data.Length);
 594      }
 595    }
 596
 597    /// <summary>
 598    /// Convert a string to a byte array
 599    /// </summary>
 600    /// <param name="str">
 601    /// String to convert to an array
 602    /// </param>
 603    /// <returns>Converted array</returns>
 604    public static byte[] ConvertToArray(string str)
 605    {
 131903606       if ( str == null ) {
 17607        return new byte[0];
 608      }
 609
 131886610      return Encoding.GetEncoding(DefaultCodePage).GetBytes(str);
 611    }
 612
 613    /// <summary>
 614    /// Convert a string to a byte array
 615    /// </summary>
 616        /// <param name="flags">The applicable <see cref="GeneralBitFlags">general purpose bits flags</see></param>
 617    /// <param name="str">
 618    /// String to convert to an array
 619    /// </param>
 620    /// <returns>Converted array</returns>
 621    public static byte[] ConvertToArray(int flags, string str)
 622    {
 131783623       if (str == null) {
 0624        return new byte[0];
 625      }
 626
 131783627       if ((flags & (int)GeneralBitFlags.UnicodeText) != 0) {
 12628        return Encoding.UTF8.GetBytes(str);
 629      }
 630      else {
 131771631        return ConvertToArray(str);
 632      }
 633    }
 634
 635
 636    /// <summary>
 637    /// Initialise default instance of <see cref="ZipConstants">ZipConstants</see>
 638    /// </summary>
 639    /// <remarks>
 640    /// Private to prevent instances being created.
 641    /// </remarks>
 0642    ZipConstants()
 643    {
 644      // Do nothing
 0645    }
 646  }
 647}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntry.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntry.htm new file mode 100644 index 000000000..9e686d517 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntry.htm @@ -0,0 +1,1306 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipEntry - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipEntry
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipEntry.cs
Covered lines:234
Uncovered lines:69
Coverable lines:303
Total lines:1251
Line coverage:77.2%
Branch coverage:62.4%
+

Metrics

+ + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)1100100
.ctor(...)587.577.78
.ctor(...)39660
HasDosAttributes(...)4100100
ForceZip64()1100100
IsZip64Forced()1100100
ProcessExtraData(...)2148.7256.10
ProcessAESExtraData(...)300
IsCompressionMethodSupported()1100100
Clone()2100100
ToString()100
IsCompressionMethodSupported(...)2100100
CleanName(...)587.577.78
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipEntry.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipEntry.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-02-02  DavidP  Changed NTFS Extra Data min length to 4
 42//  2012-06-03  Z-1744  Use only the low order byte of "Version Needed to Extract"
 43//  2012-07-18  Z-1676  Translate to forward slashes and remove drive from name in constructor
 44
 45using System;
 46using System.IO;
 47
 48namespace ICSharpCode.SharpZipLib.Zip
 49{
 50
 51  /// <summary>
 52  /// Defines known values for the <see cref="HostSystemID"/> property.
 53  /// </summary>
 54  public enum HostSystemID
 55  {
 56    /// <summary>
 57    /// Host system = MSDOS
 58    /// </summary>
 59    Msdos = 0,
 60    /// <summary>
 61    /// Host system = Amiga
 62    /// </summary>
 63    Amiga = 1,
 64    /// <summary>
 65    /// Host system = Open VMS
 66    /// </summary>
 67    OpenVms = 2,
 68    /// <summary>
 69    /// Host system = Unix
 70    /// </summary>
 71    Unix = 3,
 72    /// <summary>
 73    /// Host system = VMCms
 74    /// </summary>
 75    VMCms = 4,
 76    /// <summary>
 77    /// Host system = Atari ST
 78    /// </summary>
 79    AtariST = 5,
 80    /// <summary>
 81    /// Host system = OS2
 82    /// </summary>
 83    OS2 = 6,
 84    /// <summary>
 85    /// Host system = Macintosh
 86    /// </summary>
 87    Macintosh = 7,
 88    /// <summary>
 89    /// Host system = ZSystem
 90    /// </summary>
 91    ZSystem = 8,
 92    /// <summary>
 93    /// Host system = Cpm
 94    /// </summary>
 95    Cpm = 9,
 96    /// <summary>
 97    /// Host system = Windows NT
 98    /// </summary>
 99    WindowsNT = 10,
 100    /// <summary>
 101    /// Host system = MVS
 102    /// </summary>
 103    MVS = 11,
 104    /// <summary>
 105    /// Host system = VSE
 106    /// </summary>
 107    Vse = 12,
 108    /// <summary>
 109    /// Host system = Acorn RISC
 110    /// </summary>
 111    AcornRisc = 13,
 112    /// <summary>
 113    /// Host system = VFAT
 114    /// </summary>
 115    Vfat = 14,
 116    /// <summary>
 117    /// Host system = Alternate MVS
 118    /// </summary>
 119    AlternateMvs = 15,
 120    /// <summary>
 121    /// Host system = BEOS
 122    /// </summary>
 123    BeOS = 16,
 124    /// <summary>
 125    /// Host system = Tandem
 126    /// </summary>
 127    Tandem = 17,
 128    /// <summary>
 129    /// Host system = OS400
 130    /// </summary>
 131    OS400 = 18,
 132    /// <summary>
 133    /// Host system = OSX
 134    /// </summary>
 135    OSX = 19,
 136    /// <summary>
 137    /// Host system = WinZIP AES
 138    /// </summary>
 139    WinZipAES = 99,
 140  }
 141
 142  /// <summary>
 143  /// This class represents an entry in a zip archive.  This can be a file
 144  /// or a directory
 145  /// ZipFile and ZipInputStream will give you instances of this class as
 146  /// information about the members in an archive.  ZipOutputStream
 147  /// uses an instance of this class when creating an entry in a Zip file.
 148  /// <br/>
 149  /// <br/>Author of the original java version : Jochen Hoenicke
 150  /// </summary>
 151  public class ZipEntry : ICloneable
 152  {
 153    [Flags]
 154    enum Known : byte
 155    {
 156      None = 0,
 157      Size = 0x01,
 158      CompressedSize = 0x02,
 159      Crc = 0x04,
 160      Time = 0x08,
 161      ExternalAttributes = 0x10,
 162    }
 163
 164    #region Constructors
 165    /// <summary>
 166    /// Creates a zip entry with the given name.
 167    /// </summary>
 168    /// <param name="name">
 169    /// The name for this entry. Can include directory components.
 170    /// The convention for names is 'unix' style paths with relative names only.
 171    /// There are with no device names and path elements are separated by '/' characters.
 172    /// </param>
 173    /// <exception cref="ArgumentNullException">
 174    /// The name passed is null
 175    /// </exception>
 176    public ZipEntry(string name)
 65855177      : this(name, 0, ZipConstants.VersionMadeBy, CompressionMethod.Deflated)
 178    {
 65854179    }
 180
 181    /// <summary>
 182    /// Creates a zip entry with the given name and version required to extract
 183    /// </summary>
 184    /// <param name="name">
 185    /// The name for this entry. Can include directory components.
 186    /// The convention for names is 'unix'  style paths with no device names and
 187    /// path elements separated by '/' characters.  This is not enforced see <see cref="CleanName(string)">CleanName</se
 188    /// on how to ensure names are valid if this is desired.
 189    /// </param>
 190    /// <param name="versionRequiredToExtract">
 191    /// The minimum 'feature version' required this entry
 192    /// </param>
 193    /// <exception cref="ArgumentNullException">
 194    /// The name passed is null
 195    /// </exception>
 196    internal ZipEntry(string name, int versionRequiredToExtract)
 85197      : this(name, versionRequiredToExtract, ZipConstants.VersionMadeBy,
 85198      CompressionMethod.Deflated)
 199    {
 85200    }
 201
 202    /// <summary>
 203    /// Initializes an entry with the given name and made by information
 204    /// </summary>
 205    /// <param name="name">Name for this entry</param>
 206    /// <param name="madeByInfo">Version and HostSystem Information</param>
 207    /// <param name="versionRequiredToExtract">Minimum required zip feature version required to extract this entry</para
 208    /// <param name="method">Compression method for this entry.</param>
 209    /// <exception cref="ArgumentNullException">
 210    /// The name passed is null
 211    /// </exception>
 212    /// <exception cref="ArgumentOutOfRangeException">
 213    /// versionRequiredToExtract should be 0 (auto-calculate) or > 10
 214    /// </exception>
 215    /// <remarks>
 216    /// This constructor is used by the ZipFile class when reading from the central header
 217    /// It is not generally useful, use the constructor specifying the name only.
 218    /// </remarks>
 131896219    internal ZipEntry(string name, int versionRequiredToExtract, int madeByInfo,
 131896220      CompressionMethod method)
 221    {
 131896222       if (name == null) {
 1223        throw new ArgumentNullException(nameof(name));
 224      }
 225
 131895226       if ( name.Length > 0xffff )  {
 0227        throw new ArgumentException("Name is too long", nameof(name));
 228      }
 229
 131895230       if ( (versionRequiredToExtract != 0) && (versionRequiredToExtract < 10) ) {
 0231        throw new ArgumentOutOfRangeException(nameof(versionRequiredToExtract));
 232      }
 233
 131895234      this.DateTime = DateTime.Now;
 131895235      this.name = CleanName(name);
 131895236      this.versionMadeBy = (ushort)madeByInfo;
 131895237      this.versionToExtract = (ushort)versionRequiredToExtract;
 131895238      this.method = method;
 131895239    }
 240
 241    /// <summary>
 242    /// Creates a deep copy of the given zip entry.
 243    /// </summary>
 244    /// <param name="entry">
 245    /// The entry to copy.
 246    /// </param>
 247    [Obsolete("Use Clone instead")]
 1248    public ZipEntry(ZipEntry entry)
 249    {
 1250       if ( entry == null ) {
 0251        throw new ArgumentNullException(nameof(entry));
 252      }
 253
 1254      known                  = entry.known;
 1255      name                   = entry.name;
 1256      size                   = entry.size;
 1257      compressedSize         = entry.compressedSize;
 1258      crc                    = entry.crc;
 1259      dosTime                = entry.dosTime;
 1260      method                 = entry.method;
 1261      comment                = entry.comment;
 1262      versionToExtract       = entry.versionToExtract;
 1263      versionMadeBy          = entry.versionMadeBy;
 1264      externalFileAttributes = entry.externalFileAttributes;
 1265      flags                  = entry.flags;
 266
 1267      zipFileIndex           = entry.zipFileIndex;
 1268      offset                 = entry.offset;
 269
 1270      forceZip64_         = entry.forceZip64_;
 271
 1272       if ( entry.extra != null ) {
 1273        extra = new byte[entry.extra.Length];
 1274        Array.Copy(entry.extra, 0, extra, 0, entry.extra.Length);
 275      }
 1276    }
 277
 278    #endregion
 279
 280    /// <summary>
 281    /// Get a value indicating wether the entry has a CRC value available.
 282    /// </summary>
 283    public bool HasCrc
 284    {
 285      get {
 65754286        return (known & Known.Crc) != 0;
 287      }
 288    }
 289
 290    /// <summary>
 291    /// Get/Set flag indicating if entry is encrypted.
 292    /// A simple helper routine to aid interpretation of <see cref="Flags">flags</see>
 293    /// </summary>
 294    /// <remarks>This is an assistant that interprets the <see cref="Flags">flags</see> property.</remarks>
 295    public bool IsCrypted
 296    {
 297      get {
 592011298        return (flags & 1) != 0;
 299      }
 300      set {
 65741301         if (value) {
 41302          flags |= 1;
 41303        }
 304        else {
 65700305          flags &= ~1;
 306        }
 65700307      }
 308    }
 309
 310    /// <summary>
 311    /// Get / set a flag indicating wether entry name and comment text are
 312    /// encoded in <a href="http://www.unicode.org">unicode UTF8</a>.
 313    /// </summary>
 314    /// <remarks>This is an assistant that interprets the <see cref="Flags">flags</see> property.</remarks>
 315    public bool IsUnicodeText
 316    {
 317      get {
 4318        return ( flags & (int)GeneralBitFlags.UnicodeText ) != 0;
 319      }
 320      set {
 186321         if ( value ) {
 8322          flags |= (int)GeneralBitFlags.UnicodeText;
 8323        }
 324        else {
 178325          flags &= ~(int)GeneralBitFlags.UnicodeText;
 326        }
 178327      }
 328    }
 329
 330    /// <summary>
 331    /// Value used during password checking for PKZIP 2.0 / 'classic' encryption.
 332    /// </summary>
 333    internal byte CryptoCheckValue
 334    {
 335      get {
 37336        return cryptoCheckValue_;
 337      }
 338
 339      set  {
 66041340        cryptoCheckValue_ = value;
 66041341      }
 342    }
 343
 344    /// <summary>
 345    /// Get/Set general purpose bit flag for entry
 346    /// </summary>
 347    /// <remarks>
 348    /// General purpose bit flag<br/>
 349    /// <br/>
 350    /// Bit 0: If set, indicates the file is encrypted<br/>
 351    /// Bit 1-2 Only used for compression type 6 Imploding, and 8, 9 deflating<br/>
 352    /// Imploding:<br/>
 353    /// Bit 1 if set indicates an 8K sliding dictionary was used.  If clear a 4k dictionary was used<br/>
 354    /// Bit 2 if set indicates 3 Shannon-Fanno trees were used to encode the sliding dictionary, 2 otherwise<br/>
 355    /// <br/>
 356    /// Deflating:<br/>
 357    ///   Bit 2    Bit 1<br/>
 358    ///     0        0       Normal compression was used<br/>
 359    ///     0        1       Maximum compression was used<br/>
 360    ///     1        0       Fast compression was used<br/>
 361    ///     1        1       Super fast compression was used<br/>
 362    /// <br/>
 363    /// Bit 3: If set, the fields crc-32, compressed size
 364    /// and uncompressed size are were not able to be written during zip file creation
 365    /// The correct values are held in a data descriptor immediately following the compressed data. <br/>
 366    /// Bit 4: Reserved for use by PKZIP for enhanced deflating<br/>
 367    /// Bit 5: If set indicates the file contains compressed patch data<br/>
 368    /// Bit 6: If set indicates strong encryption was used.<br/>
 369    /// Bit 7-10: Unused or reserved<br/>
 370    /// Bit 11: If set the name and comments for this entry are in <a href="http://www.unicode.org">unicode</a>.<br/>
 371    /// Bit 12-15: Unused or reserved<br/>
 372    /// </remarks>
 373    /// <seealso cref="IsUnicodeText"></seealso>
 374    /// <seealso cref="IsCrypted"></seealso>
 375    public int Flags
 376    {
 377      get {
 396016378        return flags;
 379      }
 380      set {
 66260381        flags = value;
 66260382      }
 383    }
 384
 385    /// <summary>
 386    /// Get/Set index of this entry in Zip file
 387    /// </summary>
 388    /// <remarks>This is only valid when the entry is part of a <see cref="ZipFile"></see></remarks>
 389    public long ZipFileIndex
 390    {
 391      get {
 65933392        return zipFileIndex;
 393      }
 394      set {
 65956395        zipFileIndex = value;
 65956396      }
 397    }
 398
 399    /// <summary>
 400    /// Get/set offset for use in central header
 401    /// </summary>
 402    public long Offset
 403    {
 404      get {
 396702405        return offset;
 406      }
 407      set {
 131836408        offset = value;
 131836409      }
 410    }
 411
 412    /// <summary>
 413    /// Get/Set external file attributes as an integer.
 414    /// The values of this are operating system dependant see
 415    /// <see cref="HostSystem">HostSystem</see> for details
 416    /// </summary>
 417    public int ExternalFileAttributes
 418    {
 419      get {
 527444420         if ((known & Known.ExternalAttributes) == 0) {
 65827421          return -1;
 422        }
 423        else {
 461617424          return externalFileAttributes;
 425        }
 426      }
 427
 428      set {
 65974429        externalFileAttributes = value;
 65974430        known |= Known.ExternalAttributes;
 65974431      }
 432    }
 433
 434    /// <summary>
 435    /// Get the version made by for this entry or zero if unknown.
 436    /// The value / 10 indicates the major version number, and
 437    /// the value mod 10 is the minor version number
 438    /// </summary>
 439    public int VersionMadeBy
 440    {
 441      get {
 0442        return (versionMadeBy & 0xff);
 443      }
 444    }
 445
 446    /// <summary>
 447    /// Get a value indicating this entry is for a DOS/Windows system.
 448    /// </summary>
 449    public bool IsDOSEntry
 450    {
 451      get {
 2452        return ((HostSystem == ( int )HostSystemID.Msdos) ||
 2453          (HostSystem == ( int )HostSystemID.WindowsNT));
 454      }
 455    }
 456
 457    /// <summary>
 458    /// Test the external attributes for this <see cref="ZipEntry"/> to
 459    /// see if the external attributes are Dos based (including WINNT and variants)
 460    /// and match the values
 461    /// </summary>
 462    /// <param name="attributes">The attributes to test.</param>
 463    /// <returns>Returns true if the external attributes are known to be DOS/Windows
 464    /// based and have the same attributes set as the value passed.</returns>
 465    bool HasDosAttributes(int attributes)
 466    {
 920889467      bool result = false;
 920889468       if ( (known & Known.ExternalAttributes) != 0 ) {
 461462469        result |= (((HostSystem == (int)HostSystemID.Msdos) ||
 461462470          (HostSystem == (int)HostSystemID.WindowsNT)) &&
 461462471          (ExternalFileAttributes & attributes) == attributes);
 472      }
 920889473      return result;
 474    }
 475
 476    /// <summary>
 477    /// Gets the compatability information for the <see cref="ExternalFileAttributes">external file attribute</see>
 478    /// If the external file attributes are compatible with MS-DOS and can be read
 479    /// by PKZIP for DOS version 2.04g then this value will be zero.  Otherwise the value
 480    /// will be non-zero and identify the host system on which the attributes are compatible.
 481    /// </summary>
 482    ///
 483    /// <remarks>
 484    /// The values for this as defined in the Zip File format and by others are shown below.  The values are somewhat
 485    /// misleading in some cases as they are not all used as shown.  You should consult the relevant documentation
 486    /// to obtain up to date and correct information.  The modified appnote by the infozip group is
 487    /// particularly helpful as it documents a lot of peculiarities.  The document is however a little dated.
 488    /// <list type="table">
 489    /// <item>0 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems)</item>
 490    /// <item>1 - Amiga</item>
 491    /// <item>2 - OpenVMS</item>
 492    /// <item>3 - Unix</item>
 493    /// <item>4 - VM/CMS</item>
 494    /// <item>5 - Atari ST</item>
 495    /// <item>6 - OS/2 HPFS</item>
 496    /// <item>7 - Macintosh</item>
 497    /// <item>8 - Z-System</item>
 498    /// <item>9 - CP/M</item>
 499    /// <item>10 - Windows NTFS</item>
 500    /// <item>11 - MVS (OS/390 - Z/OS)</item>
 501    /// <item>12 - VSE</item>
 502    /// <item>13 - Acorn Risc</item>
 503    /// <item>14 - VFAT</item>
 504    /// <item>15 - Alternate MVS</item>
 505    /// <item>16 - BeOS</item>
 506    /// <item>17 - Tandem</item>
 507    /// <item>18 - OS/400</item>
 508    /// <item>19 - OS/X (Darwin)</item>
 509    /// <item>99 - WinZip AES</item>
 510    /// <item>remainder - unused</item>
 511    /// </list>
 512    /// </remarks>
 513    public int HostSystem
 514    {
 515      get {
 461464516        return (versionMadeBy >> 8) & 0xff;
 517      }
 518
 519      set {
 0520        versionMadeBy &= 0xff;
 0521        versionMadeBy |= (ushort)((value & 0xff) << 8);
 0522      }
 523    }
 524
 525    /// <summary>
 526    /// Get minimum Zip feature version required to extract this entry
 527    /// </summary>
 528    /// <remarks>
 529    /// Minimum features are defined as:<br/>
 530    /// 1.0 - Default value<br/>
 531    /// 1.1 - File is a volume label<br/>
 532    /// 2.0 - File is a folder/directory<br/>
 533    /// 2.0 - File is compressed using Deflate compression<br/>
 534    /// 2.0 - File is encrypted using traditional encryption<br/>
 535    /// 2.1 - File is compressed using Deflate64<br/>
 536    /// 2.5 - File is compressed using PKWARE DCL Implode<br/>
 537    /// 2.7 - File is a patch data set<br/>
 538    /// 4.5 - File uses Zip64 format extensions<br/>
 539    /// 4.6 - File is compressed using BZIP2 compression<br/>
 540    /// 5.0 - File is encrypted using DES<br/>
 541    /// 5.0 - File is encrypted using 3DES<br/>
 542    /// 5.0 - File is encrypted using original RC2 encryption<br/>
 543    /// 5.0 - File is encrypted using RC4 encryption<br/>
 544    /// 5.1 - File is encrypted using AES encryption<br/>
 545    /// 5.1 - File is encrypted using corrected RC2 encryption<br/>
 546    /// 5.1 - File is encrypted using corrected RC2-64 encryption<br/>
 547    /// 6.1 - File is encrypted using non-OAEP key wrapping<br/>
 548    /// 6.2 - Central directory encryption (not confirmed yet)<br/>
 549    /// 6.3 - File is compressed using LZMA<br/>
 550    /// 6.3 - File is compressed using PPMD+<br/>
 551    /// 6.3 - File is encrypted using Blowfish<br/>
 552    /// 6.3 - File is encrypted using Twofish<br/>
 553    /// </remarks>
 554    /// <seealso cref="CanDecompress"></seealso>
 555    public int Version
 556    {
 557      get {
 558        // Return recorded version if known.
 198092559         if (versionToExtract != 0) {
 66414560          return versionToExtract & 0x00ff;        // Only lower order byte. High order is O/S file system.
 561        }
 562        else {
 131678563          int result = 10;
 131678564           if (AESKeySize > 0) {
 0565            result = ZipConstants.VERSION_AES;      // Ver 5.1 = AES
 0566          }
 131678567           else if (CentralHeaderRequiresZip64) {
 253568            result = ZipConstants.VersionZip64;
 253569          }
 131425570           else if (CompressionMethod.Deflated == method) {
 321571            result = 20;
 321572          }
 131104573           else if (IsDirectory == true) {
 0574            result = 20;
 0575          }
 131104576           else if (IsCrypted == true) {
 0577            result = 20;
 0578          }
 131104579           else if (HasDosAttributes(0x08) ) {
 0580            result = 11;
 581          }
 131678582          return result;
 583        }
 584      }
 585    }
 586
 587    /// <summary>
 588    /// Get a value indicating whether this entry can be decompressed by the library.
 589    /// </summary>
 590    /// <remarks>This is based on the <see cref="Version"></see> and
 591    /// wether the <see cref="IsCompressionMethodSupported()">compression method</see> is supported.</remarks>
 592    public bool CanDecompress
 593    {
 594      get {
 77595         return (Version <= ZipConstants.VersionMadeBy) &&
 77596          ((Version == 10) ||
 77597          (Version == 11) ||
 77598          (Version == 20) ||
 77599          (Version == 45) ||
 77600          (Version == 51)) &&
 77601          IsCompressionMethodSupported();
 602      }
 603    }
 604
 605    /// <summary>
 606    /// Force this entry to be recorded using Zip64 extensions.
 607    /// </summary>
 608    public void ForceZip64()
 609    {
 127610      forceZip64_ = true;
 127611    }
 612
 613    /// <summary>
 614    /// Get a value indicating wether Zip64 extensions were forced.
 615    /// </summary>
 616    /// <returns>A <see cref="bool"/> value of true if Zip64 extensions have been forced on; false if not.</returns>
 617    public bool IsZip64Forced()
 618    {
 132054619      return forceZip64_;
 620    }
 621
 622    /// <summary>
 623    /// Gets a value indicating if the entry requires Zip64 extensions
 624    /// to store the full entry values.
 625    /// </summary>
 626    /// <value>A <see cref="bool"/> value of true if a local header requires Zip64 extensions; false if not.</value>
 627    public bool LocalHeaderRequiresZip64
 628    {
 629      get {
 395560630        bool result = forceZip64_;
 631
 395560632         if ( !result ) {
 394651633          ulong trueCompressedSize = compressedSize;
 634
 394651635           if ( (versionToExtract == 0) && IsCrypted ) {
 68636            trueCompressedSize += ZipConstants.CryptoHeaderSize;
 637          }
 638
 639          // TODO: A better estimation of the true limit based on compression overhead should be used
 640          // to determine when an entry should use Zip64.
 394651641          result =
 394651642            ((this.size >= uint.MaxValue) || (trueCompressedSize >= uint.MaxValue)) &&
 394651643            ((versionToExtract == 0) || (versionToExtract >= ZipConstants.VersionZip64));
 644        }
 645
 395560646        return result;
 647      }
 648    }
 649
 650    /// <summary>
 651    /// Get a value indicating wether the central directory entry requires Zip64 extensions to be stored.
 652    /// </summary>
 653    public bool CentralHeaderRequiresZip64
 654    {
 655      get {
 197581656        return LocalHeaderRequiresZip64 || (offset >= uint.MaxValue);
 657      }
 658    }
 659
 660    /// <summary>
 661    /// Get/Set DosTime value.
 662    /// </summary>
 663    /// <remarks>
 664    /// The MS-DOS date format can only represent dates between 1/1/1980 and 12/31/2107.
 665    /// </remarks>
 666    public long DosTime
 667    {
 668      get {
 131823669         if ((known & Known.Time) == 0) {
 0670          return 0;
 671        }
 672        else {
 131823673          return dosTime;
 674        }
 675      }
 676
 677      set {
 678        unchecked {
 197962679          dosTime = (uint)value;
 680        }
 681
 197962682        known |= Known.Time;
 197962683      }
 684    }
 685
 686    /// <summary>
 687    /// Gets/Sets the time of last modification of the entry.
 688    /// </summary>
 689    /// <remarks>
 690    /// The <see cref="DosTime"></see> property is updated to match this as far as possible.
 691    /// </remarks>
 692    public DateTime DateTime
 693    {
 694      get {
 18695        uint sec  = Math.Min(59, 2 * (dosTime & 0x1f));
 18696        uint min  = Math.Min(59, (dosTime >> 5) & 0x3f);
 18697        uint hrs  = Math.Min(23, (dosTime >> 11) & 0x1f);
 18698        uint mon  = Math.Max(1, Math.Min(12, ((dosTime >> 21) & 0xf)));
 18699        uint year = ((dosTime >> 25) & 0x7f) + 1980;
 18700        int day = Math.Max(1, Math.Min(DateTime.DaysInMonth((int)year, (int)mon), (int)((dosTime >> 16) & 0x1f)));
 18701        return new System.DateTime((int)year, (int)mon, day, (int)hrs, (int)min, (int)sec);
 702      }
 703
 704      set {
 131916705        var year = (uint) value.Year;
 131916706        var month = (uint) value.Month;
 131916707        var day = (uint) value.Day;
 131916708        var hour = (uint) value.Hour;
 131916709        var minute = (uint) value.Minute;
 131916710        var second = (uint) value.Second;
 711
 131916712         if ( year < 1980 ) {
 1713          year = 1980;
 1714          month = 1;
 1715          day = 1;
 1716          hour = 0;
 1717          minute = 0;
 1718          second = 0;
 1719        }
 131915720         else if ( year > 2107 ) {
 1721          year = 2107;
 1722          month = 12;
 1723          day = 31;
 1724          hour = 23;
 1725          minute = 59;
 1726          second = 59;
 727        }
 728
 131916729        DosTime = ((year - 1980) & 0x7f) << 25 |
 131916730          (month << 21) |
 131916731          (day << 16) |
 131916732          (hour << 11) |
 131916733          (minute << 5) |
 131916734          (second >> 1);
 131916735      }
 736    }
 737
 738    /// <summary>
 739    /// Returns the entry name.
 740    /// </summary>
 741    /// <remarks>
 742    /// The unix naming convention is followed.
 743    /// Path components in the entry should always separated by forward slashes ('/').
 744    /// Dos device names like C: should also be removed.
 745    /// See the <see cref="ZipNameTransform"/> class, or <see cref="CleanName(string)"/>
 746    ///</remarks>
 747    public string Name
 748    {
 749      get {
 527092750        return name;
 751      }
 752    }
 753
 754    /// <summary>
 755    /// Gets/Sets the size of the uncompressed data.
 756    /// </summary>
 757    /// <returns>
 758    /// The size or -1 if unknown.
 759    /// </returns>
 760    /// <remarks>Setting the size before adding an entry to an archive can help
 761    /// avoid compatability problems with some archivers which dont understand Zip64 extensions.</remarks>
 762    public long Size
 763    {
 764      get {
 724299765         return (known & Known.Size) != 0 ? (long)size : -1L;
 766      }
 767      set {
 131891768        this.size  = (ulong)value;
 131891769        this.known |= Known.Size;
 131891770      }
 771    }
 772
 773    /// <summary>
 774    /// Gets/Sets the size of the compressed data.
 775    /// </summary>
 776    /// <returns>
 777    /// The compressed entry size or -1 if unknown.
 778    /// </returns>
 779    public long CompressedSize
 780    {
 781      get {
 593187782         return (known & Known.CompressedSize) != 0 ? (long)compressedSize : -1L;
 783      }
 784      set {
 262995785        this.compressedSize = (ulong)value;
 262995786        this.known |= Known.CompressedSize;
 262995787      }
 788    }
 789
 790    /// <summary>
 791    /// Gets/Sets the crc of the uncompressed data.
 792    /// </summary>
 793    /// <exception cref="System.ArgumentOutOfRangeException">
 794    /// Crc is not in the range 0..0xffffffffL
 795    /// </exception>
 796    /// <returns>
 797    /// The crc value or -1 if unknown.
 798    /// </returns>
 799    public long Crc
 800    {
 801      get {
 329653802         return (known & Known.Crc) != 0 ? crc & 0xffffffffL : -1L;
 803      }
 804      set {
 131859805         if (((ulong)crc & 0xffffffff00000000L) != 0) {
 0806          throw new ArgumentOutOfRangeException(nameof(value));
 807        }
 131859808        this.crc = (uint)value;
 131859809        this.known |= Known.Crc;
 131859810      }
 811    }
 812
 813    /// <summary>
 814    /// Gets/Sets the compression method. Only Deflated and Stored are supported.
 815    /// </summary>
 816    /// <returns>
 817    /// The compression method for this entry
 818    /// </returns>
 819    /// <see cref="ICSharpCode.SharpZipLib.Zip.CompressionMethod.Deflated"/>
 820    /// <see cref="ICSharpCode.SharpZipLib.Zip.CompressionMethod.Stored"/>
 821    public CompressionMethod CompressionMethod {
 822      get {
 461425823        return method;
 824      }
 825
 826      set {
 65846827         if ( !IsCompressionMethodSupported(value) ) {
 1828          throw new NotSupportedException("Compression method not supported");
 829        }
 65845830        this.method = value;
 65845831      }
 832    }
 833
 834    /// <summary>
 835    /// Gets the compression method for outputting to the local or central header.
 836    /// Returns same value as CompressionMethod except when AES encrypting, which
 837    /// places 99 in the method and places the real method in the extra data.
 838    /// </summary>
 839    internal CompressionMethod CompressionMethodForHeader {
 840      get {
 263841         return (AESKeySize > 0) ? CompressionMethod.WinZipAES : method;
 842      }
 843    }
 844
 845    /// <summary>
 846    /// Gets/Sets the extra data.
 847    /// </summary>
 848    /// <exception cref="System.ArgumentOutOfRangeException">
 849    /// Extra data is longer than 64KB (0xffff) bytes.
 850    /// </exception>
 851    /// <returns>
 852    /// Extra data or null if not set.
 853    /// </returns>
 854    public byte[] ExtraData {
 855
 856      get {
 857// TODO: This is slightly safer but less efficient.  Think about wether it should change.
 858//        return (byte[]) extra.Clone();
 263294859        return extra;
 860      }
 861
 862      set {
 65879863         if (value == null) {
 0864          extra = null;
 0865        }
 866        else {
 65879867           if (value.Length > 0xffff) {
 0868            throw new System.ArgumentOutOfRangeException(nameof(value));
 869          }
 870
 65879871          extra = new byte[value.Length];
 65879872          Array.Copy(value, 0, extra, 0, value.Length);
 873        }
 65879874      }
 875    }
 876
 877
 878#if !NET_1_1 && !NETCF_2_0
 879    /// <summary>
 880    /// For AES encrypted files returns or sets the number of bits of encryption (128, 192 or 256).
 881    /// When setting, only 0 (off), 128 or 256 is supported.
 882    /// </summary>
 883    public int AESKeySize {
 884      get {
 885        // the strength (1 or 3) is in the entry header
 132538886         switch (_aesEncryptionStrength) {
 132538887          case 0: return 0;  // Not AES
 0888          case 1: return 128;
 0889          case 2: return 192; // Not used by WinZip
 0890          case 3: return 256;
 0891          default: throw new ZipException("Invalid AESEncryptionStrength " + _aesEncryptionStrength);
 892        }
 893      }
 894      set {
 0895         switch (value) {
 0896          case 0:   _aesEncryptionStrength = 0; break;
 0897          case 128: _aesEncryptionStrength = 1; break;
 0898          case 256: _aesEncryptionStrength = 3; break;
 0899          default: throw new ZipException("AESKeySize must be 0, 128 or 256: " + value);
 900        }
 901      }
 902    }
 903
 904    /// <summary>
 905    /// AES Encryption strength for storage in extra data in entry header.
 906    /// 1 is 128 bit, 2 is 192 bit, 3 is 256 bit.
 907    /// </summary>
 908    internal byte AESEncryptionStrength {
 909      get {
 0910        return (byte)_aesEncryptionStrength;
 911      }
 912    }
 913#else
 914    /// <summary>
 915    /// AES unsupported prior to .NET 2.0
 916    /// </summary>
 917    internal int AESKeySize;
 918#endif
 919
 920    /// <summary>
 921    /// Returns the length of the salt, in bytes
 922    /// </summary>
 923    internal int AESSaltLen {
 924      get {
 925        // Key size -> Salt length: 128 bits = 8 bytes, 192 bits = 12 bytes, 256 bits = 16 bytes.
 0926        return AESKeySize / 16;
 927      }
 928    }
 929
 930    /// <summary>
 931    /// Number of extra bytes required to hold the AES Header fields (Salt, Pwd verify, AuthCode)
 932    /// </summary>
 933    internal int AESOverheadSize {
 934      get {
 935        // File format:
 936        //   Bytes    Content
 937        // Variable    Salt value
 938        //     2    Password verification value
 939        // Variable    Encrypted file data
 940        //    10    Authentication code
 0941        return 12 + AESSaltLen;
 942      }
 943    }
 944
 945    /// <summary>
 946    /// Process extra data fields updating the entry based on the contents.
 947    /// </summary>
 948    /// <param name="localHeader">True if the extra data fields should be handled
 949    /// for a local header, rather than for a central header.
 950    /// </param>
 951    internal void ProcessExtraData(bool localHeader)
 952    {
 66041953      var extraData = new ZipExtraData(this.extra);
 954
 66041955       if ( extraData.Find(0x0001) ) {
 956                // Version required to extract is ignored here as some archivers dont set it correctly
 957                // in theory it should be version 45 or higher
 958
 959        // The recorded size will change but remember that this is zip64.
 127960        forceZip64_ = true;
 961
 127962         if ( extraData.ValueLength < 4 ) {
 0963          throw new ZipException("Extra data extended Zip64 information length is invalid");
 964        }
 965
 127966         if ( localHeader || (size == uint.MaxValue) ) {
 127967          size = (ulong)extraData.ReadLong();
 968        }
 969
 127970         if ( localHeader || (compressedSize == uint.MaxValue) ) {
 127971          compressedSize = (ulong)extraData.ReadLong();
 972        }
 973
 127974         if ( !localHeader && (offset == uint.MaxValue) ) {
 0975          offset = extraData.ReadLong();
 976        }
 977
 978                // Disk number on which file starts is ignored
 0979      }
 980      else {
 65914981         if (
 65914982          ((versionToExtract & 0xff) >= ZipConstants.VersionZip64) &&
 65914983          ((size == uint.MaxValue) || (compressedSize == uint.MaxValue))
 65914984        ) {
 0985          throw new ZipException("Zip64 Extended information required but is missing.");
 986        }
 987      }
 988
 66041989       if ( extraData.Find(10) ) {
 990        // No room for any tags.
 0991         if ( extraData.ValueLength < 4 ) {
 0992          throw new ZipException("NTFS Extra data invalid");
 993        }
 994
 0995        extraData.ReadInt(); // Reserved
 996
 0997         while ( extraData.UnreadCount >= 4 ) {
 0998          int ntfsTag = extraData.ReadShort();
 0999          int ntfsLength = extraData.ReadShort();
 01000           if ( ntfsTag == 1 ) {
 01001             if ( ntfsLength >= 24 ) {
 01002              long lastModification = extraData.ReadLong();
 01003              long lastAccess = extraData.ReadLong();
 01004              long createTime = extraData.ReadLong();
 1005
 01006              DateTime = System.DateTime.FromFileTime(lastModification);
 1007            }
 01008            break;
 1009          }
 1010          else {
 1011            // An unknown NTFS tag so simply skip it.
 01012            extraData.Skip(ntfsLength);
 1013          }
 1014        }
 01015      }
 660411016       else if ( extraData.Find(0x5455) ) {
 11017        int length = extraData.ValueLength;
 11018        int flags = extraData.ReadByte();
 1019
 1020        // Can include other times but these are ignored.  Length of data should
 1021        // actually be 1 + 4 * no of bits in flags.
 11022         if ( ((flags & 1) != 0) && (length >= 5) ) {
 11023          int iTime = extraData.ReadInt();
 1024
 11025          DateTime = (new System.DateTime ( 1970, 1, 1, 0, 0, 0 ).ToUniversalTime() +
 11026            new TimeSpan ( 0, 0, 0, iTime, 0 )).ToLocalTime();
 1027        }
 1028      }
 660411029       if (method == CompressionMethod.WinZipAES) {
 01030        ProcessAESExtraData(extraData);
 1031      }
 660411032    }
 1033
 1034    // For AES the method in the entry is 99, and the real compression method is in the extradata
 1035    //
 1036    private void ProcessAESExtraData(ZipExtraData extraData) {
 1037
 1038#if !NET_1_1 && !NETCF_2_0
 01039       if (extraData.Find(0x9901)) {
 1040        // Set version and flag for Zipfile.CreateAndInitDecryptionStream
 01041        versionToExtract = ZipConstants.VERSION_AES;      // Ver 5.1 = AES see "Version" getter
 1042        // Set StrongEncryption flag for ZipFile.CreateAndInitDecryptionStream
 01043        Flags = Flags | (int)GeneralBitFlags.StrongEncryption;
 1044        //
 1045        // Unpack AES extra data field see http://www.winzip.com/aes_info.htm
 01046        int length = extraData.ValueLength;      // Data size currently 7
 01047         if (length < 7)
 01048          throw new ZipException("AES Extra Data Length " + length + " invalid.");
 01049        int ver = extraData.ReadShort();      // Version number (1=AE-1 2=AE-2)
 01050        int vendorId = extraData.ReadShort();    // 2-character vendor ID 0x4541 = "AE"
 01051        int encrStrength = extraData.ReadByte();  // encryption strength 1 = 128 2 = 192 3 = 256
 01052        int actualCompress = extraData.ReadShort(); // The actual compression method used to compress the file
 01053        _aesVer = ver;
 01054        _aesEncryptionStrength = encrStrength;
 01055        method = (CompressionMethod)actualCompress;
 01056      } else
 01057        throw new ZipException("AES Extra Data missing");
 1058#else
 1059        throw new ZipException("AES unsupported");
 1060#endif
 1061    }
 1062
 1063    /// <summary>
 1064    /// Gets/Sets the entry comment.
 1065    /// </summary>
 1066    /// <exception cref="System.ArgumentOutOfRangeException">
 1067    /// If comment is longer than 0xffff.
 1068    /// </exception>
 1069    /// <returns>
 1070    /// The comment or null if not set.
 1071    /// </returns>
 1072    /// <remarks>
 1073    /// A comment is only available for entries when read via the <see cref="ZipFile"/> class.
 1074    /// The <see cref="ZipInputStream"/> class doesnt have the comment data available.
 1075    /// </remarks>
 1076    public string Comment {
 1077      get {
 1316761078        return comment;
 1079      }
 1080      set {
 1081        // This test is strictly incorrect as the length is in characters
 1082        // while the storage limit is in bytes.
 1083        // While the test is partially correct in that a comment of this length or greater
 1084        // is definitely invalid, shorter comments may also have an invalid length
 1085        // where there are multi-byte characters
 1086        // The full test is not possible here however as the code page to apply conversions with
 1087        // isnt available.
 31088         if ( (value != null) && (value.Length > 0xffff) ) {
 1089#if NETCF_1_0
 1090          throw new ArgumentOutOfRangeException("value");
 1091#else
 01092          throw new ArgumentOutOfRangeException(nameof(value), "cannot exceed 65535");
 1093#endif
 1094        }
 1095
 31096        comment = value;
 31097      }
 1098    }
 1099
 1100    /// <summary>
 1101    /// Gets a value indicating if the entry is a directory.
 1102    /// however.
 1103    /// </summary>
 1104    /// <remarks>
 1105    /// A directory is determined by an entry name with a trailing slash '/'.
 1106    /// The external file attributes can also indicate an entry is for a directory.
 1107    /// Currently only dos/windows attributes are tested in this manner.
 1108    /// The trailing slash convention should always be followed.
 1109    /// </remarks>
 1110    public bool IsDirectory
 1111    {
 1112      get {
 5263371113        int nameLength = name.Length;
 5263371114        bool result =
 5263371115          ((nameLength > 0) &&
 5263371116          ((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\\'))) ||
 5263371117          HasDosAttributes(16)
 5263371118          ;
 271119        return result;
 1120      }
 1121    }
 1122
 1123    /// <summary>
 1124    /// Get a value of true if the entry appears to be a file; false otherwise
 1125    /// </summary>
 1126    /// <remarks>
 1127    /// This only takes account of DOS/Windows attributes.  Other operating systems are ignored.
 1128    /// For linux and others the result may be incorrect.
 1129    /// </remarks>
 1130    public bool IsFile
 1131    {
 1132      get {
 2634861133        return !IsDirectory && !HasDosAttributes(8);
 1134      }
 1135    }
 1136
 1137    /// <summary>
 1138    /// Test entry to see if data can be extracted.
 1139    /// </summary>
 1140    /// <returns>Returns true if data can be extracted for this entry; false otherwise.</returns>
 1141    public bool IsCompressionMethodSupported()
 1142    {
 1320201143      return IsCompressionMethodSupported(CompressionMethod);
 1144    }
 1145
 1146    #region ICloneable Members
 1147    /// <summary>
 1148    /// Creates a copy of this zip entry.
 1149    /// </summary>
 1150    /// <returns>An <see cref="Object"/> that is a copy of the current instance.</returns>
 1151    public object Clone()
 1152    {
 4610931153      var result = (ZipEntry)this.MemberwiseClone();
 1154
 1155      // Ensure extra data is unique if it exists.
 4610931156       if ( extra != null ) {
 721157        result.extra = new byte[extra.Length];
 721158        Array.Copy(extra, 0, result.extra, 0, extra.Length);
 1159      }
 1160
 4610931161      return result;
 1162    }
 1163
 1164    #endregion
 1165
 1166    /// <summary>
 1167    /// Gets a string representation of this ZipEntry.
 1168    /// </summary>
 1169    /// <returns>A readable textual representation of this <see cref="ZipEntry"/></returns>
 1170    public override string ToString()
 1171    {
 01172      return name;
 1173    }
 1174
 1175    /// <summary>
 1176    /// Test a <see cref="CompressionMethod">compression method</see> to see if this library
 1177    /// supports extracting data compressed with that method
 1178    /// </summary>
 1179    /// <param name="method">The compression method to test.</param>
 1180    /// <returns>Returns true if the compression method is supported; false otherwise</returns>
 1181    public static bool IsCompressionMethodSupported(CompressionMethod method)
 1182    {
 1978661183      return
 1978661184        ( method == CompressionMethod.Deflated ) ||
 1978661185        ( method == CompressionMethod.Stored );
 1186    }
 1187
 1188    /// <summary>
 1189    /// Cleans a name making it conform to Zip file conventions.
 1190    /// Devices names ('c:\') and UNC share names ('\\server\share') are removed
 1191    /// and forward slashes ('\') are converted to back slashes ('/').
 1192    /// Names are made relative by trimming leading slashes which is compatible
 1193    /// with the ZIP naming convention.
 1194    /// </summary>
 1195    /// <param name="name">The name to clean</param>
 1196    /// <returns>The 'cleaned' name.</returns>
 1197    /// <remarks>
 1198    /// The <seealso cref="ZipNameTransform">Zip name transform</seealso> class is more flexible.
 1199    /// </remarks>
 1200    public static string CleanName(string name)
 1201    {
 1318991202       if (name == null) {
 01203        return string.Empty;
 1204      }
 1205
 1318991206       if (Path.IsPathRooted(name)) {
 1207        // NOTE:
 1208        // for UNC names...  \\machine\share\zoom\beet.txt gives \zoom\beet.txt
 31209        name = name.Substring(Path.GetPathRoot(name).Length);
 1210      }
 1211
 1318991212      name = name.Replace(@"\", "/");
 1213
 1319011214       while ( (name.Length > 0) && (name[0] == '/')) {
 21215        name = name.Remove(0, 1);
 1216      }
 1318991217      return name;
 1218    }
 1219
 1220    #region Instance Fields
 1221    Known known;
 1318971222    int    externalFileAttributes = -1;     // contains external attributes (O/S dependant)
 1223
 1224    ushort versionMadeBy;          // Contains host system and version information
 1225                        // only relevant for central header entries
 1226
 1227    string name;
 1228    ulong  size;
 1229    ulong  compressedSize;
 1230    ushort versionToExtract;                // Version required to extract (library handles <= 2.0)
 1231    uint   crc;
 1232    uint   dosTime;
 1233
 1318971234    CompressionMethod  method = CompressionMethod.Deflated;
 1235    byte[] extra;
 1236    string comment;
 1237
 1238    int flags;                             // general purpose bit flags
 1239
 1318971240    long zipFileIndex = -1;                // used by ZipFile
 1241    long offset;                           // used by ZipFile and ZipOutputStream
 1242
 1243    bool forceZip64_;
 1244    byte cryptoCheckValue_;
 1245#if !NET_1_1 && !NETCF_2_0
 1246    int _aesVer;              // Version number (2 = AE-2 ?). Assigned but not used.
 1247    int _aesEncryptionStrength;        // Encryption strength 1 = 128 2 = 192 3 = 256
 1248#endif
 1249    #endregion
 1250  }
 1251}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntryFactory.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntryFactory.htm new file mode 100644 index 000000000..d9b1c0c71 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntryFactory.htm @@ -0,0 +1,477 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipEntryFactory - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipEntryFactory
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipEntryFactory.cs
Covered lines:77
Uncovered lines:24
Coverable lines:101
Total lines:428
Line coverage:76.2%
Branch coverage:55%
+

Metrics

+ + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)1100100
.ctor(...)1100100
MakeFileEntry(...)1100100
MakeFileEntry(...)1100100
MakeFileEntry(...)1673.5371.43
MakeDirectoryEntry(...)1100100
MakeDirectoryEntry(...)1364.5241.18
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipEntryFactory.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipEntryFactory.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2012-11-29  Z-1684  Added MakeFileEntry(string fileName, string entryName, bool useFileSystem)
 41
 42using System;
 43using System.IO;
 44
 45using ICSharpCode.SharpZipLib.Core;
 46
 47namespace ICSharpCode.SharpZipLib.Zip
 48{
 49  /// <summary>
 50  /// Basic implementation of <see cref="IEntryFactory"></see>
 51  /// </summary>
 52  public class ZipEntryFactory : IEntryFactory
 53  {
 54    #region Enumerations
 55    /// <summary>
 56    /// Defines the possible values to be used for the <see cref="ZipEntry.DateTime"/>.
 57    /// </summary>
 58    public enum TimeSetting
 59    {
 60      /// <summary>
 61      /// Use the recorded LastWriteTime value for the file.
 62      /// </summary>
 63      LastWriteTime,
 64      /// <summary>
 65      /// Use the recorded LastWriteTimeUtc value for the file
 66      /// </summary>
 67      LastWriteTimeUtc,
 68      /// <summary>
 69      /// Use the recorded CreateTime value for the file.
 70      /// </summary>
 71      CreateTime,
 72      /// <summary>
 73      /// Use the recorded CreateTimeUtc value for the file.
 74      /// </summary>
 75      CreateTimeUtc,
 76      /// <summary>
 77      /// Use the recorded LastAccessTime value for the file.
 78      /// </summary>
 79      LastAccessTime,
 80      /// <summary>
 81      /// Use the recorded LastAccessTimeUtc value for the file.
 82      /// </summary>
 83      LastAccessTimeUtc,
 84      /// <summary>
 85      /// Use a fixed value.
 86      /// </summary>
 87      /// <remarks>The actual <see cref="DateTime"/> value used can be
 88      /// specified via the <see cref="ZipEntryFactory(DateTime)"/> constructor or
 89      /// using the <see cref="ZipEntryFactory(TimeSetting)"/> with the setting set
 90      /// to <see cref="TimeSetting.Fixed"/> which will use the <see cref="DateTime"/> when this class was constructed.
 91      /// The <see cref="FixedDateTime"/> property can also be used to set this value.</remarks>
 92      Fixed,
 93    }
 94    #endregion
 95
 96    #region Constructors
 97    /// <summary>
 98    /// Initialise a new instance of the <see cref="ZipEntryFactory"/> class.
 99    /// </summary>
 100    /// <remarks>A default <see cref="INameTransform"/>, and the LastWriteTime for files is used.</remarks>
 100101    public ZipEntryFactory()
 102    {
 100103      nameTransform_ = new ZipNameTransform();
 100104    }
 105
 106    /// <summary>
 107    /// Initialise a new instance of <see cref="ZipEntryFactory"/> using the specified <see cref="TimeSetting"/>
 108    /// </summary>
 109    /// <param name="timeSetting">The <see cref="TimeSetting">time setting</see> to use when creating <see cref="ZipEntr
 1110    public ZipEntryFactory(TimeSetting timeSetting)
 111    {
 1112      timeSetting_ = timeSetting;
 1113      nameTransform_ = new ZipNameTransform();
 1114    }
 115
 116    /// <summary>
 117    /// Initialise a new instance of <see cref="ZipEntryFactory"/> using the specified <see cref="DateTime"/>
 118    /// </summary>
 119    /// <param name="time">The time to set all <see cref="ZipEntry.DateTime"/> values to.</param>
 1120    public ZipEntryFactory(DateTime time)
 121    {
 1122      timeSetting_ = TimeSetting.Fixed;
 1123      FixedDateTime = time;
 1124      nameTransform_ = new ZipNameTransform();
 1125    }
 126
 127    #endregion
 128
 129    #region Properties
 130    /// <summary>
 131    /// Get / set the <see cref="INameTransform"/> to be used when creating new <see cref="ZipEntry"/> values.
 132    /// </summary>
 133    /// <remarks>
 134    /// Setting this property to null will cause a default <see cref="ZipNameTransform">name transform</see> to be used.
 135    /// </remarks>
 136    public INameTransform NameTransform
 137    {
 65743138      get { return nameTransform_; }
 139      set
 140      {
 6141         if (value == null) {
 0142          nameTransform_ = new ZipNameTransform();
 0143        }
 144        else {
 6145          nameTransform_ = value;
 146        }
 6147      }
 148    }
 149
 150    /// <summary>
 151    /// Get / set the <see cref="TimeSetting"/> in use.
 152    /// </summary>
 153    public TimeSetting Setting
 154    {
 3155      get { return timeSetting_; }
 20156      set { timeSetting_ = value; }
 157    }
 158
 159    /// <summary>
 160    /// Get / set the <see cref="DateTime"/> value to use when <see cref="Setting"/> is set to <see cref="TimeSetting.Fi
 161    /// </summary>
 162    public DateTime FixedDateTime
 163    {
 5164      get { return fixedDateTime_; }
 165      set
 166      {
 3167         if (value.Year < 1970) {
 0168          throw new ArgumentException("Value is too old to be valid", nameof(value));
 169        }
 3170        fixedDateTime_ = value;
 3171      }
 172    }
 173
 174    /// <summary>
 175    /// A bitmask defining the attributes to be retrieved from the actual file.
 176    /// </summary>
 177    /// <remarks>The default is to get all possible attributes from the actual file.</remarks>
 178    public int GetAttributes
 179    {
 3180      get { return getAttributes_; }
 4181      set { getAttributes_ = value; }
 182    }
 183
 184    /// <summary>
 185    /// A bitmask defining which attributes are to be set on.
 186    /// </summary>
 187    /// <remarks>By default no attributes are set on.</remarks>
 188    public int SetAttributes
 189    {
 3190      get { return setAttributes_; }
 6191      set { setAttributes_ = value; }
 192    }
 193
 194    /// <summary>
 195    /// Get set a value indicating wether unidoce text should be set on.
 196    /// </summary>
 197    public bool IsUnicodeText
 198    {
 0199      get { return isUnicodeText_; }
 4200      set { isUnicodeText_ = value; }
 201    }
 202
 203    #endregion
 204
 205    #region IEntryFactory Members
 206
 207    /// <summary>
 208    /// Make a new <see cref="ZipEntry"/> for a file.
 209    /// </summary>
 210    /// <param name="fileName">The name of the file to create a new entry for.</param>
 211    /// <returns>Returns a new <see cref="ZipEntry"/> based on the <paramref name="fileName"/>.</returns>
 212    public ZipEntry MakeFileEntry(string fileName)
 213    {
 10214      return MakeFileEntry(fileName, null, true);
 215    }
 216
 217    /// <summary>
 218    /// Make a new <see cref="ZipEntry"/> for a file.
 219    /// </summary>
 220    /// <param name="fileName">The name of the file to create a new entry for.</param>
 221    /// <param name="useFileSystem">If true entry detail is retrieved from the file system if the file exists.</param>
 222    /// <returns>Returns a new <see cref="ZipEntry"/> based on the <paramref name="fileName"/>.</returns>
 223    public ZipEntry MakeFileEntry(string fileName, bool useFileSystem) {
 168224      return MakeFileEntry(fileName, null, useFileSystem);
 225    }
 226
 227    /// <summary>
 228    /// Make a new <see cref="ZipEntry"/> from a name.
 229    /// </summary>
 230    /// <param name="fileName">The name of the file to create a new entry for.</param>
 231    /// <param name="entryName">An alternative name to be used for the new entry. Null if not applicable.</param>
 232    /// <param name="useFileSystem">If true entry detail is retrieved from the file system if the file exists.</param>
 233    /// <returns>Returns a new <see cref="ZipEntry"/> based on the <paramref name="fileName"/>.</returns>
 234    public ZipEntry MakeFileEntry(string fileName, string entryName, bool useFileSystem)
 235    {
 178236       var result = new ZipEntry(nameTransform_.TransformFile(!string.IsNullOrEmpty(entryName)? entryName : fileName));
 178237      result.IsUnicodeText = isUnicodeText_;
 238
 178239      int externalAttributes = 0;
 178240      bool useAttributes = (setAttributes_ != 0);
 241
 178242      FileInfo fi = null;
 178243       if (useFileSystem)
 244      {
 10245        fi = new FileInfo(fileName);
 246      }
 247
 178248       if ((fi != null) && fi.Exists)
 249      {
 10250         switch (timeSetting_)
 251        {
 252          case TimeSetting.CreateTime:
 1253            result.DateTime = fi.CreationTime;
 1254            break;
 255
 256          case TimeSetting.CreateTimeUtc:
 257#if NETCF_1_0 || NETCF_2_0
 258            result.DateTime = fi.CreationTime.ToUniversalTime();
 259#else
 0260            result.DateTime = fi.CreationTimeUtc;
 261#endif
 0262            break;
 263
 264          case TimeSetting.LastAccessTime:
 1265            result.DateTime = fi.LastAccessTime;
 1266            break;
 267
 268          case TimeSetting.LastAccessTimeUtc:
 269#if NETCF_1_0 || NETCF_2_0
 270            result.DateTime = fi.LastAccessTime.ToUniversalTime();
 271#else
 0272            result.DateTime = fi.LastAccessTimeUtc;
 273#endif
 0274            break;
 275
 276          case TimeSetting.LastWriteTime:
 8277            result.DateTime = fi.LastWriteTime;
 8278            break;
 279
 280          case TimeSetting.LastWriteTimeUtc:
 281#if NETCF_1_0 || NETCF_2_0
 282            result.DateTime = fi.LastWriteTime.ToUniversalTime();
 283#else
 0284            result.DateTime = fi.LastWriteTimeUtc;
 285#endif
 0286            break;
 287
 288          case TimeSetting.Fixed:
 0289            result.DateTime = fixedDateTime_;
 0290            break;
 291
 292          default:
 0293            throw new ZipException("Unhandled time setting in MakeFileEntry");
 294        }
 295
 10296        result.Size = fi.Length;
 297
 10298        useAttributes = true;
 10299        externalAttributes = ((int)fi.Attributes & getAttributes_);
 10300      }
 301      else
 302      {
 168303         if (timeSetting_ == TimeSetting.Fixed)
 304        {
 3305          result.DateTime = fixedDateTime_;
 306        }
 307      }
 308
 178309       if (useAttributes)
 310      {
 15311        externalAttributes |= setAttributes_;
 15312        result.ExternalFileAttributes = externalAttributes;
 313      }
 314
 178315      return result;
 316    }
 317
 318    /// <summary>
 319    /// Make a new <see cref="ZipEntry"></see> for a directory.
 320    /// </summary>
 321    /// <param name="directoryName">The raw untransformed name for the new directory</param>
 322    /// <returns>Returns a new <see cref="ZipEntry"></see> representing a directory.</returns>
 323    public ZipEntry MakeDirectoryEntry(string directoryName)
 324    {
 3325      return MakeDirectoryEntry(directoryName, true);
 326    }
 327
 328    /// <summary>
 329    /// Make a new <see cref="ZipEntry"></see> for a directory.
 330    /// </summary>
 331    /// <param name="directoryName">The raw untransformed name for the new directory</param>
 332    /// <param name="useFileSystem">If true entry detail is retrieved from the file system if the file exists.</param>
 333    /// <returns>Returns a new <see cref="ZipEntry"></see> representing a directory.</returns>
 334    public ZipEntry MakeDirectoryEntry(string directoryName, bool useFileSystem)
 335    {
 336
 3337      var result = new ZipEntry(nameTransform_.TransformDirectory(directoryName));
 3338            result.IsUnicodeText = isUnicodeText_;
 3339            result.Size = 0;
 340
 3341      int externalAttributes = 0;
 342
 3343      DirectoryInfo di = null;
 344
 3345       if (useFileSystem)
 346      {
 3347        di = new DirectoryInfo(directoryName);
 348      }
 349
 350
 3351       if ((di != null) && di.Exists)
 352      {
 3353         switch (timeSetting_)
 354        {
 355          case TimeSetting.CreateTime:
 1356            result.DateTime = di.CreationTime;
 1357            break;
 358
 359          case TimeSetting.CreateTimeUtc:
 360#if NETCF_1_0 || NETCF_2_0
 361            result.DateTime = di.CreationTime.ToUniversalTime();
 362#else
 0363            result.DateTime = di.CreationTimeUtc;
 364#endif
 0365            break;
 366
 367          case TimeSetting.LastAccessTime:
 1368            result.DateTime = di.LastAccessTime;
 1369            break;
 370
 371          case TimeSetting.LastAccessTimeUtc:
 372#if NETCF_1_0 || NETCF_2_0
 373            result.DateTime = di.LastAccessTime.ToUniversalTime();
 374#else
 0375            result.DateTime = di.LastAccessTimeUtc;
 376#endif
 0377            break;
 378
 379          case TimeSetting.LastWriteTime:
 1380            result.DateTime = di.LastWriteTime;
 1381            break;
 382
 383          case TimeSetting.LastWriteTimeUtc:
 384#if NETCF_1_0 || NETCF_2_0
 385            result.DateTime = di.LastWriteTime.ToUniversalTime();
 386#else
 0387            result.DateTime = di.LastWriteTimeUtc;
 388#endif
 0389            break;
 390
 391          case TimeSetting.Fixed:
 0392            result.DateTime = fixedDateTime_;
 0393            break;
 394
 395          default:
 0396            throw new ZipException("Unhandled time setting in MakeDirectoryEntry");
 397        }
 398
 3399        externalAttributes = ((int)di.Attributes & getAttributes_);
 3400      }
 401      else
 402      {
 0403         if (timeSetting_ == TimeSetting.Fixed)
 404        {
 0405          result.DateTime = fixedDateTime_;
 406        }
 407      }
 408
 409      // Always set directory attribute on.
 3410      externalAttributes |= (setAttributes_ | 16);
 3411      result.ExternalFileAttributes = externalAttributes;
 412
 3413      return result;
 414    }
 415
 416    #endregion
 417
 418    #region Instance Fields
 419    INameTransform nameTransform_;
 102420    DateTime fixedDateTime_ = DateTime.Now;
 421    TimeSetting timeSetting_;
 422    bool isUnicodeText_;
 423
 102424    int getAttributes_ = -1;
 425    int setAttributes_;
 426    #endregion
 427  }
 428}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipException.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipException.htm new file mode 100644 index 000000000..7fd4bca42 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipException.htm @@ -0,0 +1,138 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipException.cs
Covered lines:2
Uncovered lines:6
Coverable lines:8
Total lines:94
Line coverage:25%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)1100100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipException.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39using System;
 40
 41#if !NETCF_1_0 && !NETCF_2_0
 42using System.Runtime.Serialization;
 43#endif
 44
 45namespace ICSharpCode.SharpZipLib.Zip
 46{
 47
 48  /// <summary>
 49  /// Represents exception conditions specific to Zip archive handling
 50  /// </summary>
 51#if !NETCF_1_0 && !NETCF_2_0
 52  [Serializable]
 53#endif
 54  public class ZipException : SharpZipBaseException
 55  {
 56#if !NETCF_1_0 && !NETCF_2_0
 57    /// <summary>
 58    /// Deserialization constructor
 59    /// </summary>
 60    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 61    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 62    protected ZipException(SerializationInfo info, StreamingContext context )
 063      : base( info, context )
 64    {
 065    }
 66#endif
 67
 68    /// <summary>
 69    /// Initializes a new instance of the ZipException class.
 70    /// </summary>
 071    public ZipException()
 72    {
 073    }
 74
 75    /// <summary>
 76    /// Initializes a new instance of the ZipException class with a specified error message.
 77    /// </summary>
 78    /// <param name="message">The error message that explains the reason for the exception.</param>
 79    public ZipException(string message)
 1680      : base(message)
 81    {
 1682    }
 83
 84    /// <summary>
 85    /// Initialise a new instance of ZipException.
 86    /// </summary>
 87    /// <param name="message">A message describing the error.</param>
 88    /// <param name="exception">The exception that is the cause of the current exception.</param>
 89    public ZipException(string message, Exception exception)
 090      : base(message, exception)
 91    {
 092    }
 93  }
 94}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipExtraData.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipExtraData.htm new file mode 100644 index 000000000..fdce80251 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipExtraData.htm @@ -0,0 +1,1055 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipExtraData - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipExtraData
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipExtraData.cs
Covered lines:118
Uncovered lines:30
Coverable lines:148
Total lines:987
Line coverage:79.7%
Branch coverage:61.2%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)2100100
GetEntryData()266.6766.67
Clear()310060
GetStreamForTag(...)210066.67
GetData(...)200
Create(...)300
Find(...)6100100
AddEntry(...)200
AddEntry(...)89076.92
StartNewEntry()1100100
AddNewEntry(...)1100100
AddData(...)1100100
AddData(...)200
AddLeShort(...)1100100
AddLeInt(...)1100100
AddLeLong(...)1100100
Delete(...)2100100
ReadLong()1100100
ReadInt()1100100
ReadShort()1100100
ReadByte()3100100
Skip(...)1100100
ReadCheck(...)585.7177.78
ReadShortInternal()28066.67
SetShort(...)1100100
Dispose()200
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipExtraData.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1//
 2// ZipExtraData.cs
 3//
 4// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 5//
 6// This program is free software; you can redistribute it and/or
 7// modify it under the terms of the GNU General Public License
 8// as published by the Free Software Foundation; either version 2
 9// of the License, or (at your option) any later version.
 10//
 11// This program is distributed in the hope that it will be useful,
 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14// GNU General Public License for more details.
 15//
 16// You should have received a copy of the GNU General Public License
 17// along with this program; if not, write to the Free Software
 18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 19//
 20// Linking this library statically or dynamically with other modules is
 21// making a combined work based on this library.  Thus, the terms and
 22// conditions of the GNU General Public License cover the whole
 23// combination.
 24//
 25// As a special exception, the copyright holders of this library give you
 26// permission to link this library with independent modules to produce an
 27// executable, regardless of the license terms of these independent
 28// modules, and to copy and distribute the resulting executable under
 29// terms of your choice, provided that you also meet, for each linked
 30// independent module, the terms and conditions of the license of that
 31// module.  An independent module is a module which is not derived from
 32// or based on this library.  If you modify this library, you may extend
 33// this exception to your version of the library, but you are not
 34// obligated to do so.  If you do not wish to do so, delete this
 35// exception statement from your version.
 36
 37using System;
 38using System.IO;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42  // TODO: Sort out wether tagged data is useful and what a good implementation might look like.
 43  // Its just a sketch of an idea at the moment.
 44
 45  /// <summary>
 46  /// ExtraData tagged value interface.
 47  /// </summary>
 48  public interface ITaggedData
 49  {
 50    /// <summary>
 51    /// Get the ID for this tagged data value.
 52    /// </summary>
 53    short TagID { get; }
 54
 55    /// <summary>
 56    /// Set the contents of this instance from the data passed.
 57    /// </summary>
 58    /// <param name="data">The data to extract contents from.</param>
 59    /// <param name="offset">The offset to begin extracting data from.</param>
 60    /// <param name="count">The number of bytes to extract.</param>
 61    void SetData(byte[] data, int offset, int count);
 62
 63    /// <summary>
 64    /// Get the data representing this instance.
 65    /// </summary>
 66    /// <returns>Returns the data for this instance.</returns>
 67    byte[] GetData();
 68  }
 69
 70  /// <summary>
 71  /// A raw binary tagged value
 72  /// </summary>
 73  public class RawTaggedData : ITaggedData
 74  {
 75    /// <summary>
 76    /// Initialise a new instance.
 77    /// </summary>
 78    /// <param name="tag">The tag ID.</param>
 79    public RawTaggedData(short tag)
 80    {
 81      _tag = tag;
 82    }
 83
 84    #region ITaggedData Members
 85
 86    /// <summary>
 87    /// Get the ID for this tagged data value.
 88    /// </summary>
 89    public short TagID
 90    {
 91      get { return _tag; }
 92      set { _tag = value; }
 93    }
 94
 95    /// <summary>
 96    /// Set the data from the raw values provided.
 97    /// </summary>
 98    /// <param name="data">The raw data to extract values from.</param>
 99    /// <param name="offset">The index to start extracting values from.</param>
 100    /// <param name="count">The number of bytes available.</param>
 101    public void SetData(byte[] data, int offset, int count)
 102    {
 103      if( data==null )
 104      {
 105        throw new ArgumentNullException(nameof(data));
 106      }
 107
 108      _data=new byte[count];
 109      Array.Copy(data, offset, _data, 0, count);
 110    }
 111
 112    /// <summary>
 113    /// Get the binary data representing this instance.
 114    /// </summary>
 115    /// <returns>The raw binary data representing this instance.</returns>
 116    public byte[] GetData()
 117    {
 118      return _data;
 119    }
 120
 121    #endregion
 122
 123    /// <summary>
 124    /// Get /set the binary data representing this instance.
 125    /// </summary>
 126    /// <returns>The raw binary data representing this instance.</returns>
 127    public byte[] Data
 128    {
 129      get { return _data; }
 130      set { _data=value; }
 131    }
 132
 133    #region Instance Fields
 134    /// <summary>
 135    /// The tag ID for this instance.
 136    /// </summary>
 137    short _tag;
 138
 139    byte[] _data;
 140    #endregion
 141  }
 142
 143  /// <summary>
 144  /// Class representing extended unix date time values.
 145  /// </summary>
 146  public class ExtendedUnixData : ITaggedData
 147  {
 148    /// <summary>
 149    /// Flags indicate which values are included in this instance.
 150    /// </summary>
 151    [Flags]
 152    public enum Flags : byte
 153    {
 154      /// <summary>
 155      /// The modification time is included
 156      /// </summary>
 157      ModificationTime = 0x01,
 158
 159      /// <summary>
 160      /// The access time is included
 161      /// </summary>
 162      AccessTime = 0x02,
 163
 164      /// <summary>
 165      /// The create time is included.
 166      /// </summary>
 167      CreateTime = 0x04,
 168    }
 169
 170    #region ITaggedData Members
 171
 172    /// <summary>
 173    /// Get the ID
 174    /// </summary>
 175    public short TagID
 176    {
 177      get { return 0x5455; }
 178    }
 179
 180    /// <summary>
 181    /// Set the data from the raw values provided.
 182    /// </summary>
 183    /// <param name="data">The raw data to extract values from.</param>
 184    /// <param name="index">The index to start extracting values from.</param>
 185    /// <param name="count">The number of bytes available.</param>
 186    public void SetData(byte[] data, int index, int count)
 187    {
 188      using (MemoryStream ms = new MemoryStream(data, index, count, false))
 189      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 190      {
 191        // bit 0           if set, modification time is present
 192        // bit 1           if set, access time is present
 193        // bit 2           if set, creation time is present
 194
 195        _flags = (Flags)helperStream.ReadByte();
 196        if (((_flags & Flags.ModificationTime) != 0) && (count >= 5))
 197        {
 198          int iTime = helperStream.ReadLEInt();
 199
 200          _modificationTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 201            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 202        }
 203
 204        if ((_flags & Flags.AccessTime) != 0)
 205        {
 206          int iTime = helperStream.ReadLEInt();
 207
 208          _lastAccessTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 209            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 210        }
 211
 212        if ((_flags & Flags.CreateTime) != 0)
 213        {
 214          int iTime = helperStream.ReadLEInt();
 215
 216          _createTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
 217            new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
 218        }
 219      }
 220    }
 221
 222    /// <summary>
 223    /// Get the binary data representing this instance.
 224    /// </summary>
 225    /// <returns>The raw binary data representing this instance.</returns>
 226    public byte[] GetData()
 227    {
 228      using (MemoryStream ms = new MemoryStream())
 229      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 230      {
 231        helperStream.IsStreamOwner = false;
 232        helperStream.WriteByte((byte)_flags);     // Flags
 233        if ( (_flags & Flags.ModificationTime) != 0) {
 234          TimeSpan span = _modificationTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 235          var seconds = (int)span.TotalSeconds;
 236          helperStream.WriteLEInt(seconds);
 237        }
 238        if ( (_flags & Flags.AccessTime) != 0) {
 239          TimeSpan span = _lastAccessTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 240          var seconds = (int)span.TotalSeconds;
 241          helperStream.WriteLEInt(seconds);
 242        }
 243        if ( (_flags & Flags.CreateTime) != 0) {
 244          TimeSpan span = _createTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
 245          var seconds = (int)span.TotalSeconds;
 246          helperStream.WriteLEInt(seconds);
 247        }
 248        return ms.ToArray();
 249      }
 250    }
 251
 252    #endregion
 253
 254    /// <summary>
 255    /// Test a <see cref="DateTime"> value to see if is valid and can be represented here.</see>
 256    /// </summary>
 257    /// <param name="value">The <see cref="DateTime">value</see> to test.</param>
 258    /// <returns>Returns true if the value is valid and can be represented; false if not.</returns>
 259    /// <remarks>The standard Unix time is a signed integer data type, directly encoding the Unix time number,
 260    /// which is the number of seconds since 1970-01-01.
 261    /// Being 32 bits means the values here cover a range of about 136 years.
 262    /// The minimum representable time is 1901-12-13 20:45:52,
 263    /// and the maximum representable time is 2038-01-19 03:14:07.
 264    /// </remarks>
 265    public static bool IsValidValue(DateTime value)
 266    {
 267      return (( value >= new DateTime(1901, 12, 13, 20, 45, 52)) ||
 268          ( value <= new DateTime(2038, 1, 19, 03, 14, 07) ));
 269    }
 270
 271    /// <summary>
 272    /// Get /set the Modification Time
 273    /// </summary>
 274    /// <exception cref="ArgumentOutOfRangeException"></exception>
 275    /// <seealso cref="IsValidValue"></seealso>
 276    public DateTime ModificationTime
 277    {
 278      get { return _modificationTime; }
 279      set
 280      {
 281        if ( !IsValidValue(value) ) {
 282          throw new ArgumentOutOfRangeException(nameof(value));
 283        }
 284
 285        _flags |= Flags.ModificationTime;
 286        _modificationTime=value;
 287      }
 288    }
 289
 290    /// <summary>
 291    /// Get / set the Access Time
 292    /// </summary>
 293    /// <exception cref="ArgumentOutOfRangeException"></exception>
 294    /// <seealso cref="IsValidValue"></seealso>
 295    public DateTime AccessTime
 296    {
 297      get { return _lastAccessTime; }
 298      set {
 299        if ( !IsValidValue(value) ) {
 300          throw new ArgumentOutOfRangeException(nameof(value));
 301        }
 302
 303        _flags |= Flags.AccessTime;
 304        _lastAccessTime=value;
 305      }
 306    }
 307
 308    /// <summary>
 309    /// Get / Set the Create Time
 310    /// </summary>
 311    /// <exception cref="ArgumentOutOfRangeException"></exception>
 312    /// <seealso cref="IsValidValue"></seealso>
 313    public DateTime CreateTime
 314    {
 315      get { return _createTime; }
 316      set {
 317        if ( !IsValidValue(value) ) {
 318          throw new ArgumentOutOfRangeException(nameof(value));
 319        }
 320
 321        _flags |= Flags.CreateTime;
 322        _createTime=value;
 323      }
 324    }
 325
 326    /// <summary>
 327    /// Get/set the <see cref="Flags">values</see> to include.
 328    /// </summary>
 329    Flags Include
 330    {
 331      get { return _flags; }
 332      set { _flags = value; }
 333    }
 334
 335    #region Instance Fields
 336    Flags _flags;
 337    DateTime _modificationTime = new DateTime(1970,1,1);
 338    DateTime _lastAccessTime = new DateTime(1970, 1, 1);
 339    DateTime _createTime = new DateTime(1970, 1, 1);
 340    #endregion
 341  }
 342
 343  /// <summary>
 344  /// Class handling NT date time values.
 345  /// </summary>
 346  public class NTTaggedData : ITaggedData
 347  {
 348    /// <summary>
 349    /// Get the ID for this tagged data value.
 350    /// </summary>
 351    public short TagID
 352    {
 353      get { return 10; }
 354    }
 355
 356    /// <summary>
 357    /// Set the data from the raw values provided.
 358    /// </summary>
 359    /// <param name="data">The raw data to extract values from.</param>
 360    /// <param name="index">The index to start extracting values from.</param>
 361    /// <param name="count">The number of bytes available.</param>
 362    public void SetData(byte[] data, int index, int count)
 363    {
 364      using (MemoryStream ms = new MemoryStream(data, index, count, false))
 365      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 366      {
 367        helperStream.ReadLEInt(); // Reserved
 368        while (helperStream.Position < helperStream.Length)
 369        {
 370          int ntfsTag = helperStream.ReadLEShort();
 371          int ntfsLength = helperStream.ReadLEShort();
 372          if (ntfsTag == 1)
 373          {
 374            if (ntfsLength >= 24)
 375            {
 376              long lastModificationTicks = helperStream.ReadLELong();
 377              _lastModificationTime = DateTime.FromFileTime(lastModificationTicks);
 378
 379              long lastAccessTicks = helperStream.ReadLELong();
 380              _lastAccessTime = DateTime.FromFileTime(lastAccessTicks);
 381
 382              long createTimeTicks = helperStream.ReadLELong();
 383              _createTime = DateTime.FromFileTime(createTimeTicks);
 384            }
 385            break;
 386          }
 387          else
 388          {
 389            // An unknown NTFS tag so simply skip it.
 390            helperStream.Seek(ntfsLength, SeekOrigin.Current);
 391          }
 392        }
 393      }
 394    }
 395
 396    /// <summary>
 397    /// Get the binary data representing this instance.
 398    /// </summary>
 399    /// <returns>The raw binary data representing this instance.</returns>
 400    public byte[] GetData()
 401    {
 402      using (MemoryStream ms = new MemoryStream())
 403      using (ZipHelperStream helperStream = new ZipHelperStream(ms))
 404      {
 405        helperStream.IsStreamOwner = false;
 406        helperStream.WriteLEInt(0);       // Reserved
 407        helperStream.WriteLEShort(1);     // Tag
 408        helperStream.WriteLEShort(24);    // Length = 3 x 8.
 409        helperStream.WriteLELong(_lastModificationTime.ToFileTime());
 410        helperStream.WriteLELong(_lastAccessTime.ToFileTime());
 411        helperStream.WriteLELong(_createTime.ToFileTime());
 412        return ms.ToArray();
 413      }
 414    }
 415
 416    /// <summary>
 417    /// Test a <see cref="DateTime"> valuie to see if is valid and can be represented here.</see>
 418    /// </summary>
 419    /// <param name="value">The <see cref="DateTime">value</see> to test.</param>
 420    /// <returns>Returns true if the value is valid and can be represented; false if not.</returns>
 421    /// <remarks>
 422    /// NTFS filetimes are 64-bit unsigned integers, stored in Intel
 423    /// (least significant byte first) byte order. They determine the
 424    /// number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch",
 425    /// which is "01-Jan-1601 00:00:00 UTC". 28 May 60056 is the upper limit
 426    /// </remarks>
 427    public static bool IsValidValue(DateTime value)
 428    {
 429      bool result = true;
 430      try
 431      {
 432        value.ToFileTimeUtc();
 433      }
 434      catch
 435      {
 436        result = false;
 437      }
 438      return result;
 439    }
 440
 441    /// <summary>
 442    /// Get/set the <see cref="DateTime">last modification time</see>.
 443    /// </summary>
 444    public DateTime LastModificationTime
 445    {
 446      get { return _lastModificationTime; }
 447      set {
 448        if (! IsValidValue(value))
 449        {
 450          throw new ArgumentOutOfRangeException(nameof(value));
 451        }
 452        _lastModificationTime = value;
 453      }
 454    }
 455
 456    /// <summary>
 457    /// Get /set the <see cref="DateTime">create time</see>
 458    /// </summary>
 459    public DateTime CreateTime
 460    {
 461      get { return _createTime; }
 462      set {
 463        if ( !IsValidValue(value)) {
 464          throw new ArgumentOutOfRangeException(nameof(value));
 465        }
 466        _createTime = value;
 467      }
 468    }
 469
 470    /// <summary>
 471    /// Get /set the <see cref="DateTime">last access time</see>.
 472    /// </summary>
 473    public DateTime LastAccessTime
 474    {
 475      get { return _lastAccessTime; }
 476      set {
 477        if (!IsValidValue(value)) {
 478          throw new ArgumentOutOfRangeException(nameof(value));
 479        }
 480        _lastAccessTime = value;
 481      }
 482    }
 483
 484    #region Instance Fields
 485    DateTime _lastAccessTime = DateTime.FromFileTime(0);
 486    DateTime _lastModificationTime = DateTime.FromFileTime(0);
 487    DateTime _createTime = DateTime.FromFileTime(0);
 488    #endregion
 489  }
 490
 491  /// <summary>
 492  /// A factory that creates <see cref="ITaggedData">tagged data</see> instances.
 493  /// </summary>
 494  interface ITaggedDataFactory
 495  {
 496    /// <summary>
 497    /// Get data for a specific tag value.
 498    /// </summary>
 499    /// <param name="tag">The tag ID to find.</param>
 500    /// <param name="data">The data to search.</param>
 501    /// <param name="offset">The offset to begin extracting data from.</param>
 502    /// <param name="count">The number of bytes to extract.</param>
 503    /// <returns>The located <see cref="ITaggedData">value found</see>, or null if not found.</returns>
 504    ITaggedData Create(short tag, byte[] data, int offset, int count);
 505  }
 506
 507  ///
 508  /// <summary>
 509  /// A class to handle the extra data field for Zip entries
 510  /// </summary>
 511  /// <remarks>
 512  /// Extra data contains 0 or more values each prefixed by a header tag and length.
 513  /// They contain zero or more bytes of actual data.
 514  /// The data is held internally using a copy on write strategy.  This is more efficient but
 515  /// means that for extra data created by passing in data can have the values modified by the caller
 516  /// in some circumstances.
 517  /// </remarks>
 518  sealed public class ZipExtraData : IDisposable
 519  {
 520    #region Constructors
 521    /// <summary>
 522    /// Initialise a default instance.
 523    /// </summary>
 6524    public ZipExtraData()
 525    {
 6526      Clear();
 6527    }
 528
 529    /// <summary>
 530    /// Initialise with known extra data.
 531    /// </summary>
 532    /// <param name="data">The extra data.</param>
 329702533    public ZipExtraData(byte[] data)
 534    {
 329702535       if ( data == null )
 536      {
 131948537        _data = new byte[0];
 131948538      }
 539      else
 540      {
 197754541        _data = data;
 542      }
 197754543    }
 544    #endregion
 545
 546    /// <summary>
 547    /// Get the raw extra data value
 548    /// </summary>
 549    /// <returns>Returns the raw byte[] extra data this instance represents.</returns>
 550    public byte[] GetEntryData()
 551    {
 131795552       if ( Length > ushort.MaxValue ) {
 0553        throw new ZipException("Data exceeds maximum length");
 554      }
 555
 131795556      return (byte[])_data.Clone();
 557    }
 558
 559    /// <summary>
 560    /// Clear the stored data.
 561    /// </summary>
 562    public void Clear()
 563    {
 6564       if ( (_data == null) || (_data.Length != 0) ) {
 6565        _data = new byte[0];
 566      }
 6567    }
 568
 569    /// <summary>
 570    /// Gets the current extra data length.
 571    /// </summary>
 572    public int Length
 573    {
 131818574      get { return _data.Length; }
 575    }
 576
 577    /// <summary>
 578    /// Get a read-only <see cref="Stream"/> for the associated tag.
 579    /// </summary>
 580    /// <param name="tag">The tag to locate data for.</param>
 581    /// <returns>Returns a <see cref="Stream"/> containing tag data or null if no tag was found.</returns>
 582    public Stream GetStreamForTag(int tag)
 583    {
 4584      Stream result = null;
 4585       if ( Find(tag) ) {
 4586        result = new MemoryStream(_data, _index, _readValueLength, false);
 587      }
 4588      return result;
 589    }
 590
 591    /// <summary>
 592    /// Get the <see cref="ITaggedData">tagged data</see> for a tag.
 593    /// </summary>
 594    /// <param name="tag">The tag to search for.</param>
 595    /// <returns>Returns a <see cref="ITaggedData">tagged value</see> or null if none found.</returns>
 596    private ITaggedData GetData(short tag)
 597    {
 0598      ITaggedData result = null;
 0599       if (Find(tag))
 600      {
 0601        result = Create(tag, _data, _readValueStart, _readValueLength);
 602      }
 0603      return result;
 604    }
 605
 606    static ITaggedData Create(short tag, byte[] data, int offset, int count)
 607    {
 0608      ITaggedData result = null;
 0609       switch ( tag )
 610      {
 611        case 0x000A:
 0612          result = new NTTaggedData();
 0613          break;
 614        case 0x5455:
 0615          result = new ExtendedUnixData();
 0616          break;
 617        default:
 0618          result = new RawTaggedData(tag);
 619          break;
 620      }
 0621      result.SetData(data, offset, count);
 0622      return result;
 623    }
 624
 625    /// <summary>
 626    /// Get the length of the last value found by <see cref="Find"/>
 627    /// </summary>
 628    /// <remarks>This is only valid if <see cref="Find"/> has previously returned true.</remarks>
 629    public int ValueLength
 630    {
 151631      get { return _readValueLength; }
 632    }
 633
 634    /// <summary>
 635    /// Get the index for the current read value.
 636    /// </summary>
 637    /// <remarks>This is only valid if <see cref="Find"/> has previously returned true.
 638    /// Initially the result will be the index of the first byte of actual data.  The value is updated after calls to
 639    /// <see cref="ReadInt"/>, <see cref="ReadShort"/> and <see cref="ReadLong"/>. </remarks>
 640    public int CurrentReadIndex
 641    {
 103642      get { return _index; }
 643    }
 644
 645    /// <summary>
 646    /// Get the number of bytes remaining to be read for the current value;
 647    /// </summary>
 648    public int UnreadCount
 649    {
 650      get
 651      {
 16652         if ((_readValueStart > _data.Length) ||
 16653          (_readValueStart < 4) ) {
 0654          throw new ZipException("Find must be called before calling a Read method");
 655        }
 656
 16657        return _readValueStart + _readValueLength - _index;
 658      }
 659    }
 660
 661    /// <summary>
 662    /// Find an extra data value
 663    /// </summary>
 664    /// <param name="headerID">The identifier for the value to find.</param>
 665    /// <returns>Returns true if the value was found; false otherwise.</returns>
 666    public bool Find(int headerID)
 667    {
 462202668      _readValueStart = _data.Length;
 462202669      _readValueLength = 0;
 462202670      _index = 0;
 671
 462202672      int localLength = _readValueStart;
 462202673      int localTag = headerID - 1;
 674
 675      // Trailing bytes that cant make up an entry (as there arent enough
 676      // bytes for a tag and length) are ignored!
 462825677       while ( (localTag != headerID) && (_index < _data.Length - 3) ) {
 623678        localTag = ReadShortInternal();
 623679        localLength = ReadShortInternal();
 623680         if ( localTag != headerID ) {
 285681          _index += localLength;
 682        }
 683      }
 684
 462202685      bool result = (localTag == headerID) && ((_index + localLength) <= _data.Length);
 686
 462202687       if ( result ) {
 338688        _readValueStart = _index;
 338689        _readValueLength = localLength;
 690      }
 691
 462202692      return result;
 693    }
 694
 695    /// <summary>
 696    /// Add a new entry to extra data.
 697    /// </summary>
 698    /// <param name="taggedData">The <see cref="ITaggedData"/> value to add.</param>
 699    public void AddEntry(ITaggedData taggedData)
 700    {
 0701       if (taggedData == null)
 702      {
 0703        throw new ArgumentNullException(nameof(taggedData));
 704      }
 0705      AddEntry(taggedData.TagID, taggedData.GetData());
 0706    }
 707
 708    /// <summary>
 709    /// Add a new entry to extra data
 710    /// </summary>
 711    /// <param name="headerID">The ID for this entry.</param>
 712    /// <param name="fieldData">The data to add.</param>
 713    /// <remarks>If the ID already exists its contents are replaced.</remarks>
 714    public void AddEntry(int headerID, byte[] fieldData)
 715    {
 268716       if ( (headerID > ushort.MaxValue) || (headerID < 0)) {
 0717        throw new ArgumentOutOfRangeException(nameof(headerID));
 718      }
 719
 268720      int addLength = (fieldData == null) ? 0 : fieldData.Length;
 721
 268722       if ( addLength > ushort.MaxValue ) {
 723#if NETCF_1_0
 724        throw new ArgumentOutOfRangeException("fieldData");
 725#else
 0726        throw new ArgumentOutOfRangeException(nameof(fieldData), "exceeds maximum length");
 727#endif
 728      }
 729
 730      // Test for new length before adjusting data.
 268731      int newLength = _data.Length + addLength + 4;
 732
 268733       if ( Find(headerID) )
 734      {
 4735        newLength -= (ValueLength + 4);
 736      }
 737
 268738       if ( newLength > ushort.MaxValue ) {
 2739        throw new ZipException("Data exceeds maximum length");
 740      }
 741
 266742      Delete(headerID);
 743
 266744      byte[] newData = new byte[newLength];
 266745      _data.CopyTo(newData, 0);
 266746      int index = _data.Length;
 266747      _data = newData;
 266748      SetShort(ref index, headerID);
 266749      SetShort(ref index, addLength);
 266750       if ( fieldData != null ) {
 264751        fieldData.CopyTo(newData, index);
 752      }
 266753    }
 754
 755    /// <summary>
 756    /// Start adding a new entry.
 757    /// </summary>
 758    /// <remarks>Add data using <see cref="AddData(byte[])"/>, <see cref="AddLeShort"/>, <see cref="AddLeInt"/>, or <see
 759    /// The new entry is completed and actually added by calling <see cref="AddNewEntry"/></remarks>
 760    /// <seealso cref="AddEntry(ITaggedData)"/>
 761    public void StartNewEntry()
 762    {
 256763      _newEntry = new MemoryStream();
 256764    }
 765
 766    /// <summary>
 767    /// Add entry data added since <see cref="StartNewEntry"/> using the ID passed.
 768    /// </summary>
 769    /// <param name="headerID">The identifier to use for this entry.</param>
 770    public void AddNewEntry(int headerID)
 771    {
 256772      byte[] newData = _newEntry.ToArray();
 256773      _newEntry = null;
 256774      AddEntry(headerID, newData);
 256775    }
 776
 777    /// <summary>
 778    /// Add a byte of data to the pending new entry.
 779    /// </summary>
 780    /// <param name="data">The byte to add.</param>
 781    /// <seealso cref="StartNewEntry"/>
 782    public void AddData(byte data)
 783    {
 2784      _newEntry.WriteByte(data);
 2785    }
 786
 787    /// <summary>
 788    /// Add data to a pending new entry.
 789    /// </summary>
 790    /// <param name="data">The data to add.</param>
 791    /// <seealso cref="StartNewEntry"/>
 792    public void AddData(byte[] data)
 793    {
 0794       if ( data == null ) {
 0795        throw new ArgumentNullException(nameof(data));
 796      }
 797
 0798      _newEntry.Write(data, 0, data.Length);
 0799    }
 800
 801    /// <summary>
 802    /// Add a short value in little endian order to the pending new entry.
 803    /// </summary>
 804    /// <param name="toAdd">The data to add.</param>
 805    /// <seealso cref="StartNewEntry"/>
 806    public void AddLeShort(int toAdd)
 807    {
 808      unchecked {
 2054809        _newEntry.WriteByte(( byte )toAdd);
 2054810        _newEntry.WriteByte(( byte )(toAdd >> 8));
 811      }
 2054812    }
 813
 814    /// <summary>
 815    /// Add an integer value in little endian order to the pending new entry.
 816    /// </summary>
 817    /// <param name="toAdd">The data to add.</param>
 818    /// <seealso cref="StartNewEntry"/>
 819    public void AddLeInt(int toAdd)
 820    {
 821      unchecked {
 1027822        AddLeShort(( short )toAdd);
 1027823        AddLeShort(( short )(toAdd >> 16));
 824      }
 1027825    }
 826
 827    /// <summary>
 828    /// Add a long value in little endian order to the pending new entry.
 829    /// </summary>
 830    /// <param name="toAdd">The data to add.</param>
 831    /// <seealso cref="StartNewEntry"/>
 832    public void AddLeLong(long toAdd)
 833    {
 834      unchecked {
 513835        AddLeInt(( int )(toAdd & 0xffffffff));
 513836        AddLeInt(( int )(toAdd >> 32));
 837      }
 513838    }
 839
 840    /// <summary>
 841    /// Delete an extra data field.
 842    /// </summary>
 843    /// <param name="headerID">The identifier of the field to delete.</param>
 844    /// <returns>Returns true if the field was found and deleted.</returns>
 845    public bool Delete(int headerID)
 846    {
 131798847      bool result = false;
 848
 131798849       if ( Find(headerID) ) {
 6850        result = true;
 6851        int trueStart = _readValueStart - 4;
 852
 6853        byte[] newData = new byte[_data.Length - (ValueLength + 4)];
 6854        Array.Copy(_data, 0, newData, 0, trueStart);
 855
 6856        int trueEnd = trueStart + ValueLength + 4;
 6857        Array.Copy(_data, trueEnd, newData, trueStart, _data.Length - trueEnd);
 6858        _data = newData;
 859      }
 131798860      return result;
 861    }
 862
 863    #region Reading Support
 864    /// <summary>
 865    /// Read a long in little endian form from the last <see cref="Find">found</see> data value
 866    /// </summary>
 867    /// <returns>Returns the long value read.</returns>
 868    public long ReadLong()
 869    {
 365870      ReadCheck(8);
 362871      return (ReadInt() & 0xffffffff) | ((( long )ReadInt()) << 32);
 872    }
 873
 874    /// <summary>
 875    /// Read an integer in little endian form from the last <see cref="Find">found</see> data value.
 876    /// </summary>
 877    /// <returns>Returns the integer read.</returns>
 878    public int ReadInt()
 879    {
 729880      ReadCheck(4);
 881
 726882      int result = _data[_index] + (_data[_index + 1] << 8) +
 726883        (_data[_index + 2] << 16) + (_data[_index + 3] << 24);
 726884      _index += 4;
 726885      return result;
 886    }
 887
 888    /// <summary>
 889    /// Read a short value in little endian form from the last <see cref="Find">found</see> data value.
 890    /// </summary>
 891    /// <returns>Returns the short value read.</returns>
 892    public int ReadShort()
 893    {
 4894      ReadCheck(2);
 1895      int result = _data[_index] + (_data[_index + 1] << 8);
 1896      _index += 2;
 1897      return result;
 898    }
 899
 900    /// <summary>
 901    /// Read a byte from an extra data
 902    /// </summary>
 903    /// <returns>The byte value read or -1 if the end of data has been reached.</returns>
 904    public int ReadByte()
 905    {
 27906      int result = -1;
 27907       if ( (_index < _data.Length) && (_readValueStart + _readValueLength > _index) ) {
 20908        result = _data[_index];
 20909        _index += 1;
 910      }
 27911      return result;
 912    }
 913
 914    /// <summary>
 915    /// Skip data during reading.
 916    /// </summary>
 917    /// <param name="amount">The number of bytes to skip.</param>
 918    public void Skip(int amount)
 919    {
 6920      ReadCheck(amount);
 4921      _index += amount;
 4922    }
 923
 924    void ReadCheck(int length)
 925    {
 1104926       if ((_readValueStart > _data.Length) ||
 1104927        (_readValueStart < 4) ) {
 0928        throw new ZipException("Find must be called before calling a Read method");
 929      }
 930
 1104931       if (_index > _readValueStart + _readValueLength - length ) {
 10932        throw new ZipException("End of extra data");
 933      }
 934
 1094935             if ( _index + length < 4 ) {
 1936                throw new ZipException("Cannot read before start of tag");
 937            }
 1093938    }
 939
 940    /// <summary>
 941    /// Internal form of <see cref="ReadShort"/> that reads data at any location.
 942    /// </summary>
 943    /// <returns>Returns the short value read.</returns>
 944    int ReadShortInternal()
 945    {
 1246946       if ( _index > _data.Length - 2) {
 0947        throw new ZipException("End of extra data");
 948      }
 949
 1246950      int result = _data[_index] + (_data[_index + 1] << 8);
 1246951      _index += 2;
 1246952      return result;
 953    }
 954
 955    void SetShort(ref int index, int source)
 956    {
 532957      _data[index] = (byte)source;
 532958      _data[index + 1] = (byte)(source >> 8);
 532959      index += 2;
 532960    }
 961
 962    #endregion
 963
 964    #region IDisposable Members
 965
 966    /// <summary>
 967    /// Dispose of this instance.
 968    /// </summary>
 969    public void Dispose()
 970    {
 0971       if ( _newEntry != null ) {
 0972        _newEntry.Close();
 973      }
 0974    }
 975
 976    #endregion
 977
 978    #region Instance Fields
 979    int _index;
 980    int _readValueStart;
 981    int _readValueLength;
 982
 983    MemoryStream _newEntry;
 984    byte[] _data;
 985    #endregion
 986  }
 987}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipFile.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipFile.htm new file mode 100644 index 000000000..283c482f9 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipFile.htm @@ -0,0 +1,4628 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipFile - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipFile
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs
Covered lines:958
Uncovered lines:360
Coverable lines:1318
Total lines:4476
Line coverage:72.6%
Branch coverage:58.4%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
OnKeysRequired(...)24066.67
.ctor(...)293.3366.67
.ctor(...)335.2940
.ctor(...)473.6871.43
.ctor()1100100
Finalize()1100100
Close()1100100
Create(...)287.566.67
Create(...)466.6757.14
GetEnumerator()266.6766.67
FindEntry(...)487.585.71
GetEntry(...)300
GetInputStream(...)75046.15
GetInputStream(...)678.5772.73
TestArchive(...)1100100
TestArchive(...)2553.6260
TestLocalHeader(...)7165.9653.96
BeginUpdate(...)987.1063.64
BeginUpdate(...)1100100
BeginUpdate()2100100
CommitUpdate()79077.78
AbortUpdate()100
SetComment(...)366.6760
AddUpdate(...)363.6440
Add(...)400
Add(...)300
Add(...)28066.67
Add(...)300
Add(...)371.4360
Add(...)377.7860
Add(...)38060
Add(...)471.4357.14
AddDirectory(...)200
Delete(...)484.6257.14
Delete(...)38060
WriteLEShort(...)1100100
WriteLEUshort(...)1100100
WriteLEInt(...)1100100
WriteLEUint(...)1100100
WriteLeLong(...)1100100
WriteLEUlong(...)100
WriteLocalEntryHeader(...)2093.6582.05
WriteCentralDirectoryHeader(...)2483.6166.67
PostUpdateCleanup()2100100
GetTransformedFileName(...)210066.67
GetTransformedDirectoryName(...)200
GetBuffer()2100100
CopyDescriptorBytes(...)42528.57
CopyBytes(...)990.9164.71
GetDescriptorSize(...)35040
CopyDescriptorBytesDirect(...)32040
CopyEntryDataDirect(...)88853.33
FindExistingUpdate(...)210066.67
FindExistingUpdate(...)2100100
GetOutputStream(...)491.6785.71
AddEntry(...)996.3084.62
ModifyEntry(...)500
CopyEntryDirect(...)510088.89
CopyEntry(...)210066.67
Reopen(...)283.3366.67
Reopen()200
UpdateCommentOnly()687.1077.78
RunUpdates()2991.1484.62
CheckUpdating()266.6766.67
System.IDisposable.Dispose()1100100
DisposeInternal(...)5100100
Dispose(...)1100100
ReadLEUshort()371.4360
ReadLEUint()1100100
ReadLEUlong()1100100
LocateBlockWithSignature(...)2100100
ReadEntries()2092.3974.36
LocateEntry(...)1100100
CreateAndInitDecryptionStream(...)931.0323.53
CreateAndInitEncryptionStream(...)683.3354.55
CheckClassicPassword(...)28066.67
WriteEncryptionHeader(...)1100100
Compare(...)1310088.24
.ctor(...)1100100
.ctor(...)100
.ctor(...)100
.ctor(...)100
.ctor(...)1100100
.ctor(...)100
.ctor(...)1100100
.ctor(...)1100100
GetSource()2100100
.ctor(...)1100100
.ctor(...)100
Reset()200
MakeTextAvailable()200
MakeBytesAvailable()2100100
op_Implicit(...)100
.ctor(...)1100100
Reset()100
MoveNext()1100100
.ctor(...)1100100
Close()1100100
Flush()100
Read(...)100
Seek(...)100
SetLength(...)100
Write(...)1100100
.ctor(...)1100100
ReadByte()383.3366.67
Close()1100100
Read(...)510085.71
Write(...)100
SetLength(...)100
Seek(...)661.5444.44
Flush()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipFile.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipFile.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2009-12-22  Z-1649  Added AES support
 41//  2010-03-02  Z-1650  Fixed updating ODT archives in memory. Exposed exceptions in updating.
 42//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 43//  2012-11-29  Z-1684  Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp
 44
 45using System;
 46using System.Collections;
 47using System.IO;
 48using System.Text;
 49using System.Globalization;
 50
 51#if !NETCF_1_0
 52using System.Security.Cryptography;
 53using ICSharpCode.SharpZipLib.Encryption;
 54#endif
 55
 56using ICSharpCode.SharpZipLib.Core;
 57using ICSharpCode.SharpZipLib.Checksums;
 58using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 59using ICSharpCode.SharpZipLib.Zip.Compression;
 60
 61namespace ICSharpCode.SharpZipLib.Zip
 62{
 63  #region Keys Required Event Args
 64  /// <summary>
 65  /// Arguments used with KeysRequiredEvent
 66  /// </summary>
 67  public class KeysRequiredEventArgs : EventArgs
 68  {
 69    #region Constructors
 70    /// <summary>
 71    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 72    /// </summary>
 73    /// <param name="name">The name of the file for which keys are required.</param>
 74    public KeysRequiredEventArgs(string name)
 75    {
 76      fileName = name;
 77    }
 78
 79    /// <summary>
 80    /// Initialise a new instance of <see cref="KeysRequiredEventArgs"></see>
 81    /// </summary>
 82    /// <param name="name">The name of the file for which keys are required.</param>
 83    /// <param name="keyValue">The current key value.</param>
 84    public KeysRequiredEventArgs(string name, byte[] keyValue)
 85    {
 86      fileName = name;
 87      key = keyValue;
 88    }
 89
 90    #endregion
 91    #region Properties
 92    /// <summary>
 93    /// Gets the name of the file for which keys are required.
 94    /// </summary>
 95    public string FileName
 96    {
 97      get { return fileName; }
 98    }
 99
 100    /// <summary>
 101    /// Gets or sets the key value
 102    /// </summary>
 103    public byte[] Key
 104    {
 105      get { return key; }
 106      set { key = value; }
 107    }
 108    #endregion
 109
 110    #region Instance Fields
 111    string fileName;
 112    byte[] key;
 113    #endregion
 114  }
 115  #endregion
 116
 117  #region Test Definitions
 118  /// <summary>
 119  /// The strategy to apply to testing.
 120  /// </summary>
 121  public enum TestStrategy
 122  {
 123    /// <summary>
 124    /// Find the first error only.
 125    /// </summary>
 126    FindFirstError,
 127    /// <summary>
 128    /// Find all possible errors.
 129    /// </summary>
 130    FindAllErrors,
 131  }
 132
 133  /// <summary>
 134  /// The operation in progress reported by a <see cref="ZipTestResultHandler"/> during testing.
 135  /// </summary>
 136  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 137  public enum TestOperation
 138  {
 139    /// <summary>
 140    /// Setting up testing.
 141    /// </summary>
 142    Initialising,
 143
 144    /// <summary>
 145    /// Testing an individual entries header
 146    /// </summary>
 147    EntryHeader,
 148
 149    /// <summary>
 150    /// Testing an individual entries data
 151    /// </summary>
 152    EntryData,
 153
 154    /// <summary>
 155    /// Testing an individual entry has completed.
 156    /// </summary>
 157    EntryComplete,
 158
 159    /// <summary>
 160    /// Running miscellaneous tests
 161    /// </summary>
 162    MiscellaneousTests,
 163
 164    /// <summary>
 165    /// Testing is complete
 166    /// </summary>
 167    Complete,
 168  }
 169
 170  /// <summary>
 171  /// Status returned returned by <see cref="ZipTestResultHandler"/> during testing.
 172  /// </summary>
 173  /// <seealso cref="ZipFile.TestArchive(bool)">TestArchive</seealso>
 174  public class TestStatus
 175  {
 176    #region Constructors
 177    /// <summary>
 178    /// Initialise a new instance of <see cref="TestStatus"/>
 179    /// </summary>
 180    /// <param name="file">The <see cref="ZipFile"/> this status applies to.</param>
 181    public TestStatus(ZipFile file)
 182    {
 183      file_ = file;
 184    }
 185    #endregion
 186
 187    #region Properties
 188
 189    /// <summary>
 190    /// Get the current <see cref="TestOperation"/> in progress.
 191    /// </summary>
 192    public TestOperation Operation
 193    {
 194      get { return operation_; }
 195    }
 196
 197    /// <summary>
 198    /// Get the <see cref="ZipFile"/> this status is applicable to.
 199    /// </summary>
 200    public ZipFile File
 201    {
 202      get { return file_; }
 203    }
 204
 205    /// <summary>
 206    /// Get the current/last entry tested.
 207    /// </summary>
 208    public ZipEntry Entry
 209    {
 210      get { return entry_; }
 211    }
 212
 213    /// <summary>
 214    /// Get the number of errors detected so far.
 215    /// </summary>
 216    public int ErrorCount
 217    {
 218      get { return errorCount_; }
 219    }
 220
 221    /// <summary>
 222    /// Get the number of bytes tested so far for the current entry.
 223    /// </summary>
 224    public long BytesTested
 225    {
 226      get { return bytesTested_; }
 227    }
 228
 229    /// <summary>
 230    /// Get a value indicating wether the last entry test was valid.
 231    /// </summary>
 232    public bool EntryValid
 233    {
 234      get { return entryValid_; }
 235    }
 236    #endregion
 237
 238    #region Internal API
 239    internal void AddError()
 240    {
 241      errorCount_++;
 242      entryValid_ = false;
 243    }
 244
 245    internal void SetOperation(TestOperation operation)
 246    {
 247      operation_ = operation;
 248    }
 249
 250    internal void SetEntry(ZipEntry entry)
 251    {
 252      entry_ = entry;
 253      entryValid_ = true;
 254      bytesTested_ = 0;
 255    }
 256
 257    internal void SetBytesTested(long value)
 258    {
 259      bytesTested_ = value;
 260    }
 261    #endregion
 262
 263    #region Instance Fields
 264    ZipFile file_;
 265    ZipEntry entry_;
 266    bool entryValid_;
 267    int errorCount_;
 268    long bytesTested_;
 269    TestOperation operation_;
 270    #endregion
 271  }
 272
 273  /// <summary>
 274  /// Delegate invoked during <see cref="ZipFile.TestArchive(bool, TestStrategy, ZipTestResultHandler)">testing</see> if
 275  /// </summary>
 276  /// <remarks>If the message is non-null an error has occured.  If the message is null
 277  /// the operation as found in <see cref="TestStatus">status</see> has started.</remarks>
 278  public delegate void ZipTestResultHandler(TestStatus status, string message);
 279  #endregion
 280
 281  #region Update Definitions
 282  /// <summary>
 283  /// The possible ways of <see cref="ZipFile.CommitUpdate()">applying updates</see> to an archive.
 284  /// </summary>
 285  public enum FileUpdateMode
 286  {
 287    /// <summary>
 288    /// Perform all updates on temporary files ensuring that the original file is saved.
 289    /// </summary>
 290    Safe,
 291    /// <summary>
 292    /// Update the archive directly, which is faster but less safe.
 293    /// </summary>
 294    Direct,
 295  }
 296  #endregion
 297
 298  #region ZipFile Class
 299  /// <summary>
 300  /// This class represents a Zip archive.  You can ask for the contained
 301  /// entries, or get an input stream for a file entry.  The entry is
 302  /// automatically decompressed.
 303  ///
 304  /// You can also update the archive adding or deleting entries.
 305  ///
 306  /// This class is thread safe for input:  You can open input streams for arbitrary
 307  /// entries in different threads.
 308  /// <br/>
 309  /// <br/>Author of the original java version : Jochen Hoenicke
 310  /// </summary>
 311  /// <example>
 312  /// <code>
 313  /// using System;
 314  /// using System.Text;
 315  /// using System.Collections;
 316  /// using System.IO;
 317  ///
 318  /// using ICSharpCode.SharpZipLib.Zip;
 319  ///
 320  /// class MainClass
 321  /// {
 322  ///   static public void Main(string[] args)
 323  ///   {
 324  ///     using (ZipFile zFile = new ZipFile(args[0])) {
 325  ///       Console.WriteLine("Listing of : " + zFile.Name);
 326  ///       Console.WriteLine("");
 327  ///       Console.WriteLine("Raw Size    Size      Date     Time     Name");
 328  ///       Console.WriteLine("--------  --------  --------  ------  ---------");
 329  ///       foreach (ZipEntry e in zFile) {
 330  ///         if ( e.IsFile ) {
 331  ///           DateTime d = e.DateTime;
 332  ///           Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
 333  ///             d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
 334  ///             e.Name);
 335  ///         }
 336  ///       }
 337  ///     }
 338  ///   }
 339  /// }
 340  /// </code>
 341  /// </example>
 342  public class ZipFile : IEnumerable, IDisposable
 343  {
 344    #region KeyHandling
 345
 346    /// <summary>
 347    /// Delegate for handling keys/password setting during compresion/decompression.
 348    /// </summary>
 349    public delegate void KeysRequiredEventHandler(
 350      object sender,
 351      KeysRequiredEventArgs e
 352    );
 353
 354    /// <summary>
 355    /// Event handler for handling encryption keys.
 356    /// </summary>
 357    public KeysRequiredEventHandler KeysRequired;
 358
 359    /// <summary>
 360    /// Handles getting of encryption keys when required.
 361    /// </summary>
 362    /// <param name="fileName">The file for which encryption keys are required.</param>
 363    void OnKeysRequired(string fileName)
 364    {
 15365       if (KeysRequired != null) {
 0366        var krea = new KeysRequiredEventArgs(fileName, key);
 0367        KeysRequired(this, krea);
 0368        key = krea.Key;
 369      }
 15370    }
 371
 372    /// <summary>
 373    /// Get/set the encryption key value.
 374    /// </summary>
 375    byte[] Key
 376    {
 0377      get { return key; }
 0378      set { key = value; }
 379    }
 380
 381#if !NETCF_1_0
 382    /// <summary>
 383    /// Password to be used for encrypting/decrypting files.
 384    /// </summary>
 385    /// <remarks>Set to null if no password is required.</remarks>
 386    public string Password
 387    {
 388      set
 389      {
 16390         if ( string.IsNullOrEmpty(value)) {
 5391          key = null;
 5392        }
 393        else {
 11394          rawPassword_ = value;
 11395          key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value));
 396        }
 11397      }
 398    }
 399#endif
 400
 401    /// <summary>
 402    /// Get a value indicating wether encryption keys are currently available.
 403    /// </summary>
 404    bool HaveKeys
 405    {
 65720406      get { return key != null; }
 407    }
 408    #endregion
 409
 410    #region Constructors
 411    /// <summary>
 412    /// Opens a Zip file with the given name for reading.
 413    /// </summary>
 414    /// <param name="name">The name of the file to open.</param>
 415    /// <exception cref="ArgumentNullException">The argument supplied is null.</exception>
 416    /// <exception cref="IOException">
 417    /// An i/o error occurs
 418    /// </exception>
 419    /// <exception cref="ZipException">
 420    /// The file doesn't contain a valid zip archive.
 421    /// </exception>
 15422    public ZipFile(string name)
 423    {
 15424       if ( name == null ) {
 0425        throw new ArgumentNullException(nameof(name));
 426      }
 427
 15428      name_ = name;
 429
 15430      baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 15431      isStreamOwner = true;
 432
 433      try {
 15434        ReadEntries();
 14435      }
 1436      catch {
 1437        DisposeInternal(true);
 1438        throw;
 439      }
 14440    }
 441
 442    /// <summary>
 443    /// Opens a Zip file reading the given <see cref="FileStream"/>.
 444    /// </summary>
 445    /// <param name="file">The <see cref="FileStream"/> to read archive data from.</param>
 446    /// <exception cref="ArgumentNullException">The supplied argument is null.</exception>
 447    /// <exception cref="IOException">
 448    /// An i/o error occurs.
 449    /// </exception>
 450    /// <exception cref="ZipException">
 451    /// The file doesn't contain a valid zip archive.
 452    /// </exception>
 1453    public ZipFile(FileStream file)
 454    {
 1455       if ( file == null ) {
 1456        throw new ArgumentNullException(nameof(file));
 457      }
 458
 0459       if ( !file.CanSeek ) {
 0460        throw new ArgumentException("Stream is not seekable", nameof(file));
 461      }
 462
 0463      baseStream_  = file;
 0464      name_ = file.Name;
 0465      isStreamOwner = true;
 466
 467      try {
 0468        ReadEntries();
 0469      }
 0470      catch {
 0471        DisposeInternal(true);
 0472        throw;
 473      }
 0474    }
 475
 476    /// <summary>
 477    /// Opens a Zip file reading the given <see cref="Stream"/>.
 478    /// </summary>
 479    /// <param name="stream">The <see cref="Stream"/> to read archive data from.</param>
 480    /// <exception cref="IOException">
 481    /// An i/o error occurs
 482    /// </exception>
 483    /// <exception cref="ZipException">
 484    /// The stream doesn't contain a valid zip archive.<br/>
 485    /// </exception>
 486    /// <exception cref="ArgumentException">
 487    /// The <see cref="Stream">stream</see> doesnt support seeking.
 488    /// </exception>
 489    /// <exception cref="ArgumentNullException">
 490    /// The <see cref="Stream">stream</see> argument is null.
 491    /// </exception>
 62492    public ZipFile(Stream stream)
 493    {
 62494       if ( stream == null ) {
 0495        throw new ArgumentNullException(nameof(stream));
 496      }
 497
 62498       if ( !stream.CanSeek ) {
 0499        throw new ArgumentException("Stream is not seekable", nameof(stream));
 500      }
 501
 62502      baseStream_  = stream;
 62503      isStreamOwner = true;
 504
 62505       if ( baseStream_.Length > 0 ) {
 506        try {
 52507          ReadEntries();
 52508        }
 0509        catch {
 0510          DisposeInternal(true);
 0511          throw;
 512        }
 513      } else {
 10514        entries_ = new ZipEntry[0];
 10515        isNewArchive_ = true;
 516      }
 62517    }
 518
 519    /// <summary>
 520    /// Initialises a default <see cref="ZipFile"/> instance with no entries and no file storage.
 521    /// </summary>
 10522    internal ZipFile()
 523    {
 10524      entries_ = new ZipEntry[0];
 10525      isNewArchive_ = true;
 10526    }
 527
 528    #endregion
 529
 530    #region Destructors and Closing
 531    /// <summary>
 532    /// Finalize this instance.
 533    /// </summary>
 534    ~ZipFile()
 535    {
 6536      Dispose(false);
 12537    }
 538
 539    /// <summary>
 540    /// Closes the ZipFile.  If the stream is <see cref="IsStreamOwner">owned</see> then this also closes the underlying
 541    /// Once closed, no further instance methods should be called.
 542    /// </summary>
 543    /// <exception cref="System.IO.IOException">
 544    /// An i/o error occurs.
 545    /// </exception>
 546    public void Close()
 547    {
 91548      DisposeInternal(true);
 91549      GC.SuppressFinalize(this);
 91550    }
 551
 552    #endregion
 553
 554    #region Creators
 555    /// <summary>
 556    /// Create a new <see cref="ZipFile"/> whose data will be stored in a file.
 557    /// </summary>
 558    /// <param name="fileName">The name of the archive to create.</param>
 559    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 560    /// <exception cref="ArgumentNullException"><paramref name="fileName"></paramref> is null</exception>
 561    public static ZipFile Create(string fileName)
 562    {
 7563       if ( fileName == null ) {
 0564        throw new ArgumentNullException(nameof(fileName));
 565      }
 566
 7567      FileStream fs = File.Create(fileName);
 568
 7569      var result = new ZipFile();
 7570      result.name_ = fileName;
 7571      result.baseStream_ = fs;
 7572      result.isStreamOwner = true;
 7573      return result;
 574    }
 575
 576    /// <summary>
 577    /// Create a new <see cref="ZipFile"/> whose data will be stored on a stream.
 578    /// </summary>
 579    /// <param name="outStream">The stream providing data storage.</param>
 580    /// <returns>Returns the newly created <see cref="ZipFile"/></returns>
 581    /// <exception cref="ArgumentNullException"><paramref name="outStream"> is null</paramref></exception>
 582    /// <exception cref="ArgumentException"><paramref name="outStream"> doesnt support writing.</paramref></exception>
 583    public static ZipFile Create(Stream outStream)
 584    {
 3585       if ( outStream == null ) {
 0586        throw new ArgumentNullException(nameof(outStream));
 587      }
 588
 3589       if ( !outStream.CanWrite ) {
 0590        throw new ArgumentException("Stream is not writeable", nameof(outStream));
 591      }
 592
 3593       if ( !outStream.CanSeek ) {
 0594        throw new ArgumentException("Stream is not seekable", nameof(outStream));
 595      }
 596
 3597      var result = new ZipFile();
 3598      result.baseStream_ = outStream;
 3599      return result;
 600    }
 601
 602    #endregion
 603
 604    #region Properties
 605    /// <summary>
 606    /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance.
 607    /// If the flag is true then the stream will be closed when <see cref="Close">Close</see> is called.
 608    /// </summary>
 609    /// <remarks>
 610    /// The default value is true in all cases.
 611    /// </remarks>
 612    public bool IsStreamOwner
 613    {
 88614      get { return isStreamOwner; }
 74615      set { isStreamOwner = value; }
 616    }
 617
 618    /// <summary>
 619    /// Get a value indicating wether
 620    /// this archive is embedded in another file or not.
 621    /// </summary>
 622    public bool IsEmbeddedArchive
 623    {
 624      // Not strictly correct in all circumstances currently
 48625      get { return offsetOfFirstEntry > 0; }
 626    }
 627
 628    /// <summary>
 629    /// Get a value indicating that this archive is a new one.
 630    /// </summary>
 631    public bool IsNewArchive
 632    {
 65793633      get { return isNewArchive_; }
 634    }
 635
 636    /// <summary>
 637    /// Gets the comment for the zip file.
 638    /// </summary>
 639    public string ZipFileComment
 640    {
 6641      get { return comment_; }
 642    }
 643
 644    /// <summary>
 645    /// Gets the name of this zip file.
 646    /// </summary>
 647    public string Name
 648    {
 38649      get { return name_; }
 650    }
 651
 652    /// <summary>
 653    /// Gets the number of entries in this zip file.
 654    /// </summary>
 655    /// <exception cref="InvalidOperationException">
 656    /// The Zip file has been closed.
 657    /// </exception>
 658    [Obsolete("Use the Count property instead")]
 659    public int Size
 660    {
 661      get
 662      {
 0663        return entries_.Length;
 664      }
 665    }
 666
 667    /// <summary>
 668    /// Get the number of entries contained in this <see cref="ZipFile"/>.
 669    /// </summary>
 670    public long Count
 671    {
 672      get
 673      {
 66100674        return entries_.Length;
 675      }
 676    }
 677
 678    /// <summary>
 679    /// Indexer property for ZipEntries
 680    /// </summary>
 681    [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")]
 682    public ZipEntry this[int index]
 683    {
 684      get {
 329670685        return (ZipEntry) entries_[index].Clone();
 686      }
 687    }
 688
 689    #endregion
 690
 691    #region Input Handling
 692    /// <summary>
 693    /// Gets an enumerator for the Zip entries in this Zip file.
 694    /// </summary>
 695    /// <returns>Returns an <see cref="IEnumerator"/> for this archive.</returns>
 696    /// <exception cref="ObjectDisposedException">
 697    /// The Zip file has been closed.
 698    /// </exception>
 699    public IEnumerator GetEnumerator()
 700    {
 4701       if (isDisposed_) {
 0702        throw new ObjectDisposedException("ZipFile");
 703      }
 704
 4705      return new ZipEntryEnumerator(entries_);
 706    }
 707
 708    /// <summary>
 709    /// Return the index of the entry with a matching name
 710    /// </summary>
 711    /// <param name="name">Entry name to find</param>
 712    /// <param name="ignoreCase">If true the comparison is case insensitive</param>
 713    /// <returns>The index position of the matching entry or -1 if not found</returns>
 714    /// <exception cref="ObjectDisposedException">
 715    /// The Zip file has been closed.
 716    /// </exception>
 717    public int FindEntry(string name, bool ignoreCase)
 718    {
 12719       if (isDisposed_) {
 0720        throw new ObjectDisposedException("ZipFile");
 721      }
 722
 723      // TODO: This will be slow as the next ice age for huge archives!
 62724       for (int i = 0; i < entries_.Length; i++) {
 28725         if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) {
 9726          return i;
 727        }
 728      }
 3729      return -1;
 730    }
 731
 732    /// <summary>
 733    /// Searches for a zip entry in this archive with the given name.
 734    /// String comparisons are case insensitive
 735    /// </summary>
 736    /// <param name="name">
 737    /// The name to find. May contain directory components separated by slashes ('/').
 738    /// </param>
 739    /// <returns>
 740    /// A clone of the zip entry, or null if no entry with that name exists.
 741    /// </returns>
 742    /// <exception cref="ObjectDisposedException">
 743    /// The Zip file has been closed.
 744    /// </exception>
 745    public ZipEntry GetEntry(string name)
 746    {
 0747       if (isDisposed_) {
 0748        throw new ObjectDisposedException("ZipFile");
 749      }
 750
 0751      int index = FindEntry(name, true);
 0752       return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null;
 753    }
 754
 755    /// <summary>
 756    /// Gets an input stream for reading the given zip entry data in an uncompressed form.
 757    /// Normally the <see cref="ZipEntry"/> should be an entry returned by GetEntry().
 758    /// </summary>
 759    /// <param name="entry">The <see cref="ZipEntry"/> to obtain a data <see cref="Stream"/> for</param>
 760    /// <returns>An input <see cref="Stream"/> containing data for this <see cref="ZipEntry"/></returns>
 761    /// <exception cref="ObjectDisposedException">
 762    /// The ZipFile has already been closed
 763    /// </exception>
 764    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 765    /// The compression method for the entry is unknown
 766    /// </exception>
 767    /// <exception cref="IndexOutOfRangeException">
 768    /// The entry is not found in the ZipFile
 769    /// </exception>
 770    public Stream GetInputStream(ZipEntry entry)
 771    {
 65933772       if ( entry == null ) {
 0773        throw new ArgumentNullException(nameof(entry));
 774      }
 775
 65933776       if ( isDisposed_ ) {
 0777        throw new ObjectDisposedException("ZipFile");
 778      }
 779
 65933780      long index = entry.ZipFileIndex;
 65933781       if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) {
 0782        index = FindEntry(entry.Name, true);
 0783         if (index < 0) {
 0784          throw new ZipException("Entry cannot be found");
 785        }
 786      }
 65933787      return GetInputStream(index);
 788    }
 789
 790    /// <summary>
 791    /// Creates an input stream reading a zip entry
 792    /// </summary>
 793    /// <param name="entryIndex">The index of the entry to obtain an input stream for.</param>
 794    /// <returns>
 795    /// An input <see cref="Stream"/> containing data for this <paramref name="entryIndex"/>
 796    /// </returns>
 797    /// <exception cref="ObjectDisposedException">
 798    /// The ZipFile has already been closed
 799    /// </exception>
 800    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 801    /// The compression method for the entry is unknown
 802    /// </exception>
 803    /// <exception cref="IndexOutOfRangeException">
 804    /// The entry is not found in the ZipFile
 805    /// </exception>
 806    public Stream GetInputStream(long entryIndex)
 807    {
 65946808       if ( isDisposed_ ) {
 0809        throw new ObjectDisposedException("ZipFile");
 810      }
 811
 65946812      long start = LocateEntry(entries_[entryIndex]);
 65946813      CompressionMethod method = entries_[entryIndex].CompressionMethod;
 65946814      Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize);
 815
 65946816       if (entries_[entryIndex].IsCrypted == true) {
 817#if NETCF_1_0
 818        throw new ZipException("decryption not supported for Compact Framework 1.0");
 819#else
 10820        result = CreateAndInitDecryptionStream(result, entries_[entryIndex]);
 10821         if (result == null) {
 0822          throw new ZipException("Unable to decrypt this entry");
 823        }
 824#endif
 825      }
 826
 65946827       switch (method) {
 828        case CompressionMethod.Stored:
 829          // read as is.
 830          break;
 831
 832        case CompressionMethod.Deflated:
 833          // No need to worry about ownership and closing as underlying stream close does nothing.
 353834          result = new InflaterInputStream(result, new Inflater(true));
 353835          break;
 836
 837        default:
 0838          throw new ZipException("Unsupported compression method " + method);
 839      }
 840
 65946841      return result;
 842    }
 843
 844    #endregion
 845
 846    #region Archive Testing
 847    /// <summary>
 848    /// Test an archive for integrity/validity
 849    /// </summary>
 850    /// <param name="testData">Perform low level data Crc check</param>
 851    /// <returns>true if all tests pass, false otherwise</returns>
 852    /// <remarks>Testing will terminate on the first error found.</remarks>
 853    public bool TestArchive(bool testData)
 854    {
 96855      return TestArchive(testData, TestStrategy.FindFirstError, null);
 856    }
 857
 858    /// <summary>
 859    /// Test an archive for integrity/validity
 860    /// </summary>
 861    /// <param name="testData">Perform low level data Crc check</param>
 862    /// <param name="strategy">The <see cref="TestStrategy"></see> to apply.</param>
 863    /// <param name="resultHandler">The <see cref="ZipTestResultHandler"></see> handler to call during testing.</param>
 864    /// <returns>true if all tests pass, false otherwise</returns>
 865    /// <exception cref="ObjectDisposedException">The object has already been closed.</exception>
 866    public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler)
 867    {
 96868       if (isDisposed_) {
 0869        throw new ObjectDisposedException("ZipFile");
 870      }
 871
 96872      var status = new TestStatus(this);
 873
 96874       if ( resultHandler != null ) {
 0875        resultHandler(status, null);
 876      }
 877
 96878       HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header;
 879
 96880      bool testing = true;
 881
 882      try {
 96883        int entryIndex = 0;
 884
 66012885         while ( testing && (entryIndex < Count) ) {
 65916886           if ( resultHandler != null ) {
 0887            status.SetEntry(this[entryIndex]);
 0888            status.SetOperation(TestOperation.EntryHeader);
 0889            resultHandler(status, null);
 890          }
 891
 892          try  {
 65916893            TestLocalHeader(this[entryIndex], test);
 65916894          }
 0895          catch(ZipException ex) {
 0896            status.AddError();
 897
 0898             if ( resultHandler != null ) {
 0899              resultHandler(status,
 0900                string.Format("Exception during test - '{0}'", ex.Message));
 901            }
 902
 0903            testing &= strategy != TestStrategy.FindFirstError;
 0904          }
 905
 65916906           if ( testing && testData && this[entryIndex].IsFile ) {
 65912907             if ( resultHandler != null ) {
 0908              status.SetOperation(TestOperation.EntryData);
 0909              resultHandler(status, null);
 910            }
 911
 65912912                        var crc = new Crc32();
 913
 65912914                        using (Stream entryStream = this.GetInputStream(this[entryIndex]))
 915                        {
 916
 65912917                            byte[] buffer = new byte[4096];
 65912918                            long totalBytes = 0;
 919                            int bytesRead;
 66297920                             while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0)
 921                            {
 385922                                crc.Update(buffer, 0, bytesRead);
 923
 385924                                 if (resultHandler != null)
 925                                {
 0926                                    totalBytes += bytesRead;
 0927                                    status.SetBytesTested(totalBytes);
 0928                                    resultHandler(status, null);
 929                                }
 930                            }
 65912931                        }
 932
 65912933             if (this[entryIndex].Crc != crc.Value) {
 1934              status.AddError();
 935
 1936               if ( resultHandler != null ) {
 0937                resultHandler(status, "CRC mismatch");
 938              }
 939
 1940              testing &= strategy != TestStrategy.FindFirstError;
 941            }
 942
 65912943             if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) {
 13944              var helper = new ZipHelperStream(baseStream_);
 13945              var data = new DescriptorData();
 13946              helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data);
 13947               if (this[entryIndex].Crc != data.Crc) {
 0948                status.AddError();
 949              }
 950
 13951               if (this[entryIndex].CompressedSize != data.CompressedSize) {
 0952                status.AddError();
 953              }
 954
 13955               if (this[entryIndex].Size != data.Size) {
 0956                status.AddError();
 957              }
 958            }
 959          }
 960
 65916961           if ( resultHandler != null ) {
 0962            status.SetOperation(TestOperation.EntryComplete);
 0963            resultHandler(status, null);
 964          }
 965
 65916966          entryIndex += 1;
 967        }
 968
 96969         if ( resultHandler != null ) {
 0970          status.SetOperation(TestOperation.MiscellaneousTests);
 0971          resultHandler(status, null);
 972        }
 973
 974        // TODO: the 'Corrina Johns' test where local headers are missing from
 975        // the central directory.  They are therefore invisible to many archivers.
 96976      }
 0977      catch (Exception ex) {
 0978        status.AddError();
 979
 0980         if ( resultHandler != null ) {
 0981          resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message));
 982        }
 0983      }
 984
 96985       if ( resultHandler != null ) {
 0986        status.SetOperation(TestOperation.Complete);
 0987        status.SetEntry(null);
 0988        resultHandler(status, null);
 989      }
 990
 96991      return (status.ErrorCount == 0);
 992    }
 993
 994    [Flags]
 995    enum HeaderTest
 996    {
 997      Extract = 0x01,     // Check that this header represents an entry whose data can be extracted
 998      Header  = 0x02,     // Check that this header contents are valid
 999    }
 1000
 1001    /// <summary>
 1002    /// Test a local header against that provided from the central directory
 1003    /// </summary>
 1004    /// <param name="entry">
 1005    /// The entry to test against
 1006    /// </param>
 1007    /// <param name="tests">The type of <see cref="HeaderTest">tests</see> to carry out.</param>
 1008    /// <returns>The offset of the entries data in the file</returns>
 1009    long TestLocalHeader(ZipEntry entry, HeaderTest tests)
 1010    {
 1318621011      lock(baseStream_)
 1012      {
 1318621013        bool testHeader = (tests & HeaderTest.Header) != 0;
 1318621014        bool testData = (tests & HeaderTest.Extract) != 0;
 1015
 1318621016        baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin);
 1318621017         if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) {
 01018          throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)
 1019        }
 1020
 1318621021        var extractVersion = ( short ) (ReadLEUshort() & 0x00ff);
 1318621022        var localFlags = ( short )ReadLEUshort();
 1318621023        var compressionMethod = ( short )ReadLEUshort();
 1318621024        var fileTime = ( short )ReadLEUshort();
 1318621025        var fileDate = ( short )ReadLEUshort();
 1318621026        uint crcValue = ReadLEUint();
 1318621027        long compressedSize = ReadLEUint();
 1318621028        long size = ReadLEUint();
 1318621029        int storedNameLength = ReadLEUshort();
 1318621030        int extraDataLength = ReadLEUshort();
 1031
 1318621032        byte[] nameData = new byte[storedNameLength];
 1318621033        StreamUtils.ReadFully(baseStream_, nameData);
 1034
 1318621035        byte[] extraData = new byte[extraDataLength];
 1318621036        StreamUtils.ReadFully(baseStream_, extraData);
 1037
 1318621038        var localExtraData = new ZipExtraData(extraData);
 1039
 1040        // Extra data / zip64 checks
 1318621041         if (localExtraData.Find(1))
 1042        {
 1043          // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64
 1044          // and size or compressedSize = MaxValue, due to rogue creators.
 1045
 501046          size = localExtraData.ReadLong();
 501047          compressedSize = localExtraData.ReadLong();
 1048
 501049                     if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0)
 1050                    {
 1051                        // These may be valid if patched later
 91052                         if ( (size != -1) && (size != entry.Size)) {
 01053                            throw new ZipException("Size invalid for descriptor");
 1054                        }
 1055
 91056                         if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) {
 01057                            throw new ZipException("Compressed size invalid for descriptor");
 1058                        }
 1059                    }
 1060                }
 1061        else
 1062        {
 1063          // No zip64 extra data but entry requires it.
 1318121064           if ((extractVersion >= ZipConstants.VersionZip64) &&
 1318121065            (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue)))
 1066          {
 01067            throw new ZipException("Required Zip64 extended information missing");
 1068          }
 1069        }
 1070
 1318621071         if ( testData ) {
 1318621072           if ( entry.IsFile ) {
 1318581073             if ( !entry.IsCompressionMethodSupported() ) {
 01074              throw new ZipException("Compression method not supported");
 1075            }
 1076
 1318581077             if ( (extractVersion > ZipConstants.VersionMadeBy)
 1318581078              || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) {
 01079              throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extract
 1080            }
 1081
 1318581082             if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.Enha
 01083              throw new ZipException("The library does not support the zip version required to extract this entry");
 1084            }
 1085          }
 1086        }
 1087
 1318621088                 if (testHeader)
 1089                {
 659161090                     if ((extractVersion <= 63) &&  // Ignore later versions as we dont know about them..
 659161091                        (extractVersion != 10) &&
 659161092                        (extractVersion != 11) &&
 659161093                        (extractVersion != 20) &&
 659161094                        (extractVersion != 21) &&
 659161095                        (extractVersion != 25) &&
 659161096                        (extractVersion != 27) &&
 659161097                        (extractVersion != 45) &&
 659161098                        (extractVersion != 46) &&
 659161099                        (extractVersion != 50) &&
 659161100                        (extractVersion != 51) &&
 659161101                        (extractVersion != 52) &&
 659161102                        (extractVersion != 61) &&
 659161103                        (extractVersion != 62) &&
 659161104                        (extractVersion != 63)
 659161105                        )
 1106                    {
 01107                        throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", 
 1108                    }
 1109
 1110                    // Local entry flags dont have reserved bit set on.
 659161111                     if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | General
 1112                    {
 01113                        throw new ZipException("Reserved bit flags cannot be set.");
 1114                    }
 1115
 1116                    // Encryption requires extract version >= 20
 659161117                     if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20))
 1118                    {
 01119                        throw new ZipException(string.Format("Version required to extract this entry is too low for encr
 1120                    }
 1121
 1122                    // Strong encryption requires encryption flag to be set and extract version >= 50.
 659161123                     if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1124                    {
 01125                         if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0)
 1126                        {
 01127                            throw new ZipException("Strong encryption flag set but encryption flag is not set");
 1128                        }
 1129
 01130                         if (extractVersion < 50)
 1131                        {
 01132                            throw new ZipException(string.Format("Version required to extract this entry is too low for 
 1133                        }
 1134                    }
 1135
 1136                    // Patched entries require extract version >= 27
 659161137                     if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27))
 1138                    {
 01139                        throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractV
 1140                    }
 1141
 1142                    // Central header flags match local entry flags.
 659161143                     if (localFlags != entry.Flags)
 1144                    {
 01145                        throw new ZipException("Central header/local header flags mismatch");
 1146                    }
 1147
 1148                    // Central header compression method matches local entry
 659161149                     if (entry.CompressionMethod != (CompressionMethod)compressionMethod)
 1150                    {
 01151                        throw new ZipException("Central header/local header compression method mismatch");
 1152                    }
 1153
 659161154                     if (entry.Version != extractVersion)
 1155                    {
 01156                        throw new ZipException("Extract version mismatch");
 1157                    }
 1158
 1159                    // Strong encryption and extract version match
 659161160                     if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0)
 1161                    {
 01162                         if (extractVersion < 62)
 1163                        {
 01164                            throw new ZipException("Strong encryption flag set but version not high enough");
 1165                        }
 1166                    }
 1167
 659161168                     if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0)
 1169                    {
 01170                         if ((fileTime != 0) || (fileDate != 0))
 1171                        {
 01172                            throw new ZipException("Header masked set but date/time values non-zero");
 1173                        }
 1174                    }
 1175
 659161176                     if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0)
 1177                    {
 659001178                         if (crcValue != (uint)entry.Crc)
 1179                        {
 01180                            throw new ZipException("Central header/local header crc mismatch");
 1181                        }
 1182                    }
 1183
 1184                    // Crc valid for empty entry.
 1185                    // This will also apply to streamed entries where size isnt known and the header cant be patched
 659161186                     if ((size == 0) && (compressedSize == 0))
 1187                    {
 655411188                         if (crcValue != 0)
 1189                        {
 01190                            throw new ZipException("Invalid CRC for empty entry");
 1191                        }
 1192                    }
 1193
 1194                    // TODO: make test more correct...  can't compare lengths as was done originally as this can fail fo
 1195                    // Assuming a code page at this point is not valid?  Best is to store the name length in the ZipEntr
 659161196                     if (entry.Name.Length > storedNameLength)
 1197                    {
 01198                        throw new ZipException("File name length mismatch");
 1199                    }
 1200
 1201                    // Name data has already been read convert it and compare.
 659161202                    string localName = ZipConstants.ConvertToStringExt(localFlags, nameData);
 1203
 1204                    // Central directory and local entry name match
 659161205                     if (localName != entry.Name)
 1206                    {
 01207                        throw new ZipException("Central header and local header file name mismatch");
 1208                    }
 1209
 1210                    // Directories have zero actual size but can have compressed size
 659161211                     if (entry.IsDirectory)
 1212                    {
 41213                         if (size > 0)
 1214                        {
 01215                            throw new ZipException("Directory cannot have size");
 1216                        }
 1217
 1218                        // There may be other cases where the compressed size can be greater than this?
 1219                        // If so until details are known we will be strict.
 41220                         if (entry.IsCrypted)
 1221                        {
 21222                             if (compressedSize > ZipConstants.CryptoHeaderSize + 2)
 1223                            {
 01224                                throw new ZipException("Directory compressed size invalid");
 1225                            }
 1226                        }
 21227                         else if (compressedSize > 2)
 1228                        {
 1229                            // When not compressed the directory size can validly be 2 bytes
 1230                            // if the true size wasnt known when data was originally being written.
 1231                            // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes
 01232                            throw new ZipException("Directory compressed size invalid");
 1233                        }
 1234                    }
 1235
 659161236                     if (!ZipNameTransform.IsValidName(localName, true))
 1237                    {
 01238                        throw new ZipException("Name is invalid");
 1239                    }
 1240                }
 1241
 1242        // Tests that apply to both data and header.
 1243
 1244        // Size can be verified only if it is known in the local header.
 1245        // it will always be known in the central header.
 1318621246         if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) ||
 1318621247          ((size > 0) || (compressedSize > 0))) {
 1248
 1318481249           if (size != entry.Size) {
 01250            throw new ZipException(
 01251              string.Format("Size mismatch between central header({0}) and local header({1})",
 01252                entry.Size, size));
 1253          }
 1254
 1318481255           if (compressedSize != entry.CompressedSize &&
 1318481256            compressedSize != 0xFFFFFFFF && compressedSize != -1) {
 01257            throw new ZipException(
 01258              string.Format("Compressed size mismatch between central header({0}) and local header({1})",
 01259              entry.CompressedSize, compressedSize));
 1260          }
 1261        }
 1262
 1318621263        int extraLength = storedNameLength + extraDataLength;
 1318621264        return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength;
 1265      }
 1318621266    }
 1267
 1268    #endregion
 1269
 1270    #region Updating
 1271
 1272    const int DefaultBufferSize = 4096;
 1273
 1274    /// <summary>
 1275    /// The kind of update to apply.
 1276    /// </summary>
 1277    enum UpdateCommand
 1278    {
 1279      Copy,       // Copy original file contents.
 1280      Modify,     // Change encryption, compression, attributes, name, time etc, of an existing file.
 1281      Add,        // Add a new file to the archive.
 1282    }
 1283
 1284    #region Properties
 1285    /// <summary>
 1286    /// Get / set the <see cref="INameTransform"/> to apply to names when updating.
 1287    /// </summary>
 1288    public INameTransform NameTransform
 1289    {
 1290      get {
 657401291        return updateEntryFactory_.NameTransform;
 1292      }
 1293
 1294      set {
 01295        updateEntryFactory_.NameTransform = value;
 01296      }
 1297    }
 1298
 1299    /// <summary>
 1300    /// Get/set the <see cref="IEntryFactory"/> used to generate <see cref="ZipEntry"/> values
 1301    /// during updates.
 1302    /// </summary>
 1303    public IEntryFactory EntryFactory
 1304    {
 1305      get {
 1721306        return updateEntryFactory_;
 1307      }
 1308
 1309      set {
 01310         if (value == null) {
 01311          updateEntryFactory_ = new ZipEntryFactory();
 01312        }
 1313        else {
 01314          updateEntryFactory_ = value;
 1315        }
 01316      }
 1317    }
 1318
 1319    /// <summary>
 1320    /// Get /set the buffer size to be used when updating this zip file.
 1321    /// </summary>
 1322    public int BufferSize
 1323    {
 01324      get { return bufferSize_; }
 1325      set {
 01326         if ( value < 1024 ) {
 1327#if NETCF_1_0
 1328          throw new ArgumentOutOfRangeException("value");
 1329#else
 01330          throw new ArgumentOutOfRangeException(nameof(value), "cannot be below 1024");
 1331#endif
 1332        }
 1333
 01334         if ( bufferSize_ != value ) {
 01335          bufferSize_ = value;
 01336          copyBuffer_ = null;
 1337        }
 01338      }
 1339    }
 1340
 1341    /// <summary>
 1342    /// Get a value indicating an update has <see cref="BeginUpdate()">been started</see>.
 1343    /// </summary>
 1344    public bool IsUpdating
 1345    {
 01346      get { return updates_ != null; }
 1347    }
 1348
 1349    /// <summary>
 1350    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 1351    /// </summary>
 1352    public UseZip64 UseZip64
 1353    {
 31354      get { return useZip64_; }
 121355      set { useZip64_ = value; }
 1356    }
 1357
 1358    #endregion
 1359
 1360    #region Immediate updating
 1361//    TBD: Direct form of updating
 1362//
 1363//    public void Update(IEntryMatcher deleteMatcher)
 1364//    {
 1365//    }
 1366//
 1367//    public void Update(IScanner addScanner)
 1368//    {
 1369//    }
 1370    #endregion
 1371
 1372    #region Deferred Updating
 1373    /// <summary>
 1374    /// Begin updating this <see cref="ZipFile"/> archive.
 1375    /// </summary>
 1376    /// <param name="archiveStorage">The <see cref="IArchiveStorage">archive storage</see> for use during the update.</p
 1377    /// <param name="dataSource">The <see cref="IDynamicDataSource">data source</see> to utilise during updating.</param
 1378    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1379    /// <exception cref="ArgumentNullException">One of the arguments provided is null</exception>
 1380    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1381    public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource)
 1382    {
 481383       if ( archiveStorage == null ) {
 01384        throw new ArgumentNullException(nameof(archiveStorage));
 1385      }
 1386
 481387       if ( dataSource == null ) {
 01388        throw new ArgumentNullException(nameof(dataSource));
 1389      }
 1390
 481391       if ( isDisposed_ ) {
 01392        throw new ObjectDisposedException("ZipFile");
 1393      }
 1394
 481395       if ( IsEmbeddedArchive ) {
 01396        throw new ZipException ("Cannot update embedded/SFX archives");
 1397      }
 1398
 481399      archiveStorage_ = archiveStorage;
 481400      updateDataSource_ = dataSource;
 1401
 1402      // NOTE: the baseStream_ may not currently support writing or seeking.
 1403
 481404      updateIndex_ = new Hashtable();
 1405
 481406      updates_ = new ArrayList(entries_.Length);
 3181407      foreach(ZipEntry entry in entries_) {
 1111408        int index = updates_.Add(new ZipUpdate(entry));
 1111409        updateIndex_.Add(entry.Name, index);
 1410      }
 1411
 1412      // We must sort by offset before using offset's calculated sizes
 481413      updates_.Sort(new UpdateComparer());
 1414
 481415      int idx = 0;
 2871416      foreach (ZipUpdate update in updates_) {
 1417        //If last entry, there is no next entry offset to use
 1111418         if (idx == updates_.Count - 1)
 311419          break;
 1420
 801421        update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset;
 801422        idx++;
 1423      }
 481424      updateCount_ = updates_.Count;
 1425
 481426      contentsEdited_ = false;
 481427      commentEdited_ = false;
 481428      newComment_ = null;
 481429    }
 1430
 1431    /// <summary>
 1432    /// Begin updating to this <see cref="ZipFile"/> archive.
 1433    /// </summary>
 1434    /// <param name="archiveStorage">The storage to use during the update.</param>
 1435    public void BeginUpdate(IArchiveStorage archiveStorage)
 1436    {
 321437      BeginUpdate(archiveStorage, new DynamicDiskDataSource());
 321438    }
 1439
 1440    /// <summary>
 1441    /// Begin updating this <see cref="ZipFile"/> archive.
 1442    /// </summary>
 1443    /// <seealso cref="BeginUpdate(IArchiveStorage)"/>
 1444    /// <seealso cref="CommitUpdate"></seealso>
 1445    /// <seealso cref="AbortUpdate"></seealso>
 1446    public void BeginUpdate()
 1447    {
 161448       if ( Name == null ) {
 61449        BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource());
 61450      }
 1451      else {
 101452        BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource());
 1453      }
 101454    }
 1455
 1456    /// <summary>
 1457    /// Commit current updates, updating this archive.
 1458    /// </summary>
 1459    /// <seealso cref="BeginUpdate()"></seealso>
 1460    /// <seealso cref="AbortUpdate"></seealso>
 1461    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1462    public void CommitUpdate()
 1463    {
 481464       if ( isDisposed_ ) {
 01465        throw new ObjectDisposedException("ZipFile");
 1466      }
 1467
 481468      CheckUpdating();
 1469
 1470      try {
 481471        updateIndex_.Clear();
 481472        updateIndex_=null;
 1473
 481474         if( contentsEdited_ ) {
 441475          RunUpdates();
 441476        }
 41477         else if( commentEdited_ ) {
 31478          UpdateCommentOnly();
 31479        }
 1480        else {
 1481          // Create an empty archive if none existed originally.
 11482           if( entries_.Length==0 ) {
 11483            byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_);
 11484            using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) {
 11485              zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment);
 11486            }
 1487          }
 1488        }
 1489
 01490      }
 1491      finally {
 481492        PostUpdateCleanup();
 481493      }
 481494    }
 1495
 1496    /// <summary>
 1497    /// Abort updating leaving the archive unchanged.
 1498    /// </summary>
 1499    /// <seealso cref="BeginUpdate()"></seealso>
 1500    /// <seealso cref="CommitUpdate"></seealso>
 1501    public void AbortUpdate()
 1502    {
 01503      PostUpdateCleanup();
 01504    }
 1505
 1506    /// <summary>
 1507    /// Set the file comment to be recorded when the current update is <see cref="CommitUpdate">commited</see>.
 1508    /// </summary>
 1509    /// <param name="comment">The comment to record.</param>
 1510    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1511    public void SetComment(string comment)
 1512    {
 31513       if ( isDisposed_ ) {
 01514        throw new ObjectDisposedException("ZipFile");
 1515      }
 1516
 31517      CheckUpdating();
 1518
 31519      newComment_ = new ZipString(comment);
 1520
 31521       if ( newComment_.RawLength  > 0xffff ) {
 01522        newComment_ = null;
 01523        throw new ZipException("Comment length exceeds maximum - 65535");
 1524      }
 1525
 1526      // We dont take account of the original and current comment appearing to be the same
 1527      // as encoding may be different.
 31528      commentEdited_ = true;
 31529    }
 1530
 1531    #endregion
 1532
 1533    #region Adding Entries
 1534
 1535    void AddUpdate(ZipUpdate update)
 1536    {
 657051537      contentsEdited_ = true;
 1538
 657051539      int index = FindExistingUpdate(update.Entry.Name);
 1540
 657051541       if (index >= 0) {
 01542         if ( updates_[index] == null ) {
 01543          updateCount_ += 1;
 1544        }
 1545
 1546        // Direct replacement is faster than delete and add.
 01547        updates_[index] = update;
 01548      }
 1549      else {
 657051550        index = updates_.Add(update);
 657051551        updateCount_ += 1;
 657051552        updateIndex_.Add(update.Entry.Name, index);
 1553      }
 657051554    }
 1555
 1556    /// <summary>
 1557    /// Add a new entry to the archive.
 1558    /// </summary>
 1559    /// <param name="fileName">The name of the file to add.</param>
 1560    /// <param name="compressionMethod">The compression method to use.</param>
 1561    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comment for this entry.</param>
 1562    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1563    /// <exception cref="ObjectDisposedException">ZipFile has been closed.</exception>
 1564    /// <exception cref="ArgumentOutOfRangeException">Compression method is not supported.</exception>
 1565    public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText )
 1566    {
 01567       if (fileName == null) {
 01568        throw new ArgumentNullException(nameof(fileName));
 1569      }
 1570
 01571       if ( isDisposed_ ) {
 01572        throw new ObjectDisposedException("ZipFile");
 1573      }
 1574
 01575       if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) {
 01576        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1577      }
 1578
 01579      CheckUpdating();
 01580      contentsEdited_ = true;
 1581
 01582      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 01583      entry.IsUnicodeText = useUnicodeText;
 01584      entry.CompressionMethod = compressionMethod;
 1585
 01586      AddUpdate(new ZipUpdate(fileName, entry));
 01587    }
 1588
 1589    /// <summary>
 1590    /// Add a new entry to the archive.
 1591    /// </summary>
 1592    /// <param name="fileName">The name of the file to add.</param>
 1593    /// <param name="compressionMethod">The compression method to use.</param>
 1594    /// <exception cref="ArgumentNullException">ZipFile has been closed.</exception>
 1595    /// <exception cref="ArgumentOutOfRangeException">The compression method is not supported.</exception>
 1596    public void Add(string fileName, CompressionMethod compressionMethod)
 1597    {
 01598       if ( fileName == null ) {
 01599        throw new ArgumentNullException(nameof(fileName));
 1600      }
 1601
 01602       if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) {
 01603        throw new ArgumentOutOfRangeException(nameof(compressionMethod));
 1604      }
 1605
 01606      CheckUpdating();
 01607      contentsEdited_ = true;
 1608
 01609      ZipEntry entry = EntryFactory.MakeFileEntry(fileName);
 01610      entry.CompressionMethod = compressionMethod;
 01611      AddUpdate(new ZipUpdate(fileName, entry));
 01612    }
 1613
 1614    /// <summary>
 1615    /// Add a file to the archive.
 1616    /// </summary>
 1617    /// <param name="fileName">The name of the file to add.</param>
 1618    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1619    public void Add(string fileName)
 1620    {
 31621       if ( fileName == null ) {
 01622        throw new ArgumentNullException(nameof(fileName));
 1623      }
 1624
 31625      CheckUpdating();
 31626      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName)));
 31627    }
 1628
 1629    /// <summary>
 1630    /// Add a file to the archive.
 1631    /// </summary>
 1632    /// <param name="fileName">The name of the file to add.</param>
 1633    /// <param name="entryName">The name to use for the <see cref="ZipEntry"/> on the Zip file created.</param>
 1634    /// <exception cref="ArgumentNullException">Argument supplied is null.</exception>
 1635    public void Add(string fileName, string entryName)
 1636    {
 01637       if (fileName == null) {
 01638        throw new ArgumentNullException(nameof(fileName));
 1639      }
 1640
 01641       if ( entryName == null ) {
 01642        throw new ArgumentNullException(nameof(entryName));
 1643      }
 1644
 01645      CheckUpdating();
 01646      AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true)));
 01647    }
 1648
 1649
 1650    /// <summary>
 1651    /// Add a file entry with data.
 1652    /// </summary>
 1653    /// <param name="dataSource">The source of the data for this entry.</param>
 1654    /// <param name="entryName">The name to give to the entry.</param>
 1655    public void Add(IStaticDataSource dataSource, string entryName)
 1656    {
 1461657       if ( dataSource == null ) {
 01658        throw new ArgumentNullException(nameof(dataSource));
 1659      }
 1660
 1461661       if ( entryName == null ) {
 01662        throw new ArgumentNullException(nameof(entryName));
 1663      }
 1664
 1461665      CheckUpdating();
 1461666      AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false)));
 1461667    }
 1668
 1669    /// <summary>
 1670    /// Add a file entry with data.
 1671    /// </summary>
 1672    /// <param name="dataSource">The source of the data for this entry.</param>
 1673    /// <param name="entryName">The name to give to the entry.</param>
 1674    /// <param name="compressionMethod">The compression method to use.</param>
 1675    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 1676    {
 151677       if ( dataSource == null ) {
 01678        throw new ArgumentNullException(nameof(dataSource));
 1679      }
 1680
 151681       if ( entryName == null ) {
 01682        throw new ArgumentNullException(nameof(entryName));
 1683      }
 1684
 151685      CheckUpdating();
 1686
 151687      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 151688      entry.CompressionMethod = compressionMethod;
 1689
 151690      AddUpdate(new ZipUpdate(dataSource, entry));
 151691    }
 1692
 1693    /// <summary>
 1694    /// Add a file entry with data.
 1695    /// </summary>
 1696    /// <param name="dataSource">The source of the data for this entry.</param>
 1697    /// <param name="entryName">The name to give to the entry.</param>
 1698    /// <param name="compressionMethod">The compression method to use.</param>
 1699    /// <param name="useUnicodeText">Ensure Unicode text is used for name and comments for this entry.</param>
 1700    public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicode
 1701    {
 41702       if (dataSource == null) {
 01703        throw new ArgumentNullException(nameof(dataSource));
 1704      }
 1705
 41706       if ( entryName == null ) {
 01707        throw new ArgumentNullException(nameof(entryName));
 1708      }
 1709
 41710      CheckUpdating();
 1711
 41712      ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false);
 41713      entry.IsUnicodeText = useUnicodeText;
 41714      entry.CompressionMethod = compressionMethod;
 1715
 41716      AddUpdate(new ZipUpdate(dataSource, entry));
 41717    }
 1718
 1719    /// <summary>
 1720    /// Add a <see cref="ZipEntry"/> that contains no data.
 1721    /// </summary>
 1722    /// <param name="entry">The entry to add.</param>
 1723    /// <remarks>This can be used to add directories, volume labels, or empty file entries.</remarks>
 1724    public void Add(ZipEntry entry)
 1725    {
 655371726       if ( entry == null ) {
 01727        throw new ArgumentNullException(nameof(entry));
 1728      }
 1729
 655371730      CheckUpdating();
 1731
 655371732       if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) {
 01733        throw new ZipException("Entry cannot have any data");
 1734      }
 1735
 655371736      AddUpdate(new ZipUpdate(UpdateCommand.Add, entry));
 655371737    }
 1738
 1739    /// <summary>
 1740    /// Add a directory entry to the archive.
 1741    /// </summary>
 1742    /// <param name="directoryName">The directory to add.</param>
 1743    public void AddDirectory(string directoryName)
 1744    {
 01745       if ( directoryName == null ) {
 01746        throw new ArgumentNullException(nameof(directoryName));
 1747      }
 1748
 01749      CheckUpdating();
 1750
 01751      ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName);
 01752      AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry));
 01753    }
 1754
 1755    #endregion
 1756
 1757    #region Modifying Entries
 1758/* Modify not yet ready for public consumption.
 1759   Direct modification of an entry should not overwrite original data before its read.
 1760   Safe mode is trivial in this sense.
 1761    public void Modify(ZipEntry original, ZipEntry updated)
 1762    {
 1763      if ( original == null ) {
 1764        throw new ArgumentNullException("original");
 1765      }
 1766
 1767      if ( updated == null ) {
 1768        throw new ArgumentNullException("updated");
 1769      }
 1770
 1771      CheckUpdating();
 1772      contentsEdited_ = true;
 1773      updates_.Add(new ZipUpdate(original, updated));
 1774    }
 1775*/
 1776    #endregion
 1777
 1778    #region Deleting Entries
 1779    /// <summary>
 1780    /// Delete an entry by name
 1781    /// </summary>
 1782    /// <param name="fileName">The filename to delete</param>
 1783    /// <returns>True if the entry was found and deleted; false otherwise.</returns>
 1784    public bool Delete(string fileName)
 1785    {
 31786       if ( fileName == null ) {
 01787        throw new ArgumentNullException(nameof(fileName));
 1788      }
 1789
 31790      CheckUpdating();
 1791
 31792      bool result = false;
 31793      int index = FindExistingUpdate(fileName);
 31794       if ( (index >= 0) && (updates_[index] != null) ) {
 31795        result = true;
 31796        contentsEdited_ = true;
 31797        updates_[index] = null;
 31798        updateCount_ -= 1;
 31799      }
 1800      else {
 01801        throw new ZipException("Cannot find entry to delete");
 1802      }
 31803      return result;
 1804    }
 1805
 1806    /// <summary>
 1807    /// Delete a <see cref="ZipEntry"/> from the archive.
 1808    /// </summary>
 1809    /// <param name="entry">The entry to delete.</param>
 1810    public void Delete(ZipEntry entry)
 1811    {
 321812       if ( entry == null ) {
 01813        throw new ArgumentNullException(nameof(entry));
 1814      }
 1815
 321816      CheckUpdating();
 1817
 321818      int index = FindExistingUpdate(entry);
 321819       if ( index >= 0 ) {
 321820        contentsEdited_ = true;
 321821        updates_[index] = null;
 321822        updateCount_ -= 1;
 321823      }
 1824      else {
 01825        throw new ZipException("Cannot find entry to delete");
 1826      }
 1827    }
 1828
 1829    #endregion
 1830
 1831    #region Update Support
 1832
 1833    #region Writing Values/Headers
 1834    void WriteLEShort(int value)
 1835    {
 22370481836      baseStream_.WriteByte(( byte )(value & 0xff));
 22370481837      baseStream_.WriteByte(( byte )((value >> 8) & 0xff));
 22370481838    }
 1839
 1840    /// <summary>
 1841    /// Write an unsigned short in little endian byte order.
 1842    /// </summary>
 1843    void WriteLEUshort(ushort value)
 1844    {
 2629441845      baseStream_.WriteByte(( byte )(value & 0xff));
 2629441846      baseStream_.WriteByte(( byte )(value >> 8));
 2629441847    }
 1848
 1849    /// <summary>
 1850    /// Write an int in little endian byte order.
 1851    /// </summary>
 1852    void WriteLEInt(int value)
 1853    {
 6581801854      WriteLEShort(value & 0xffff);
 6581801855      WriteLEShort(value >> 16);
 6581801856    }
 1857
 1858    /// <summary>
 1859    /// Write an unsigned int in little endian byte order.
 1860    /// </summary>
 1861    void WriteLEUint(uint value)
 1862    {
 1314721863      WriteLEUshort((ushort)(value & 0xffff));
 1314721864      WriteLEUshort((ushort)(value >> 16));
 1314721865    }
 1866
 1867    /// <summary>
 1868    /// Write a long in little endian byte order.
 1869    /// </summary>
 1870    void WriteLeLong(long value)
 1871    {
 41872      WriteLEInt(( int )(value & 0xffffffff));
 41873      WriteLEInt(( int )(value >> 32));
 41874    }
 1875
 1876    void WriteLEUlong(ulong value)
 1877    {
 01878      WriteLEUint(( uint )(value & 0xffffffff));
 01879      WriteLEUint(( uint )(value >> 32));
 01880    }
 1881
 1882    void WriteLocalEntryHeader(ZipUpdate update)
 1883    {
 657481884      ZipEntry entry = update.OutEntry;
 1885
 1886      // TODO: Local offset will require adjusting for multi-disk zip files.
 657481887      entry.Offset = baseStream_.Position;
 1888
 1889      // TODO: Need to clear any entry flags that dont make sense or throw an exception here.
 657481890       if (update.Command != UpdateCommand.Copy) {
 657051891         if (entry.CompressionMethod == CompressionMethod.Deflated) {
 656901892           if (entry.Size == 0) {
 1893            // No need to compress - no data.
 655371894            entry.CompressedSize = entry.Size;
 655371895            entry.Crc = 0;
 655371896            entry.CompressionMethod = CompressionMethod.Stored;
 1897          }
 655371898        }
 151899         else if (entry.CompressionMethod == CompressionMethod.Stored) {
 151900          entry.Flags &= ~(int)GeneralBitFlags.Descriptor;
 1901        }
 1902
 657051903         if (HaveKeys) {
 51904          entry.IsCrypted = true;
 51905           if (entry.Crc < 0) {
 51906            entry.Flags |= (int)GeneralBitFlags.Descriptor;
 1907          }
 51908        }
 1909        else {
 657001910          entry.IsCrypted = false;
 1911        }
 1912
 657051913         switch (useZip64_) {
 1914          case UseZip64.Dynamic:
 657011915             if (entry.Size < 0) {
 01916              entry.ForceZip64();
 1917            }
 01918            break;
 1919
 1920          case UseZip64.On:
 21921            entry.ForceZip64();
 1922            break;
 1923
 1924          case UseZip64.Off:
 1925            // Do nothing.  The entry itself may be using Zip64 independantly.
 1926            break;
 1927        }
 1928      }
 1929
 1930      // Write the local file header
 657481931      WriteLEInt(ZipConstants.LocalHeaderSignature);
 1932
 657481933      WriteLEShort(entry.Version);
 657481934      WriteLEShort(entry.Flags);
 1935
 657481936      WriteLEShort((byte)entry.CompressionMethod);
 657481937      WriteLEInt(( int )entry.DosTime);
 1938
 657481939       if ( !entry.HasCrc ) {
 1940        // Note patch address for updating CRC later.
 1681941        update.CrcPatchOffset = baseStream_.Position;
 1681942        WriteLEInt(( int )0);
 1681943      }
 1944      else {
 655801945        WriteLEInt(unchecked(( int )entry.Crc));
 1946      }
 1947
 657481948       if (entry.LocalHeaderRequiresZip64) {
 21949        WriteLEInt(-1);
 21950        WriteLEInt(-1);
 21951      }
 1952      else {
 657461953         if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) {
 1661954          update.SizePatchOffset = baseStream_.Position;
 1955        }
 1956
 657461957        WriteLEInt(( int )entry.CompressedSize);
 657461958        WriteLEInt(( int )entry.Size);
 1959      }
 1960
 657481961      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 1962
 657481963       if ( name.Length > 0xFFFF ) {
 01964        throw new ZipException("Entry name too long.");
 1965      }
 1966
 657481967      var ed = new ZipExtraData(entry.ExtraData);
 1968
 657481969       if ( entry.LocalHeaderRequiresZip64 ) {
 21970        ed.StartNewEntry();
 1971
 1972        // Local entry header always includes size and compressed size.
 1973        // NOTE the order of these fields is reversed when compared to the normal headers!
 21974        ed.AddLeLong(entry.Size);
 21975        ed.AddLeLong(entry.CompressedSize);
 21976        ed.AddNewEntry(1);
 21977      }
 1978      else {
 657461979        ed.Delete(1);
 1980      }
 1981
 657481982      entry.ExtraData = ed.GetEntryData();
 1983
 657481984      WriteLEShort(name.Length);
 657481985      WriteLEShort(entry.ExtraData.Length);
 1986
 657481987       if ( name.Length > 0 ) {
 657481988        baseStream_.Write(name, 0, name.Length);
 1989      }
 1990
 657481991       if ( entry.LocalHeaderRequiresZip64 ) {
 21992         if ( !ed.Find(1) ) {
 01993          throw new ZipException("Internal error cannot find extra data");
 1994        }
 1995
 21996        update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex;
 1997      }
 1998
 657481999       if ( entry.ExtraData.Length > 0 ) {
 22000        baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length);
 2001      }
 657482002    }
 2003
 2004    int WriteCentralDirectoryHeader(ZipEntry entry)
 2005    {
 657722006       if ( entry.CompressedSize < 0 ) {
 02007        throw new ZipException("Attempt to write central directory entry with unknown csize");
 2008      }
 2009
 657722010       if ( entry.Size < 0 ) {
 02011        throw new ZipException("Attempt to write central directory entry with unknown size");
 2012      }
 2013
 657722014       if ( entry.Crc < 0 ) {
 02015        throw new ZipException("Attempt to write central directory entry with unknown crc");
 2016      }
 2017
 2018      // Write the central file header
 657722019      WriteLEInt(ZipConstants.CentralHeaderSignature);
 2020
 2021      // Version made by
 657722022      WriteLEShort(ZipConstants.VersionMadeBy);
 2023
 2024      // Version required to extract
 657722025      WriteLEShort(entry.Version);
 2026
 657722027      WriteLEShort(entry.Flags);
 2028
 2029      unchecked {
 657722030        WriteLEShort((byte)entry.CompressionMethod);
 657722031        WriteLEInt((int)entry.DosTime);
 657722032        WriteLEInt((int)entry.Crc);
 2033      }
 2034
 657722035       if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) {
 22036        WriteLEInt(-1);
 22037      }
 2038      else {
 657702039        WriteLEInt((int)(entry.CompressedSize & 0xffffffff));
 2040      }
 2041
 657722042       if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) {
 22043        WriteLEInt(-1);
 22044      }
 2045      else {
 657702046        WriteLEInt((int)entry.Size);
 2047      }
 2048
 657722049      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 2050
 657722051       if ( name.Length > 0xFFFF ) {
 02052        throw new ZipException("Entry name is too long.");
 2053      }
 2054
 657722055      WriteLEShort(name.Length);
 2056
 2057      // Central header extra data is different to local header version so regenerate.
 657722058      var ed = new ZipExtraData(entry.ExtraData);
 2059
 657722060       if ( entry.CentralHeaderRequiresZip64 ) {
 22061        ed.StartNewEntry();
 2062
 22063         if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2064        {
 22065          ed.AddLeLong(entry.Size);
 2066        }
 2067
 22068         if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) )
 2069        {
 22070          ed.AddLeLong(entry.CompressedSize);
 2071        }
 2072
 22073         if ( entry.Offset >= 0xffffffff ) {
 02074          ed.AddLeLong(entry.Offset);
 2075        }
 2076
 2077        // Number of disk on which this file starts isnt supported and is never written here.
 22078        ed.AddNewEntry(1);
 22079      }
 2080      else {
 2081        // Should have already be done when local header was added.
 657702082        ed.Delete(1);
 2083      }
 2084
 657722085      byte[] centralExtraData = ed.GetEntryData();
 2086
 657722087      WriteLEShort(centralExtraData.Length);
 657722088       WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0);
 2089
 657722090      WriteLEShort(0);  // disk number
 657722091      WriteLEShort(0);  // internal file attributes
 2092
 2093      // External file attributes...
 657722094       if ( entry.ExternalFileAttributes != -1 ) {
 722095        WriteLEInt(entry.ExternalFileAttributes);
 722096      }
 2097      else {
 657002098         if ( entry.IsDirectory ) {
 02099          WriteLEUint(16);
 02100        }
 2101        else {
 657002102          WriteLEUint(0);
 2103        }
 2104      }
 2105
 657722106       if ( entry.Offset >= 0xffffffff ) {
 02107        WriteLEUint(0xffffffff);
 02108      }
 2109      else {
 657722110        WriteLEUint((uint)(int)entry.Offset);
 2111      }
 2112
 657722113       if ( name.Length > 0 ) {
 657722114        baseStream_.Write(name, 0, name.Length);
 2115      }
 2116
 657722117       if ( centralExtraData.Length > 0 ) {
 22118        baseStream_.Write(centralExtraData, 0, centralExtraData.Length);
 2119      }
 2120
 657722121       byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0];
 2122
 657722123       if ( rawComment.Length > 0 ) {
 02124        baseStream_.Write(rawComment, 0, rawComment.Length);
 2125      }
 2126
 657722127      return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length;
 2128    }
 2129    #endregion
 2130
 2131    void PostUpdateCleanup()
 2132    {
 1362133            updateDataSource_ = null;
 1362134            updates_ = null;
 1362135            updateIndex_ = null;
 2136
 1362137             if (archiveStorage_ != null)
 2138            {
 482139        archiveStorage_.Dispose();
 482140        archiveStorage_=null;
 2141      }
 1362142    }
 2143
 2144    string GetTransformedFileName(string name)
 2145    {
 657402146            INameTransform transform = NameTransform;
 657402147       return (transform != null) ?
 657402148        transform.TransformFile(name) :
 657402149        name;
 2150    }
 2151
 2152    string GetTransformedDirectoryName(string name)
 2153    {
 02154            INameTransform transform = NameTransform;
 02155             return (transform != null) ?
 02156        transform.TransformDirectory(name) :
 02157        name;
 2158    }
 2159
 2160    /// <summary>
 2161    /// Get a raw memory buffer.
 2162    /// </summary>
 2163    /// <returns>Returns a raw memory buffer.</returns>
 2164    byte[] GetBuffer()
 2165    {
 2112166       if ( copyBuffer_ == null ) {
 412167        copyBuffer_ = new byte[bufferSize_];
 2168      }
 2112169      return copyBuffer_;
 2170    }
 2171
 2172    void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
 2173    {
 42174      int bytesToCopy = GetDescriptorSize(update);
 2175
 42176       if ( bytesToCopy > 0 ) {
 02177        byte[] buffer = GetBuffer();
 2178
 02179         while ( bytesToCopy > 0 ) {
 02180          int readSize = Math.Min(buffer.Length, bytesToCopy);
 2181
 02182          int bytesRead = source.Read(buffer, 0, readSize);
 02183           if ( bytesRead > 0 ) {
 02184            dest.Write(buffer, 0, bytesRead);
 02185            bytesToCopy -= bytesRead;
 02186          }
 2187          else {
 02188            throw new ZipException("Unxpected end of stream");
 2189          }
 2190        }
 2191      }
 42192    }
 2193
 2194    void CopyBytes(ZipUpdate update, Stream destination, Stream source,
 2195      long bytesToCopy, bool updateCrc)
 2196    {
 1722197       if ( destination == source ) {
 02198        throw new InvalidOperationException("Destination and source are the same");
 2199      }
 2200
 2201      // NOTE: Compressed size is updated elsewhere.
 1722202      var crc = new Crc32();
 1722203      byte[] buffer = GetBuffer();
 2204
 1722205      long targetBytes = bytesToCopy;
 1722206      long totalBytesRead = 0;
 2207
 2208      int bytesRead;
 2209      do {
 1722210        int readSize = buffer.Length;
 2211
 1722212         if ( bytesToCopy < readSize ) {
 1722213          readSize = (int)bytesToCopy;
 2214        }
 2215
 1722216        bytesRead = source.Read(buffer, 0, readSize);
 1722217         if ( bytesRead > 0 ) {
 1722218           if ( updateCrc ) {
 1682219            crc.Update(buffer, 0, bytesRead);
 2220          }
 1722221          destination.Write(buffer, 0, bytesRead);
 1722222          bytesToCopy -= bytesRead;
 1722223          totalBytesRead += bytesRead;
 2224        }
 2225      }
 1722226       while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2227
 1722228       if ( totalBytesRead != targetBytes ) {
 02229        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2230      }
 2231
 1722232       if ( updateCrc ) {
 1682233        update.OutEntry.Crc = crc.Value;
 2234      }
 1722235    }
 2236
 2237    /// <summary>
 2238    /// Get the size of the source descriptor for a <see cref="ZipUpdate"/>.
 2239    /// </summary>
 2240    /// <param name="update">The update to get the size for.</param>
 2241    /// <returns>The descriptor size, zero if there isnt one.</returns>
 2242    int GetDescriptorSize(ZipUpdate update)
 2243    {
 452244      int result = 0;
 452245       if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) {
 02246        result = ZipConstants.DataDescriptorSize - 4;
 02247         if ( update.Entry.LocalHeaderRequiresZip64 ) {
 02248          result = ZipConstants.Zip64DataDescriptorSize - 4;
 2249        }
 2250      }
 452251      return result;
 2252    }
 2253
 2254    void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition)
 2255    {
 392256      int bytesToCopy = GetDescriptorSize(update);
 2257
 392258       while ( bytesToCopy > 0 ) {
 02259        var readSize = (int)bytesToCopy;
 02260        byte[] buffer = GetBuffer();
 2261
 02262        stream.Position = sourcePosition;
 02263        int bytesRead = stream.Read(buffer, 0, readSize);
 02264         if ( bytesRead > 0 ) {
 02265          stream.Position = destinationPosition;
 02266          stream.Write(buffer, 0, bytesRead);
 02267          bytesToCopy -= bytesRead;
 02268          destinationPosition += bytesRead;
 02269          sourcePosition += bytesRead;
 02270        }
 2271        else {
 02272          throw new ZipException("Unxpected end of stream");
 2273        }
 2274      }
 392275    }
 2276
 2277    void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sou
 2278    {
 392279      long bytesToCopy = update.Entry.CompressedSize;
 2280
 2281      // NOTE: Compressed size is updated elsewhere.
 392282      var crc = new Crc32();
 392283      byte[] buffer = GetBuffer();
 2284
 392285      long targetBytes = bytesToCopy;
 392286      long totalBytesRead = 0;
 2287
 2288      int bytesRead;
 2289      do
 2290      {
 392291        int readSize = buffer.Length;
 2292
 392293         if ( bytesToCopy < readSize ) {
 392294          readSize = (int)bytesToCopy;
 2295        }
 2296
 392297        stream.Position = sourcePosition;
 392298        bytesRead = stream.Read(buffer, 0, readSize);
 392299         if ( bytesRead > 0 ) {
 392300           if ( updateCrc ) {
 02301            crc.Update(buffer, 0, bytesRead);
 2302          }
 392303          stream.Position = destinationPosition;
 392304          stream.Write(buffer, 0, bytesRead);
 2305
 392306          destinationPosition += bytesRead;
 392307          sourcePosition += bytesRead;
 392308          bytesToCopy -= bytesRead;
 392309          totalBytesRead += bytesRead;
 2310        }
 2311      }
 392312       while ( (bytesRead > 0) && (bytesToCopy > 0) );
 2313
 392314       if ( totalBytesRead != targetBytes ) {
 02315        throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead))
 2316      }
 2317
 392318       if ( updateCrc ) {
 02319        update.OutEntry.Crc = crc.Value;
 2320      }
 392321    }
 2322
 2323    int FindExistingUpdate(ZipEntry entry)
 2324    {
 322325      int result = -1;
 322326      string convertedName = GetTransformedFileName(entry.Name);
 2327
 322328       if (updateIndex_.ContainsKey(convertedName)) {
 322329        result = (int)updateIndex_[convertedName];
 2330      }
 2331/*
 2332      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2333      // for CF?
 2334      for (int index = 0; index < updates_.Count; ++index)
 2335      {
 2336        ZipUpdate zu = ( ZipUpdate )updates_[index];
 2337        if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) &&
 2338          (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) {
 2339          result = index;
 2340          break;
 2341        }
 2342      }
 2343 */
 322344      return result;
 2345    }
 2346
 2347    int FindExistingUpdate(string fileName)
 2348    {
 657082349      int result = -1;
 2350
 657082351      string convertedName = GetTransformedFileName(fileName);
 2352
 657082353       if (updateIndex_.ContainsKey(convertedName)) {
 32354        result = (int)updateIndex_[convertedName];
 2355      }
 2356
 2357/*
 2358      // This is slow like the coming of the next ice age but takes less storage and may be useful
 2359      // for CF?
 2360      for ( int index = 0; index < updates_.Count; ++index ) {
 2361        if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name,
 2362          true, CultureInfo.InvariantCulture) == 0 ) {
 2363          result = index;
 2364          break;
 2365        }
 2366      }
 2367 */
 2368
 657082369      return result;
 2370    }
 2371
 2372    /// <summary>
 2373    /// Get an output stream for the specified <see cref="ZipEntry"/>
 2374    /// </summary>
 2375    /// <param name="entry">The entry to get an output stream for.</param>
 2376    /// <returns>The output stream obtained for the entry.</returns>
 2377    Stream GetOutputStream(ZipEntry entry)
 2378    {
 1682379      Stream result = baseStream_;
 2380
 1682381       if ( entry.IsCrypted == true ) {
 2382#if NETCF_1_0
 2383        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 2384#else
 52385        result = CreateAndInitEncryptionStream(result, entry);
 2386#endif
 2387      }
 2388
 1682389       switch ( entry.CompressionMethod ) {
 2390        case CompressionMethod.Stored:
 152391          result = new UncompressedStream(result);
 152392          break;
 2393
 2394        case CompressionMethod.Deflated:
 1532395          var dos = new DeflaterOutputStream(result, new Deflater(9, true));
 1532396          dos.IsStreamOwner = false;
 1532397          result = dos;
 1532398          break;
 2399
 2400        default:
 02401          throw new ZipException("Unknown compression method " + entry.CompressionMethod);
 2402      }
 1682403      return result;
 2404    }
 2405
 2406    void AddEntry(ZipFile workFile, ZipUpdate update)
 2407    {
 657052408      Stream source = null;
 2409
 657052410       if ( update.Entry.IsFile ) {
 657052411        source = update.GetSource();
 2412
 657052413         if ( source == null ) {
 655402414          source = updateDataSource_.GetSource(update.Entry, update.Filename);
 2415        }
 2416      }
 2417
 657052418       if ( source != null ) {
 1682419        using ( source ) {
 1682420          long sourceStreamLength = source.Length;
 1682421           if ( update.OutEntry.Size < 0 ) {
 1652422            update.OutEntry.Size = sourceStreamLength;
 1652423          }
 2424          else {
 2425            // Check for errant entries.
 32426             if ( update.OutEntry.Size != sourceStreamLength ) {
 02427              throw new ZipException("Entry size/stream size mismatch");
 2428            }
 2429          }
 2430
 1682431          workFile.WriteLocalEntryHeader(update);
 2432
 1682433          long dataStart = workFile.baseStream_.Position;
 2434
 1682435          using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 1682436            CopyBytes(update, output, source, sourceStreamLength, true);
 1682437          }
 2438
 1682439          long dataEnd = workFile.baseStream_.Position;
 1682440          update.OutEntry.CompressedSize = dataEnd - dataStart;
 2441
 1682442           if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor)
 2443          {
 52444            var helper = new ZipHelperStream(workFile.baseStream_);
 52445            helper.WriteDataDescriptor(update.OutEntry);
 2446          }
 1682447        }
 2448      }
 2449      else {
 655372450        workFile.WriteLocalEntryHeader(update);
 655372451        update.OutEntry.CompressedSize = 0;
 2452      }
 2453
 657052454    }
 2455
 2456    void ModifyEntry(ZipFile workFile, ZipUpdate update)
 2457    {
 02458      workFile.WriteLocalEntryHeader(update);
 02459      long dataStart = workFile.baseStream_.Position;
 2460
 2461      // TODO: This is slow if the changes don't effect the data!!
 02462       if ( update.Entry.IsFile && (update.Filename != null) ) {
 02463        using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) {
 02464          using ( Stream source = this.GetInputStream(update.Entry) ) {
 02465            CopyBytes(update, output, source, source.Length, true);
 02466          }
 2467        }
 2468      }
 2469
 02470      long dataEnd = workFile.baseStream_.Position;
 02471      update.Entry.CompressedSize = dataEnd - dataStart;
 02472    }
 2473
 2474    void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition)
 2475    {
 632476      bool skipOver = false || update.Entry.Offset == destinationPosition;
 2477
 632478       if ( !skipOver ) {
 392479        baseStream_.Position = destinationPosition;
 392480        workFile.WriteLocalEntryHeader(update);
 392481        destinationPosition = baseStream_.Position;
 2482      }
 2483
 632484      long sourcePosition = 0;
 2485
 2486      const int NameLengthOffset = 26;
 2487
 2488      // TODO: Add base for SFX friendly handling
 632489      long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2490
 632491      baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2492
 2493      // Clumsy way of handling retrieving the original name and extra data length for now.
 2494      // TODO: Stop re-reading name and data length in CopyEntryDirect.
 632495      uint nameLength = ReadLEUshort();
 632496      uint extraLength = ReadLEUshort();
 2497
 632498      sourcePosition = baseStream_.Position + nameLength + extraLength;
 2499
 632500       if (skipOver) {
 242501         if (update.OffsetBasedSize != -1)
 222502          destinationPosition += update.OffsetBasedSize;
 2503        else
 2504          // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) ar
 2505          // WinZip produces a warning on these entries:
 2506          // "caution: value of lrec.csize (compressed size) changed from ..."
 22507          destinationPosition +=
 22508            (sourcePosition - entryDataOffset) + NameLengthOffset +  // Header size
 22509            update.Entry.CompressedSize + GetDescriptorSize(update);
 22510      }
 2511      else {
 392512         if ( update.Entry.CompressedSize > 0 ) {
 392513          CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition );
 2514        }
 392515        CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition);
 2516      }
 392517    }
 2518
 2519    void CopyEntry(ZipFile workFile, ZipUpdate update)
 2520    {
 42521      workFile.WriteLocalEntryHeader(update);
 2522
 42523       if ( update.Entry.CompressedSize > 0 ) {
 2524        const int NameLengthOffset = 26;
 2525
 42526        long entryDataOffset = update.Entry.Offset + NameLengthOffset;
 2527
 2528        // TODO: This wont work for SFX files!
 42529        baseStream_.Seek(entryDataOffset, SeekOrigin.Begin);
 2530
 42531        uint nameLength = ReadLEUshort();
 42532        uint extraLength = ReadLEUshort();
 2533
 42534        baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current);
 2535
 42536        CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false);
 2537      }
 42538      CopyDescriptorBytes(update, workFile.baseStream_, baseStream_);
 42539    }
 2540
 2541    void Reopen(Stream source)
 2542    {
 42543       if ( source == null ) {
 02544        throw new ZipException("Failed to reopen archive - no source");
 2545      }
 2546
 42547      isNewArchive_ = false;
 42548      baseStream_ = source;
 42549      ReadEntries();
 42550    }
 2551
 2552    void Reopen()
 2553    {
 02554       if (Name == null) {
 02555        throw new InvalidOperationException("Name is not known cannot Reopen");
 2556      }
 2557
 02558      Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read));
 02559    }
 2560
 2561    void UpdateCommentOnly()
 2562    {
 32563      long baseLength = baseStream_.Length;
 2564
 32565      ZipHelperStream updateFile = null;
 2566
 32567       if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 12568        Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_);
 12569        updateFile = new ZipHelperStream(copyStream);
 12570        updateFile.IsStreamOwner = true;
 2571
 12572        baseStream_.Close();
 12573        baseStream_ = null;
 12574      }
 2575      else {
 22576         if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) {
 2577          // TODO: archiveStorage wasnt originally intended for this use.
 2578          // Need to revisit this to tidy up handling as archive storage currently doesnt
 2579          // handle the original stream well.
 2580          // The problem is when using an existing zip archive with an in memory archive storage.
 2581          // The open stream wont support writing but the memory storage should open the same file not an in memory one.
 2582
 2583          // Need to tidy up the archive storage interface and contract basically.
 22584          baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_);
 22585          updateFile = new ZipHelperStream(baseStream_);
 22586        }
 2587        else {
 02588          baseStream_.Close();
 02589          baseStream_ = null;
 02590          updateFile = new ZipHelperStream(Name);
 2591        }
 2592      }
 2593
 32594      using ( updateFile ) {
 32595        long locatedCentralDirOffset =
 32596          updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 32597                            baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 32598         if ( locatedCentralDirOffset < 0 ) {
 02599          throw new ZipException("Cannot find central directory");
 2600        }
 2601
 2602        const int CentralHeaderCommentSizeOffset = 16;
 32603        updateFile.Position += CentralHeaderCommentSizeOffset;
 2604
 32605        byte[] rawComment = newComment_.RawComment;
 2606
 32607        updateFile.WriteLEShort(rawComment.Length);
 32608        updateFile.Write(rawComment, 0, rawComment.Length);
 32609        updateFile.SetLength(updateFile.Position);
 32610      }
 2611
 32612       if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) {
 12613        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 12614      }
 2615      else {
 22616        ReadEntries();
 2617      }
 22618    }
 2619
 2620    /// <summary>
 2621    /// Class used to sort updates.
 2622    /// </summary>
 2623    class UpdateComparer : IComparer
 2624    {
 2625      /// <summary>
 2626      /// Compares two objects and returns a value indicating whether one is
 2627      /// less than, equal to or greater than the other.
 2628      /// </summary>
 2629      /// <param name="x">First object to compare</param>
 2630      /// <param name="y">Second object to compare.</param>
 2631      /// <returns>Compare result.</returns>
 2632      public int Compare(
 2633        object x,
 2634        object y)
 2635      {
 4712636        var zx = x as ZipUpdate;
 4712637        var zy = y as ZipUpdate;
 2638
 2639        int result;
 2640
 4712641         if (zx == null) {
 502642           if (zy == null) {
 102643            result = 0;
 102644          }
 2645          else {
 402646            result = -1;
 2647          }
 402648        }
 4212649         else if (zy == null) {
 112650          result = 1;
 112651        }
 2652        else {
 4102653           int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1;
 4102654           int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1;
 2655
 4102656          result = xCmdValue - yCmdValue;
 4102657           if (result == 0) {
 3782658            long offsetDiff = zx.Entry.Offset - zy.Entry.Offset;
 3782659             if (offsetDiff < 0) {
 162660              result = -1;
 162661            }
 3622662             else if (offsetDiff == 0) {
 2552663              result = 0;
 2552664            }
 2665            else {
 1072666              result = 1;
 2667            }
 2668          }
 2669        }
 4712670        return result;
 2671      }
 2672    }
 2673
 2674    void RunUpdates()
 2675    {
 442676      long sizeEntries = 0;
 442677      long endOfStream = 0;
 442678      bool directUpdate = false;
 442679      long destinationPosition = 0; // NOT SFX friendly
 2680
 2681      ZipFile workFile;
 2682
 442683       if ( IsNewArchive ) {
 162684        workFile = this;
 162685        workFile.baseStream_.Position = 0;
 162686        directUpdate = true;
 162687      }
 282688       else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) {
 252689        workFile = this;
 252690        workFile.baseStream_.Position = 0;
 252691        directUpdate = true;
 2692
 2693        // Sort the updates by offset within copies/modifies, then adds.
 2694        // This ensures that data required by copies will not be overwritten.
 252695        updates_.Sort(new UpdateComparer());
 252696      }
 2697      else {
 32698        workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput());
 32699        workFile.UseZip64 = UseZip64;
 2700
 32701         if (key != null) {
 12702          workFile.key = (byte[])key.Clone();
 2703        }
 2704      }
 2705
 2706      try {
 1317022707        foreach ( ZipUpdate update in updates_ ) {
 658072708           if (update != null) {
 657722709             switch (update.Command) {
 2710              case UpdateCommand.Copy:
 672711                 if (directUpdate) {
 632712                  CopyEntryDirect(workFile, update, ref destinationPosition);
 632713                }
 2714                else {
 42715                  CopyEntry(workFile, update);
 2716                }
 42717                break;
 2718
 2719              case UpdateCommand.Modify:
 2720                // TODO: Direct modifying of an entry will take some legwork.
 02721                ModifyEntry(workFile, update);
 02722                break;
 2723
 2724              case UpdateCommand.Add:
 657052725                 if (!IsNewArchive && directUpdate) {
 1342726                  workFile.baseStream_.Position = destinationPosition;
 2727                }
 2728
 657052729                AddEntry(workFile, update);
 2730
 657052731                 if (directUpdate) {
 657042732                  destinationPosition = workFile.baseStream_.Position;
 2733                }
 2734                break;
 2735            }
 2736          }
 2737        }
 2738
 442739         if ( !IsNewArchive && directUpdate ) {
 252740          workFile.baseStream_.Position = destinationPosition;
 2741        }
 2742
 442743        long centralDirOffset = workFile.baseStream_.Position;
 2744
 1317022745        foreach ( ZipUpdate update in updates_ ) {
 658072746           if (update != null) {
 657722747            sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry);
 2748          }
 2749        }
 2750
 442751        byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_);
 442752        using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) {
 442753          zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment);
 442754        }
 2755
 442756        endOfStream = workFile.baseStream_.Position;
 2757
 2758        // And now patch entries...
 1317022759        foreach ( ZipUpdate update in updates_ ) {
 658072760           if (update != null)
 2761          {
 2762            // If the size of the entry is zero leave the crc as 0 as well.
 2763            // The calculated crc will be all bits on...
 657722764             if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) {
 1682765              workFile.baseStream_.Position = update.CrcPatchOffset;
 1682766              workFile.WriteLEInt((int)update.OutEntry.Crc);
 2767            }
 2768
 657722769             if (update.SizePatchOffset > 0) {
 1682770              workFile.baseStream_.Position = update.SizePatchOffset;
 1682771               if (update.OutEntry.LocalHeaderRequiresZip64) {
 22772                workFile.WriteLeLong(update.OutEntry.Size);
 22773                workFile.WriteLeLong(update.OutEntry.CompressedSize);
 22774              }
 2775              else {
 1662776                workFile.WriteLEInt((int)update.OutEntry.CompressedSize);
 1662777                workFile.WriteLEInt((int)update.OutEntry.Size);
 2778              }
 2779            }
 2780          }
 2781        }
 442782      }
 02783      catch {
 02784        workFile.Close();
 02785         if (!directUpdate && (workFile.Name != null)) {
 02786          File.Delete(workFile.Name);
 2787        }
 02788        throw;
 2789      }
 2790
 442791       if (directUpdate) {
 412792        workFile.baseStream_.SetLength(endOfStream);
 412793        workFile.baseStream_.Flush();
 412794        isNewArchive_ = false;
 412795        ReadEntries();
 412796      }
 2797      else {
 32798        baseStream_.Close();
 32799        Reopen(archiveStorage_.ConvertTemporaryToFinal());
 2800      }
 32801    }
 2802
 2803    void CheckUpdating()
 2804    {
 657912805       if ( updates_ == null ) {
 02806        throw new InvalidOperationException("BeginUpdate has not been called");
 2807      }
 657912808    }
 2809
 2810    #endregion
 2811
 2812    #region ZipUpdate class
 2813    /// <summary>
 2814    /// Represents a pending update to a Zip file.
 2815    /// </summary>
 2816    class ZipUpdate
 2817    {
 2818      #region Constructors
 32819      public ZipUpdate(string fileName, ZipEntry entry)
 2820      {
 32821        command_ = UpdateCommand.Add;
 32822        entry_ = entry;
 32823        filename_ = fileName;
 32824      }
 2825
 2826      [Obsolete]
 02827      public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod)
 2828      {
 02829        command_ = UpdateCommand.Add;
 02830        entry_ = new ZipEntry(entryName);
 02831        entry_.CompressionMethod = compressionMethod;
 02832        filename_ = fileName;
 02833      }
 2834
 2835      [Obsolete]
 2836      public ZipUpdate(string fileName, string entryName)
 02837        : this(fileName, entryName, CompressionMethod.Deflated)
 2838      {
 2839        // Do nothing.
 02840      }
 2841
 2842      [Obsolete]
 02843      public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
 2844      {
 02845        command_ = UpdateCommand.Add;
 02846        entry_ = new ZipEntry(entryName);
 02847        entry_.CompressionMethod = compressionMethod;
 02848        dataSource_ = dataSource;
 02849      }
 2850
 1652851      public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry)
 2852      {
 1652853        command_ = UpdateCommand.Add;
 1652854        entry_ = entry;
 1652855        dataSource_ = dataSource;
 1652856      }
 2857
 02858      public ZipUpdate(ZipEntry original, ZipEntry updated)
 2859      {
 02860        throw new ZipException("Modify not currently supported");
 2861      /*
 2862        command_ = UpdateCommand.Modify;
 2863        entry_ = ( ZipEntry )original.Clone();
 2864        outEntry_ = ( ZipEntry )updated.Clone();
 2865      */
 2866      }
 2867
 656482868      public ZipUpdate(UpdateCommand command, ZipEntry entry)
 2869      {
 656482870        command_ = command;
 656482871        entry_ = ( ZipEntry )entry.Clone();
 656482872      }
 2873
 2874
 2875      /// <summary>
 2876      /// Copy an existing entry.
 2877      /// </summary>
 2878      /// <param name="entry">The existing entry to copy.</param>
 2879      public ZipUpdate(ZipEntry entry)
 1112880        : this(UpdateCommand.Copy, entry)
 2881      {
 2882        // Do nothing.
 1112883      }
 2884      #endregion
 2885
 2886      /// <summary>
 2887      /// Get the <see cref="ZipEntry"/> for this update.
 2888      /// </summary>
 2889      /// <remarks>This is the source or original entry.</remarks>
 2890      public ZipEntry Entry
 2891      {
 2638342892        get { return entry_; }
 2893      }
 2894
 2895      /// <summary>
 2896      /// Get the <see cref="ZipEntry"/> that will be written to the updated/new file.
 2897      /// </summary>
 2898      public ZipEntry OutEntry
 2899      {
 2900        get {
 1989102901           if ( outEntry_ == null ) {
 657722902            outEntry_ = (ZipEntry)entry_.Clone();
 2903          }
 2904
 1989102905          return outEntry_;
 2906        }
 2907      }
 2908
 2909      /// <summary>
 2910      /// Get the command for this update.
 2911      /// </summary>
 2912      public UpdateCommand Command
 2913      {
 1328822914        get { return command_; }
 2915      }
 2916
 2917      /// <summary>
 2918      /// Get the filename if any for this update.  Null if none exists.
 2919      /// </summary>
 2920      public string Filename
 2921      {
 655402922        get { return filename_; }
 2923      }
 2924
 2925      /// <summary>
 2926      /// Get/set the location of the size patch for this update.
 2927      /// </summary>
 2928      public long SizePatchOffset
 2929      {
 659402930        get { return sizePatchOffset_; }
 3362931        set { sizePatchOffset_ = value; }
 2932      }
 2933
 2934      /// <summary>
 2935      /// Get /set the location of the crc patch for this update.
 2936      /// </summary>
 2937      public long CrcPatchOffset
 2938      {
 659402939        get { return crcPatchOffset_; }
 3362940        set { crcPatchOffset_ = value; }
 2941      }
 2942
 2943      /// <summary>
 2944      /// Get/set the size calculated by offset.
 2945      /// Specifically, the difference between this and next entry's starting offset.
 2946      /// </summary>
 2947      public long OffsetBasedSize
 2948      {
 462949        get { return _offsetBasedSize; }
 1602950        set { _offsetBasedSize = value; }
 2951      }
 2952
 2953      public Stream GetSource()
 2954      {
 657052955        Stream result = null;
 657052956         if ( dataSource_ != null ) {
 1652957          result = dataSource_.GetSource();
 2958        }
 2959
 657052960        return result;
 2961      }
 2962
 2963      #region Instance Fields
 2964      ZipEntry entry_;
 2965      ZipEntry outEntry_;
 2966      UpdateCommand command_;
 2967      IStaticDataSource dataSource_;
 2968      string filename_;
 658162969      long sizePatchOffset_ = -1;
 658162970      long crcPatchOffset_ = -1;
 658162971      long _offsetBasedSize = -1;
 2972      #endregion
 2973    }
 2974
 2975    #endregion
 2976    #endregion
 2977
 2978    #region Disposing
 2979
 2980    #region IDisposable Members
 2981    void IDisposable.Dispose()
 2982    {
 822983      Close();
 822984    }
 2985    #endregion
 2986
 2987    void DisposeInternal(bool disposing)
 2988    {
 982989       if ( !isDisposed_ ) {
 882990        isDisposed_ = true;
 882991        entries_ = new ZipEntry[0];
 2992
 882993         if ( IsStreamOwner && (baseStream_ != null) ) {
 492994          lock(baseStream_) {
 492995            baseStream_.Close();
 492996          }
 2997        }
 2998
 882999        PostUpdateCleanup();
 3000      }
 983001    }
 3002
 3003    /// <summary>
 3004    /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources.
 3005    /// </summary>
 3006    /// <param name="disposing">true to release both managed and unmanaged resources;
 3007    /// false to release only unmanaged resources.</param>
 3008    protected virtual void Dispose(bool disposing)
 3009    {
 63010      DisposeInternal(disposing);
 63011    }
 3012
 3013    #endregion
 3014
 3015    #region Internal routines
 3016    #region Reading
 3017    /// <summary>
 3018    /// Read an unsigned short in little endian byte order.
 3019    /// </summary>
 3020    /// <returns>Returns the value read.</returns>
 3021    /// <exception cref="EndOfStreamException">
 3022    /// The stream ends prematurely
 3023    /// </exception>
 3024    ushort ReadLEUshort()
 3025    {
 34961053026      int data1 = baseStream_.ReadByte();
 3027
 34961053028       if ( data1 < 0 ) {
 03029        throw new EndOfStreamException("End of stream");
 3030      }
 3031
 34961053032      int data2 = baseStream_.ReadByte();
 3033
 34961053034       if ( data2 < 0 ) {
 03035        throw new EndOfStreamException("End of stream");
 3036      }
 3037
 3038
 34961053039      return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8)));
 3040    }
 3041
 3042    /// <summary>
 3043    /// Read a uint in little endian byte order.
 3044    /// </summary>
 3045    /// <returns>Returns the value read.</returns>
 3046    /// <exception cref="IOException">
 3047    /// An i/o error occurs.
 3048    /// </exception>
 3049    /// <exception cref="System.IO.EndOfStreamException">
 3050    /// The file ends prematurely
 3051    /// </exception>
 3052    uint ReadLEUint()
 3053    {
 9893833054      return (uint)(ReadLEUshort() | (ReadLEUshort() << 16));
 3055    }
 3056
 3057    ulong ReadLEUlong()
 3058    {
 63059      return ReadLEUint() | ((ulong)ReadLEUint() << 32);
 3060    }
 3061
 3062    #endregion
 3063    // NOTE this returns the offset of the first byte after the signature.
 3064    long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 3065    {
 1153066      using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) {
 1153067        return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData);
 3068      }
 1153069    }
 3070
 3071    /// <summary>
 3072    /// Search for and read the central directory of a zip file filling the entries array.
 3073    /// </summary>
 3074    /// <exception cref="System.IO.IOException">
 3075    /// An i/o error occurs.
 3076    /// </exception>
 3077    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3078    /// The central directory is malformed or cannot be found
 3079    /// </exception>
 3080    void ReadEntries()
 3081    {
 3082      // Search for the End Of Central Directory.  When a zip comment is
 3083      // present the directory will start earlier
 3084      //
 3085      // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed.
 3086      // This should be compatible with both SFX and ZIP files but has only been tested for Zip files
 3087      // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then
 3088      // this could be invalid.
 3089      // Could also speed this up by reading memory in larger blocks.
 3090
 1143091       if (baseStream_.CanSeek == false) {
 03092        throw new ZipException("ZipFile stream must be seekable");
 3093      }
 3094
 1143095      long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature,
 1143096        baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff);
 3097
 1143098       if (locatedEndOfCentralDir < 0) {
 13099        throw new ZipException("Cannot find central directory");
 3100      }
 3101
 3102      // Read end of central directory record
 1133103      ushort thisDiskNumber           = ReadLEUshort();
 1133104      ushort startCentralDirDisk      = ReadLEUshort();
 1133105      ulong entriesForThisDisk        = ReadLEUshort();
 1133106      ulong entriesForWholeCentralDir = ReadLEUshort();
 1133107      ulong centralDirSize            = ReadLEUint();
 1133108      long offsetOfCentralDir         = ReadLEUint();
 1133109      uint commentSize                = ReadLEUshort();
 3110
 1133111       if ( commentSize > 0 ) {
 103112        byte[] comment = new byte[commentSize];
 3113
 103114        StreamUtils.ReadFully(baseStream_, comment);
 103115        comment_ = ZipConstants.ConvertToString(comment);
 103116      }
 3117      else {
 1033118        comment_ = string.Empty;
 3119      }
 3120
 1133121      bool isZip64 = false;
 3122
 3123      // Check if zip64 header information is required.
 1133124       if ( (thisDiskNumber == 0xffff) ||
 1133125        (startCentralDirDisk == 0xffff) ||
 1133126        (entriesForThisDisk == 0xffff) ||
 1133127        (entriesForWholeCentralDir == 0xffff) ||
 1133128        (centralDirSize == 0xffffffff) ||
 1133129        (offsetOfCentralDir == 0xffffffff) ) {
 13130        isZip64 = true;
 3131
 13132        long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 
 13133         if ( offset < 0 ) {
 03134          throw new ZipException("Cannot find Zip64 locator");
 3135        }
 3136
 3137        // number of the disk with the start of the zip64 end of central directory 4 bytes
 3138        // relative offset of the zip64 end of central directory record 8 bytes
 3139        // total number of disks 4 bytes
 13140        ReadLEUint(); // startDisk64 is not currently used
 13141        ulong offset64 = ReadLEUlong();
 13142        uint totalDisks = ReadLEUint();
 3143
 13144        baseStream_.Position = (long)offset64;
 13145        long sig64 = ReadLEUint();
 3146
 13147         if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) {
 03148          throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64));
 3149        }
 3150
 3151        // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12.
 13152        ulong recordSize = ReadLEUlong();
 13153        int versionMadeBy = ReadLEUshort();
 13154        int versionToExtract = ReadLEUshort();
 13155        uint thisDisk = ReadLEUint();
 13156        uint centralDirDisk = ReadLEUint();
 13157        entriesForThisDisk = ReadLEUlong();
 13158        entriesForWholeCentralDir = ReadLEUlong();
 13159        centralDirSize = ReadLEUlong();
 13160        offsetOfCentralDir = (long)ReadLEUlong();
 3161
 3162        // NOTE: zip64 extensible data sector (variable size) is ignored.
 3163      }
 3164
 1133165      entries_ = new ZipEntry[entriesForThisDisk];
 3166
 3167      // SFX/embedded support, find the offset of the first entry vis the start of the stream
 3168      // This applies to Zip files that are appended to the end of an SFX stub.
 3169      // Or are appended as a resource to an executable.
 3170      // Zip files created by some archivers have the offsets altered to reflect the true offsets
 3171      // and so dont require any adjustment here...
 3172      // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths?
 1133173       if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) {
 23174        offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir);
 23175         if (offsetOfFirstEntry <= 0) {
 03176          throw new ZipException("Invalid embedded zip archive");
 3177        }
 3178      }
 3179
 1133180      baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin);
 3181
 1321383182       for (ulong i = 0; i < entriesForThisDisk; i++) {
 659563183         if (ReadLEUint() != ZipConstants.CentralHeaderSignature) {
 03184          throw new ZipException("Wrong Central Directory signature");
 3185        }
 3186
 659563187        int versionMadeBy      = ReadLEUshort();
 659563188        int versionToExtract   = ReadLEUshort();
 659563189        int bitFlags           = ReadLEUshort();
 659563190        int method             = ReadLEUshort();
 659563191        uint dostime           = ReadLEUint();
 659563192        uint crc               = ReadLEUint();
 659563193        var csize             = (long)ReadLEUint();
 659563194        var size              = (long)ReadLEUint();
 659563195        int nameLen            = ReadLEUshort();
 659563196        int extraLen           = ReadLEUshort();
 659563197        int commentLen         = ReadLEUshort();
 3198
 659563199        int diskStartNo        = ReadLEUshort();  // Not currently used
 659563200        int internalAttributes = ReadLEUshort();  // Not currently used
 3201
 659563202        uint externalAttributes = ReadLEUint();
 659563203        long offset             = ReadLEUint();
 3204
 659563205        byte[] buffer = new byte[Math.Max(nameLen, commentLen)];
 3206
 659563207        StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen);
 659563208        string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen);
 3209
 659563210        var entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method);
 659563211        entry.Crc = crc & 0xffffffffL;
 659563212        entry.Size = size & 0xffffffffL;
 659563213        entry.CompressedSize = csize & 0xffffffffL;
 659563214        entry.Flags = bitFlags;
 659563215        entry.DosTime = (uint)dostime;
 659563216        entry.ZipFileIndex = (long)i;
 659563217        entry.Offset = offset;
 659563218        entry.ExternalFileAttributes = (int)externalAttributes;
 3219
 659563220         if ((bitFlags & 8) == 0) {
 659373221          entry.CryptoCheckValue = (byte)(crc >> 24);
 659373222        }
 3223        else {
 193224          entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 3225        }
 3226
 659563227         if (extraLen > 0) {
 453228          byte[] extra = new byte[extraLen];
 453229          StreamUtils.ReadFully(baseStream_, extra);
 453230          entry.ExtraData = extra;
 3231        }
 3232
 659563233        entry.ProcessExtraData(false);
 3234
 659563235         if (commentLen > 0) {
 03236          StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen);
 03237          entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen);
 3238        }
 3239
 659563240        entries_[i] = entry;
 3241      }
 1133242    }
 3243
 3244    /// <summary>
 3245    /// Locate the data for a given entry.
 3246    /// </summary>
 3247    /// <returns>
 3248    /// The start offset of the data.
 3249    /// </returns>
 3250    /// <exception cref="System.IO.EndOfStreamException">
 3251    /// The stream ends prematurely
 3252    /// </exception>
 3253    /// <exception cref="ICSharpCode.SharpZipLib.Zip.ZipException">
 3254    /// The local header signature is invalid, the entry and central header file name lengths are different
 3255    /// or the local and entry compression methods dont match
 3256    /// </exception>
 3257    long LocateEntry(ZipEntry entry)
 3258    {
 659463259      return TestLocalHeader(entry, HeaderTest.Extract);
 3260    }
 3261
 3262#if !NETCF_1_0
 3263    Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry)
 3264    {
 103265      CryptoStream result = null;
 3266
 103267       if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 103268        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 103269        var classicManaged = new PkzipClassicManaged();
 3270
 103271        OnKeysRequired(entry.Name);
 103272         if (HaveKeys == false) {
 03273          throw new ZipException("No password available for encrypted stream");
 3274        }
 3275
 103276        result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read);
 103277        CheckClassicPassword(result, entry);
 103278      }
 3279      else {
 3280#if !NET_1_1 && !NETCF_2_0
 03281         if (entry.Version == ZipConstants.VERSION_AES) {
 3282          //
 03283          OnKeysRequired(entry.Name);
 03284           if (HaveKeys == false) {
 03285            throw new ZipException("No password available for AES encrypted stream");
 3286          }
 03287          int saltLen = entry.AESSaltLen;
 03288          byte[] saltBytes = new byte[saltLen];
 03289          int saltIn = baseStream.Read(saltBytes, 0, saltLen);
 03290           if (saltIn != saltLen)
 03291            throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn);
 3292          //
 03293          byte[] pwdVerifyRead = new byte[2];
 03294          baseStream.Read(pwdVerifyRead, 0, 2);
 03295          int blockSize = entry.AESKeySize / 8;  // bits to bytes
 3296
 03297          var decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false);
 03298          byte[] pwdVerifyCalc = decryptor.PwdVerifier;
 03299           if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1])
 03300            throw new Exception("Invalid password for AES");
 03301          result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read);
 03302        }
 3303        else
 3304#endif
 3305        {
 03306          throw new ZipException("Decryption method not supported");
 3307        }
 3308      }
 3309
 103310      return result;
 3311    }
 3312
 3313    Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry)
 3314    {
 53315      CryptoStream result = null;
 53316       if ( (entry.Version < ZipConstants.VersionStrongEncryption)
 53317        || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) {
 53318        var classicManaged = new PkzipClassicManaged();
 3319
 53320        OnKeysRequired(entry.Name);
 53321         if (HaveKeys == false) {
 03322          throw new ZipException("No password available for encrypted stream");
 3323        }
 3324
 3325        // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
 3326        // which doesnt do this.
 53327        result = new CryptoStream(new UncompressedStream(baseStream),
 53328          classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
 3329
 53330         if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) {
 53331          WriteEncryptionHeader(result, entry.DosTime << 16);
 53332        }
 3333        else {
 03334          WriteEncryptionHeader(result, entry.Crc);
 3335        }
 3336      }
 53337      return result;
 3338    }
 3339
 3340    static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry)
 3341    {
 103342      byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 103343      StreamUtils.ReadFully(classicCryptoStream, cryptbuffer);
 103344       if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 03345        throw new ZipException("Invalid password");
 3346      }
 103347    }
 3348#endif
 3349
 3350    static void WriteEncryptionHeader(Stream stream, long crcValue)
 3351    {
 53352      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 53353      var rnd = new Random();
 53354      rnd.NextBytes(cryptBuffer);
 53355      cryptBuffer[11] = (byte)(crcValue >> 24);
 53356      stream.Write(cryptBuffer, 0, cryptBuffer.Length);
 53357    }
 3358
 3359    #endregion
 3360
 3361    #region Instance Fields
 3362    bool       isDisposed_;
 3363    string     name_;
 3364    string     comment_;
 3365    string     rawPassword_;
 3366    Stream     baseStream_;
 3367    bool       isStreamOwner;
 3368    long       offsetOfFirstEntry;
 3369    ZipEntry[] entries_;
 3370    byte[] key;
 3371    bool isNewArchive_;
 3372
 3373    // Default is dynamic which is not backwards compatible and can cause problems
 3374    // with XP's built in compression which cant read Zip64 archives.
 3375    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 3376    // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed.
 883377    UseZip64 useZip64_ = UseZip64.Dynamic ;
 3378
 3379    #region Zip Update Instance Fields
 3380    ArrayList updates_;
 3381    long updateCount_; // Count is managed manually as updates_ can contain nulls!
 3382    Hashtable updateIndex_;
 3383    IArchiveStorage archiveStorage_;
 3384    IDynamicDataSource updateDataSource_;
 3385    bool contentsEdited_;
 883386    int bufferSize_ = DefaultBufferSize;
 3387    byte[] copyBuffer_;
 3388    ZipString newComment_;
 3389    bool commentEdited_;
 883390    IEntryFactory updateEntryFactory_ = new ZipEntryFactory();
 3391    #endregion
 3392    #endregion
 3393
 3394    #region Support Classes
 3395    /// <summary>
 3396    /// Represents a string from a <see cref="ZipFile"/> which is stored as an array of bytes.
 3397    /// </summary>
 3398    class ZipString
 3399    {
 3400      #region Constructors
 3401      /// <summary>
 3402      /// Initialise a <see cref="ZipString"/> with a string.
 3403      /// </summary>
 3404      /// <param name="comment">The textual string form.</param>
 33405      public ZipString(string comment)
 3406      {
 33407        comment_ = comment;
 33408        isSourceString_ = true;
 33409      }
 3410
 3411      /// <summary>
 3412      /// Initialise a <see cref="ZipString"/> using a string in its binary 'raw' form.
 3413      /// </summary>
 3414      /// <param name="rawString"></param>
 03415      public ZipString(byte[] rawString)
 3416      {
 03417        rawComment_ = rawString;
 03418      }
 3419      #endregion
 3420
 3421      /// <summary>
 3422      /// Get a value indicating the original source of data for this instance.
 3423      /// True if the source was a string; false if the source was binary data.
 3424      /// </summary>
 3425      public bool IsSourceString
 3426      {
 03427        get { return isSourceString_; }
 3428      }
 3429
 3430      /// <summary>
 3431      /// Get the length of the comment when represented as raw bytes.
 3432      /// </summary>
 3433      public int RawLength
 3434      {
 3435        get {
 33436          MakeBytesAvailable();
 33437          return rawComment_.Length;
 3438        }
 3439      }
 3440
 3441      /// <summary>
 3442      /// Get the comment in its 'raw' form as plain bytes.
 3443      /// </summary>
 3444      public byte[] RawComment
 3445      {
 3446        get {
 33447          MakeBytesAvailable();
 33448          return (byte[])rawComment_.Clone();
 3449        }
 3450      }
 3451
 3452      /// <summary>
 3453      /// Reset the comment to its initial state.
 3454      /// </summary>
 3455      public void Reset()
 3456      {
 03457         if ( isSourceString_ ) {
 03458          rawComment_ = null;
 03459        }
 3460        else {
 03461          comment_ = null;
 3462        }
 03463      }
 3464
 3465      void MakeTextAvailable()
 3466      {
 03467         if ( comment_ == null ) {
 03468          comment_ = ZipConstants.ConvertToString(rawComment_);
 3469        }
 03470      }
 3471
 3472      void MakeBytesAvailable()
 3473      {
 63474         if ( rawComment_ == null ) {
 33475          rawComment_ = ZipConstants.ConvertToArray(comment_);
 3476        }
 63477      }
 3478
 3479      /// <summary>
 3480      /// Implicit conversion of comment to a string.
 3481      /// </summary>
 3482      /// <param name="zipString">The <see cref="ZipString"/> to convert to a string.</param>
 3483      /// <returns>The textual equivalent for the input value.</returns>
 3484      static public implicit operator string(ZipString zipString)
 3485      {
 03486        zipString.MakeTextAvailable();
 03487        return zipString.comment_;
 3488      }
 3489
 3490      #region Instance Fields
 3491      string comment_;
 3492      byte[] rawComment_;
 3493      bool isSourceString_;
 3494      #endregion
 3495    }
 3496
 3497    /// <summary>
 3498    /// An <see cref="IEnumerator">enumerator</see> for <see cref="ZipEntry">Zip entries</see>
 3499    /// </summary>
 3500    class ZipEntryEnumerator : IEnumerator
 3501    {
 3502      #region Constructors
 43503      public ZipEntryEnumerator(ZipEntry[] entries)
 3504      {
 43505        array = entries;
 43506      }
 3507
 3508      #endregion
 3509      #region IEnumerator Members
 3510      public object Current
 3511      {
 3512        get {
 223513          return array[index];
 3514        }
 3515      }
 3516
 3517      public void Reset()
 3518      {
 03519        index = -1;
 03520      }
 3521
 3522      public bool MoveNext()
 3523      {
 263524        return (++index < array.Length);
 3525      }
 3526      #endregion
 3527      #region Instance Fields
 3528      ZipEntry[] array;
 43529      int index = -1;
 3530      #endregion
 3531    }
 3532
 3533    /// <summary>
 3534    /// An <see cref="UncompressedStream"/> is a stream that you can write uncompressed data
 3535    /// to and flush, but cannot read, seek or do anything else to.
 3536    /// </summary>
 3537    class UncompressedStream : Stream
 3538    {
 3539      #region Constructors
 203540      public UncompressedStream(Stream baseStream)
 3541      {
 203542        baseStream_ = baseStream;
 203543      }
 3544
 3545      #endregion
 3546
 3547      /// <summary>
 3548      /// Close this stream instance.
 3549      /// </summary>
 3550      public override void Close()
 3551      {
 3552        // Do nothing
 153553      }
 3554
 3555      /// <summary>
 3556      /// Gets a value indicating whether the current stream supports reading.
 3557      /// </summary>
 3558      public override bool CanRead
 3559      {
 3560        get {
 03561          return false;
 3562        }
 3563      }
 3564
 3565      /// <summary>
 3566      /// Write any buffered data to underlying storage.
 3567      /// </summary>
 3568      public override void Flush()
 3569      {
 03570        baseStream_.Flush();
 03571      }
 3572
 3573      /// <summary>
 3574      /// Gets a value indicating whether the current stream supports writing.
 3575      /// </summary>
 3576      public override bool CanWrite
 3577      {
 3578        get {
 53579          return baseStream_.CanWrite;
 3580        }
 3581      }
 3582
 3583      /// <summary>
 3584      /// Gets a value indicating whether the current stream supports seeking.
 3585      /// </summary>
 3586      public override bool CanSeek
 3587      {
 3588        get {
 03589          return false;
 3590        }
 3591      }
 3592
 3593      /// <summary>
 3594      /// Get the length in bytes of the stream.
 3595      /// </summary>
 3596      public override long Length
 3597      {
 3598        get {
 03599          return 0;
 3600        }
 3601      }
 3602
 3603      /// <summary>
 3604      /// Gets or sets the position within the current stream.
 3605      /// </summary>
 3606      public override long Position
 3607      {
 3608        get  {
 03609          return baseStream_.Position;
 3610        }
 3611                set {
 03612                    throw new NotImplementedException();
 3613                }
 3614            }
 3615
 3616            /// <summary>
 3617            /// Reads a sequence of bytes from the current stream and advances the position within the stream by the num
 3618            /// </summary>
 3619            /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte
 3620            /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from t
 3621            /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3622            /// <returns>
 3623            /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if t
 3624            /// </returns>
 3625            /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer lengt
 3626            /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </ex
 3627            /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3628            /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3629            /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3630            /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3631            public override int Read(byte[] buffer, int offset, int count)
 3632      {
 03633        return 0;
 3634      }
 3635
 3636      /// <summary>
 3637      /// Sets the position within the current stream.
 3638      /// </summary>
 3639      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3640      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3641      /// <returns>
 3642      /// The new position within the current stream.
 3643      /// </returns>
 3644      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3645      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3646      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3647      public override long Seek(long offset, SeekOrigin origin)
 3648      {
 03649        return 0;
 3650      }
 3651
 3652      /// <summary>
 3653      /// Sets the length of the current stream.
 3654      /// </summary>
 3655      /// <param name="value">The desired length of the current stream in bytes.</param>
 3656      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3657      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3658      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3659      public override void SetLength(long value)
 3660      {
 03661      }
 3662
 3663      /// <summary>
 3664      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3665      /// </summary>
 3666      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3667      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3668      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3669      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3670      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3671      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3672      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3673      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3674      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3675      public override void Write(byte[] buffer, int offset, int count)
 3676      {
 253677        baseStream_.Write(buffer, offset, count);
 253678      }
 3679
 3680      readonly
 3681
 3682      #region Instance Fields
 3683      Stream baseStream_;
 3684      #endregion
 3685    }
 3686
 3687    /// <summary>
 3688    /// A <see cref="PartialInputStream"/> is an <see cref="InflaterInputStream"/>
 3689    /// whose data is only a part or subsection of a file.
 3690    /// </summary>
 3691    class PartialInputStream : Stream
 3692    {
 3693      #region Constructors
 3694      /// <summary>
 3695      /// Initialise a new instance of the <see cref="PartialInputStream"/> class.
 3696      /// </summary>
 3697      /// <param name="zipFile">The <see cref="ZipFile"/> containing the underlying stream to use for IO.</param>
 3698      /// <param name="start">The start of the partial data.</param>
 3699      /// <param name="length">The length of the partial data.</param>
 659463700      public PartialInputStream(ZipFile zipFile, long start, long length)
 3701      {
 659463702        start_ = start;
 659463703        length_ = length;
 3704
 3705        // Although this is the only time the zipfile is used
 3706        // keeping a reference here prevents premature closure of
 3707        // this zip file and thus the baseStream_.
 3708
 3709        // Code like this will cause apparently random failures depending
 3710        // on the size of the files and when garbage is collected.
 3711        //
 3712        // ZipFile z = new ZipFile (stream);
 3713        // Stream reader = z.GetInputStream(0);
 3714        // uses reader here....
 659463715        zipFile_ = zipFile;
 659463716        baseStream_ = zipFile_.baseStream_;
 659463717        readPos_ = start;
 659463718        end_ = start + length;
 659463719      }
 3720      #endregion
 3721
 3722      /// <summary>
 3723      /// Read a byte from this stream.
 3724      /// </summary>
 3725      /// <returns>Returns the byte read or -1 on end of stream.</returns>
 3726      public override int ReadByte()
 3727      {
 1583728         if (readPos_ >= end_) {
 3729           // -1 is the correct value at end of stream.
 03730          return -1;
 3731        }
 3732
 1583733        lock( baseStream_ ) {
 1583734          baseStream_.Seek(readPos_++, SeekOrigin.Begin);
 1583735          return baseStream_.ReadByte();
 3736        }
 1583737      }
 3738
 3739      /// <summary>
 3740      /// Close this <see cref="PartialInputStream">partial input stream</see>.
 3741      /// </summary>
 3742      /// <remarks>
 3743      /// The underlying stream is not closed.  Close the parent ZipFile class to do that.
 3744      /// </remarks>
 3745      public override void Close()
 3746      {
 3747        // Do nothing at all!
 659183748      }
 3749
 3750      /// <summary>
 3751      /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of
 3752      /// </summary>
 3753      /// <param name="buffer">An array of bytes. When this method returns, the buffer contains the specified byte array
 3754      /// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the cur
 3755      /// <param name="count">The maximum number of bytes to be read from the current stream.</param>
 3756      /// <returns>
 3757      /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that ma
 3758      /// </returns>
 3759      /// <exception cref="T:System.ArgumentException">The sum of offset and count is larger than the buffer length. </e
 3760      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3761      /// <exception cref="T:System.NotSupportedException">The stream does not support reading. </exception>
 3762      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3763      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3764      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3765      public override int Read(byte[] buffer, int offset, int count)
 3766      {
 663793767        lock(baseStream_) {
 663793768           if (count > end_ - readPos_) {
 663483769            count = (int) (end_ - readPos_);
 663483770             if (count == 0) {
 659433771              return 0;
 3772            }
 3773          }
 3774
 4363775          baseStream_.Seek(readPos_, SeekOrigin.Begin);
 4363776          int readCount = baseStream_.Read(buffer, offset, count);
 4363777           if (readCount > 0) {
 4363778            readPos_ += readCount;
 3779          }
 4363780          return readCount;
 3781        }
 663793782      }
 3783
 3784      /// <summary>
 3785      /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the n
 3786      /// </summary>
 3787      /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream.</par
 3788      /// <param name="offset">The zero-based byte offset in buffer at which to begin copying bytes to the current strea
 3789      /// <param name="count">The number of bytes to be written to the current stream.</param>
 3790      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3791      /// <exception cref="T:System.NotSupportedException">The stream does not support writing. </exception>
 3792      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3793      /// <exception cref="T:System.ArgumentNullException">buffer is null. </exception>
 3794      /// <exception cref="T:System.ArgumentException">The sum of offset and count is greater than the buffer length. </
 3795      /// <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative. </exception>
 3796      public override void Write(byte[] buffer, int offset, int count)
 3797      {
 03798        throw new NotSupportedException();
 3799      }
 3800
 3801      /// <summary>
 3802      /// When overridden in a derived class, sets the length of the current stream.
 3803      /// </summary>
 3804      /// <param name="value">The desired length of the current stream in bytes.</param>
 3805      /// <exception cref="T:System.NotSupportedException">The stream does not support both writing and seeking, such as
 3806      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3807      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3808      public override void SetLength(long value)
 3809      {
 03810        throw new NotSupportedException();
 3811      }
 3812
 3813      /// <summary>
 3814      /// When overridden in a derived class, sets the position within the current stream.
 3815      /// </summary>
 3816      /// <param name="offset">A byte offset relative to the origin parameter.</param>
 3817      /// <param name="origin">A value of type <see cref="T:System.IO.SeekOrigin"></see> indicating the reference point 
 3818      /// <returns>
 3819      /// The new position within the current stream.
 3820      /// </returns>
 3821      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3822      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking, such as if the stream is
 3823      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3824      public override long Seek(long offset, SeekOrigin origin)
 3825      {
 73826        long newPos = readPos_;
 3827
 73828         switch ( origin )
 3829        {
 3830          case SeekOrigin.Begin:
 73831            newPos = start_ + offset;
 73832            break;
 3833
 3834          case SeekOrigin.Current:
 03835            newPos = readPos_ + offset;
 03836            break;
 3837
 3838          case SeekOrigin.End:
 03839            newPos = end_ + offset;
 3840            break;
 3841        }
 3842
 73843         if ( newPos < start_ ) {
 03844          throw new ArgumentException("Negative position is invalid");
 3845        }
 3846
 73847         if ( newPos >= end_ ) {
 03848          throw new IOException("Cannot seek past end");
 3849        }
 73850        readPos_ = newPos;
 73851        return readPos_;
 3852      }
 3853
 3854      /// <summary>
 3855      /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device.
 3856      /// </summary>
 3857      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3858      public override void Flush()
 3859      {
 3860        // Nothing to do.
 03861      }
 3862
 3863      /// <summary>
 3864      /// Gets or sets the position within the current stream.
 3865      /// </summary>
 3866      /// <value></value>
 3867      /// <returns>The current position within the stream.</returns>
 3868      /// <exception cref="T:System.IO.IOException">An I/O error occurs. </exception>
 3869      /// <exception cref="T:System.NotSupportedException">The stream does not support seeking. </exception>
 3870      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3871      public override long Position {
 13872        get { return readPos_ - start_; }
 3873        set {
 03874          long newPos = start_ + value;
 3875
 03876           if ( newPos < start_ ) {
 03877            throw new ArgumentException("Negative position is invalid");
 3878          }
 3879
 03880           if ( newPos >= end_ ) {
 03881            throw new InvalidOperationException("Cannot seek past end");
 3882          }
 03883          readPos_ = newPos;
 03884        }
 3885      }
 3886
 3887      /// <summary>
 3888      /// Gets the length in bytes of the stream.
 3889      /// </summary>
 3890      /// <value></value>
 3891      /// <returns>A long value representing the length of the stream in bytes.</returns>
 3892      /// <exception cref="T:System.NotSupportedException">A class derived from Stream does not support seeking. </excep
 3893      /// <exception cref="T:System.ObjectDisposedException">Methods were called after the stream was closed. </exceptio
 3894      public override long Length {
 23895        get { return length_; }
 3896      }
 3897
 3898      /// <summary>
 3899      /// Gets a value indicating whether the current stream supports writing.
 3900      /// </summary>
 3901      /// <value>false</value>
 3902      /// <returns>true if the stream supports writing; otherwise, false.</returns>
 3903      public override bool CanWrite {
 03904        get { return false; }
 3905      }
 3906
 3907      /// <summary>
 3908      /// Gets a value indicating whether the current stream supports seeking.
 3909      /// </summary>
 3910      /// <value>true</value>
 3911      /// <returns>true if the stream supports seeking; otherwise, false.</returns>
 3912      public override bool CanSeek {
 23913        get { return true; }
 3914      }
 3915
 3916      /// <summary>
 3917      /// Gets a value indicating whether the current stream supports reading.
 3918      /// </summary>
 3919      /// <value>true.</value>
 3920      /// <returns>true if the stream supports reading; otherwise, false.</returns>
 3921      public override bool CanRead {
 133922        get { return true; }
 3923      }
 3924
 3925#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 3926      /// <summary>
 3927      /// Gets a value that determines whether the current stream can time out.
 3928      /// </summary>
 3929      /// <value></value>
 3930      /// <returns>A value that determines whether the current stream can time out.</returns>
 3931      public override bool CanTimeout {
 03932        get { return baseStream_.CanTimeout; }
 3933      }
 3934#endif
 3935      #region Instance Fields
 3936      ZipFile zipFile_;
 3937      Stream baseStream_;
 3938      long start_;
 3939      long length_;
 3940      long readPos_;
 3941      long end_;
 3942      #endregion
 3943    }
 3944    #endregion
 3945  }
 3946
 3947  #endregion
 3948
 3949  #region DataSources
 3950  /// <summary>
 3951  /// Provides a static way to obtain a source of data for an entry.
 3952  /// </summary>
 3953  public interface IStaticDataSource
 3954  {
 3955    /// <summary>
 3956    /// Get a source of data by creating a new stream.
 3957    /// </summary>
 3958    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3959    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3960    Stream GetSource();
 3961  }
 3962
 3963  /// <summary>
 3964  /// Represents a source of data that can dynamically provide
 3965  /// multiple <see cref="Stream">data sources</see> based on the parameters passed.
 3966  /// </summary>
 3967  public interface IDynamicDataSource
 3968  {
 3969    /// <summary>
 3970    /// Get a data source.
 3971    /// </summary>
 3972    /// <param name="entry">The <see cref="ZipEntry"/> to get a source for.</param>
 3973    /// <param name="name">The name for data if known.</param>
 3974    /// <returns>Returns a <see cref="Stream"/> to use for compression input.</returns>
 3975    /// <remarks>Ideally a new stream is created and opened to achieve this, to avoid locking problems.</remarks>
 3976    Stream GetSource(ZipEntry entry, string name);
 3977  }
 3978
 3979  /// <summary>
 3980  /// Default implementation of a <see cref="IStaticDataSource"/> for use with files stored on disk.
 3981  /// </summary>
 3982  public class StaticDiskDataSource : IStaticDataSource
 3983  {
 3984    /// <summary>
 3985    /// Initialise a new instnace of <see cref="StaticDiskDataSource"/>
 3986    /// </summary>
 3987    /// <param name="fileName">The name of the file to obtain data from.</param>
 3988    public StaticDiskDataSource(string fileName)
 3989    {
 3990      fileName_ = fileName;
 3991    }
 3992
 3993    #region IDataSource Members
 3994
 3995    /// <summary>
 3996    /// Get a <see cref="Stream"/> providing data.
 3997    /// </summary>
 3998    /// <returns>Returns a <see cref="Stream"/> provising data.</returns>
 3999    public Stream GetSource()
 4000    {
 4001      return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4002    }
 4003
 4004    readonly
 4005
 4006    #endregion
 4007    #region Instance Fields
 4008    string fileName_;
 4009    #endregion
 4010  }
 4011
 4012
 4013  /// <summary>
 4014  /// Default implementation of <see cref="IDynamicDataSource"/> for files stored on disk.
 4015  /// </summary>
 4016  public class DynamicDiskDataSource : IDynamicDataSource
 4017  {
 4018
 4019    #region IDataSource Members
 4020    /// <summary>
 4021    /// Get a <see cref="Stream"/> providing data for an entry.
 4022    /// </summary>
 4023    /// <param name="entry">The entry to provide data for.</param>
 4024    /// <param name="name">The file name for data if known.</param>
 4025    /// <returns>Returns a stream providing data; or null if not available</returns>
 4026    public Stream GetSource(ZipEntry entry, string name)
 4027    {
 4028      Stream result = null;
 4029
 4030      if ( name != null ) {
 4031        result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read);
 4032      }
 4033
 4034      return result;
 4035    }
 4036
 4037    #endregion
 4038  }
 4039
 4040  #endregion
 4041
 4042  #region Archive Storage
 4043  /// <summary>
 4044  /// Defines facilities for data storage when updating Zip Archives.
 4045  /// </summary>
 4046  public interface IArchiveStorage
 4047  {
 4048    /// <summary>
 4049    /// Get the <see cref="FileUpdateMode"/> to apply during updates.
 4050    /// </summary>
 4051    FileUpdateMode UpdateMode { get; }
 4052
 4053    /// <summary>
 4054    /// Get an empty <see cref="Stream"/> that can be used for temporary output.
 4055    /// </summary>
 4056    /// <returns>Returns a temporary output <see cref="Stream"/></returns>
 4057    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4058    Stream GetTemporaryOutput();
 4059
 4060    /// <summary>
 4061    /// Convert a temporary output stream to a final stream.
 4062    /// </summary>
 4063    /// <returns>The resulting final <see cref="Stream"/></returns>
 4064    /// <seealso cref="GetTemporaryOutput"/>
 4065    Stream ConvertTemporaryToFinal();
 4066
 4067    /// <summary>
 4068    /// Make a temporary copy of the original stream.
 4069    /// </summary>
 4070    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4071    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4072    Stream MakeTemporaryCopy(Stream stream);
 4073
 4074    /// <summary>
 4075    /// Return a stream suitable for performing direct updates on the original source.
 4076    /// </summary>
 4077    /// <param name="stream">The current stream.</param>
 4078    /// <returns>Returns a stream suitable for direct updating.</returns>
 4079    /// <remarks>This may be the current stream passed.</remarks>
 4080    Stream OpenForDirectUpdate(Stream stream);
 4081
 4082    /// <summary>
 4083    /// Dispose of this instance.
 4084    /// </summary>
 4085    void Dispose();
 4086  }
 4087
 4088  /// <summary>
 4089  /// An abstract <see cref="IArchiveStorage"/> suitable for extension by inheritance.
 4090  /// </summary>
 4091  abstract public class BaseArchiveStorage : IArchiveStorage
 4092  {
 4093    #region Constructors
 4094    /// <summary>
 4095    /// Initializes a new instance of the <see cref="BaseArchiveStorage"/> class.
 4096    /// </summary>
 4097    /// <param name="updateMode">The update mode.</param>
 4098    protected BaseArchiveStorage(FileUpdateMode updateMode)
 4099    {
 4100      updateMode_ = updateMode;
 4101    }
 4102    #endregion
 4103
 4104    #region IArchiveStorage Members
 4105
 4106    /// <summary>
 4107    /// Gets a temporary output <see cref="Stream"/>
 4108    /// </summary>
 4109    /// <returns>Returns the temporary output stream.</returns>
 4110    /// <seealso cref="ConvertTemporaryToFinal"></seealso>
 4111    public abstract Stream GetTemporaryOutput();
 4112
 4113    /// <summary>
 4114    /// Converts the temporary <see cref="Stream"/> to its final form.
 4115    /// </summary>
 4116    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4117    /// the final storage for the archive.</returns>
 4118    /// <seealso cref="GetTemporaryOutput"/>
 4119    public abstract Stream ConvertTemporaryToFinal();
 4120
 4121    /// <summary>
 4122    /// Make a temporary copy of a <see cref="Stream"/>.
 4123    /// </summary>
 4124    /// <param name="stream">The <see cref="Stream"/> to make a copy of.</param>
 4125    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4126    public abstract Stream MakeTemporaryCopy(Stream stream);
 4127
 4128    /// <summary>
 4129    /// Return a stream suitable for performing direct updates on the original source.
 4130    /// </summary>
 4131    /// <param name="stream">The <see cref="Stream"/> to open for direct update.</param>
 4132    /// <returns>Returns a stream suitable for direct updating.</returns>
 4133    public abstract Stream OpenForDirectUpdate(Stream stream);
 4134
 4135    /// <summary>
 4136    /// Disposes this instance.
 4137    /// </summary>
 4138    public abstract void Dispose();
 4139
 4140    /// <summary>
 4141    /// Gets the update mode applicable.
 4142    /// </summary>
 4143    /// <value>The update mode.</value>
 4144    public FileUpdateMode UpdateMode
 4145    {
 4146      get {
 4147        return updateMode_;
 4148      }
 4149    }
 4150
 4151    #endregion
 4152
 4153    #region Instance Fields
 4154    FileUpdateMode updateMode_;
 4155    #endregion
 4156  }
 4157
 4158  /// <summary>
 4159  /// An <see cref="IArchiveStorage"/> implementation suitable for hard disks.
 4160  /// </summary>
 4161  public class DiskArchiveStorage : BaseArchiveStorage
 4162  {
 4163    #region Constructors
 4164    /// <summary>
 4165    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4166    /// </summary>
 4167    /// <param name="file">The file.</param>
 4168    /// <param name="updateMode">The update mode.</param>
 4169    public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode)
 4170      : base(updateMode)
 4171    {
 4172      if ( file.Name == null ) {
 4173        throw new ZipException("Cant handle non file archives");
 4174      }
 4175
 4176      fileName_ = file.Name;
 4177    }
 4178
 4179    /// <summary>
 4180    /// Initializes a new instance of the <see cref="DiskArchiveStorage"/> class.
 4181    /// </summary>
 4182    /// <param name="file">The file.</param>
 4183    public DiskArchiveStorage(ZipFile file)
 4184      : this(file, FileUpdateMode.Safe)
 4185    {
 4186    }
 4187    #endregion
 4188
 4189    #region IArchiveStorage Members
 4190
 4191    /// <summary>
 4192    /// Gets a temporary output <see cref="Stream"/> for performing updates on.
 4193    /// </summary>
 4194    /// <returns>Returns the temporary output stream.</returns>
 4195    public override Stream GetTemporaryOutput()
 4196    {
 4197      if ( temporaryName_ != null ) {
 4198        temporaryName_ = GetTempFileName(temporaryName_, true);
 4199        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4200      }
 4201      else {
 4202        // Determine where to place files based on internal strategy.
 4203        // Currently this is always done in system temp directory.
 4204        temporaryName_ = Path.GetTempFileName();
 4205        temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
 4206      }
 4207
 4208      return temporaryStream_;
 4209    }
 4210
 4211    /// <summary>
 4212    /// Converts a temporary <see cref="Stream"/> to its final form.
 4213    /// </summary>
 4214    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4215    /// the final storage for the archive.</returns>
 4216    public override Stream ConvertTemporaryToFinal()
 4217    {
 4218      if ( temporaryStream_ == null ) {
 4219        throw new ZipException("No temporary stream has been created");
 4220      }
 4221
 4222      Stream result = null;
 4223
 4224      string moveTempName = GetTempFileName(fileName_, false);
 4225      bool newFileCreated = false;
 4226
 4227      try  {
 4228        temporaryStream_.Close();
 4229        File.Move(fileName_, moveTempName);
 4230        File.Move(temporaryName_, fileName_);
 4231        newFileCreated = true;
 4232        File.Delete(moveTempName);
 4233
 4234        result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read);
 4235      }
 4236      catch(Exception) {
 4237        result  = null;
 4238
 4239        // Try to roll back changes...
 4240        if ( !newFileCreated ) {
 4241          File.Move(moveTempName, fileName_);
 4242          File.Delete(temporaryName_);
 4243        }
 4244
 4245        throw;
 4246      }
 4247
 4248      return result;
 4249    }
 4250
 4251    /// <summary>
 4252    /// Make a temporary copy of a stream.
 4253    /// </summary>
 4254    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4255    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4256    public override Stream MakeTemporaryCopy(Stream stream)
 4257    {
 4258      stream.Close();
 4259
 4260      temporaryName_ = GetTempFileName(fileName_, true);
 4261      File.Copy(fileName_, temporaryName_, true);
 4262
 4263      temporaryStream_ = new FileStream(temporaryName_,
 4264        FileMode.Open,
 4265        FileAccess.ReadWrite);
 4266      return temporaryStream_;
 4267    }
 4268
 4269    /// <summary>
 4270    /// Return a stream suitable for performing direct updates on the original source.
 4271    /// </summary>
 4272    /// <param name="stream">The current stream.</param>
 4273    /// <returns>Returns a stream suitable for direct updating.</returns>
 4274    /// <remarks>If the <paramref name="stream"/> is not null this is used as is.</remarks>
 4275    public override Stream OpenForDirectUpdate(Stream stream)
 4276    {
 4277      Stream result;
 4278      if ((stream == null) || !stream.CanWrite)
 4279      {
 4280        if (stream != null) {
 4281          stream.Close();
 4282        }
 4283
 4284        result = new FileStream(fileName_,
 4285            FileMode.Open,
 4286            FileAccess.ReadWrite);
 4287      }
 4288      else
 4289      {
 4290        result = stream;
 4291      }
 4292
 4293      return result;
 4294    }
 4295
 4296    /// <summary>
 4297    /// Disposes this instance.
 4298    /// </summary>
 4299    public override void Dispose()
 4300    {
 4301      if ( temporaryStream_ != null ) {
 4302        temporaryStream_.Close();
 4303      }
 4304    }
 4305
 4306    #endregion
 4307
 4308    #region Internal routines
 4309    static string GetTempFileName(string original, bool makeTempFile)
 4310    {
 4311      string result = null;
 4312
 4313      if ( original == null ) {
 4314        result = Path.GetTempFileName();
 4315      }
 4316      else {
 4317        int counter = 0;
 4318        int suffixSeed = DateTime.Now.Second;
 4319
 4320        while ( result == null ) {
 4321          counter += 1;
 4322          string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter);
 4323          if ( !File.Exists(newName) ) {
 4324            if ( makeTempFile) {
 4325              try  {
 4326                // Try and create the file.
 4327                using ( FileStream stream = File.Create(newName) ) {
 4328                }
 4329                result = newName;
 4330              }
 4331              catch {
 4332                suffixSeed = DateTime.Now.Second;
 4333              }
 4334            }
 4335            else {
 4336              result = newName;
 4337            }
 4338          }
 4339        }
 4340      }
 4341      return result;
 4342    }
 4343    #endregion
 4344
 4345    #region Instance Fields
 4346    Stream temporaryStream_;
 4347    string fileName_;
 4348    string temporaryName_;
 4349    #endregion
 4350  }
 4351
 4352  /// <summary>
 4353  /// An <see cref="IArchiveStorage"/> implementation suitable for in memory streams.
 4354  /// </summary>
 4355  public class MemoryArchiveStorage : BaseArchiveStorage
 4356  {
 4357    #region Constructors
 4358    /// <summary>
 4359    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4360    /// </summary>
 4361    public MemoryArchiveStorage()
 4362      : base(FileUpdateMode.Direct)
 4363    {
 4364    }
 4365
 4366    /// <summary>
 4367    /// Initializes a new instance of the <see cref="MemoryArchiveStorage"/> class.
 4368    /// </summary>
 4369    /// <param name="updateMode">The <see cref="FileUpdateMode"/> to use</param>
 4370    /// <remarks>This constructor is for testing as memory streams dont really require safe mode.</remarks>
 4371    public MemoryArchiveStorage(FileUpdateMode updateMode)
 4372      : base(updateMode)
 4373    {
 4374    }
 4375
 4376    #endregion
 4377
 4378    #region Properties
 4379    /// <summary>
 4380    /// Get the stream returned by <see cref="ConvertTemporaryToFinal"/> if this was in fact called.
 4381    /// </summary>
 4382    public MemoryStream FinalStream
 4383    {
 4384      get { return finalStream_; }
 4385    }
 4386
 4387    #endregion
 4388
 4389    #region IArchiveStorage Members
 4390
 4391    /// <summary>
 4392    /// Gets the temporary output <see cref="Stream"/>
 4393    /// </summary>
 4394    /// <returns>Returns the temporary output stream.</returns>
 4395    public override Stream GetTemporaryOutput()
 4396    {
 4397      temporaryStream_ = new MemoryStream();
 4398      return temporaryStream_;
 4399    }
 4400
 4401    /// <summary>
 4402    /// Converts the temporary <see cref="Stream"/> to its final form.
 4403    /// </summary>
 4404    /// <returns>Returns a <see cref="Stream"/> that can be used to read
 4405    /// the final storage for the archive.</returns>
 4406    public override Stream ConvertTemporaryToFinal()
 4407    {
 4408      if ( temporaryStream_ == null ) {
 4409        throw new ZipException("No temporary stream has been created");
 4410      }
 4411
 4412      finalStream_ = new MemoryStream(temporaryStream_.ToArray());
 4413      return finalStream_;
 4414    }
 4415
 4416    /// <summary>
 4417    /// Make a temporary copy of the original stream.
 4418    /// </summary>
 4419    /// <param name="stream">The <see cref="Stream"/> to copy.</param>
 4420    /// <returns>Returns a temporary output <see cref="Stream"/> that is a copy of the input.</returns>
 4421    public override Stream MakeTemporaryCopy(Stream stream)
 4422    {
 4423      temporaryStream_ = new MemoryStream();
 4424      stream.Position = 0;
 4425      StreamUtils.Copy(stream, temporaryStream_, new byte[4096]);
 4426      return temporaryStream_;
 4427    }
 4428
 4429    /// <summary>
 4430    /// Return a stream suitable for performing direct updates on the original source.
 4431    /// </summary>
 4432    /// <param name="stream">The original source stream</param>
 4433    /// <returns>Returns a stream suitable for direct updating.</returns>
 4434    /// <remarks>If the <paramref name="stream"/> passed is not null this is used;
 4435    /// otherwise a new <see cref="MemoryStream"/> is returned.</remarks>
 4436    public override Stream OpenForDirectUpdate(Stream stream)
 4437    {
 4438      Stream result;
 4439      if ((stream == null) || !stream.CanWrite) {
 4440
 4441        result = new MemoryStream();
 4442
 4443        if (stream != null) {
 4444          stream.Position = 0;
 4445          StreamUtils.Copy(stream, result, new byte[4096]);
 4446
 4447          stream.Close();
 4448        }
 4449      }
 4450      else {
 4451        result = stream;
 4452      }
 4453
 4454      return result;
 4455    }
 4456
 4457    /// <summary>
 4458    /// Disposes this instance.
 4459    /// </summary>
 4460    public override void Dispose()
 4461    {
 4462      if ( temporaryStream_ != null ) {
 4463        temporaryStream_.Close();
 4464      }
 4465    }
 4466
 4467    #endregion
 4468
 4469    #region Instance Fields
 4470    MemoryStream temporaryStream_;
 4471    MemoryStream finalStream_;
 4472    #endregion
 4473  }
 4474
 4475  #endregion
 4476}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipHelperStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipHelperStream.htm new file mode 100644 index 000000000..f225ee51f --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipHelperStream.htm @@ -0,0 +1,687 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipHelperStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipHelperStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipHelperStream.cs
Covered lines:106
Uncovered lines:88
Coverable lines:194
Total lines:623
Line coverage:54.6%
Branch coverage:42.8%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor(...)1100100
Flush()100
Seek(...)1100100
SetLength(...)1100100
Read(...)1100100
Write(...)1100100
Close()3100100
WriteLocalHeader(...)1600
LocateBlockWithSignature(...)488.8985.71
WriteZip64EndOfCentralDirectory(...)1100100
WriteEndOfCentralDirectory(...)1180.7773.68
ReadLEShort()371.4360
ReadLEInt()1100100
ReadLELong()1100100
WriteLEShort(...)1100100
WriteLEUshort(...)1100100
WriteLEInt(...)1100100
WriteLEUint(...)100
WriteLELong(...)1100100
WriteLEUlong(...)100
WriteDataDescriptor(...)468.7557.14
ReadDataDescriptor(...)390.9180
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipHelperStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipHelperStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36using System;
 37using System.IO;
 38using System.Text;
 39
 40namespace ICSharpCode.SharpZipLib.Zip
 41{
 42
 43  /// <summary>
 44  /// Holds data pertinent to a data descriptor.
 45  /// </summary>
 46  public class DescriptorData
 47  {
 48    /// <summary>
 49    /// Get /set the compressed size of data.
 50    /// </summary>
 51    public long CompressedSize
 52    {
 53      get { return compressedSize; }
 54      set { compressedSize = value; }
 55    }
 56
 57    /// <summary>
 58    /// Get / set the uncompressed size of data
 59    /// </summary>
 60    public long Size
 61    {
 62      get { return size; }
 63      set { size = value; }
 64    }
 65
 66    /// <summary>
 67    /// Get /set the crc value.
 68    /// </summary>
 69    public long Crc
 70    {
 71      get { return crc; }
 72      set { crc = (value & 0xffffffff); }
 73    }
 74
 75    #region Instance Fields
 76    long size;
 77    long compressedSize;
 78    long crc;
 79    #endregion
 80  }
 81
 82  class EntryPatchData
 83  {
 84    public long SizePatchOffset
 85    {
 86      get { return sizePatchOffset_; }
 87      set { sizePatchOffset_ = value; }
 88    }
 89
 90    public long CrcPatchOffset
 91    {
 92      get { return crcPatchOffset_; }
 93      set { crcPatchOffset_ = value; }
 94    }
 95
 96    #region Instance Fields
 97    long sizePatchOffset_;
 98    long crcPatchOffset_;
 99    #endregion
 100  }
 101
 102  /// <summary>
 103  /// This class assists with writing/reading from Zip files.
 104  /// </summary>
 105  internal class ZipHelperStream : Stream
 106  {
 107    #region Constructors
 108    /// <summary>
 109    /// Initialise an instance of this class.
 110    /// </summary>
 111    /// <param name="name">The name of the file to open.</param>
 0112    public ZipHelperStream(string name)
 113    {
 0114      stream_ = new FileStream(name, FileMode.Open, FileAccess.ReadWrite);
 0115      isOwner_ = true;
 0116    }
 117
 118    /// <summary>
 119    /// Initialise a new instance of <see cref="ZipHelperStream"/>.
 120    /// </summary>
 121    /// <param name="stream">The stream to use.</param>
 277122    public ZipHelperStream(Stream stream)
 123    {
 277124      stream_ = stream;
 277125    }
 126    #endregion
 127
 128    /// <summary>
 129    /// Get / set a value indicating wether the the underlying stream is owned or not.
 130    /// </summary>
 131    /// <remarks>If the stream is owned it is closed when this instance is closed.</remarks>
 132    public bool IsStreamOwner
 133    {
 0134      get { return isOwner_; }
 8135      set { isOwner_ = value; }
 136    }
 137
 138    #region Base Stream Methods
 139    public override bool CanRead
 140    {
 0141      get { return stream_.CanRead; }
 142    }
 143
 144    public override bool CanSeek
 145    {
 0146      get { return stream_.CanSeek; }
 147    }
 148
 149#if !NET_1_0 && !NET_1_1 && !NETCF_1_0
 150    public override bool CanTimeout
 151    {
 0152      get { return stream_.CanTimeout; }
 153    }
 154#endif
 155
 156    public override long Length
 157    {
 1158      get { return stream_.Length; }
 159    }
 160
 161    public override long Position
 162    {
 124163      get { return stream_.Position; }
 6164      set { stream_.Position = value;  }
 165    }
 166
 167    public override bool CanWrite
 168    {
 0169      get { return stream_.CanWrite; }
 170    }
 171
 172    public override void Flush()
 173    {
 0174      stream_.Flush();
 0175    }
 176
 177    public override long Seek(long offset, SeekOrigin origin)
 178    {
 131329179      return stream_.Seek(offset, origin);
 180    }
 181
 182    public override void SetLength(long value)
 183    {
 3184      stream_.SetLength(value);
 3185    }
 186
 187    public override int Read(byte[] buffer, int offset, int count)
 188    {
 1189      return stream_.Read(buffer, offset, count);
 190    }
 191
 192    public override void Write(byte[] buffer, int offset, int count)
 193    {
 9194      stream_.Write(buffer, offset, count);
 9195    }
 196
 197    /// <summary>
 198    /// Close the stream.
 199    /// </summary>
 200    /// <remarks>
 201    /// The underlying stream is closed only if <see cref="IsStreamOwner"/> is true.
 202    /// </remarks>
 203    override public void Close()
 204    {
 259205      Stream toClose = stream_;
 259206      stream_ = null;
 259207       if (isOwner_ && (toClose != null))
 208      {
 1209        isOwner_ = false;
 1210        toClose.Close();
 211      }
 259212    }
 213    #endregion
 214
 215    // Write the local file header
 216    // TODO: ZipHelperStream.WriteLocalHeader is not yet used and needs checking for ZipFile and ZipOuptutStream usage
 217    void WriteLocalHeader(ZipEntry entry, EntryPatchData patchData)
 218    {
 0219      CompressionMethod method = entry.CompressionMethod;
 0220      bool headerInfoAvailable = true; // How to get this?
 0221      bool patchEntryHeader = false;
 222
 0223      WriteLEInt(ZipConstants.LocalHeaderSignature);
 224
 0225      WriteLEShort(entry.Version);
 0226      WriteLEShort(entry.Flags);
 0227      WriteLEShort((byte)method);
 0228      WriteLEInt((int)entry.DosTime);
 229
 0230       if (headerInfoAvailable == true) {
 0231        WriteLEInt((int)entry.Crc);
 0232         if ( entry.LocalHeaderRequiresZip64 ) {
 0233          WriteLEInt(-1);
 0234          WriteLEInt(-1);
 0235        }
 236        else {
 0237          WriteLEInt(entry.IsCrypted ? (int)entry.CompressedSize + ZipConstants.CryptoHeaderSize : (int)entry.Compressed
 0238          WriteLEInt((int)entry.Size);
 239        }
 0240      } else {
 0241         if (patchData != null) {
 0242          patchData.CrcPatchOffset = stream_.Position;
 243        }
 0244        WriteLEInt(0);  // Crc
 245
 0246         if ( patchData != null ) {
 0247          patchData.SizePatchOffset = stream_.Position;
 248        }
 249
 250        // For local header both sizes appear in Zip64 Extended Information
 0251         if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) {
 0252          WriteLEInt(-1);
 0253          WriteLEInt(-1);
 0254        }
 255        else {
 0256          WriteLEInt(0);  // Compressed size
 0257          WriteLEInt(0);  // Uncompressed size
 258        }
 259      }
 260
 0261      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 262
 0263       if (name.Length > 0xFFFF) {
 0264        throw new ZipException("Entry name too long.");
 265      }
 266
 0267      var ed = new ZipExtraData(entry.ExtraData);
 268
 0269       if (entry.LocalHeaderRequiresZip64 && (headerInfoAvailable || patchEntryHeader)) {
 0270        ed.StartNewEntry();
 0271         if (headerInfoAvailable) {
 0272          ed.AddLeLong(entry.Size);
 0273          ed.AddLeLong(entry.CompressedSize);
 0274        }
 275        else {
 0276          ed.AddLeLong(-1);
 0277          ed.AddLeLong(-1);
 278        }
 0279        ed.AddNewEntry(1);
 280
 0281         if ( !ed.Find(1) ) {
 0282          throw new ZipException("Internal error cant find extra data");
 283        }
 284
 0285         if ( patchData != null ) {
 0286          patchData.SizePatchOffset = ed.CurrentReadIndex;
 287        }
 0288      }
 289      else {
 0290        ed.Delete(1);
 291      }
 292
 0293      byte[] extra = ed.GetEntryData();
 294
 0295      WriteLEShort(name.Length);
 0296      WriteLEShort(extra.Length);
 297
 0298       if ( name.Length > 0 ) {
 0299        stream_.Write(name, 0, name.Length);
 300      }
 301
 0302       if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) {
 0303        patchData.SizePatchOffset += stream_.Position;
 304      }
 305
 0306       if ( extra.Length > 0 ) {
 0307        stream_.Write(extra, 0, extra.Length);
 308      }
 0309    }
 310
 311    /// <summary>
 312    /// Locates a block with the desired <paramref name="signature"/>.
 313    /// </summary>
 314    /// <param name="signature">The signature to find.</param>
 315    /// <param name="endLocation">Location, marking the end of block.</param>
 316    /// <param name="minimumBlockSize">Minimum size of the block.</param>
 317    /// <param name="maximumVariableData">The maximum variable data.</param>
 318    /// <returns>Eeturns the offset of the first byte after the signature; -1 if not found</returns>
 319    public long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData)
 320    {
 118321      long pos = endLocation - minimumBlockSize;
 118322       if ( pos < 0 ) {
 0323        return -1;
 324      }
 325
 118326      long giveUpMarker = Math.Max(pos - maximumVariableData, 0);
 327
 328      // TODO: This loop could be optimised for speed.
 329      do {
 131330330         if ( pos < giveUpMarker ) {
 1331          return -1;
 332        }
 131329333        Seek(pos--, SeekOrigin.Begin);
 131329334       } while ( ReadLEInt() != signature );
 335
 117336      return Position;
 337    }
 338
 339    /// <summary>
 340    /// Write Zip64 end of central directory records (File header and locator).
 341    /// </summary>
 342    /// <param name="noOfEntries">The number of entries in the central directory.</param>
 343    /// <param name="sizeEntries">The size of entries in the central directory.</param>
 344    /// <param name="centralDirOffset">The offset of the dentral directory.</param>
 345    public void WriteZip64EndOfCentralDirectory(long noOfEntries, long sizeEntries, long centralDirOffset)
 346    {
 1347      long centralSignatureOffset = stream_.Position;
 1348      WriteLEInt(ZipConstants.Zip64CentralFileHeaderSignature);
 1349      WriteLELong(44);    // Size of this record (total size of remaining fields in header or full size - 12)
 1350      WriteLEShort(ZipConstants.VersionMadeBy);   // Version made by
 1351      WriteLEShort(ZipConstants.VersionZip64);   // Version to extract
 1352      WriteLEInt(0);      // Number of this disk
 1353      WriteLEInt(0);      // number of the disk with the start of the central directory
 1354      WriteLELong(noOfEntries);       // No of entries on this disk
 1355      WriteLELong(noOfEntries);       // Total No of entries in central directory
 1356      WriteLELong(sizeEntries);       // Size of the central directory
 1357      WriteLELong(centralDirOffset);  // offset of start of central directory
 358      // zip64 extensible data sector not catered for here (variable size)
 359
 360      // Write the Zip64 end of central directory locator
 1361      WriteLEInt(ZipConstants.Zip64CentralDirLocatorSignature);
 362
 363      // no of the disk with the start of the zip64 end of central directory
 1364      WriteLEInt(0);
 365
 366      // relative offset of the zip64 end of central directory record
 1367      WriteLELong(centralSignatureOffset);
 368
 369      // total number of disks
 1370      WriteLEInt(1);
 1371    }
 372
 373    /// <summary>
 374    /// Write the required records to end the central directory.
 375    /// </summary>
 376    /// <param name="noOfEntries">The number of entries in the directory.</param>
 377    /// <param name="sizeEntries">The size of the entries in the directory.</param>
 378    /// <param name="startOfCentralDirectory">The start of the central directory.</param>
 379    /// <param name="comment">The archive comment.  (This can be null).</param>
 380    public void WriteEndOfCentralDirectory(long noOfEntries, long sizeEntries,
 381      long startOfCentralDirectory, byte[] comment)
 382    {
 383
 136384       if ( (noOfEntries >= 0xffff) ||
 136385        (startOfCentralDirectory >= 0xffffffff) ||
 136386        (sizeEntries >= 0xffffffff) ) {
 1387        WriteZip64EndOfCentralDirectory(noOfEntries, sizeEntries, startOfCentralDirectory);
 388      }
 389
 136390      WriteLEInt(ZipConstants.EndOfCentralDirectorySignature);
 391
 392      // TODO: ZipFile Multi disk handling not done
 135393      WriteLEShort(0);                    // number of this disk
 135394      WriteLEShort(0);                    // no of disk with start of central dir
 395
 396
 397      // Number of entries
 135398       if ( noOfEntries >= 0xffff ) {
 1399        WriteLEUshort(0xffff);  // Zip64 marker
 1400        WriteLEUshort(0xffff);
 1401      }
 402      else {
 134403        WriteLEShort(( short )noOfEntries);          // entries in central dir for this disk
 134404        WriteLEShort(( short )noOfEntries);          // total entries in central directory
 405      }
 406
 407      // Size of the central directory
 135408       if ( sizeEntries >= 0xffffffff ) {
 0409        WriteLEUint(0xffffffff);    // Zip64 marker
 0410      }
 411      else {
 135412        WriteLEInt(( int )sizeEntries);
 413      }
 414
 415
 416      // offset of start of central directory
 135417       if ( startOfCentralDirectory >= 0xffffffff ) {
 0418        WriteLEUint(0xffffffff);    // Zip64 marker
 0419      }
 420      else {
 135421        WriteLEInt(( int )startOfCentralDirectory);
 422      }
 423
 135424       int commentLength = (comment != null) ? comment.Length : 0;
 425
 135426       if ( commentLength > 0xffff ) {
 0427        throw new ZipException(string.Format("Comment length({0}) is too long can only be 64K", commentLength));
 428      }
 429
 135430      WriteLEShort(commentLength);
 431
 135432       if ( commentLength > 0 ) {
 5433        Write(comment, 0, comment.Length);
 434      }
 135435    }
 436
 437    #region LE value reading/writing
 438    /// <summary>
 439    /// Read an unsigned short in little endian byte order.
 440    /// </summary>
 441    /// <returns>Returns the value read.</returns>
 442    /// <exception cref="IOException">
 443    /// An i/o error occurs.
 444    /// </exception>
 445    /// <exception cref="EndOfStreamException">
 446    /// The file ends prematurely
 447    /// </exception>
 448    public int ReadLEShort()
 449    {
 262792450      int byteValue1 = stream_.ReadByte();
 451
 262792452       if (byteValue1 < 0) {
 0453        throw new EndOfStreamException();
 454      }
 455
 262792456      int byteValue2 = stream_.ReadByte();
 262792457       if (byteValue2 < 0) {
 0458        throw new EndOfStreamException();
 459      }
 460
 262792461      return byteValue1 | (byteValue2 << 8);
 462    }
 463
 464    /// <summary>
 465    /// Read an int in little endian byte order.
 466    /// </summary>
 467    /// <returns>Returns the value read.</returns>
 468    /// <exception cref="IOException">
 469    /// An i/o error occurs.
 470    /// </exception>
 471    /// <exception cref="System.IO.EndOfStreamException">
 472    /// The file ends prematurely
 473    /// </exception>
 474    public int ReadLEInt()
 475    {
 131395476      return ReadLEShort() | (ReadLEShort() << 16);
 477    }
 478
 479    /// <summary>
 480    /// Read a long in little endian byte order.
 481    /// </summary>
 482    /// <returns>The value read.</returns>
 483    public long ReadLELong()
 484    {
 9485      return (uint)ReadLEInt() | ((long)ReadLEInt() << 32);
 486    }
 487
 488    /// <summary>
 489    /// Write an unsigned short in little endian byte order.
 490    /// </summary>
 491    /// <param name="value">The value to write.</param>
 492    public void WriteLEShort(int value)
 493    {
 1600494      stream_.WriteByte(( byte )(value & 0xff));
 1599495      stream_.WriteByte(( byte )((value >> 8) & 0xff));
 1599496    }
 497
 498    /// <summary>
 499    /// Write a ushort in little endian byte order.
 500    /// </summary>
 501    /// <param name="value">The value to write.</param>
 502    public void WriteLEUshort(ushort value)
 503    {
 2504      stream_.WriteByte(( byte )(value & 0xff));
 2505      stream_.WriteByte(( byte )(value >> 8));
 2506    }
 507
 508    /// <summary>
 509    /// Write an int in little endian byte order.
 510    /// </summary>
 511    /// <param name="value">The value to write.</param>
 512    public void WriteLEInt(int value)
 513    {
 459514      WriteLEShort(value);
 459515      WriteLEShort(value >> 16);
 458516    }
 517
 518    /// <summary>
 519    /// Write a uint in little endian byte order.
 520    /// </summary>
 521    /// <param name="value">The value to write.</param>
 522    public void WriteLEUint(uint value)
 523    {
 0524      WriteLEUshort(( ushort )(value & 0xffff));
 0525      WriteLEUshort(( ushort )(value >> 16));
 0526    }
 527
 528    /// <summary>
 529    /// Write a long in little endian byte order.
 530    /// </summary>
 531    /// <param name="value">The value to write.</param>
 532    public void WriteLELong(long value)
 533    {
 12534      WriteLEInt(( int )value);
 12535      WriteLEInt(( int )(value >> 32));
 12536    }
 537
 538    /// <summary>
 539    /// Write a ulong in little endian byte order.
 540    /// </summary>
 541    /// <param name="value">The value to write.</param>
 542    public void WriteLEUlong(ulong value)
 543    {
 0544      WriteLEUint(( uint )(value & 0xffffffff));
 0545      WriteLEUint(( uint )(value >> 32));
 0546    }
 547
 548    #endregion
 549
 550    /// <summary>
 551    /// Write a data descriptor.
 552    /// </summary>
 553    /// <param name="entry">The entry to write a descriptor for.</param>
 554    /// <returns>Returns the number of descriptor bytes written.</returns>
 555    public int WriteDataDescriptor(ZipEntry entry)
 556    {
 5557       if (entry == null) {
 0558        throw new ArgumentNullException(nameof(entry));
 559      }
 560
 5561      int result=0;
 562
 563      // Add data descriptor if flagged as required
 5564       if ((entry.Flags & (int)GeneralBitFlags.Descriptor) != 0)
 565      {
 566        // The signature is not PKZIP originally but is now described as optional
 567        // in the PKZIP Appnote documenting trhe format.
 5568        WriteLEInt(ZipConstants.DataDescriptorSignature);
 5569        WriteLEInt(unchecked((int)(entry.Crc)));
 570
 5571        result+=8;
 572
 5573         if (entry.LocalHeaderRequiresZip64)
 574        {
 0575          WriteLELong(entry.CompressedSize);
 0576          WriteLELong(entry.Size);
 0577          result+=16;
 0578        }
 579        else
 580        {
 5581          WriteLEInt((int)entry.CompressedSize);
 5582          WriteLEInt((int)entry.Size);
 5583          result+=8;
 584        }
 585      }
 586
 5587      return result;
 588    }
 589
 590    /// <summary>
 591    /// Read data descriptor at the end of compressed data.
 592    /// </summary>
 593    /// <param name="zip64">if set to <c>true</c> [zip64].</param>
 594    /// <param name="data">The data to fill in.</param>
 595    /// <returns>Returns the number of bytes read in the descriptor.</returns>
 596    public void ReadDataDescriptor(bool zip64, DescriptorData data)
 597    {
 13598      int intValue = ReadLEInt();
 599
 600      // In theory this may not be a descriptor according to PKZIP appnote.
 601      // In practise its always there.
 13602       if (intValue != ZipConstants.DataDescriptorSignature) {
 0603        throw new ZipException("Data descriptor signature not found");
 604      }
 605
 13606      data.Crc = ReadLEInt();
 607
 13608       if (zip64) {
 3609        data.CompressedSize = ReadLELong();
 3610        data.Size = ReadLELong();
 3611      }
 612      else {
 10613        data.CompressedSize = ReadLEInt();
 10614        data.Size = ReadLEInt();
 615      }
 10616    }
 617
 618    #region Instance Fields
 619    bool isOwner_;
 620    Stream stream_;
 621    #endregion
 622  }
 623}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipInputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipInputStream.htm new file mode 100644 index 000000000..8d3b8682c --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipInputStream.htm @@ -0,0 +1,728 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipInputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipInputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipInputStream.cs
Covered lines:165
Uncovered lines:42
Coverable lines:207
Total lines:674
Line coverage:79.7%
Branch coverage:68.6%
+

Metrics

+ + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)100
GetNextEntry()2491.3875.56
ReadDataDescriptor()37560
CompleteCloseEntry(...)690.9181.82
CloseEntry()1047.8342.11
ReadByte()2100100
ReadingNotAvailable(...)100
ReadingNotSupported(...)100
InitialRead(...)118885.71
Read(...)5100100
BodyRead(...)2282.8669.23
Close()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipInputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipInputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  2010-05-25  Z-1663  Fixed exception when testing local header compressed size of -1
 41
 42using System;
 43using System.IO;
 44
 45using ICSharpCode.SharpZipLib.Checksums;
 46using ICSharpCode.SharpZipLib.Zip.Compression;
 47using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 48
 49#if !NETCF_1_0
 50using ICSharpCode.SharpZipLib.Encryption;
 51#endif
 52
 53namespace ICSharpCode.SharpZipLib.Zip
 54{
 55  /// <summary>
 56  /// This is an InflaterInputStream that reads the files baseInputStream an zip archive
 57  /// one after another.  It has a special method to get the zip entry of
 58  /// the next file.  The zip entry contains information about the file name
 59  /// size, compressed size, Crc, etc.
 60  /// It includes support for Stored and Deflated entries.
 61  /// <br/>
 62  /// <br/>Author of the original java version : Jochen Hoenicke
 63  /// </summary>
 64  ///
 65  /// <example> This sample shows how to read a zip file
 66  /// <code lang="C#">
 67  /// using System;
 68  /// using System.Text;
 69  /// using System.IO;
 70  ///
 71  /// using ICSharpCode.SharpZipLib.Zip;
 72  ///
 73  /// class MainClass
 74  /// {
 75  ///   public static void Main(string[] args)
 76  ///   {
 77  ///     using ( ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) {
 78  ///
 79  ///       ZipEntry theEntry;
 80    ///       const int size = 2048;
 81    ///       byte[] data = new byte[2048];
 82    ///
 83    ///       while ((theEntry = s.GetNextEntry()) != null) {
 84  ///                 if ( entry.IsFile ) {
 85  ///             Console.Write("Show contents (y/n) ?");
 86  ///             if (Console.ReadLine() == "y") {
 87  ///               while (true) {
 88  ///                 size = s.Read(data, 0, data.Length);
 89  ///                 if (size > 0) {
 90  ///                   Console.Write(new ASCIIEncoding().GetString(data, 0, size));
 91  ///                 } else {
 92  ///                   break;
 93  ///                 }
 94  ///               }
 95  ///             }
 96    ///         }
 97  ///       }
 98  ///     }
 99  ///   }
 100  /// }
 101  /// </code>
 102  /// </example>
 103  public class ZipInputStream : InflaterInputStream
 104  {
 105    #region Instance Fields
 106
 107    /// <summary>
 108    /// Delegate for reading bytes from a stream.
 109    /// </summary>
 110    delegate int ReadDataHandler(byte[] b, int offset, int length);
 111
 112    /// <summary>
 113    /// The current reader this instance.
 114    /// </summary>
 115    ReadDataHandler internalReader;
 116
 61117    Crc32 crc = new Crc32();
 118    ZipEntry entry;
 119
 120    long size;
 121    int method;
 122    int flags;
 123    string password;
 124    #endregion
 125
 126    #region Constructors
 127    /// <summary>
 128    /// Creates a new Zip input stream, for reading a zip archive.
 129    /// </summary>
 130    /// <param name="baseInputStream">The underlying <see cref="Stream"/> providing data.</param>
 131    public ZipInputStream(Stream baseInputStream)
 61132      : base(baseInputStream, new Inflater(true))
 133    {
 61134      internalReader = new ReadDataHandler(ReadingNotAvailable);
 61135    }
 136
 137        /// <summary>
 138        /// Creates a new Zip input stream, for reading a zip archive.
 139        /// </summary>
 140        /// <param name="baseInputStream">The underlying <see cref="Stream"/> providing data.</param>
 141        /// <param name="bufferSize">Size of the buffer.</param>
 142        public ZipInputStream( Stream baseInputStream, int bufferSize )
 0143            : base(baseInputStream, new Inflater(true), bufferSize)
 144        {
 0145            internalReader = new ReadDataHandler(ReadingNotAvailable);
 0146        }
 147        #endregion
 148
 149    /// <summary>
 150    /// Optional password used for encryption when non-null
 151    /// </summary>
 152    /// <value>A password for all encrypted <see cref="ZipEntry">entries </see> in this <see cref="ZipInputStream"/></va
 153    public string Password
 154    {
 155      get {
 0156        return password;
 157      }
 158      set {
 26159        password = value;
 26160      }
 161    }
 162
 163
 164    /// <summary>
 165    /// Gets a value indicating if there is a current entry and it can be decompressed
 166    /// </summary>
 167    /// <remarks>
 168    /// The entry can only be decompressed if the library supports the zip features required to extract it.
 169    /// See the <see cref="ZipEntry.Version">ZipEntry Version</see> property for more details.
 170    /// </remarks>
 171    public bool CanDecompressEntry {
 172      get {
 74173        return (entry != null) && entry.CanDecompress;
 174      }
 175    }
 176
 177    /// <summary>
 178    /// Advances to the next entry in the archive
 179    /// </summary>
 180    /// <returns>
 181    /// The next <see cref="ZipEntry">entry</see> in the archive or null if there are no more entries.
 182    /// </returns>
 183    /// <remarks>
 184    /// If the previous entry is still open <see cref="CloseEntry">CloseEntry</see> is called.
 185    /// </remarks>
 186    /// <exception cref="InvalidOperationException">
 187    /// Input stream is closed
 188    /// </exception>
 189    /// <exception cref="ZipException">
 190    /// Password is not set, password is invalid, compression method is invalid,
 191    /// version required to extract is not supported
 192    /// </exception>
 193    public ZipEntry GetNextEntry()
 194    {
 91195       if (crc == null) {
 0196        throw new InvalidOperationException("Closed.");
 197      }
 198
 91199       if (entry != null) {
 14200        CloseEntry();
 201      }
 202
 91203      int header = inputBuffer.ReadLeInt();
 204
 91205       if (header == ZipConstants.CentralHeaderSignature ||
 91206        header == ZipConstants.EndOfCentralDirectorySignature ||
 91207        header == ZipConstants.CentralHeaderDigitalSignature ||
 91208        header == ZipConstants.ArchiveExtraDataSignature ||
 91209        header == ZipConstants.Zip64CentralFileHeaderSignature) {
 210        // No more individual entries exist
 6211        Close();
 6212        return null;
 213      }
 214
 215      // -jr- 07-Dec-2003 Ignore spanning temporary signatures if found
 216      // Spanning signature is same as descriptor signature and is untested as yet.
 85217       if ( (header == ZipConstants.SpanningTempSignature) || (header == ZipConstants.SpanningSignature) ) {
 0218        header = inputBuffer.ReadLeInt();
 219      }
 220
 85221       if (header != ZipConstants.LocalHeaderSignature) {
 0222        throw new ZipException("Wrong Local header signature: 0x" + String.Format("{0:X}", header));
 223      }
 224
 85225      var versionRequiredToExtract = (short)inputBuffer.ReadLeShort();
 226
 85227      flags          = inputBuffer.ReadLeShort();
 85228      method         = inputBuffer.ReadLeShort();
 85229      var dostime   = (uint)inputBuffer.ReadLeInt();
 85230      int crc2       = inputBuffer.ReadLeInt();
 85231      csize          = inputBuffer.ReadLeInt();
 85232      size           = inputBuffer.ReadLeInt();
 85233      int nameLen    = inputBuffer.ReadLeShort();
 85234      int extraLen   = inputBuffer.ReadLeShort();
 235
 85236      bool isCrypted = (flags & 1) == 1;
 237
 85238      byte[] buffer = new byte[nameLen];
 85239      inputBuffer.ReadRawBuffer(buffer);
 240
 85241      string name = ZipConstants.ConvertToStringExt(flags, buffer);
 242
 85243      entry = new ZipEntry(name, versionRequiredToExtract);
 85244      entry.Flags = flags;
 245
 85246      entry.CompressionMethod = (CompressionMethod)method;
 247
 85248       if ((flags & 8) == 0) {
 45249        entry.Crc  = crc2 & 0xFFFFFFFFL;
 45250        entry.Size = size & 0xFFFFFFFFL;
 45251        entry.CompressedSize = csize & 0xFFFFFFFFL;
 252
 45253        entry.CryptoCheckValue = (byte)((crc2 >> 24) & 0xff);
 254
 45255      } else {
 256
 257        // This allows for GNU, WinZip and possibly other archives, the PKZIP spec
 258        // says these values are zero under these circumstances.
 40259         if (crc2 != 0) {
 14260          entry.Crc = crc2 & 0xFFFFFFFFL;
 261        }
 262
 40263         if (size != 0) {
 40264          entry.Size = size & 0xFFFFFFFFL;
 265        }
 266
 40267         if (csize != 0) {
 40268          entry.CompressedSize = csize & 0xFFFFFFFFL;
 269        }
 270
 40271        entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff);
 272      }
 273
 85274      entry.DosTime = dostime;
 275
 276      // If local header requires Zip64 is true then the extended header should contain
 277      // both values.
 278
 279      // Handle extra data if present.  This can set/alter some fields of the entry.
 85280       if (extraLen > 0) {
 82281        byte[] extra = new byte[extraLen];
 82282        inputBuffer.ReadRawBuffer(extra);
 82283        entry.ExtraData = extra;
 284      }
 285
 85286      entry.ProcessExtraData(true);
 85287       if ( entry.CompressedSize >= 0 ) {
 60288        csize = entry.CompressedSize;
 289      }
 290
 85291       if ( entry.Size >= 0 ) {
 60292        size = entry.Size;
 293      }
 294
 85295       if (method == (int)CompressionMethod.Stored && (!isCrypted && csize != size || (isCrypted && csize - ZipConstants.
 0296        throw new ZipException("Stored, but compressed != uncompressed");
 297      }
 298
 299      // Determine how to handle reading of data if this is attempted.
 85300       if (entry.IsCompressionMethodSupported()) {
 85301        internalReader = new ReadDataHandler(InitialRead);
 85302      } else {
 0303        internalReader = new ReadDataHandler(ReadingNotSupported);
 304      }
 305
 85306      return entry;
 307    }
 308
 309    /// <summary>
 310    /// Read data descriptor at the end of compressed data.
 311    /// </summary>
 312    void ReadDataDescriptor()
 313    {
 6314       if (inputBuffer.ReadLeInt() != ZipConstants.DataDescriptorSignature) {
 0315        throw new ZipException("Data descriptor signature not found");
 316      }
 317
 6318      entry.Crc = inputBuffer.ReadLeInt() & 0xFFFFFFFFL;
 319
 6320       if ( entry.LocalHeaderRequiresZip64 ) {
 6321        csize = inputBuffer.ReadLeLong();
 6322        size = inputBuffer.ReadLeLong();
 6323      } else {
 0324        csize = inputBuffer.ReadLeInt();
 0325        size = inputBuffer.ReadLeInt();
 326      }
 6327      entry.CompressedSize = csize;
 6328      entry.Size = size;
 6329    }
 330
 331    /// <summary>
 332    /// Complete cleanup as the final part of closing.
 333    /// </summary>
 334    /// <param name="testCrc">True if the crc value should be tested</param>
 335    void CompleteCloseEntry(bool testCrc)
 336    {
 33337      StopDecrypting();
 338
 33339       if ((flags & 8) != 0) {
 6340        ReadDataDescriptor();
 341      }
 342
 33343      size = 0;
 344
 33345       if ( testCrc &&
 33346        ((crc.Value & 0xFFFFFFFFL) != entry.Crc) && (entry.Crc != -1)) {
 0347        throw new ZipException("CRC mismatch");
 348      }
 349
 33350      crc.Reset();
 351
 33352       if (method == (int)CompressionMethod.Deflated) {
 26353        inf.Reset();
 354      }
 33355      entry = null;
 33356    }
 357
 358    /// <summary>
 359    /// Closes the current zip entry and moves to the next one.
 360    /// </summary>
 361    /// <exception cref="InvalidOperationException">
 362    /// The stream is closed
 363    /// </exception>
 364    /// <exception cref="ZipException">
 365    /// The Zip stream ends early
 366    /// </exception>
 367    public void CloseEntry()
 368    {
 14369       if (crc == null) {
 0370        throw new InvalidOperationException("Closed");
 371      }
 372
 14373       if (entry == null) {
 0374        return;
 375      }
 376
 14377       if (method == (int)CompressionMethod.Deflated) {
 9378         if ((flags & 8) != 0) {
 379          // We don't know how much we must skip, read until end.
 0380          byte[] tmp = new byte[4096];
 381
 382          // Read will close this entry
 0383           while (Read(tmp, 0, tmp.Length) > 0) {
 384          }
 0385          return;
 386        }
 387
 9388        csize -= inf.TotalIn;
 9389        inputBuffer.Available += inf.RemainingInput;
 390      }
 391
 14392       if ( (inputBuffer.Available > csize) && (csize >= 0) ) {
 14393        inputBuffer.Available = (int)((long)inputBuffer.Available - csize);
 14394      } else {
 0395        csize -= inputBuffer.Available;
 0396        inputBuffer.Available = 0;
 0397         while (csize != 0) {
 0398          long skipped = Skip(csize);
 399
 0400           if (skipped <= 0) {
 0401            throw new ZipException("Zip archive ends early.");
 402          }
 403
 0404          csize -= skipped;
 405        }
 406      }
 407
 14408      CompleteCloseEntry(false);
 14409    }
 410
 411    /// <summary>
 412    /// Returns 1 if there is an entry available
 413    /// Otherwise returns 0.
 414    /// </summary>
 415    public override int Available {
 416      get {
 0417         return entry != null ? 1 : 0;
 418      }
 419    }
 420
 421    /// <summary>
 422    /// Returns the current size that can be read from the current entry if available
 423    /// </summary>
 424    /// <exception cref="ZipException">Thrown if the entry size is not known.</exception>
 425    /// <exception cref="InvalidOperationException">Thrown if no entry is currently available.</exception>
 426    public override long Length
 427    {
 428      get {
 0429         if ( entry != null ) {
 0430           if ( entry.Size >= 0 ) {
 0431            return entry.Size;
 432          } else {
 0433            throw new ZipException("Length not available for the current entry");
 434          }
 435        }
 436        else {
 0437          throw new InvalidOperationException("No current entry");
 438        }
 439      }
 440
 441    }
 442
 443    /// <summary>
 444    /// Reads a byte from the current zip entry.
 445    /// </summary>
 446    /// <returns>
 447    /// The byte or -1 if end of stream is reached.
 448    /// </returns>
 449    public override int ReadByte()
 450    {
 17451      byte[] b = new byte[1];
 17452       if (Read(b, 0, 1) <= 0) {
 1453        return -1;
 454      }
 16455      return b[0] & 0xff;
 456    }
 457
 458    /// <summary>
 459    /// Handle attempts to read by throwing an <see cref="InvalidOperationException"/>.
 460    /// </summary>
 461    /// <param name="destination">The destination array to store data in.</param>
 462    /// <param name="offset">The offset at which data read should be stored.</param>
 463    /// <param name="count">The maximum number of bytes to read.</param>
 464    /// <returns>Returns the number of bytes actually read.</returns>
 465    int ReadingNotAvailable(byte[] destination, int offset, int count)
 466    {
 0467      throw new InvalidOperationException("Unable to read from this stream");
 468    }
 469
 470    /// <summary>
 471    /// Handle attempts to read from this entry by throwing an exception
 472    /// </summary>
 473    int ReadingNotSupported(byte[] destination, int offset, int count)
 474    {
 0475      throw new ZipException("The compression method for this entry is not supported");
 476    }
 477
 478    /// <summary>
 479    /// Perform the initial read on an entry which may include
 480    /// reading encryption headers and setting up inflation.
 481    /// </summary>
 482    /// <param name="destination">The destination to fill with data read.</param>
 483    /// <param name="offset">The offset to start reading at.</param>
 484    /// <param name="count">The maximum number of bytes to read.</param>
 485    /// <returns>The actual number of bytes read.</returns>
 486    int InitialRead(byte[] destination, int offset, int count)
 487    {
 74488       if ( !CanDecompressEntry ) {
 0489        throw new ZipException("Library cannot extract this entry. Version required is (" + entry.Version + ")");
 490      }
 491
 492      // Handle encryption if required.
 74493       if (entry.IsCrypted) {
 494#if NETCF_1_0
 495        throw new ZipException("Encryption not supported for Compact Framework 1.0");
 496#else
 27497         if (password == null) {
 0498          throw new ZipException("No password set.");
 499        }
 500
 501        // Generate and set crypto transform...
 27502        var managed = new PkzipClassicManaged();
 27503        byte[] key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(password));
 504
 27505        inputBuffer.CryptoTransform = managed.CreateDecryptor(key, null);
 506
 27507        byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize];
 27508        inputBuffer.ReadClearTextBuffer(cryptbuffer, 0, ZipConstants.CryptoHeaderSize);
 509
 27510         if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) {
 2511          throw new ZipException("Invalid password");
 512        }
 513
 25514         if (csize >= ZipConstants.CryptoHeaderSize) {
 14515          csize -= ZipConstants.CryptoHeaderSize;
 14516        }
 11517         else if ( (entry.Flags & (int)GeneralBitFlags.Descriptor) == 0 ) {
 0518          throw new ZipException(string.Format("Entry compressed size {0} too small for encryption", csize));
 519        }
 520#endif
 521      } else {
 522#if !NETCF_1_0
 47523        inputBuffer.CryptoTransform = null;
 524#endif
 525      }
 526
 72527       if ((csize > 0) || ((flags & (int)GeneralBitFlags.Descriptor) != 0)) {
 71528         if ((method == (int)CompressionMethod.Deflated) && (inputBuffer.Available > 0)) {
 68529          inputBuffer.SetInflaterInput(inf);
 530        }
 531
 71532        internalReader = new ReadDataHandler(BodyRead);
 71533        return BodyRead(destination, offset, count);
 534      }
 535      else {
 1536        internalReader = new ReadDataHandler(ReadingNotAvailable);
 1537        return 0;
 538      }
 539    }
 540
 541    /// <summary>
 542    /// Read a block of bytes from the stream.
 543    /// </summary>
 544    /// <param name="buffer">The destination for the bytes.</param>
 545    /// <param name="offset">The index to start storing data.</param>
 546    /// <param name="count">The number of bytes to attempt to read.</param>
 547    /// <returns>Returns the number of bytes read.</returns>
 548    /// <remarks>Zero bytes read means end of stream.</remarks>
 549    public override int Read(byte[] buffer, int offset, int count)
 550    {
 158551       if ( buffer == null ) {
 1552        throw new ArgumentNullException(nameof(buffer));
 553      }
 554
 157555       if ( offset < 0 ) {
 556#if NETCF_1_0
 557        throw new ArgumentOutOfRangeException("offset");
 558#else
 1559        throw new ArgumentOutOfRangeException(nameof(offset), "Cannot be negative");
 560#endif
 561      }
 562
 156563       if ( count < 0 ) {
 564#if NETCF_1_0
 565        throw new ArgumentOutOfRangeException("count");
 566#else
 1567        throw new ArgumentOutOfRangeException(nameof(count), "Cannot be negative");
 568#endif
 569      }
 570
 155571       if ( (buffer.Length - offset) < count ) {
 3572        throw new ArgumentException("Invalid offset/count combination");
 573      }
 574
 152575      return internalReader(buffer, offset, count);
 576    }
 577
 578    /// <summary>
 579    /// Reads a block of bytes from the current zip entry.
 580    /// </summary>
 581    /// <returns>
 582    /// The number of bytes read (this may be less than the length requested, even before the end of stream), or 0 on en
 583    /// </returns>
 584    /// <exception name="IOException">
 585    /// An i/o error occured.
 586    /// </exception>
 587    /// <exception cref="ZipException">
 588    /// The deflated stream is corrupted.
 589    /// </exception>
 590    /// <exception cref="InvalidOperationException">
 591    /// The stream is not open.
 592    /// </exception>
 593    int BodyRead(byte[] buffer, int offset, int count)
 594    {
 149595       if ( crc == null ) {
 0596        throw new InvalidOperationException("Closed");
 597      }
 598
 149599       if ( (entry == null) || (count <= 0) ) {
 46600        return 0;
 601      }
 602
 103603       if ( offset + count > buffer.Length ) {
 0604        throw new ArgumentException("Offset + count exceeds buffer size");
 605      }
 606
 103607      bool finished = false;
 608
 103609       switch (method) {
 610        case (int)CompressionMethod.Deflated:
 100611          count = base.Read(buffer, offset, count);
 100612           if (count <= 0) {
 17613             if (!inf.IsFinished) {
 0614              throw new ZipException("Inflater not finished!");
 615            }
 17616            inputBuffer.Available = inf.RemainingInput;
 617
 618            // A csize of -1 is from an unpatched local header
 17619             if ((flags & 8) == 0 &&
 17620              (inf.TotalIn != csize && csize != 0xFFFFFFFF && csize != -1 || inf.TotalOut != size)) {
 0621              throw new ZipException("Size mismatch: " + csize + ";" + size + " <-> " + inf.TotalIn + ";" + inf.TotalOut
 622            }
 17623            inf.Reset();
 17624            finished = true;
 625          }
 17626          break;
 627
 628        case (int)CompressionMethod.Stored:
 3629           if ( (count > csize) && (csize >= 0) ) {
 0630            count = (int)csize;
 631          }
 632
 3633           if ( count > 0 ) {
 3634            count = inputBuffer.ReadClearTextBuffer(buffer, offset, count);
 3635             if (count > 0) {
 3636              csize -= count;
 3637              size -= count;
 638            }
 639          }
 640
 3641           if (csize == 0) {
 2642            finished = true;
 2643          } else {
 1644             if (count < 0) {
 0645              throw new ZipException("EOF in stored block");
 646            }
 647          }
 648          break;
 649      }
 650
 103651       if (count > 0) {
 86652        crc.Update(buffer, offset, count);
 653      }
 654
 103655       if (finished) {
 19656        CompleteCloseEntry(true);
 657      }
 658
 103659      return count;
 660    }
 661
 662    /// <summary>
 663    /// Closes the zip input stream
 664    /// </summary>
 665    public override void Close()
 666    {
 64667      internalReader = new ReadDataHandler(ReadingNotAvailable);
 64668      crc = null;
 64669      entry = null;
 670
 64671      base.Close();
 64672    }
 673  }
 674}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipNameTransform.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipNameTransform.htm new file mode 100644 index 000000000..e249c817d --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipNameTransform.htm @@ -0,0 +1,318 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipNameTransform - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipNameTransform
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipNameTransform.cs
Covered lines:66
Uncovered lines:11
Coverable lines:77
Total lines:269
Line coverage:85.7%
Branch coverage:67.6%
+

Metrics

+ + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)1100100
.cctor()1100100
TransformDirectory(...)385.7160
TransformFile(...)977.7870.59
MakeValidName(...)584.6288.89
IsValidName(...)485.7160
IsValidName(...)3100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipNameTransform.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipNameTransform.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This program is free software; you can redistribute it and/or
 6// modify it under the terms of the GNU General Public License
 7// as published by the Free Software Foundation; either version 2
 8// of the License, or (at your option) any later version.
 9//
 10// This program is distributed in the hope that it will be useful,
 11// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13// GNU General Public License for more details.
 14//
 15// You should have received a copy of the GNU General Public License
 16// along with this program; if not, write to the Free Software
 17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 18//
 19// Linking this library statically or dynamically with other modules is
 20// making a combined work based on this library.  Thus, the terms and
 21// conditions of the GNU General Public License cover the whole
 22// combination.
 23//
 24// As a special exception, the copyright holders of this library give you
 25// permission to link this library with independent modules to produce an
 26// executable, regardless of the license terms of these independent
 27// modules, and to copy and distribute the resulting executable under
 28// terms of your choice, provided that you also meet, for each linked
 29// independent module, the terms and conditions of the license of that
 30// module.  An independent module is a module which is not derived from
 31// or based on this library.  If you modify this library, you may extend
 32// this exception to your version of the library, but you are not
 33// obligated to do so.  If you do not wish to do so, delete this
 34// exception statement from your version.
 35
 36
 37using System;
 38using System.IO;
 39using System.Text;
 40
 41using ICSharpCode.SharpZipLib.Core;
 42
 43namespace ICSharpCode.SharpZipLib.Zip
 44{
 45  /// <summary>
 46  /// ZipNameTransform transforms names as per the Zip file naming convention.
 47  /// </summary>
 48  /// <remarks>The use of absolute names is supported although its use is not valid
 49  /// according to Zip naming conventions, and should not be used if maximum compatability is desired.</remarks>
 50  public class ZipNameTransform : INameTransform
 51  {
 52    #region Constructors
 53    /// <summary>
 54    /// Initialize a new instance of <see cref="ZipNameTransform"></see>
 55    /// </summary>
 10656    public ZipNameTransform()
 57    {
 10658    }
 59
 60    /// <summary>
 61    /// Initialize a new instance of <see cref="ZipNameTransform"></see>
 62    /// </summary>
 63    /// <param name="trimPrefix">The string to trim from the front of paths if found.</param>
 764    public ZipNameTransform(string trimPrefix)
 65    {
 766      TrimPrefix = trimPrefix;
 767    }
 68    #endregion
 69
 70    /// <summary>
 71    /// Static constructor.
 72    /// </summary>
 73    static ZipNameTransform()
 74    {
 75      char[] invalidPathChars;
 76#if NET_1_0 || NET_1_1 || NETCF_1_0
 77      invalidPathChars = Path.InvalidPathChars;
 78#else
 179      invalidPathChars = Path.GetInvalidPathChars();
 80#endif
 181      int howMany = invalidPathChars.Length + 2;
 82
 183      InvalidEntryCharsRelaxed = new char[howMany];
 184      Array.Copy(invalidPathChars, 0, InvalidEntryCharsRelaxed, 0, invalidPathChars.Length);
 185      InvalidEntryCharsRelaxed[howMany - 1] = '*';
 186      InvalidEntryCharsRelaxed[howMany - 2] = '?';
 87
 188      howMany = invalidPathChars.Length + 4;
 189      InvalidEntryChars = new char[howMany];
 190      Array.Copy(invalidPathChars, 0, InvalidEntryChars, 0, invalidPathChars.Length);
 191      InvalidEntryChars[howMany - 1] = ':';
 192      InvalidEntryChars[howMany - 2] = '\\';
 193      InvalidEntryChars[howMany - 3] = '*';
 194      InvalidEntryChars[howMany - 4] = '?';
 195    }
 96
 97    /// <summary>
 98    /// Transform a windows directory name according to the Zip file naming conventions.
 99    /// </summary>
 100    /// <param name="name">The directory name to transform.</param>
 101    /// <returns>The transformed name.</returns>
 102    public string TransformDirectory(string name)
 103    {
 8104      name = TransformFile(name);
 7105       if (name.Length > 0) {
 7106         if ( !name.EndsWith("/", StringComparison.Ordinal)) {
 7107          name += "/";
 108        }
 7109      }
 110      else {
 0111        throw new ZipException("Cannot have an empty directory name");
 112      }
 7113      return name;
 114    }
 115
 116    /// <summary>
 117    /// Transform a windows file name according to the Zip file naming conventions.
 118    /// </summary>
 119    /// <param name="name">The file name to transform.</param>
 120    /// <returns>The transformed name.</returns>
 121    public string TransformFile(string name)
 122    {
 65936123       if (name != null) {
 65936124        string lowerName = name.ToLower();
 65936125         if ( (trimPrefix_ != null) && (lowerName.IndexOf(trimPrefix_, StringComparison.Ordinal) == 0) ) {
 7126          name = name.Substring(trimPrefix_.Length);
 127        }
 128
 65936129        name = name.Replace(@"\", "/");
 65936130        name = WindowsPathUtils.DropPathRoot(name);
 131
 132        // Drop any leading slashes.
 65941133         while ((name.Length > 0) && (name[0] == '/'))
 134        {
 5135          name = name.Remove(0, 1);
 136        }
 137
 138        // Drop any trailing slashes.
 65936139         while ((name.Length > 0) && (name[name.Length - 1] == '/'))
 140        {
 0141          name = name.Remove(name.Length - 1, 1);
 142        }
 143
 144        // Convert consecutive // characters to /
 65936145        int index = name.IndexOf("//", StringComparison.Ordinal);
 65936146         while (index >= 0)
 147        {
 0148          name = name.Remove(index, 1);
 0149          index = name.IndexOf("//", StringComparison.Ordinal);
 150        }
 151
 65936152        name = MakeValidName(name, '_');
 65935153      }
 154      else {
 0155        name = string.Empty;
 156      }
 65935157      return name;
 158    }
 159
 160    /// <summary>
 161    /// Get/set the path prefix to be trimmed from paths if present.
 162    /// </summary>
 163    /// <remarks>The prefix is trimmed before any conversion from
 164    /// a windows path is done.</remarks>
 165    public string TrimPrefix
 166    {
 0167      get { return trimPrefix_; }
 168      set {
 7169        trimPrefix_ = value;
 7170         if (trimPrefix_ != null) {
 7171          trimPrefix_ = trimPrefix_.ToLower();
 172        }
 7173      }
 174    }
 175
 176    /// <summary>
 177    /// Force a name to be valid by replacing invalid characters with a fixed value
 178    /// </summary>
 179    /// <param name="name">The name to force valid</param>
 180    /// <param name="replacement">The replacement character to use.</param>
 181    /// <returns>Returns a valid name</returns>
 182    static string MakeValidName(string name, char replacement)
 183    {
 65936184      int index = name.IndexOfAny(InvalidEntryChars);
 65936185       if (index >= 0) {
 5186        var builder = new StringBuilder(name);
 187
 11188         while (index >= 0 ) {
 6189          builder[index] = replacement;
 190
 6191           if (index >= name.Length) {
 0192            index = -1;
 0193          }
 194          else {
 6195            index = name.IndexOfAny(InvalidEntryChars, index + 1);
 196          }
 197        }
 5198        name = builder.ToString();
 199      }
 200
 65936201       if (name.Length > 0xffff) {
 1202        throw new PathTooLongException();
 203      }
 204
 65935205      return name;
 206    }
 207
 208    /// <summary>
 209    /// Test a name to see if it is a valid name for a zip entry.
 210    /// </summary>
 211    /// <param name="name">The name to test.</param>
 212    /// <param name="relaxed">If true checking is relaxed about windows file names and absolute paths.</param>
 213    /// <returns>Returns true if the name is a valid zip name; false otherwise.</returns>
 214    /// <remarks>Zip path names are actually in Unix format, and should only contain relative paths.
 215    /// This means that any path stored should not contain a drive or
 216    /// device letter, or a leading slash.  All slashes should forward slashes '/'.
 217    /// An empty name is valid for a file where the input comes from standard input.
 218    /// A null name is not considered valid.
 219    /// </remarks>
 220    public static bool IsValidName(string name, bool relaxed)
 221    {
 65916222      bool result = (name != null);
 223
 65916224       if ( result ) {
 65916225         if ( relaxed ) {
 65916226          result = name.IndexOfAny(InvalidEntryCharsRelaxed) < 0;
 65916227        }
 228        else {
 0229          result =
 0230            (name.IndexOfAny(InvalidEntryChars) < 0) &&
 0231            (name.IndexOf('/') != 0);
 232        }
 233      }
 234
 65916235      return result;
 236    }
 237
 238    /// <summary>
 239    /// Test a name to see if it is a valid name for a zip entry.
 240    /// </summary>
 241    /// <param name="name">The name to test.</param>
 242    /// <returns>Returns true if the name is a valid zip name; false otherwise.</returns>
 243    /// <remarks>Zip path names are actually in unix format,
 244    /// and should only contain relative paths if a path is present.
 245    /// This means that the path stored should not contain a drive or
 246    /// device letter, or a leading slash.  All slashes should forward slashes '/'.
 247    /// An empty name is valid where the input comes from standard input.
 248    /// A null name is not considered valid.
 249    /// </remarks>
 250    public static bool IsValidName(string name)
 251    {
 2252      bool result =
 2253        (name != null) &&
 2254        (name.IndexOfAny(InvalidEntryChars) < 0) &&
 2255        (name.IndexOf('/') != 0)
 2256        ;
 1257      return result;
 258    }
 259
 260    #region Instance Fields
 261    string trimPrefix_;
 262    #endregion
 263
 264    #region Class Fields
 265    static readonly char[] InvalidEntryChars;
 266    static readonly char[] InvalidEntryCharsRelaxed;
 267    #endregion
 268  }
 269}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipOutputStream.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipOutputStream.htm new file mode 100644 index 000000000..bb8806386 --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipOutputStream.htm @@ -0,0 +1,957 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipOutputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipOutputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipOutputStream.cs
Covered lines:285
Uncovered lines:48
Coverable lines:333
Total lines:900
Line coverage:85.5%
Branch coverage:78.4%
+

Metrics

+ + + + + + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)100
SetComment(...)2100100
SetLevel(...)1100100
GetLevel()1100100
WriteLeShort(...)1100100
WriteLeInt(...)1100100
WriteLeLong(...)1100100
PutNextEntry(...)4088.7086.30
CloseEntry()1885.2577.14
WriteEncryptionHeader(...)1100100
AddExtraDataAES(...)100
WriteAESHeader(...)100
Write(...)97564.71
CopyAndEncrypt(...)410080
Finish()2690.4173.33
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipOutputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// ZipOutputStream.cs
 2//
 3// Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team
 4//
 5// This file was translated from java, it was part of the GNU Classpath
 6// Copyright (C) 2001 Free Software Foundation, Inc.
 7//
 8// This program is free software; you can redistribute it and/or
 9// modify it under the terms of the GNU General Public License
 10// as published by the Free Software Foundation; either version 2
 11// of the License, or (at your option) any later version.
 12//
 13// This program is distributed in the hope that it will be useful,
 14// but WITHOUT ANY WARRANTY; without even the implied warranty of
 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16// GNU General Public License for more details.
 17//
 18// You should have received a copy of the GNU General Public License
 19// along with this program; if not, write to the Free Software
 20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 21//
 22// Linking this library statically or dynamically with other modules is
 23// making a combined work based on this library.  Thus, the terms and
 24// conditions of the GNU General Public License cover the whole
 25// combination.
 26//
 27// As a special exception, the copyright holders of this library give you
 28// permission to link this library with independent modules to produce an
 29// executable, regardless of the license terms of these independent
 30// modules, and to copy and distribute the resulting executable under
 31// terms of your choice, provided that you also meet, for each linked
 32// independent module, the terms and conditions of the license of that
 33// module.  An independent module is a module which is not derived from
 34// or based on this library.  If you modify this library, you may extend
 35// this exception to your version of the library, but you are not
 36// obligated to do so.  If you do not wish to do so, delete this
 37// exception statement from your version.
 38
 39// HISTORY
 40//  22-12-2009  Z-1649  Added AES support
 41//  22-02-2010  Z-1648  Zero byte entries would create invalid zip files
 42//  27-07-2012  Z-1724  Compressed size was incorrect in local header when CRC and Size are known
 43
 44using System;
 45using System.IO;
 46using System.Collections;
 47
 48using ICSharpCode.SharpZipLib.Checksums;
 49using ICSharpCode.SharpZipLib.Zip.Compression;
 50using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 51
 52namespace ICSharpCode.SharpZipLib.Zip
 53{
 54  /// <summary>
 55  /// This is a DeflaterOutputStream that writes the files into a zip
 56  /// archive one after another.  It has a special method to start a new
 57  /// zip entry.  The zip entries contains information about the file name
 58  /// size, compressed size, CRC, etc.
 59  ///
 60  /// It includes support for Stored and Deflated entries.
 61  /// This class is not thread safe.
 62  /// <br/>
 63  /// <br/>Author of the original java version : Jochen Hoenicke
 64  /// </summary>
 65  /// <example> This sample shows how to create a zip file
 66  /// <code>
 67  /// using System;
 68  /// using System.IO;
 69  ///
 70  /// using ICSharpCode.SharpZipLib.Core;
 71  /// using ICSharpCode.SharpZipLib.Zip;
 72  ///
 73  /// class MainClass
 74  /// {
 75  ///   public static void Main(string[] args)
 76  ///   {
 77  ///     string[] filenames = Directory.GetFiles(args[0]);
 78  ///     byte[] buffer = new byte[4096];
 79  ///
 80  ///     using ( ZipOutputStream s = new ZipOutputStream(File.Create(args[1])) ) {
 81  ///
 82  ///       s.SetLevel(9); // 0 - store only to 9 - means best compression
 83  ///
 84  ///       foreach (string file in filenames) {
 85  ///         ZipEntry entry = new ZipEntry(file);
 86  ///         s.PutNextEntry(entry);
 87  ///
 88  ///         using (FileStream fs = File.OpenRead(file)) {
 89  ///            StreamUtils.Copy(fs, s, buffer);
 90  ///         }
 91  ///       }
 92  ///     }
 93  ///   }
 94  /// }
 95  /// </code>
 96  /// </example>
 97  public class ZipOutputStream : DeflaterOutputStream
 98  {
 99    #region Constructors
 100    /// <summary>
 101    /// Creates a new Zip output stream, writing a zip archive.
 102    /// </summary>
 103    /// <param name="baseOutputStream">
 104    /// The output stream to which the archive contents are written.
 105    /// </param>
 106    public ZipOutputStream(Stream baseOutputStream)
 92107      : base(baseOutputStream, new Deflater(Deflater.DEFAULT_COMPRESSION, true))
 108    {
 92109    }
 110
 111        /// <summary>
 112        /// Creates a new Zip output stream, writing a zip archive.
 113        /// </summary>
 114        /// <param name="baseOutputStream">The output stream to which the archive contents are written.</param>
 115        /// <param name="bufferSize">Size of the buffer to use.</param>
 116        public ZipOutputStream( Stream baseOutputStream, int bufferSize )
 0117            : base(baseOutputStream, new Deflater(Deflater.DEFAULT_COMPRESSION, true), bufferSize)
 118        {
 0119        }
 120        #endregion
 121
 122    /// <summary>
 123    /// Gets a flag value of true if the central header has been added for this archive; false if it has not been added.
 124    /// </summary>
 125    /// <remarks>No further entries can be added once this has been done.</remarks>
 126    public bool IsFinished
 127    {
 128      get {
 1129        return entries == null;
 130      }
 131    }
 132
 133    /// <summary>
 134    /// Set the zip file comment.
 135    /// </summary>
 136    /// <param name="comment">
 137    /// The comment text for the entire archive.
 138    /// </param>
 139    /// <exception name ="ArgumentOutOfRangeException">
 140    /// The converted comment is longer than 0xffff bytes.
 141    /// </exception>
 142    public void SetComment(string comment)
 143    {
 144      // TODO: Its not yet clear how to handle unicode comments here.
 8145      byte[] commentBytes = ZipConstants.ConvertToArray(comment);
 8146       if (commentBytes.Length > 0xffff) {
 1147        throw new ArgumentOutOfRangeException(nameof(comment));
 148      }
 7149      zipComment = commentBytes;
 7150    }
 151
 152    /// <summary>
 153    /// Sets the compression level.  The new level will be activated
 154    /// immediately.
 155    /// </summary>
 156    /// <param name="level">The new compression level (1 to 9).</param>
 157    /// <exception cref="ArgumentOutOfRangeException">
 158    /// Level specified is not supported.
 159    /// </exception>
 160    /// <see cref="ICSharpCode.SharpZipLib.Zip.Compression.Deflater"/>
 161    public void SetLevel(int level)
 162    {
 57163      deflater_.SetLevel(level);
 57164      defaultCompressionLevel = level;
 57165    }
 166
 167    /// <summary>
 168    /// Get the current deflater compression level
 169    /// </summary>
 170    /// <returns>The current compression level</returns>
 171    public int GetLevel()
 172    {
 3173      return deflater_.GetLevel();
 174    }
 175
 176    /// <summary>
 177    /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries.
 178    /// </summary>
 179    /// <remarks>Older archivers may not understand Zip64 extensions.
 180    /// If backwards compatability is an issue be careful when adding <see cref="ZipEntry.Size">entries</see> to an arch
 181    /// Setting this property to off is workable but less desirable as in those circumstances adding a file
 182    /// larger then 4GB will fail.</remarks>
 183    public UseZip64 UseZip64
 184    {
 0185      get { return useZip64_; }
 18186      set { useZip64_ = value; }
 187    }
 188
 189    /// <summary>
 190    /// Write an unsigned short in little endian byte order.
 191    /// </summary>
 192    private void WriteLeShort(int value)
 193    {
 194      unchecked {
 6539195        baseOutputStream_.WriteByte((byte)(value & 0xff));
 6539196        baseOutputStream_.WriteByte((byte)((value >> 8) & 0xff));
 197      }
 6539198    }
 199
 200    /// <summary>
 201    /// Write an int in little endian byte order.
 202    /// </summary>
 203    private void WriteLeInt(int value)
 204    {
 205      unchecked {
 2350206        WriteLeShort(value);
 2350207        WriteLeShort(value >> 16);
 208      }
 2350209    }
 210
 211    /// <summary>
 212    /// Write an int in little endian byte order.
 213    /// </summary>
 214    private void WriteLeLong(long value)
 215    {
 216      unchecked {
 278217        WriteLeInt((int)value);
 278218        WriteLeInt((int)(value >> 32));
 219      }
 278220    }
 221
 222    /// <summary>
 223    /// Starts a new Zip entry. It automatically closes the previous
 224    /// entry if present.
 225    /// All entry elements bar name are optional, but must be correct if present.
 226    /// If the compression method is stored and the output is not patchable
 227    /// the compression for that entry is automatically changed to deflate level 0
 228    /// </summary>
 229    /// <param name="entry">
 230    /// the entry.
 231    /// </param>
 232    /// <exception cref="System.ArgumentNullException">
 233    /// if entry passed is null.
 234    /// </exception>
 235    /// <exception cref="System.IO.IOException">
 236    /// if an I/O error occured.
 237    /// </exception>
 238    /// <exception cref="System.InvalidOperationException">
 239    /// if stream was finished
 240    /// </exception>
 241    /// <exception cref="ZipException">
 242    /// Too many entries in the Zip file<br/>
 243    /// Entry name is too long<br/>
 244    /// Finish has already been called<br/>
 245    /// </exception>
 246    public void PutNextEntry(ZipEntry entry)
 247    {
 133248       if ( entry == null ) {
 0249        throw new ArgumentNullException(nameof(entry));
 250      }
 251
 133252       if (entries == null) {
 1253        throw new InvalidOperationException("ZipOutputStream was finished");
 254      }
 255
 132256       if (curEntry != null) {
 48257        CloseEntry();
 258      }
 259
 132260       if (entries.Count == int.MaxValue) {
 0261        throw new ZipException("Too many entries for Zip file");
 262      }
 263
 132264      CompressionMethod method = entry.CompressionMethod;
 132265      int compressionLevel = defaultCompressionLevel;
 266
 267      // Clear flags that the library manages internally
 132268      entry.Flags &= (int)GeneralBitFlags.UnicodeText;
 132269      patchEntryHeader = false;
 270
 271      bool headerInfoAvailable;
 272
 273      // No need to compress - definitely no data.
 132274       if (entry.Size == 0)
 275      {
 1276        entry.CompressedSize = entry.Size;
 1277        entry.Crc = 0;
 1278        method = CompressionMethod.Stored;
 1279        headerInfoAvailable = true;
 1280      }
 281      else
 282      {
 131283        headerInfoAvailable = (entry.Size >= 0) && entry.HasCrc && entry.CompressedSize >= 0;
 284
 285        // Switch to deflation if storing isnt possible.
 131286         if (method == CompressionMethod.Stored)
 287        {
 13288           if (!headerInfoAvailable)
 289          {
 13290             if (!CanPatchEntries)
 291            {
 292              // Can't patch entries so storing is not possible.
 5293              method = CompressionMethod.Deflated;
 5294              compressionLevel = 0;
 295            }
 5296          }
 297          else // entry.size must be > 0
 298          {
 0299            entry.CompressedSize = entry.Size;
 0300            headerInfoAvailable = entry.HasCrc;
 301          }
 302        }
 303      }
 304
 132305       if (headerInfoAvailable == false) {
 131306         if (CanPatchEntries == false) {
 307          // Only way to record size and compressed size is to append a data descriptor
 308          // after compressed data.
 309
 310          // Stored entries of this form have already been converted to deflating.
 33311          entry.Flags |= 8;
 33312        } else {
 98313          patchEntryHeader = true;
 314        }
 315      }
 316
 132317       if (Password != null) {
 36318        entry.IsCrypted = true;
 36319         if (entry.Crc < 0) {
 320          // Need to append a data descriptor as the crc isnt available for use
 321          // with encryption, the date is used instead.  Setting the flag
 322          // indicates this to the decompressor.
 32323          entry.Flags |= 8;
 324        }
 325      }
 326
 132327      entry.Offset = offset;
 132328      entry.CompressionMethod = (CompressionMethod)method;
 329
 132330      curMethod = method;
 132331      sizePatchPos = -1;
 332
 132333       if ( (useZip64_ == UseZip64.On) || ((entry.Size < 0) && (useZip64_ == UseZip64.Dynamic)) ) {
 124334        entry.ForceZip64();
 335      }
 336
 337      // Write the local file header
 132338      WriteLeInt(ZipConstants.LocalHeaderSignature);
 339
 132340      WriteLeShort(entry.Version);
 132341      WriteLeShort(entry.Flags);
 132342      WriteLeShort((byte)entry.CompressionMethodForHeader);
 132343      WriteLeInt((int)entry.DosTime);
 344
 345      // TODO: Refactor header writing.  Its done in several places.
 132346       if (headerInfoAvailable) {
 1347        WriteLeInt((int)entry.Crc);
 1348         if ( entry.LocalHeaderRequiresZip64 ) {
 1349          WriteLeInt(-1);
 1350          WriteLeInt(-1);
 1351        }
 352        else {
 0353          WriteLeInt(entry.IsCrypted ? (int)entry.CompressedSize + ZipConstants.CryptoHeaderSize : (int)entry.Compressed
 0354          WriteLeInt((int)entry.Size);
 355        }
 0356      } else {
 131357         if (patchEntryHeader) {
 98358          crcPatchPos = baseOutputStream_.Position;
 359        }
 131360        WriteLeInt(0);  // Crc
 361
 131362         if ( patchEntryHeader ) {
 98363          sizePatchPos = baseOutputStream_.Position;
 364        }
 365
 366        // For local header both sizes appear in Zip64 Extended Information
 131367         if ( entry.LocalHeaderRequiresZip64 || patchEntryHeader ) {
 128368          WriteLeInt(-1);
 128369          WriteLeInt(-1);
 128370        }
 371        else {
 3372          WriteLeInt(0);  // Compressed size
 3373          WriteLeInt(0);  // Uncompressed size
 374        }
 375      }
 376
 132377      byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 378
 132379       if (name.Length > 0xFFFF) {
 0380        throw new ZipException("Entry name too long.");
 381      }
 382
 132383      var ed = new ZipExtraData(entry.ExtraData);
 384
 132385       if (entry.LocalHeaderRequiresZip64) {
 125386        ed.StartNewEntry();
 125387         if (headerInfoAvailable) {
 1388          ed.AddLeLong(entry.Size);
 1389          ed.AddLeLong(entry.CompressedSize);
 1390        }
 391        else {
 124392          ed.AddLeLong(-1);
 124393          ed.AddLeLong(-1);
 394        }
 125395        ed.AddNewEntry(1);
 396
 125397         if ( !ed.Find(1) ) {
 0398          throw new ZipException("Internal error cant find extra data");
 399        }
 400
 125401         if ( patchEntryHeader ) {
 94402          sizePatchPos = ed.CurrentReadIndex;
 403        }
 94404      }
 405      else {
 7406        ed.Delete(1);
 407      }
 408
 409#if !NET_1_1 && !NETCF_2_0
 132410       if (entry.AESKeySize > 0) {
 0411        AddExtraDataAES(entry, ed);
 412      }
 413#endif
 132414      byte[] extra = ed.GetEntryData();
 415
 132416      WriteLeShort(name.Length);
 132417      WriteLeShort(extra.Length);
 418
 132419       if ( name.Length > 0 ) {
 132420        baseOutputStream_.Write(name, 0, name.Length);
 421      }
 422
 131423       if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) {
 93424        sizePatchPos += baseOutputStream_.Position;
 425      }
 426
 131427       if ( extra.Length > 0 ) {
 124428        baseOutputStream_.Write(extra, 0, extra.Length);
 429      }
 430
 131431      offset += ZipConstants.LocalHeaderBaseSize + name.Length + extra.Length;
 432      // Fix offsetOfCentraldir for AES
 131433       if (entry.AESKeySize > 0)
 0434        offset += entry.AESOverheadSize;
 435
 436      // Activate the entry.
 131437      curEntry = entry;
 131438      crc.Reset();
 131439       if (method == CompressionMethod.Deflated) {
 122440        deflater_.Reset();
 122441        deflater_.SetLevel(compressionLevel);
 442      }
 131443      size = 0;
 444
 131445       if (entry.IsCrypted) {
 446#if !NET_1_1 && !NETCF_2_0
 36447         if (entry.AESKeySize > 0) {
 0448          WriteAESHeader(entry);
 0449        } else
 450#endif
 451        {
 36452           if (entry.Crc < 0) {      // so testing Zip will says its ok
 32453            WriteEncryptionHeader(entry.DosTime << 16);
 32454          } else {
 4455            WriteEncryptionHeader(entry.Crc);
 456          }
 457        }
 458      }
 99459    }
 460
 461    /// <summary>
 462    /// Closes the current entry, updating header and footer information as required
 463    /// </summary>
 464    /// <exception cref="System.IO.IOException">
 465    /// An I/O error occurs.
 466    /// </exception>
 467    /// <exception cref="System.InvalidOperationException">
 468    /// No entry is active.
 469    /// </exception>
 470    public void CloseEntry()
 471    {
 131472       if (curEntry == null) {
 0473        throw new InvalidOperationException("No open entry");
 474      }
 475
 131476      long csize = size;
 477
 478      // First finish the deflater, if appropriate
 131479       if (curMethod == CompressionMethod.Deflated) {
 122480         if (size >= 0) {
 122481          base.Finish();
 122482          csize = deflater_.TotalOut;
 122483        }
 484        else {
 0485          deflater_.Reset();
 486        }
 487      }
 488
 489      // Write the AES Authentication Code (a hash of the compressed and encrypted data)
 131490       if (curEntry.AESKeySize > 0) {
 0491        baseOutputStream_.Write(AESAuthCode, 0, 10);
 492      }
 493
 131494       if (curEntry.Size < 0) {
 124495        curEntry.Size = size;
 131496       } else if (curEntry.Size != size) {
 0497        throw new ZipException("size was " + size + ", but I expected " + curEntry.Size);
 498      }
 499
 131500       if (curEntry.CompressedSize < 0) {
 130501        curEntry.CompressedSize = csize;
 131502       } else if (curEntry.CompressedSize != csize) {
 0503        throw new ZipException("compressed size was " + csize + ", but I expected " + curEntry.CompressedSize);
 504      }
 505
 131506       if (curEntry.Crc < 0) {
 117507        curEntry.Crc = crc.Value;
 131508       } else if (curEntry.Crc != crc.Value) {
 0509        throw new ZipException("crc was " + crc.Value +  ", but I expected " + curEntry.Crc);
 510      }
 511
 131512      offset += csize;
 513
 131514       if (curEntry.IsCrypted) {
 36515         if (curEntry.AESKeySize > 0) {
 0516          curEntry.CompressedSize += curEntry.AESOverheadSize;
 517
 0518        } else {
 36519          curEntry.CompressedSize += ZipConstants.CryptoHeaderSize;
 520        }
 521      }
 522
 523      // Patch the header if possible
 131524       if (patchEntryHeader) {
 97525        patchEntryHeader = false;
 526
 97527        long curPos = baseOutputStream_.Position;
 97528        baseOutputStream_.Seek(crcPatchPos, SeekOrigin.Begin);
 97529        WriteLeInt((int)curEntry.Crc);
 530
 97531         if ( curEntry.LocalHeaderRequiresZip64 ) {
 532
 93533           if ( sizePatchPos == -1 ) {
 0534            throw new ZipException("Entry requires zip64 but this has been turned off");
 535          }
 536
 93537          baseOutputStream_.Seek(sizePatchPos, SeekOrigin.Begin);
 93538          WriteLeLong(curEntry.Size);
 93539          WriteLeLong(curEntry.CompressedSize);
 93540        }
 541        else {
 4542          WriteLeInt((int)curEntry.CompressedSize);
 4543          WriteLeInt((int)curEntry.Size);
 544        }
 97545        baseOutputStream_.Seek(curPos, SeekOrigin.Begin);
 546      }
 547
 548      // Add data descriptor if flagged as required
 131549       if ((curEntry.Flags & 8) != 0) {
 51550        WriteLeInt(ZipConstants.DataDescriptorSignature);
 51551        WriteLeInt(unchecked((int)curEntry.Crc));
 552
 51553         if ( curEntry.LocalHeaderRequiresZip64 ) {
 46554          WriteLeLong(curEntry.CompressedSize);
 46555          WriteLeLong(curEntry.Size);
 46556          offset += ZipConstants.Zip64DataDescriptorSize;
 46557        }
 558        else {
 5559          WriteLeInt((int)curEntry.CompressedSize);
 5560          WriteLeInt((int)curEntry.Size);
 5561          offset += ZipConstants.DataDescriptorSize;
 562        }
 563      }
 564
 131565      entries.Add(curEntry);
 131566      curEntry = null;
 131567    }
 568
 569    void WriteEncryptionHeader(long crcValue)
 570    {
 36571      offset += ZipConstants.CryptoHeaderSize;
 572
 36573      InitializePassword(Password);
 574
 36575      byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize];
 36576      var rnd = new Random();
 36577      rnd.NextBytes(cryptBuffer);
 36578      cryptBuffer[11] = (byte)(crcValue >> 24);
 579
 36580      EncryptBlock(cryptBuffer, 0, cryptBuffer.Length);
 36581      baseOutputStream_.Write(cryptBuffer, 0, cryptBuffer.Length);
 36582    }
 583
 584#if !NET_1_1 && !NETCF_2_0
 585    private static void AddExtraDataAES(ZipEntry entry, ZipExtraData extraData) {
 586
 587      // Vendor Version: AE-1 IS 1. AE-2 is 2. With AE-2 no CRC is required and 0 is stored.
 588      const int VENDOR_VERSION = 2;
 589      // Vendor ID is the two ASCII characters "AE".
 590      const int VENDOR_ID = 0x4541; //not 6965;
 0591      extraData.StartNewEntry();
 592      // Pack AES extra data field see http://www.winzip.com/aes_info.htm
 593      //extraData.AddLeShort(7);              // Data size (currently 7)
 0594      extraData.AddLeShort(VENDOR_VERSION);        // 2 = AE-2
 0595      extraData.AddLeShort(VENDOR_ID);          // "AE"
 0596      extraData.AddData(entry.AESEncryptionStrength);    //  1 = 128, 2 = 192, 3 = 256
 0597      extraData.AddLeShort((int)entry.CompressionMethod); // The actual compression method used to compress the file
 0598      extraData.AddNewEntry(0x9901);
 0599    }
 600
 601    // Replaces WriteEncryptionHeader for AES
 602    //
 603    private void WriteAESHeader(ZipEntry entry) {
 604      byte[] salt;
 605      byte[] pwdVerifier;
 0606      InitializeAESPassword(entry, Password, out salt, out pwdVerifier);
 607      // File format for AES:
 608      // Size (bytes)   Content
 609      // ------------   -------
 610      // Variable       Salt value
 611      // 2              Password verification value
 612      // Variable       Encrypted file data
 613      // 10             Authentication code
 614      //
 615      // Value in the "compressed size" fields of the local file header and the central directory entry
 616      // is the total size of all the items listed above. In other words, it is the total size of the
 617      // salt value, password verification value, encrypted data, and authentication code.
 0618      baseOutputStream_.Write(salt, 0, salt.Length);
 0619      baseOutputStream_.Write(pwdVerifier, 0, pwdVerifier.Length);
 0620    }
 621#endif
 622
 623    /// <summary>
 624    /// Writes the given buffer to the current entry.
 625    /// </summary>
 626    /// <param name="buffer">The buffer containing data to write.</param>
 627    /// <param name="offset">The offset of the first byte to write.</param>
 628    /// <param name="count">The number of bytes to write.</param>
 629    /// <exception cref="ZipException">Archive size is invalid</exception>
 630    /// <exception cref="System.InvalidOperationException">No entry is active.</exception>
 631    public override void Write(byte[] buffer, int offset, int count)
 632    {
 4507633       if (curEntry == null) {
 0634        throw new InvalidOperationException("No open entry.");
 635      }
 636
 4507637       if ( buffer == null ) {
 0638        throw new ArgumentNullException(nameof(buffer));
 639      }
 640
 4507641       if ( offset < 0 ) {
 642#if NETCF_1_0
 643        throw new ArgumentOutOfRangeException("offset");
 644#else
 0645        throw new ArgumentOutOfRangeException(nameof(offset), "Cannot be negative");
 646#endif
 647      }
 648
 4507649       if ( count < 0 ) {
 650#if NETCF_1_0
 651        throw new ArgumentOutOfRangeException("count");
 652#else
 0653        throw new ArgumentOutOfRangeException(nameof(count), "Cannot be negative");
 654#endif
 655      }
 656
 4507657       if ( (buffer.Length - offset) < count ) {
 0658        throw new ArgumentException("Invalid offset/count combination");
 659      }
 660
 4507661      crc.Update(buffer, offset, count);
 4507662      size += count;
 663
 4507664       switch (curMethod) {
 665        case CompressionMethod.Deflated:
 4308666          base.Write(buffer, offset, count);
 4308667          break;
 668
 669        case CompressionMethod.Stored:
 199670           if (Password != null) {
 99671            CopyAndEncrypt(buffer, offset, count);
 99672          } else {
 100673            baseOutputStream_.Write(buffer, offset, count);
 674          }
 675          break;
 676      }
 100677    }
 678
 679    void CopyAndEncrypt(byte[] buffer, int offset, int count)
 680    {
 681      const int CopyBufferSize = 4096;
 99682      byte[] localBuffer = new byte[CopyBufferSize];
 198683       while ( count > 0 ) {
 99684         int bufferCount = (count < CopyBufferSize) ? count : CopyBufferSize;
 685
 99686        Array.Copy(buffer, offset, localBuffer, 0, bufferCount);
 99687        EncryptBlock(localBuffer, 0, bufferCount);
 99688        baseOutputStream_.Write(localBuffer, 0, bufferCount);
 99689        count -= bufferCount;
 99690        offset += bufferCount;
 691      }
 99692    }
 693
 694    /// <summary>
 695    /// Finishes the stream.  This will write the central directory at the
 696    /// end of the zip file and flush the stream.
 697    /// </summary>
 698    /// <remarks>
 699    /// This is automatically called when the stream is closed.
 700    /// </remarks>
 701    /// <exception cref="System.IO.IOException">
 702    /// An I/O error occurs.
 703    /// </exception>
 704    /// <exception cref="ZipException">
 705    /// Comment exceeds the maximum length<br/>
 706    /// Entry name exceeds the maximum length
 707    /// </exception>
 708    public override void Finish()
 709    {
 93710       if (entries == null)  {
 2711        return;
 712      }
 713
 91714       if (curEntry != null) {
 79715        CloseEntry();
 716      }
 717
 91718      long numEntries = entries.Count;
 91719      long sizeEntries = 0;
 720
 444721      foreach (ZipEntry entry in entries) {
 131722        WriteLeInt(ZipConstants.CentralHeaderSignature);
 131723        WriteLeShort(ZipConstants.VersionMadeBy);
 131724        WriteLeShort(entry.Version);
 131725        WriteLeShort(entry.Flags);
 131726        WriteLeShort((short)entry.CompressionMethodForHeader);
 131727        WriteLeInt((int)entry.DosTime);
 131728        WriteLeInt((int)entry.Crc);
 729
 131730         if ( entry.IsZip64Forced() ||
 131731          (entry.CompressedSize >= uint.MaxValue) )
 732        {
 124733          WriteLeInt(-1);
 124734        }
 735        else {
 7736          WriteLeInt((int)entry.CompressedSize);
 737        }
 738
 131739         if ( entry.IsZip64Forced() ||
 131740          (entry.Size >= uint.MaxValue) )
 741        {
 124742          WriteLeInt(-1);
 124743        }
 744        else {
 7745          WriteLeInt((int)entry.Size);
 746        }
 747
 131748        byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name);
 749
 131750         if (name.Length > 0xffff) {
 0751          throw new ZipException("Name too long.");
 752        }
 753
 131754        var ed = new ZipExtraData(entry.ExtraData);
 755
 131756         if ( entry.CentralHeaderRequiresZip64 ) {
 124757          ed.StartNewEntry();
 124758           if ( entry.IsZip64Forced() ||
 124759            (entry.Size >= 0xffffffff) )
 760          {
 124761            ed.AddLeLong(entry.Size);
 762          }
 763
 124764           if ( entry.IsZip64Forced() ||
 124765            (entry.CompressedSize >= 0xffffffff) )
 766          {
 124767            ed.AddLeLong(entry.CompressedSize);
 768          }
 769
 124770           if ( entry.Offset >= 0xffffffff )
 771          {
 0772            ed.AddLeLong(entry.Offset);
 773          }
 774
 124775          ed.AddNewEntry(1);
 124776        }
 777        else {
 7778          ed.Delete(1);
 779        }
 780
 781#if !NET_1_1 && !NETCF_2_0
 131782         if (entry.AESKeySize > 0) {
 0783          AddExtraDataAES(entry, ed);
 784        }
 785#endif
 131786        byte[] extra = ed.GetEntryData();
 787
 131788         byte[] entryComment =
 131789          (entry.Comment != null) ?
 131790          ZipConstants.ConvertToArray(entry.Flags, entry.Comment) :
 131791          new byte[0];
 792
 131793         if (entryComment.Length > 0xffff) {
 0794          throw new ZipException("Comment too long.");
 795        }
 796
 131797        WriteLeShort(name.Length);
 131798        WriteLeShort(extra.Length);
 131799        WriteLeShort(entryComment.Length);
 131800        WriteLeShort(0);  // disk number
 131801        WriteLeShort(0);  // internal file attributes
 802                  // external file attributes
 803
 131804         if (entry.ExternalFileAttributes != -1) {
 4805          WriteLeInt(entry.ExternalFileAttributes);
 4806        } else {
 127807           if (entry.IsDirectory) {                         // mark entry as directory (from nikolam.AT.perfectinfo.com)
 8808            WriteLeInt(16);
 8809          } else {
 119810            WriteLeInt(0);
 811          }
 812        }
 813
 131814         if ( entry.Offset >= uint.MaxValue ) {
 0815          WriteLeInt(-1);
 0816        }
 817        else {
 131818          WriteLeInt((int)entry.Offset);
 819        }
 820
 131821         if ( name.Length > 0 ) {
 131822          baseOutputStream_.Write(name,    0, name.Length);
 823        }
 824
 131825         if ( extra.Length > 0 ) {
 124826          baseOutputStream_.Write(extra,   0, extra.Length);
 827        }
 828
 131829         if ( entryComment.Length > 0 ) {
 0830          baseOutputStream_.Write(entryComment, 0, entryComment.Length);
 831        }
 832
 131833        sizeEntries += ZipConstants.CentralHeaderBaseSize + name.Length + extra.Length + entryComment.Length;
 834      }
 835
 91836      using ( ZipHelperStream zhs = new ZipHelperStream(baseOutputStream_) ) {
 91837        zhs.WriteEndOfCentralDirectory(numEntries, sizeEntries, offset, zipComment);
 90838      }
 839
 90840      entries = null;
 90841    }
 842
 843    #region Instance Fields
 844    /// <summary>
 845    /// The entries for the archive.
 846    /// </summary>
 92847    ArrayList entries  = new ArrayList();
 848
 849    /// <summary>
 850    /// Used to track the crc of data added to entries.
 851    /// </summary>
 92852    Crc32 crc = new Crc32();
 853
 854    /// <summary>
 855    /// The current entry being added.
 856    /// </summary>
 857    ZipEntry  curEntry;
 858
 92859    int defaultCompressionLevel = Deflater.DEFAULT_COMPRESSION;
 860
 92861    CompressionMethod curMethod = CompressionMethod.Deflated;
 862
 863    /// <summary>
 864    /// Used to track the size of data for an entry during writing.
 865    /// </summary>
 866    long size;
 867
 868    /// <summary>
 869    /// Offset to be recorded for each entry in the central header.
 870    /// </summary>
 871    long offset;
 872
 873    /// <summary>
 874    /// Comment for the entire archive recorded in central header.
 875    /// </summary>
 92876    byte[] zipComment = new byte[0];
 877
 878    /// <summary>
 879    /// Flag indicating that header patching is required for the current entry.
 880    /// </summary>
 881    bool patchEntryHeader;
 882
 883    /// <summary>
 884    /// Position to patch crc
 885    /// </summary>
 92886    long crcPatchPos = -1;
 887
 888    /// <summary>
 889    /// Position to patch size.
 890    /// </summary>
 92891    long sizePatchPos = -1;
 892
 893    // Default is dynamic which is not backwards compatible and can cause problems
 894    // with XP's built in compression which cant read Zip64 archives.
 895    // However it does avoid the situation were a large file is added and cannot be completed correctly.
 896    // NOTE: Setting the size for entries before they are added is the best solution!
 92897    UseZip64 useZip64_ = UseZip64.Dynamic;
 898    #endregion
 899  }
 900}
+
+ + \ No newline at end of file diff --git a/Documentation/opencover/ICSharpCode.SharpZipLib_ZipTestResultHandler.htm b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipTestResultHandler.htm new file mode 100644 index 000000000..9d7360caf --- /dev/null +++ b/Documentation/opencover/ICSharpCode.SharpZipLib_ZipTestResultHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/Documentation/opencover/combined.js b/Documentation/opencover/combined.js new file mode 100644 index 000000000..79a1e8a14 --- /dev/null +++ b/Documentation/opencover/combined.js @@ -0,0 +1,1301 @@ +/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("

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∾nFj}CwyP}-(o;6ir?7x;|5!0Uv(g{KW;;N|xxJ-yE0%)c| z5J`SlDkOtWJBz3ZEC)ukG!YFz54!53dPWj+tWMrJ1(|7QCM>ZzxB&!VgsN#Kw+K7T z<>>;DCR7$&u__8{q7yDX4>V2FbN9oLVnGas1qKEN2J#1MHB}6Ezyozz@wK-u7RIx? z$kUwk(gx+&y;!Ty`NiGbN$!g@<3ycx4SMlWw*SRT45*AP!WtB7PSXHQIroRj`L0F} zo9MOpOveWK9a4l4cOEq{WOS*S9A}jk?nF^t>ifqD4XYn2v(cs za06O_{oH>~y5be=tie6OBY+GAc1tdm9rOPdHo@T>yiKQg{iKi_6Mzi;%iY4k- z^w4oVjeqSG!19k^U%MACgDSd#`%Pt?>?+$nb-r+_ShMX=?mX*Q#M*iUaP^~ErYno) z4zU23awf$<7)cpm<#He*hs-3gJ96?cvf4Qdli%iNFxq0n zrR!b2#!D+myx8px*XZGvKWHm^YKp_)@O*2V>y+=@1>@NKv#KK9-sQ+EwvDY^iUT`! zJrtL{zG!E#qHdFB%Yf~n;TNr->lmHXCO&4lz>0@|+D|MpQ-S8~B-YjYLJ`AqS~P){ zMWY0o0|#3P*_5UZ?4d3vBMMF@Z=C{$ON+jj_4L+;h@@iG0yONhG-K6@mNZ~j&fJw% z!$$&zs@%5fko`nRM3Au?`JA8#0l>h(!0Z1rqFt^$WNFIO{qHr@*G-4`en|RWzsQr# z9Ha}iW%g@g%+fPECA-nD$K!&w4~H`(X1tu<+gsBY`{6Y?(_4H0(McZFn_Q6TQQeHB z-ZIClneH3YcJ`eai z7FS;LKOb+2Rxi8Md-eJ`pTll9_<0Rn%V(sX{;IFU`jW6a?DoU2ZztBuII|n)+h=Q? zvr95?+->oEMfL498`ZpSZa!zMC+ArLce}48kNt!2<88!nup6$k?f79$iy{DwYBT`?Ve^ZKR&M0`V~P=*>0-IcPN519Z;Nt^1;S^a zNf7*f5>^U8KAhkna_I?R@)#=93_@ZG`AkqQMMW`qC@J)` z?bR&5-p5FK|3^KC{Ij-9B<5C4*Y72Q>SfozCqydMB3N^h5-BXUqiUFQudE;Vcq;E` z!JwG-zx|ga>jd_ly>$wWu3E0)Eg#Iu+#Z^*>5UV-9TYU9tpooEd(GVJz~tkX&^s?A zVs~2kd8LY9@vSix3M59X?PqdC<$}YjrKAW%{k9Hru9>T2*r%99sOSMKi$)1F2U4{rXCSp9{xJfIjMeu063f%*94m_K{Xu?=}NmMd{~D}NfC zyHPkVp$|VvN_TtH!DN;hk);P;lJOluM$8mp6!A*qV zR9GYcRe6F@pcrEjxH3&O)HxV*btA-`&7&joB{;kBI2DQ>04P_XPvn^<9@4VfPBU%J zNR#5VQ`FYra=O}oeAf<+rpG4&;zc=BR;mXUdXLi!5FqfDn*C55V-y!Ezs2SIdnbrdM-E zln9-?f|jiTnt5Q!vM6`88HT@nTV1u|jg|{BcML?kRS#V4YRPh5M-Vp^vmCuO&paoz3oSMcUS&Q_&-Ni&suuu(~>#WxxtV5QBKT`iRBE9D zACQbNOKWlq;lGLs z*PCTu{Njs?2!deeR8SXVjj~hZeb)M|a$P>ltzOBp-3-;qYHkrkGB&#$?n-=;x?kZ- z{n(ZuV_0U;^tMm{4oFokAc%Xe2W`MhSW(}ZV23=S>4_98GRfhJgZoX1jmtbJFF=OI zNKSQhIW>(TKnQI)7VTsaQ!Id$wI@7s9x)5u`v(T59FRHtx=Vt_^X%PIjDF@E`YR`| zUCpcn%ThBID$II_E`lx8F3+?o0!4N=6U3|(6|_LveoU9$w}C-9BRL4{T``x9pZkqo zyOaTQpy?qc0UVG?137U&ANfS#oRf*{j;mco04jEuv2C>h*7?Jia19JQ+TZB zPP<;H{uQz51$@+AJxV=CR!v1)9jNhNS!aL0 zu0v&e3%ygsFR4K-*;*W955(v@wgUTN-uZo?D+}`3V}~k>yjY6y{kf;rDrW&PiR<{X z`>XZ{clXy~(1?Da-bmFGbLTe&q)gTdATk0()dEpl3pGoPMFTA=pvxjr0?mO(EkZ;x zu;Zl5YN@FA9G{avPF-vG+pgbO&*G$^m?a_yz_C2KmLc77{-64p)Is zP=yw~SN=&&SGw`tzkN=S#uf1OKmBN_;c4dhE9uI^iYv%EKiTzzP&U@MFMiPJ9xkQD z8vSS0YQDzCr}1NX(<(XetfN~ywS@|mByVOi5nDk928?QRA})0KXcML^_Q!!6w5o0Q zXcZ;|6}O|kFtc{hI5*c$=HJ^sn{$C|X)|Uw3#R6_`wMrA=krjzw`g|gmB9ivHHmeupAfy+&Q8WKRT=OupZ0FEAi3Z%Tr&MfFfud#$dRB z^{A=?AWfAXaE2?SUDDbT1}VGG=I4(UQxvjq;b6J+N}joeqHA*ay(3%ni0pIA3q#Y zMYCp&w;d!~UN@wVi!>SnUBVwO4{*ECpD!o;d2HgamG+{pGUg`AldM+Uj8LfX(I<%t zfUMP+c_MVtS!ksr_)zAq=yFDmJ@ zt2#Ory+2>(L*x)4Q=*UZMTN)=H3LGz%T#d~O1lG?78VJva}}^W11;CsR*&AQEnA0< ze_Nn@v7FT82TmfGubp5a8kHH(b3yy{JvREP?|vS5@FdBjLi zOvl6IJyYOXmLJM$DDS0^aItBDfq{YkfkYPyZs~o#FDcF)Zs*o8%4yQO&$B(eeuqhJ zK9k&z*(>2^*o+GzKQn;}*1stZb&BY;WRFmK+5{RwK1WY5w5UG7z|hTT3yx2J@%15V zFf=YiMLoY(JzR?1#Ast`jBWC~U<|q_B|)RgR)>_ zLrl|};1!6~K#G7UMh^y{3P>ymK^3C6((1Ibh?Kx{VA5i>bjmF=6QjFU{L$}qFIRo5 z*|gA5e^y7wZ;xP_{Oz_U#UPR6wn*-S%6J*4q2@idWSwrVGajF-w!rIGN~R050flU zml1hZy(Oy%tBqAD>RE`8;$utJT11s~YZiNdq_wCn(>{ajQS?zWJQh*!gZM}# zMK!GJNYCt4!wqEv6uMq$jHqrR8UoHJr`G&NznZF;C9Hy0wJ?wA<>Q5pnBQ95icDZ@ z4#f|5$aix$0pyAaukkogglj`rs`XCwZxByIj>Q%3hC0;AO@X|a{I=;Iy@8IuVHU0+ zb)P@cBKxXKP0g-$XP+85AN~O4+>N=4Bkhyu0KE8A#!s%rDZ1m%Ypo8g-M?VxM)Y#_ zlsQM>?p8nY_)-VjIGwbytP8v`AB1Oq(Oxkw$0D9h*Q-slD^RDf|FC0hdqz#!-f!GN zyCa(`bmvpPmwaWL)2<6G z@9r`^ojd0~D=(o(9O+i(+Cs0G+m7Q8|NibX{yYBX0&OJ*?-#LMuTRDw@Pt`^5SwQmG_OS*MQTT< zhHd2=v{pl{x{jX|8HZ9*!_X;zgz>U?Ns}GjCPFAk)UP7k7NOqn_dAlm;0qK-5cPZ7 zwZi_YVVyJptie(N)AyaS2a+eRf0hJq9i_a1%fuc7-^T^nQnwtSFh2YgfeW5C_9&8L z^LVxYVu#FgMO6-ubv7eP_M$>Q-Sn1|-qT+1qvj}U%kdadVO0ia$l%&CS|C>{-j)ul zbllc!eB15?W+P}aK!o+DA@)S>6Zap0w-3t!tzp^CnMdH7AZ74J-}DT^8)r0IHf+mt)GZ(lkosDtHL{dRY~bn+A-!Gv^_ zzm*d=h^Q>GEO3>|GTm(_eqBy-CdNc1LdCZ4JMQLP^+MI$8~AluA0Zp>^vyShUx?IU z#FVIw10W>&J_5Q(Qb<73q`gd12xq9dp5bdQ)n1_X3CR~v#lUi_xE;2-qec%Z-ktEA z_{TW!5dvcp+DK%wCAKG9CbZH1zpEnbk|pMd;3XJYF)=s0zuFrHPot5Spo^>Vba2?V zoRe0|CqL_oD*DlwqNN}fkr0+6kNp~Z^?z#y8*!sav1nmvCEW(eB!fK9SGg`1DxeWs z?oJ9=Dp($@jr&?DRfY49u9SP@UD_A!+z>h(#_m_dJ(x#*HCCmk)e8~$9)T;@MI0ku=ge-AD~ zw5to3v%kt7^6XQ=r(gyW9PX^u21w+?O?IdkYsQk8BXOwkkv)PxDG@%Tc9?QWnbmiS zI*b2v1IsV!IgdWnb|tO*mHRZwX1rowzAJfslUo=HAMb9J z%|C@`N-)WNdAY^RFvaj~udB<>Dqd)FNzrJxIkU-b0(C@7U6D~4bGwP2ZB2%xZn2qW zkC**h$Mj+YaB?$?`6Tv>84e>JStp~Bz9|bm5@W{fSCBcp5wMJm>Z?8}tFBq;U!b;w zZD3oSrS~zk0MQ@!OerM>J=a8x=2V;D5uAWE0MxU;&`!G!%3w=vNul(haf4Y+G(A{a zHIDlW!XEjWZz8mHx!JnO?4+q_Le>Z>S6yCD60gao9`k$wZfzNI@gF(chHRaYz;(y+ zJJ+s34P+jP4bNuVX)vu-av{s_Yko(LNfNe@m+7Tt$cPzQFpM&PL2*HZHJMJ>c$nx<-4Dt1qk+Sr;CKUG#*7tG~kVYKbDap%{6&UU$V@!b?@ zB9h|Y{bP)1Ew&-m33m9dl`kTy)Z%L{>)KRdVY9WHs0v;3<=QryqC(=eMjq6w2zS%oUhlg-NI|^Jr7{4xATurUeE_oVDeNj(-R1D zhj2DvX+lY{l|>Iy68kJ9EXw!rpF5%6-Ze7$(2Us*1Ajp#IuZm zgwIY_gqX-FW^=1%`Vz6^((95}Trq={*{N$SBF~DO#w-hy7y?6|7RNJ?$K4b)UWasQ z&6v-)lDulA@50E_(40uTv>gZA{ubhc{$Fho<@Q$mo#!K+5#)SfWXnW25r@MQqkHLt znFYI$;!|Jn0UHHg8Go_5RYTIy#sqs;@IR`hq;bL5`VD3gonlS9X(gwRx^FjMb#D7H zZ~1x+!Hh1xg%F~^V^7*VDrL&J+ve;w?MwZS6& zeEzC*vxKW!EEn>^ zI$Zi!Fq-@EAi+>rpbzU1F((8CgeCMN0rTHXlZ`4dB;+fnM=LFYFfT@nA-~k^XwkV~ zm@VU2>=kbA*l=QmOKM;m@=d*Fzd<`w6OU0vIS@_-Mj~J?JSU@2I&60{fe}pvrYT%D z_5?hC^Ngy@*FN4@E43R;clM=U%B4Wc_CR0urC-XWNXqu>UwbJp<)w(P{eIZ5soo?_ zi4=mc-^8~=py!uO>$iC~6}x&xu_84b`pqQWgtEL-YdV%Dvu*Zub=Mms@*VV;EgkdI zc`$e4CS#5-IY%12q$sj|`O%tl<>G#gnK2ugCQZZNG&euH6h=OTuV#rLHsmnB&RQhf z-501|z6+SD^9-(fg5j@kZC&HwlIdc2F<(sa9NiLbY3AB8FXDQ;#1&{b!h(YYsQ;cA zR7HR)Vt`V}LV^}R2SgI-c8=z{Y?eQ?&l>q8O&&d-6;JRzFcKXi5%Tn??yU=R2(tNd0CXTn=&p%_!EKx6e(g5 z8zQSHVz=IYS&Q*fC+-%|HAE!Ioh2Ir*CEU(t%WR+tHjy#`udEL!GH6xp;V|jN6ICL4q(EIz}Fm4}vW2I4qhkVQ6 zJYpQLA@A^e%W!Ch!Mp7QP7;c+rd$p2os4nnm-C|Q&UUhP*Dvu^&)b%y#jhf;F+z4^ zv3av7sU;G3SPX-h_z}f9Ea4Ry#~x0kV{W4q*7+AD`K}Xi;uh{~l8%Ay94lw%yzffW z7jz_9w+($3wF$Yd+lbhK_1h6_$lS_4P1!M}8j9i5b<6Lvum<`|Mj6m?F+T>oQELyF zNZ^h5CIy33Bh0q`Il+APGciwI$p%=G;jmbn@OXm&2q7jUSXBh#d^E-p%oL}9jPeG$ znkeLAJ2*JN=oVHmY-*mQ=i_BDWjWeyS*0Fc`m{`dw?j-&!q)a(&GpyRtX|b_~!9q4vsk+Uq z7(kqhZn&Q-xtrwXxmAu)6U~FZ%-){kZjpAPN{I0{<6Fi06ixQrt2R3S4_`rV}5bzh(5kQ|xuXw0fM&lBa}p4*u` zey)jE<=bnSrc!Kau@snP0((iLbevAG?GI$;~pPb?y|fA<*}hSFR~0F6L$zdWpYO(2B9 zdPn+!R^!_7JuI_koGt-(p7W;wX#^au@=VH>m*J{`9T+^+?2RH4cmdaXi0gZBK)SB4 zz#`j~bVYr$6>d_|63D&#q(Se@zP)D{H*Pbu;=^#O@)?UU{N`tjN!7!yX`J;Bze7J5 z1$Cl7yS&N*TkqZ3EX}U;dFpGIyf#|!oLG4*ZxRSFWbJh$zBLw;Gi}MtH$fi0jHCBG4Ukh6XlEa%>G?WyuNsz|@ zpvF@IDm{n#Fa{5$L@kkgxI1d4mg#=p1Uv}NFnoG?$7OFfC5T6CwhM!5xmP7sX3l-) zEBE(2Mz<--B2~b#XImKp8wX5ZidA$WSnC0**@^^>Git|a{#3hF&CGyfeoSes-X*EJ zidZ5#DzO_KP*YghGo2}SsH#79kcRsDuu&*Ua45rzL@@P^=IA#R7;*Q~9Ag5=V`!3! z$ZgdZL}Q;Y7p^pC06G%t5N~6Wwbg>-dyH{7JN_J|RaBoL2JmMM#vYaKfjq?l4_U|= zk2QDu;&cDT3t43VmZB#Op`#p5FL?#*M$XTspU5>%3nC;~?A4jipZB~(>?~*DG?VpC za8`g;bvZia_GLvLouh-Gva&xfX@*xdgk4zq9pOwTfx+yiC@26MzslVQEO2Ep?P-8=Zn?KzDpxV4#nSq`YQ= ztV~XiBGR?UkD5buc6uR`F2*eo_$jcYHix;){)Ehtl^a`cDKo?$;8&(Ww0ds3fm4IO zA@5iopH5Od?!YA0cFxSQP|>l<m|h$}8FRguxB%RLWi2QV6mlfsuY+ULCkL?ljNGU#CV)Uu0M z*h=3ZSC=UHL(R>qyLkAWAcDThTJnHrbL?fS59~8yY9oi3b@XBWyDn?Zp(kQ)a*WTy zx!`xQtDB9eap-YVJ}oGBH9bkcHy+9EJ?tY?@d7%dykJXCj>Jv~kL?sPD_8M!Gu>l^ zNl1xaNDKoWsRR+f05zeBt2_eJNzU{h!-c2itXipF@yD8HQbmI}-Ps%i8s^ybts$EG z%E_3tnKX5=ShU?gytc3Mw2f?mAVc}C+3a_RS6fKbD8=*>g2z3<6CRxNm~QH@s9T!X zN8zmqSR0e=3N+c{OTgzJr&0JV{eiY<3f~SiQ`Ol#y1(rnEz!hJGccqujm=Kwj=N9V z68xt!3hS{#_^)z@|1ZNsG7iDaex>dD8?K0WL)FCZO}f@h`#eL9TL^2d@J!CgW;{mA zcN|h~a+MPT68vj=+0wW3@WhR>0Y#vmED*u^VwwqHh=eEyB%w;CluG_c$Q~pAJbZAS zvQMdEmARrg=|S6+ik`xHoz{u=V}!GRv({&;QseaFBq2(N9>;rxvax`v?;g&~_eC9$enP{b9BIi~QK#ih)Lu&(pV)-wx9WFg8Bs_a$o8x< zhKW+M*;;%30nKA`wy&c^x=AK8=SSHC7k7{vK-RMdPxd`O0PWm|h_ZWPC zW^Tq`m~>896ioupkG>Q!rc%P!z*rm+hha#lGmWSGnWR=a^{po>`+0*o`~!rl$oe)_ zBi;~^kw7qm76-s0-!$sHqNER!cERWQm8_wNg9y|~Kl4ssxsJ{SvR0(QkJRU~RV%gg zZQAO5Y@Qzb&rU~SKeHjY8YbRp6cTk0~G5S(O6Xrshigo6HO zh9l>$sG1s#7DW&P?KWh}1*#+!y6X%@lF+Y;o5625-Di$R_mY>c2~IXV1y^}~mc~Va zV4g`6z(Yt;0U%i#3&=`N|; zz(b=Tg0<9>O2eIGM&5OW<7-1x`q9xFx7n8V#zx#ch)zScVD7H<5Wt9)}>G= zQ9u>x5uNAd8C5l+WD^vcr{@pcRBsUTJs>f4G#Hom26Lv^r?<22Z2euR}h5>pWI3gAWKr&}}CRUq&aT{rLZ)%je;N{p&B2N==R2iI_#FGbVI26>Fl>5+)>6Ah4)v zWPo*|a_@mkA|3@(Vp@l%Q=k`!_i0Nmpg>5P-}d;K8i10ZurvjTBAkUlU}8roiCAJ5 z7N$v|qzvf!s&rq(La`@rCr@DAn2$Hp&}IK;3=Mm!M)oFcmVRfUzo1(U63y* z3krVY=!4z%wfqa>-qTfy?zCyJ2KR&R8a(!IB4Bx|{^l5|J-f;NIrLgg0DjobD_4$v z;@TVh*7J*jzo#)>a53NSd`x3sG=E+IF<5p%%U2mRN0JopB}b_LmR7dmJ-c?MGv-TL zv#wx5&{ck(`6j*xKYHbr3y5XP z-?6QHKWd95Xc!sjWfEMDEB}Ilb>ig=-LbR| zMTzQb=!5r@+LOnB>XPCL-ld?`^GrsG)H4n4a(^Q(7XPS8@$>V8M$PrGVw(>Q?x_Fo#XTPxaX5ykx;u&07G1>Z-vOVX3-cvy zgh+pQ5TDL@Ew6&NLyB&&u09udv=zHqXY5DtYf05p9OUQ0qPg|#LGEbc+3~fb%s~X- zI%77Cm@_kwL|2@_Nko=RqK@)<2K zik(xqB)Z%scpjAZA7m#_q?=~U&N2aTIZ3bkQyVt_u|9@nZoi2+zUmMY8!WbkKX^=*YZqirz)(QFt0((et%mSVMZ$ zcnftAEUxI&&nQdzXVgtqQMXlYkh=EbLQW1v!K1*oM@8EBxK>?_MX78JXrz=lYeV&B zjE!5%6>III@Qx=J%Pan4^OzqeC(uxheaT2R9TbRYM156J^L6B*S#-UF1EEHxViHt= zumJ)PnucmkjA|JH6o+N1c_1#ONqDO)%Hwhid~F62IFC|+IdP9d+%yQa^4QMQR)#WP zU5&D#9O-(AF_a2sp>aY@ctQyk0;8Y^4{)+5p@15KsD+M|Xd_=;hnlYP1+6mX<-NMr zTGy5T9d%^*L!n(H@4S&3EjnEnI%7>OWcbv0E{$Di6XtZYtE!M#-?by@Hx|~2mECNt zwMJVq#6R}dX(isr8psa zK-iy${g-e=8gsf7az1*qBWLgy^_Wd(?^$J~$di1P+y}xv3CRjqH#9;RBlMcFG23*G zG$VbEzqmZ6gvR~notjxso}>*G*=$4Cc#WRyZ>5_&PwMP$h~CC@JKB;3#@DSm4--)J zfsR3#B%T+sR-t{Ds7pUbrWV|F@#~_)OCu59oGpPFM35P@$?Z-CONgf?+AJ)gb% z#*urr!|l+0caDvJS6y&<@4n-81Aka#ZZdg+o5T#kgG4LAWY>_N(7!x`?Dc#=41=$b zow%Ue9D3xl0OFRO(4jS-ap(pmrth{FrojRr07tV+M*KcP+I&>Q#D;4Y1oseDh^fR? zvuH4*`mT_FXx&KHMIBX}$mkx8Yr{>50^w1^J^98nY*5L$b9;JHnZ0hyoH%={{~LYjCA&RC z8k2qp*^?H7)(@>fUxKPdI3EcS``#mVhYEmNBo>Lv7RMy10;t^0!A%P1_6th{6hRTp z9?1Go)DQU?>u{iYm6){sp+G3VYig;uVVnTx#*zehMN-=U-*S$Ve;!PozoN{J46z>x zwK@IJ6Q%z(N_Mhje}Am=MERu@8Rra0APImFbHfGTcoK+$6*U!33FzmcxVE>{rPqhO zGwn){j3^PqkU&r<0aBzU);kSViUDz^AVq^xE+rv;X95)XrFqU93nsz@Bfvmak_UkQ zu)B@Lk|Xj|Y3L=f3$bL79RU&Q9N>DW9d;VA0OAl30{{R3Gc-gq003`g9FRT(q0tJU zn71(TSjBvRsV7z^I*lI^nNZCXdRSqX*ag5n?mTraF201%l0qZ$A> zfCH3y_p?{3$#T|Z2?3G6z}jXHd;tTuWql`P*LLxp zG5*Y-TyAoYAkPsDf|mGjH-@~k#AW67GO!WWBe58>;%*Gyu-BHyUoIRtp;TySWbe$V z=NrI!WD|~&L|v{nY))$4v69&5-aqwQ?XEB29X36RpN`@z**G|PJZ#U^W-spLIdWR8 z^5y!S?CpTB+VSo1Y_mGF@71X-PDhpdw!L6&jNOuBsLlkD_#S{9mF z6-tibS0He?ut-J(@Q@}#5uOG$7`SLWg0FL-RnLeSSsmgZ$5)ed#yCw%4z^w>8~qS3 z*NyTqw^nDHi1#0BA=}C21t?FK%A;eK(jA#LANwann4lfaBDw@)tEm90M5rEtuuu~` zA4rc2Kf_AS@~OJp2}uu;nv@w-^(N02QU5Ubzd9l!!Mh{x%L!VIGCZ!<>)YEZ^kO-- zX#JFy088?^(U}uiAebnJNW{ulsz2Z(2_f8E?p!yX?bNtS&40s^d&n7;@3j?UFJ!A!meV&dsnqiX#Zi&GOkH9 z-Cn&)LAP*(cVJ51-(f6im;Hg) zpAZ}SQT=w{0yZGrkO#+hV5INGFdg|;!*7b7bSc#+F!)~qQWHDNAG=S42QPzRB|JIDnO~g( zyW!THHDkwSxq-~xRqE%e%d<_^UcV6eoMGwCgFU!cU&rfu!`X)&v3XfXtneKp^tbQ6 zyQNn}JX;ZlJSA&C?1D9K9!9q8KVPv`6%tx}=4{Gai5qmA@Ymud{n=B6WRnoGKGs;1=Hx#zF^8Q7Sv^(W~_Gvr|vR6OCH858p+ zrWA&GxT~3bLnO8qXVYM=>;B?7I07+vPz#oQL%&s@oFtu=7TEZBk_1t&KpdA`L{Rj zOdSnSo5S(0tNGqMrj}vlE4RB(ZRoY+vBIp6UZx<4<+N)axJ&vk zw>uAo14+y6bc|z8%%owMb>`k_*(;*vwW6!Kvhj49t_L?=#$WDQU+1R%j+!*zsC{2< z`t{anddKuYxado$DeGcCl`3Msq5JFR(W^B;RcNOMiaq*ENV(=&$~<`krJ+;^bDTf>tmXk!^b z_fXaY`_l^g0}|1aa7>(??yvTUc(1!VldNyY_&V^{+SSa`8{Lr&(4N_jR6VKdx-CJwLGa<9eZu23!E``Kc?23nWH z-BvQn6`1KRCgR1dv(${30Up3Ke`*(1NA~`Fz@XArE)dMdWc4~9Jq7!e;^V{_$1C&Db8qRMod{I!vDfai68!!`2ud2n=^z+^^@-Pi{LOv z?bg(^f8<{`CtP=4uq$th@sCQsjqb1Rjh)Jo#C%g}H2I&iKEU^fhQ6uAte7{FY1^&SuE$#wnG8 zBQHNgOHSJH_9>-9rjM}GikV);lds8W8k^1**lf;>!JYIEJQ{r=r9WxE=y}k?F#(byuIoJ@5FhwsP zagzS5#<|RO`{v=oKN+Df7?XD#){^db^Kzx}8n@s@u}tMcvg;W*6^^J9y69XMhfHG@ zf4&Twf!zymhCH)5!gCRk_%#f)ABVF%Zy(lu1>M@BCQE%`9|I)Z%o?0y95N+vJD591 zO?ecI`_#D>e(sh*A>#Y$S`y)zGwP*@%kbVfglBEi0C(6nM_@|5zd zJlMFo51EWm3cW5*eaz^zVVz+7#_DM?$b76LubAi6PW_=LaQ+?ZQS&C}l^`u)mw;+9zl3l|1Z$s(6vYK;2tWu){ReC@fWxSU+P_ zqqfAT*i8cdL@^N*O+g4>_xiTEr*f^C*3As(x6E*p@aV=9ti1kyVyh-((QC@l8cw#p z(2Uw>OeIFmdW(dM=O50Bi!QbYiay!ve}|mGFpcaE3Z8_s5I^`HG@o`FnyqtEE0lUcu_s?Hv4$-==Q!j|AVu7-#M zKzIRqleyC1mo)e{8faz#IVveb$iM}mHU-WYy=B_Wc&g8ebevK#c;mzMpQH3X+EWs!e7osgh>%Vs2*wr0)g(Pr(v-g-Kf`IvTl>9Wfd8J zWI?j=q-bj@6l)qe#+sOAv-kXdB;xE+qq8SIX$omp8f@NN8)N9AZF3L!3gun{l{LbL z*#(ic+7K($$ajhCSmd zN1y>6m-_YS9Rr+c7Izb`{NpiBeD@uHUYBzFEX`AeHAOzweo>|>7Y{7+w5WZQcfwQs z43r2kKheDSe!~XDW4=r=>CrGW1hj!Cgp0-G7w!i@DJF?Hh*hV8T=B-)Ys@y)r)r|V z+`Fbb3KVjAb9((RF#7uJPRWT^@hAkz(B(}4py`y9K}C5Q$Lm~LazAFKEvrhg=i9w` zFDHbdM9fZRpgDqnFX-Du59cW2EGSsjXJS(G`>I7SjQR7DCfix<&Wv{cv(pdXj`3gT zE<$9${#0!C5#-bTMq6=$mADgO=s9!8h&Fac1Ea;Z7#EkX9wr*a2OZmM(4WaXcL}3N zilv5jsF?{_m*=btE|6J#@<46{Qlv!PPFE^Ek}jYIi^^3b{FMb|%ads;?bE6vrbnfD zt&(osb*p2P~bkXd@dkMKLI-gsQb04dCHK*cc?%MPSxr9%9=V-=elBky> zK$v~B6D_5{{AR6}o-AlHnQ>1|xR=!V?R@LAIjTl`-P(N;My$(NJM7++E01|^)OK(~ z+Ly_hG#-9#U@wcT4C1V`mxJpzN!rsJ?AaBt=bE zx%p0u?#^p(T?Zxi2(EbjLE33ruAXN#U8wS&$8pK6vYVPFM{+DOKKx7f)<^n(n>uJZ zvb<(2HX05hgL-4wKvGrl1_y<1rz7}|(YM${xZg6TH>zb78GmF!BmYrm>O<11+DDYm z%bz!U;_po`+K^>5%{o*IDb^ggY)GYs?pNW4RH#nJd(UDFyKTjp(uhYiJf#B|!o&+# zP>n}>5E3vjnyS$vm!V6dRAMw{K08oQP*8JUGFQ7rHFWFXUej={L)Ug`wH)&Hq3y4| z8wi$P+V*IFoD#}OS|;rE!28$WG>>IXo5yunfgy|4Uq5S>p1%Vw)bgviS&ECbS3GL2 z9b7EMkJ?u}YOC8@EJfDZ70>4coc!$d+9URJTUDJQ@}qZe<~7xvr;{NVguLSqt@LX@ z4y9970*_xx+$VCKf$5Gl1V(U>)Zm2C^^ZR?3{&iwi?l^D#Iy3SVI0gdE1QZrWfolu zewv?qb()$zS~ea#y{Hezza#*mV=G!f<2eopL`e{U^rtyaC~(WF)d&;~9wLd8aanib zD67#W3q?kBx`m)e7O=z^;02ZAG~tpY6W36QEx*P%L)9BU$Bq@i2jU;c{!iRSUM z?CUwbUkk@5Iis&;r;Morb`5XFzsPEIYqDs3vaugiH_aKg*JBKu!5ZWC7+HuEc_2{g zJrfB5LQ~anL_e#j_$v#_(j;SG{v|^>tx>T$1FhCp{msoOG^@e}#auc63=lu1#rlTS zD9CN5nRa;G`Xf7CrvZQf2(l0nh@_$j0qa*|5xR*qWOcb%LXrxGzMbcpWjg;&1P<`k zb{8=4PDbl9T@Gpc`TL#2F_q8rJ?X@4Ff!67^=iJw!JES?ZASq-o{0m;M-s9m0Zffh zFHjqGzyiYU%4s+vVl}KT?#g8)djFZW{ zr;#PG4#{)JhndjsK@TryZk`0XV$!g*wDqA`f5)Qlkp!4+Qg}G5rqV(J&y$d;91l2-A2$=kVCPOs6kZF72AJhK^e|*KcOc= z*KHuXONNqWV_i_xTp&l(Lv94fR+xv}bRHHK3K8@M8j^eyZFv}x15GcdBtNn8t-7_j z?ekE7ZOxqy5>QWpyW#wy4#~aTG}zEVN3>6N_qdVhvwGP&B*5)74l3aYG+{}P0CZ|{ z0j|QFQNWcIw*l-zYAS-k`VIVId6&jj^s5FhuN;4~uY6kj=Lz!RzXj2)hBk6xz;AHk z_W(=p=lm8VOb(jS)C3?raYd8y3bdRH(KLxbL$H^=*!u9Y^h+J_{+fo^gkqjPwHYs~ ziK%S(L}P{Prihm65rm3xf=5mdUFHcwk_4>#?PZ@Vs(Y52@!K11n~Y1YWVfANnZTYe zDhi<aTwpaQt(9+JCzw`_S|z-1!`oq^Ze6OMO`m z1!C7V0|Nz4o-iUnmzt|Vz?y`TNRp&J=eTWpyIeoar4l`P?{jIp5Bl1j;=&&fMM}tc zB^|N<PBzEI5wfFs55sEPFzrR-Fvt2B@`i%O#| zAOLVing)T1jdjo^%Br}ia>ObKQTK#9>6lh$(zz=1jH!Llc+Eb6~1;&1r z-eeu=>?tCPBwQ+BiRy{Cd8xlA>>=+jW&=iyp_%}!SJVO+E_v03=u{{YgtBW2m>l{1 z0higvYWyHoWxS!hE~gi<1~^KPHUUH!7z5F*p$dvf9vu3o5L7e&NEMW!e#SBiKp9Ey zUJ~Ck?E&xGLR#L^7FR~F-j8H8s)Ur=p4ha`%~H2n1cSTb8N#xtm|Febd;wK8PQ}w% zat|6T+Xq3xH>aM_d&ZtT^ zeAco;IUPYkK|%e0Q|gu+wT-_0I15%wY<*_lChK5lr}SN1m4Ny3kT!1OhBb2yj(IDFP6p zag7Br8J}xS8Ukmi83LpWrl8@eFn0f+LbXb6GF+}NsX=4j1%1Ljtlu5UX+r6a*NY37momFeyu_kf#^ftRmyDEGU|jrJqHP5zrzHh{q}j zz$1J=*kBR}f(daXhT#a`eKi#5hlJsmMwq|!6RB9qzv#ylDv&3-ZYd9FU`4LLfS78U z2@t_53KL9$zi{=_rL^iR&8xuhi!bHVZ3AQgycBudeSoIz$D1)GjSz?ea+YHBr(Lx* zR!kR#3(8o*f=~YOEHkzjTvboa&&uj%Uw%^TLgIOSUa2WU;SYUFatM7-XG}}&7DB;B zcPu`?;irh37&BDXVJRTL-QcKgp>){NLOD?sO(P{ua>2wXO8N4WutpQGB|#JjQJ@AT zNYN{+%J?J;ljLPms|pQJ2vVF?Z(03jF8`O7359BBQSA)K`KJs40V*Y)xPVZTTo(X7 zNL4~eE@-T&+hnHG28i?W6ciK`lNS^vWWgHSo{#S5jo*^x?w6N@ZDjb`>4Ph9OIINZ zq~!W!k8A=|rRE|V-#4~l9b}XC+jq|B*)2ssQkxstJ5efIh>vn)vtomG?f|_+&<3Z! z2$K@fmm6Lp=#jf$7esbh&`Sz*JwX5j459%Viv(1G=o4VkU1HKzClZu&&KY27T2{y% zk&Q~EvM5xw)p|xUA3^*$g zgQuhaAItWsFZFL?Ld%7 zPEc+RHt$p1!|a)xq-*A-;)ei&KOi1lFxUhDG$LR{1_0Lp%nU^P7)*D{h3EFCU^wy25wdti-9ktS$mR@YA zDXq2Wr89j%Arzv~k{%l-RwUu?0y6*rBmg!u0C0a$zVH3o+jnbiw{CT7N!Lkl^&QFR zn{3QmZMR({9cPg&2nZdj6*xx)fV%^HpxjP}@Kq2H0t;{_9FGAcLq`L*NvG;CF+y=OFs=)3u{M_pg;B0$3hM&SZzAn0CmHr)Ba zG$JZjimuY;Z3txr)EKjJES0wU6tcDopA;zYHox5CCtIkf_xW2l?pr|~<>@fKtg7M8 z=)XPBd7;7p{q^}x)*RM*!urrZc9tQcz)%tibwwKn=>d`fk0Wi6+FX!Y#GPXZqSc|k zj=9q7efr0v#jn^Icu~M+_N?ln)aDe@Ep_EZyu$qyqlf~}D(#r0^X)sKa}*jcB_nXq z9mhrsgk!~$auP*=5k+eP3@tlS0ZSxj;)y6lD3G-{?|@5KBMGLdXOF^uGg{16=U8tn zH~T2ttAcIXimbH*v)ASx_}X^VRK)6feEXEU3+9)udGK1{dO54|Ew@B*m#$@d7$r^} zcF*AQU#+Y?z}(=5_g&-|rv3W5pc6Idt!~eUDG56B`5g6pGk@|~Oz(p!>#+A7_Uvhw z*>`?M^SKIyZrfM80??S7G1mqbh!dB~opxQOS!A@m*tGQ()+yz`-xU+7akx3n-ipmH zHb~I1V_)oxMU*2V^R|1qjWiA9Vmnsz@+0=F=ABqE`BJ2q%U$EN+YW(qiE;648psk6 z%Onj5B}h|&y$pJ-kGktPqCAYu7srsfSFYazq{Veu+w$%Bk$uu+Ja!MXKs{j+fJ&mk zFtBpoYgke>K+y@)FeXNJ*Y42>VcXNOYT3HT$%7e|%jN|@^vN{*t|-bF4ks*~(zW0~ z(dj#gtHn?&eZTi$%NX~Mkw5Lr%oH~cD~`^Q*oEk}Qg)zz1)t#t?YrID*NY^u_V4`K zTvHwKr*k`pON}##_pE>Q^hXc-@AkWmtm|Ysq9qSFe5P3b0XUx=55`<)G6{~mAIRQk zn6qQvPsb+5bI=ERU2v6b62tGR-5!2p5z{*`k*!zj;I9WMbs-w7p{?Y}Se4&4aRcC} zt z%R27tF7P|?Ztx0Hjoo`NZ)sf3nd7}V>RlYr8GE0Q&^Ust=R;>JSG8QJj$`ikJ2z5# zD~)50{a}?{@xtxWO~-~J;&Ut7P4M{|^{FA=r_MnRi6Cn_Gc|_C5;!NM5w(95u`nBJ zIrdl0gqL8Vui$d~t?Sd}Q-Vsw{rvdxyKWxWrna@d4T`&##;H(DK#`y~Xeb6sghDLf zh;q-~jfgZ^F-w>QT%b;EgjErmY#f#ITnK>I-bgo@{m=XC^Z_()np&B!+>B<;nEmwe z;vKBjW}W*g%$T!m=OvNy084ABH{zkX{*JEEg)i`g8=S54(btnMiQ=VEB3}b>?~%pd z9hYhR?t@~#S2bZ&>j5g~YIjOse|EDJR(FXUTqo=upM5@4e>^Lw8r1;hU9kGg+k-1! z6v;hmDUnksbl~Dy{2_imib^w#*t=EDT1kfrn^8^$4Et}NZ(R?u3&isRBH30~AI0PY#sZ{-|2yQ1~YTFWHI$HwGwdy zXOhQX7p&a)3zm?nv2$VPQp`&ebtxW;WNR||$HuR;W*avTwhe~VWlgVN^7UYw=Fxpw za)Mr%n8&W9J;x2m;^?(|Z}z%g4X=g!!o+4fm?mj#aeYOuEmpm2bo@HlCWkxr#TA$q zoTmYf1LJAFzx2fb(nc<3E=1fA@;aK)~n=PQ|4ASh^l{MGQ^B}jPtGi?)YvyF7YB%KN zT{%(?X;004y3+e#%rjf}DJBp7kEZgn&3JliKQa}|I^~<_BxOE^T@M3kMmt{cBxw?S z!Hjq-p9E4OzHLde%Le~Twn@JdfF0C20x%0~pKs#tp51RH(OWolye1rI&qh1~X>BZ( zeWn5}8wgfjk(6NMXLI-_iQ#SB1>NO)8E!1ekj;Td_jTrm+gXK-AJoZ7XK_esA^8n!^zZLD9>n3k^c* zXUur3@^Wn1=YL=s3N?EOD_HoZTAba|WyO}H}(rVv&RU~KDQfF)xKlW{yjBB-$WLI07F@vA#&tRvyB+BI- zQA~A;^pyzh%@f|5cMB~rTW6e?;+&L8{HbRml<(8tzqlzH4AmKWFr#?L^f8Kuc`n#F z5P*|Q9Q_hr1$Yp85Ce^w6LG+nc$EH*4PBT?CVbRh$ds{g%7A_4b2Y*E0v*S)+nW5_ znI*E!-x-qO*C@4eA)LSVU5%;J$wQmPZZ(6XukC9dUo52nmi8_X^MT~m#-nSguWxP7%>4WIg0ejBc8Vm=Bw{3K5^r-n3Wr9M zBdP6w`F6FyMOm!!FH*{&p+s*5Po#5U+a9D(QSqBBh%^uc6WO7 z()=IgJRY5S>X?XS0@3+hkJocxfTF&&V0XJ3Gf6{LU#lj+#yF763vutQu!|pAaVpQw zbyO7K{kp6FqIFh~12H6tpa{THHBkZ-qG`-+#552}kwU1Vj#eJ$-K*hbn=m#; zi?(6C`lR;x8zeMx2-t95?K_Z-v9!<~9~?)Vs0KPIyvbhiB*e)3Av3^bek541+S}gAjMS)i zye=f>iOQM&;hW8i{*^IMuN*RdbMc7#7tW(juO82%h^zZzd0Utf#P3}9=NqAXa)0FK z`o$N@2^Y$CGnUK!a@^r)6AxP_L@(AzCf4f)*P7AyljMr+t zqg>NMMOjb~pbB78(l}-Bv6KmMDOcY4afW3lwyu&eh{8Nz_dQ0Vyf4OP%4bBeQn*gx zIu(*9T}tIPH7wWN@4TMD)Vb^otD<|oTuSAJMJ3nW^Sp1u@yxoan$2q;rS1F_3z2$i zmDfv0ML`Q)bp|>d4dyZm*ly@Gkds;08bG4yXrofw%N~$u`k;8CNg0 z4b)T1xG+})r=3%PdXyQ53ig8viM^8}MiPhY7t3^kvk+5=lTF@9<7p`8r2 zT`?pdgPE<{PlYe6MVi%fayb&Ut*F%FAB(+qU9D7R^>EAox-DpHg6bo?OT5&_qPs+| z^JiMs`($ckuKnQfG#EFS9*oy9elUvRnVR4vJva~x$sc4J090CwarU5OsA>gY_@`si z6#sWKVv7P=LG0cqq?C_IlGO%SRuYXJLn*_P%Su-w-0BNYY(H2FYcPtKaJ0i?vQLnK zN`P_yIw7N)=- zTFN5GaIF)IT@_-Mhmoo=ET+fr7&=a`&@bPB_30liV0ZhyV{=Q49f6~t-c;d_!dfjW z$a!7o^(mzJtzioa{hFxInHwpH$6Ml^8l$4@1528J?RmeP2Z2r)aw_uY6ma%hhfV;% zAvHCsbi{*QUFhd5VDgbe0+XL3w#lW5n`o750v!*ZjTxboGebu-*JzLOJuK9n7am_S zNCP&}PwF~eT1inF=uHErRf)PN;7K^z{>RR>d-ax?J*?qp6~>Jw2j;OhW_Or}3PQ=%^CIeWN49pVSiZzd zs_|~{s9~6*P`OAG7r;~wEDB&r!U@obB~4fpk@oBcup}6wJq}aWENaGTn!pS5;XH-Q zR5%UjtR-1+k4tZ#B0eU3MMv_`aQZ7B&jkrX5# ztRztr&C}~lOv{MN92gSsmdt^v^3Ln${DDdT=2;8rlqf1wp1a1Xlyf-#sk3RleaC0R zqku@Bs#)ePByg-_U|Jg~97&9RhTzmm!JYJ9UcZm4AC-tYG}tvehx+>4h)TYmVe^5) z2lg=FtSD)D1egs8g2-TLOi7@DMUPSv_$*YpZ2DiPSU05s5)m4vK#9^gazjUHKY~}% zG$Bcvsh3#_TL#z`GJuEzGGHNh*wwOUV#v8zw{@ARqU%9kndu_zBU*ER`ylANeAs}? z1zA~)fj}=r*}Djdm3P`}|c_sm3Dr*#&lZjMGEL5HF4*m~batxos7cBYFZ?dwjVc|?wAi-ow)qqqH z0TBVI5hDjEBdS?Xixg1G#=kd}EKgw=HH9`Y z>u=D(P3eSdd)msFOGCNKSQNYpQ%8{v(3gM6tOTr-vU(xo_CH&lu#Tm^>jO%kEnzLX@gy`1W<1DJpjU&%C%`dsZ2T4o3NopKHvmkEz@r(q)!336tPGRBrY*r>P94(TNICIbkF*N`Ymh2s9F=QCJ5I6&(CC;(nx5+eJJ zuEINO`hwAhp89*+Fc&=EZgq_sGsNU=U(1nV7$>$pHU-M{(Zf1)E_Q5~?#kh=&OsGr zp;ljYzHwp+ezIgOXxw;otgEWb?y4UYe|kB^s9141TRNfYRg;Q!jJ$}-;Vwi$?6cid z^iC+GLd8uVlOF+&qKOTtHWWZ166MGW(ujY&Ym#YdrTJerPd_s6>EmxE!`E%KWFltKKu1lX_I70{%~{ z#I72O*1CuO%S$yts5L${F{eCle=ZJjT~Xn9*vGVfz$t^ zItLsIOG$VZOcsE|Dj@<$uM`$%s+nLYQB}PHfbDZ$h{8glAGz!Pst*RX*X#ttDaO$DG#aTI|^ z#Q+5+Vpy3)3*X_o)6X^6l+0I7_I|UjHn}?Kq<4$db9|%Y`))%MT;{(z_G%H@k-hg^$z#5prjE)Xfeuo4@I&FWK z`c0A};ki`9&raS>8pj(S5A&mGhGRGQhtT)(%t>po=&SU- zZBT^wd57j=>~knYN`B{izER7;{eBg!MyzuGMI_Uu(XM^b>(f>&FId)(SlmYJ-xQ?u z)|3x-+SvXLxSiSn$O^*TxmSq#-BTu~+b`2@5uANdR=CE^pTKiZ9(BR|-|DCKU7uO; zRmt2wI94p&Tr4a+Vs z=7{%#S*wiX8c`&cnDxS+44X|2y5u@p(_mMwBkAbz0!h zy4C7S?6a}HV;QN}&HZM)HcS|I-*XN#?)yW(n0Gz{_N;+-pEP&8skl1)AqMI5&F=1I z{C)fYXypW7iUBr+iP!1(2D*$qVfLNuC!_{zqMID24f!?zKoAfE0000(Gek200B>a! zkoy9NMp=MQA-$`2|21|7jd0`z<2>d>4h5001nzdp_Oes1+9umkR7UflcnE;&8TEqz zgE9a`BLH_`04WatDMtyi*@=^~B=GCU&O5C;zdY(>z`KOLNa9cAd!53kXIr1&lfWdHz- z02R#v!2f~nz3cYw-rer)Zrj~!chs!AbvN53Yp&f+*V5GH%W4;6qasQuvjLGrEd>yS zsDl;)O5n2_G(d$Qq7jUMUmrn&pnWnE;uGW1^UpF+H~aaI*R{0T8Bq8uMpHj#o1Xw( zXIxd6@aoQOa0ad@E{{SXupg_=mW^KEkc7PRHNBUf3nm^yr4M@}z8{f-?q4t}!B32hKF}^N5io;ll z731sDnwI8x<|BG%e-SRX7G*s zzL-QL9;P}7vx_I$;FpXXut)|A+1H+?s$hGFG`*ySSAz2q)bvCs^BZTTFC>2MDbpg8 zB8B;TdSV$&`=@mEuGjuY#0mVSj+a|zH1vgyBL@G$tKHF||3zXL&d11~-A|dW8J?9b zq4VFWy5^nr#UZ;;=j+CNf6k!dT3*+190`_5+3IBdR_C?2PKr>8P}wzPHz-o)5{I(v zA&Sno+Ls>A1_$=6x4N<)wFVP-&jgbkpLq_49LBE?J~geup;nkmXOIbaC<^ql3g zvp)#Nf6-c@B6qa(858Rc9>9R0OdQL>L*r9+_iYh>@dOTz@wy|`qwJOLJY2>Y`vpuB z<2M#p(XDWdyHnrZz@nN49{uVduF1|LxUVe4pbB+gNJVu8f_1_%#qb0)Fa-pdQsJPq zq+NDa2ftX6F^0XA&5D8ZY?rGjdEnJF5azUK>y(%R>MZXk? zM}hK(qNBb4C0p`*Ne0Op`@GaZ9)EvEgcHQ+mG<|z)I2eu--HznNbgbe)}1sRRD7D= zi_*kuns&vdx^d`_-n%l%sln3AzY`$Fo#1~?;_&$N=v*i4=$6&1eU8Z<>q_5&lkzP3 zD2f|INzBMA#(2TKF^E9b+0a|0H5;G$H%RYQULCIItrr?~UHrHAz~CKd<8Lc&zjBLT zGiix1_qm$`0x3tJ;gPTBq?mBjW@QD?Q3*(GUTR-9Xdx-Mi=Wk!sHx0*b3;G-Q^0P-FFtuRLK1Pr&S;z*UcrKC<7t=p*F>#wvq zw3^zf*|gVu=~^uzhoE@ zuR+7C&=WXfu~AZyNO((__HpXy`fZ;r@L?P;W2q_>-UAMLg7IEEK)bj`0A(9umZI#s z!pwxs$a4e=9xVjs5Rfp{*?5s}yAHF2?444=k1T8}WSj3y+aVNL(VewaD;Mr6iq3^8 zB{!o!;QP@_&-e#7l>%**=x~T-UwRz!*W8I(9E&<8IXSbrez(e2@e`g!jX&P?gfvhp z2sti00peZ;6hai&G(I?Q6?5Y1*6Y+~UtWo!H)v_-4gG}JvL5ni(`!#&JdIs?Z@=B9 zN{Nz+M8{hf-r}N3JKRLN><0G~aW8SoPs`1#f+Ef(j>vP#qm6pAONx< z^@~O0*5@Jqid%}J*S@MPMd|f(N>wM#;@wWA-yQ#vbu&FYRuVwm zDw0BhX&7ZqKUH@nQ#E-fF^WJW{f(W+`rWiLjZ15-_=oZPl63b~I_bmFD5Xe`zEXVN zr!eUB8?u;FWI zIgeRA3H*-F5QBWv=xzgCf&Be%D?gz%!kNyx*w44BiNbH4dvE^!{$CocuQ;OR}M@)pUX%l0M@w3CczHh_G69lffVcU;f(j z(TwLAJP&^WyL*Rr7XEr^A~lLwo8tiUKb=E|@{`?N&baL(LweH+yC>ic^NilLv)|XZ zg>@I*q`bOx(!{M{^=-x;9XsG0%sIn5_!OM)yw<_Zr|<#rtonrM?Y2cw7IprH*Z8Vx zp4rgcx>{o$-*t8w#C22p1L-8_Hz%9CQpM{=qp@Gt35z*Erh}`OB*bmi&YyCvoLJRw z$SXl}+O;HHq349!>Jr0$v=>m_>vKD-aW_kmfBS+|)!5CJSB@vX8RfM%H!_SbE^5ZD z5x<|xG2RfzulV%9J@PAAT!Znw?GLYBVOCrk_Z5t|tnpS;(|Ez{aXOy9cxDnm1M}gn z=Y(&s*~8#pygdzaYc?9)De!~CGolA`O}gw(3p6i$@NZ<=xe|?jMv}mtNw7YO$}b25Q`33=xR5y}psrfF zD2hIxfKbGQS->SRFcTf9(-7@b1nCbwkIr-K5|J8uHh0WEEKP4vz1 z&k6_avu_1VAxm*=J^Xf{cdV^+&tDj$hCW>=s!@_cn#R+s9)FoP97egpOm5mNW`2Af zru;~mR6odUfyWrto8iOC4o%NQL<0^QD|Sr#ibzwe*OAYO;~tNyVQCJ2wbY|LVC2EW z#w0r$@Vj17(|-%l;`TLY9%mhS#cu&04~986j0Tdb{V*!s=b5Xl33Yq^Di=c* z!)uu2&t5g}z|)^-m;l@C!sx7SD{uSvDdiK<9DmJ>&ii<;5|PSF*sszU7F(0O2(gRt>?sR$eYGdesVRYES`f*X8aqerdQYWrMaJ`C7ooCw|T8L1!p0> z6WKU;wO%0|H`(aV-XyM6ncPT*1JzU}XDiMAXkQqeG}5|fuqOqSr>=-MX3x)#E8US z;^!mX6FdrcY}-vA0Hp%~13(hsUJ$rMO&ZW$q0I%H`;gzvVArgG%BiI0S-GQ>|G5u@ z0EMp+jL&ZkR1z=wdz;KA@QBOG^S(sPn#`9%T2jE>g#CPR@)u~27SZa9ef`T5lSI)TD-@6`HE4>! zd$}Tj$U#HSgJn5MQ*?VtN!wx)Anr*E$tb+go1kMUAXru5H0C4vyCf{C05UxsN?kA> z;gTd}I@n`>_Z~do=j;~>-382}mjU0Aoyjh;6Z~HSP&_X4R0*8PH*q{UC_6@UBx6}s z{7gyf>#h_)Pv?OIlh2VhF3f!#F==_DFR18Ho=uq_>sdVZ`8KS}n%b6*r15sowi$LP zs6so@ZurYhe}5ZZd`aLEz6n~wH$hAICf7+f2~WZ##1giIZ1+<_6{5o zgI*CKLf9{>=8+m^QC*q;4(*QC!bLi4<6ALA+&h_m>qRcU5t^R`?9Apdb>X#nqQ4_QA+y#M@WH% zf-zdK|F}Q=r*sh^iJkh)nFr{48YrvQxrWE=;xO@s13;J^7HX=*uC;6F7BeTAqv@!p ze=Hj0|DRab4#Lji)1-2`sXoaT05)cBFT+)n$PvlE@i2Z|(#cc0QF>ixO56z&f==gWP%PYDGI-ZR&lG#rL6*L>9o^a+#%5=Xu#(9O93 zfcGtyZPpGUK>azhFJ6(QCbxL#J2`NO)*^PFdqMJk5`X|FKq!{^pMLX%%keZ7cpv2C7PSEQbDIRFg5(YT>1#&5(Gh#d z&Kfv(J_9akUR3co)i&t;oNvMMXc%UDVkWj=8u*+p$b)lA9Ott^0%g6qI%4)$t~3U7$m;F>uyRti@RA#*h3SdR%+m!<6y-ah z0yMO|zo-UZa>X};6La(Pg#kt{FEuIg%-vbBh9S327z)%#nrJKI(8E2qbm(qLS#vl0deNB>Aw& z6xLRFq!Dgxa1|%y*_X>@5!RpU2Xl=M<75}0!j*W~Sp$(g0!d(yG$8^YH04;a#wn|= zbxMDq-aye1$pi=i0*?UQJ@0{iAeZJ;-LdeR{Bduv7Q=qH47NJZ$pM8D|FvLZ;c7+x ziwYph@6$vzYNRr@&90eq5?N<1`tS2zeamZHC4z@EJLJ8F+TzO;`EzSbC|+$hX7HH1)R4(wf$T(8&Wm3E*<5QWv*D8-_%_ zFZSA5!Nl_2`}9i0Cgl#e`0l#sP7){5A#rE}7wNdBT>k0aB+hWKkeL07%gz)(S4VZ{ zD#qEW;VHSk%-qya=+mOr;+e)=Jh~9)NJ?+`a9!FP9ySFvfyKu9*AbY|dbUT(lZ|1$ ztn5vs<}?2}LhMUgGx(IWcF5QMhb`pz&dXhXmJ`x)M#E1v(i1wtnf;V>Av%;GI98-r zUE;n*;dabvH32gwvld76c?3glv@GJ?zg|o{UQ^~%c>w0Z@!?o#q>{iUCkX)n5qRGy z5Z{eeLBK>y)am-#F@qUoneEnIBfm< zl2sc#wtt&R&ODh6ps>s4pj^-z%7Ek`KnW22=QvdlrSZIlY^b7L-hBmcBqe3B{e1Om zc5<7A!^O68OX$;qZrs=o?SJXNIy5_SsZUGUK2uFvET3)m=-XIzF)f&u;KUq6vV3~e zcSbF?2VFh|hM41UQ73Gn7L~?zl5<7MIQftfC!$K;jPJShYEq!R39gDA#v+~^4MjaB zjn(;uD~US2?@`g{!I(pcx=(ZzV+jldJ6YyX*hOIgSS7^5z@q081Ylt0G+9@qLAz_Y zkD=oAQtiv3El`#uEfNA*z;A|~8C;($@w9~ZCz>flA7#Q@#7^bU^G|O#XBE4ZI_bL0 zG0xEit_pxpl>LV9)TZYMR7foKhw!$5(4KTcf4+vUBj7w1`qV|`M}xF1Bkz^g&s5KY zHIrjTMSAcqr9mr2_1NW4j>nAd>pxcM{r4pTzyDbS^nXXegZ##8QD*14h*p!hC#J9l zx&efEJ5?l^-i<>DNM}ZZqK@GeBP6=9q>ybS3CwjTn}-PRK%hYFX*b_HVRCmN8+jK` zI3U#<&~a_^U?9R2A^;CrR0&`dbT{7`XA!H{nV5HJE6OlSt?^K|r%r|}mQXXR0`Pns zPovGBJ_8MBENb9{C$Z3Zh>bgW&^(|{^*y%Mgwr(DnAL_MZgb!2+Sq#o3_Ts(7=i%? zs(`3e(i#l!6?VoBc*48U0Pi|+q`#w>5>bat&)$EUFs#WGycCDFUz4G7B1ZL0R-9{L zdItg!yNxjiq9|$m=oX9c)1ONegp6hf$$v0sEh=hg@=RkEbPKo16(d-Rv0ar`2K;*@#BW^~07U3A&yAX-ipFF34@-nP%MnboiR& z(=v}tp&B6pBP{Cz>}xz^0k~JfoL7M&+)L~~fAgZJuTqsv+sPaSe>svV^FwDdt|jwU z^yf&^%znbPwi)XGF#9&pR*|a^kWtH)`78{Vhk)Szkt;PX~!uJA%}p zYN!$gCKydSfXTV#Q8>}2Do3I_ACozR&{h+^XY**6IEWX9y=T@YDJF_|rnx{2se}js z^$w#2#2Qfrs#Y_N5cMJ?+*~>6@!H~O^w5M0-mCk?a{5!O&MnvYRE|0LQ2E4O=|yX_ z4k18CD=qm!w~Ks@NNzVik{dQMT2CJ#0q`a~IukX&5^|&x~pF<%$|9Nn0!eWZ6h4ggC5P zsk(#8%FW!PxK7xuD?g5cGg~P!KDln1P@*t^!qHp>Dw2e{VDRHn4j&Po8IH1Z*dj>6 z6eJb_0)PNCPXGWA5CQ-O07FAXGyni@Rq~xPt($~7(8w;(3+FA|{$w^jP4xE;-wbU|^fhK9$ zTB=WvgrSvG4$Q6aw@Grz2qP(z|m+jiTo?4I3o+o~7ab6)P; z?Q)yT-err`a$@d@Hz5L2R!doy0z`Q%goBchM1(IIO@ zN0vQi(YtMh2V2f_1hc2k)hoKGraq>co|BftOs~6B)964pX6sN@Wt)2f3#GjecZNbr z`?Fp)LfM`zIx?Kx!?GaS*6ByWjwAYrDtqm`BwDn`yc?-1jiutZnVJavJq8uD9;(N-(y%R7V(Q^`f8T z`1++~1WnV?8W6LLDaOx$e7!*H%Y`yh_l7Nl}5ol;9Hx z5F;!kaDXLDil{RI5+zkuT&}%ZxjyW)4z4!8=6zx0B9 zMUAEF%^VDe8uo7YqB^%+#cGS^nwhe?I4IPvu{`wB3_0s@Pt?0QCh! z(7Y!-2MtKkqW8|V$inT4yBw|rRb^lsU3 zV^NAD57YUL{IAANuJyLOZb-39%yTV{5krVC_Lms1f{WeOxJ`tDRPi#Zt-jcUV+=oj zGrb(&A*}(wzEbm}72Zn)Ks{U>NaXJMecU{P4bdbyZMy0$fSTQU_s$=|RW&sc_SNdb zJy$lb9amfC1IHe9*3B2A*&Cry)E&dAc7XPRucG$cZ-qD4w%aGJYg$b)7j}HM)3{#8 z&tR9N;^LZy9#f86H=H+~ULGfC<5uLF?CZLxj^jp4?Vt0m*+20Y)9Y{^ezWc?e1#4Y zQezLQ8lTgyVF@sz#{tJf2I+Nw_v3CZ~z+*{`6i;#eW}M28 z$GL<^C4tB=5i!P-)J!czfubi-1Rzx9A_+ihl=OgAk0vqGG?+=3iHie2lDI@R(!%y! z{P^Czv0*x}ty~UIcdw&c&|K6e)U)OUJbfSROSTHJE_lyA)Xn;%FiRscfycM&N<0Sl zOBedh#jkh(4%4!i>(@z433a7mIzMjY9c39x;whr;ylm94#_PccyM8Qg1a;`qfZ*tHZ}Uwl5Rc~}#NYkj;MU3uwI{c7(z@8Mp@xZ@dv+jTtUH{!>S9SV1??RW6@ zw|~bafpFY)h_d%LEE};oU%anYJ~3z11cIY=K04_^JQmSZhgecgAjBgu1>oj&Jq5@$ z!iB~bxNUsAeC~w13|<2F2zqtdNY`Sl&I_+hX;F!fIU^1uKUt@}lW^R!TQmA_kB+j& z4-szd#-YCgGQwwTZ6_>6zsrmh_S!!_rmIPobHTDo!I;ixI8J%}% zGYgy55F>7iB6GiQ?qOSDBduk3qA#r9QN}=VQ>Vwuy06Q2tJdvTbd@e0UTn`g#_eC1 zh1(NyzHIGH!>cQ9h_K7c+O^&Mb3}O4f&C6pJ(dow#weHtcqaL^C(iunx>)jKQ}Yh*?HC5iy$0rYeTg8&x%-&1E+_t9=3|KbANQb z4p;ZrGX;r!FF#XQI?UHYv2%9cPGCF}r`gM8j=kf>Y;Xfre#b;4_HZzqCaWga#2BPG z-Ysqsx&uQmtH+aCQBLQ=U0of})CL4s{b^Jbq5|0(q)_0Xt5F7kKu{5iOg)K#Q0D2r zCJKL8aRrA|*(D20cCfZUxK=g~xVpQhiwJrYDl2vL=$7%b;>XM1pr&vEO<)8tF=<93 z@{^^OinY41MByxmiiUQ_7Hr+R&Ac5~Y5cl-!s1%t4PDzJ@q%W3^+`71ny4Lh3*9~9 zx`XkQ&EBjjG!wA#%(r+>BTpxGie4AOD1v)+O!$q9JoS%uqP+)kZ<}U%UA4vTS>gma zZ?`PS<;S=tk|Qs;o8@cc+^BzSqM0&K1mt3J3!Fnh{mDhK50Ruq5@keE1>Ju9x&{mZ z1KohXV{>=$O;Hc~ou%jMLlXaeb4h0jvF%)P{vHMi_yf@)MX$SRnyGDnT%Iax2&ZF9DT8D1~|G$6J*5hTmgbM*s^k zVAwN$BF==e-GA;;eigj%*89tP$?xpWl){E0?(=D{T#n}55VPPF>-MevZVm0No9cDq z=%z)v*md=Pt^?ZixZjo+*>jcPB+e@MtXNm7-)G=@o1)<9%BZkG5WqF8QdYmfE*cXE zsst)QWa}qEM8;nHLV%@%}LJZ8nOJ86BZ-P zSckm{nuOV^V)PVe%coXvZVHN!->4~Q1$Z9h*?5Eq5CqVG2&%wNLu}W)E;U@KQsk0njsK>zfSDio#PZlrID+=j zZ6KO-n}{aeCawwFgg2oRir5VH=97UMaYsTm zyJ_^sZ43sbpw@|fLUZ5xPR0vs$s7|~MO$GzR^=DLKMj4G`%nL1TT^vodR-|Pb(S~2 zH3N(JYWpO72h2)>>|F#ohLvF(*q#r;JnSs~N6{8l)Q~&EJemtxyFSO`3Ix@KtlcNr zd#_E7OfJPF(x*^tvMYrbecmHcvs!HUIgmxV{pd|Q7FBqq-aFjwg7e#jylTah|N1!; zO9)%!(>f$w=!D&th^2-$HnKD(O6o&J_zt%wB{cyET*YT*-<|G0k#UN;)yMMtEqMjf!K^(!vWK*Gm);$SDI&W( z5f6^QFp7M}BT{-^wsPilf)YH7)r*$uN>c8-AcsqP=Zd>^i??XQp>4Q?>`0}msLn=S zN!n_Uyz?|!QKceCKfZlxH}dxcv4drx_S`eegX3{OVGHluNWyZATANY6-V zq#SD2l}|H9lCb@6pVDnIa3zl+=6*9;K0m1VJRN9%a)_IIv&5h3B4fVe{Kdw^nzMv> z#pzf;tUQHvsL7_PEK?7``(Q7K; zsiy^%_gZ>2Nz}o<7_ofv@`9JskukkdD5|LP5mm0z?5kTFE+9bw&iiOp(*HP&dM^Ez zmaRnv(w4STF||6%vIs@0vZ9i-Ho?(l-479(m!^kHsa0t26X2h6nA>WZvLB9y!oBCTPJ z5V{}Rj(wwq^ z_A$R*lI`l6PC7A9n}CftQZM_7JC$DO&GniPg6K3)e6TyEa*H~*GtW^M^gg8xe$3Bq z$^cIr>VOf<)&mB=0leIG_CopX9~t`J@$~zcljr8Sz2b45gmaYy{ZvXP;}V`f+qvBY zkN0dl_t&}bKE0%peIv;(IlPQ-y&fV2_CF=u@xR1}u}OBsdPg4FE$mFKs+4^?7V5~x z33C@!iT-}fUhSlbyQZISJ^TdR`tS@-LUn`HGc@3=hr8?(F~8h4zV8$F?*YL*KI3jY ziXKNbdQBZxzDADqZw?@eU6T2UtKZ_Mlq60oQOA55Nt<*9Xwb=-E=;Fl&@&aodK!uw zbzXEsc(?w&fp%W^!x`V*)$vY_C^=4yB0-+$uE|?^&$)QHo zqPEBV*7@4uSgnRc%KoH5G~?tR3MQwbK&*dQM1H_mo>!g95+CvwVLiA(L>7f5d5~3> z*--Seb(!Cy@Fg9GndKlCcpE989#6b2xF|@h1P#+v-H2tmKa^k3O!LuqYs29%@R=A{ zB^0Onv}!8#oLxh>X8&z+zc`7ph>$qDm#ExlP$q`-&BY&CNI%B&c`wqcxJGNjj;o-C}pKbMCaD z=o828M7wRT35iO8j)bN*tN|myfCg-N1NQlA=^q`wjF_J2#2m9l^VIQ}f2M{g;5u#s zt_^?8Jua~3y*V>GLlv9#4X0qxHFhPO>%_LcH^+Fg2qH)i2z)hY=c(DlXGm5asG+@e^M2qEFi0w1fWbqR0aqL z#1I7sgv`K#qGaBVX|Zp6xINBw`r@zyCjJwf&`3Mf^E^UX4uAOF{n#%R`{0G$q`z!B zdQ}|I(TA#!W7@H!9xrVHl5w{RN-~uKAZ;xafrx}36B)}$DNi-yDXr865gC8dfT2r0 zUB@2b_2Y9VuI zpA2sQoZqXg|7fyzeVoxFbXBaaWGL-~GhDseslX-@z@uUXDg}ttl?WOf2_aTU9~~r4 zLw`-rWO^1UO2HNe5HIatvvXa7`?7v4nASu_(_%0~3U-<>bK~%zC6Rzo%ZX@IW}77u zC@NqqiAd47B1I6Ef*K0;gUY`{)%TiUI7s4WuUy!&=Z?}h@(}NFyPXYvj(k`S$8~jV zp*`OP;8eNPXuw0zT2sZkTqFEF($ITrR28OXg{+W4*1!W$BnnKKFdE~8s4ykKq6J>} zKaB(LBGx>o=dqxa1N{_wfRsvSNl3!^}fLNJ^JtL*d!a`ebN{SjMpa>LtQgih6q%zC=BjkZS)WV7^mk| zybDc8VA_3g6%%3cs9UD`NcQ8-c0cMdhWIn6Jpp=4R0|NYtYIK+Wmy$5nfHl+7yZ$CBGF;{jKN`TxBB7q2`-Nby*KsA1sRVj0#03S7`4V4_-OqskS(n8LH7 z2LS%&8tZW$*sTah$Mw~C)?^{clDAKx5)DzznU#UH6v(Oz#;a>g6BUY;QA0#w%!{eE zdhu~9oW#F^&kqAH&pk?l>aFAMo^QL>OoW7TQp>o0Sj&8fX5=|&!Bo;eVgKP^OAQ0d z^=`P3-H9qD1OOPC#zbHcYZeKB;Z0SO z2BFp+fTmqGRMUZC*uaO54u8L{BGVIoxJ~1U^P0?iatAtokwmoo6$55NNeAs(YLsdo z0D4mjQmsc!QKq3y*@pkV-KJd%<_ED&Jsw&-_^)%W=dw>HU ziUapD7LM@~vol1B|Jflm&&An6=^ebap=PK9-&tSQoNf!;?DFc$u_4+)MwHdRL)cqr zT+c7os%b~7_1n7|{xuT%n)=>Z-TO10aA%PYOO9gP9S0Y?*1>Y?b{}Hz6lAyO@Xxk* zU}97FTW6c?ShL-af4;`|~DoSm}J;F>91?|i)U-@g($EIPro@!!lOb_x}#vUd8K zAZ0*P21)>6CJ+^=R5c`FSgKycmw86bY^f)@!rm{m1Oe^X(}AL*0C9H$bJ;d)*yAtU zxlx`4Y6=$8z^Mg*P{Tu}KgxOu+$<29B-Uh=oco10P6U#$ja7gu8_1qr5`iIAIACk0 ziID{mN&|&~#F7>-krukOi466R=^$R0=lq=69_I423C=$xeLA zRYMuwmHpEB`g2{N=|sY1P1Wq37f5R|AdwV80l|8#8d8b=iClJ7!a0ah>aLgQBc6k? zr^o+F2Ti%{V3FrLds1e8mWeH{#A3UlB&!I42U!FPWU8Yz0aTVE3HyPOiY`n=(~2uCthcT?>r5Dk(s-Py$7(GTbMX2wFKSHFX+= zj5^Ic^LaM5T09v=ViZ6&kAR_Z-`0Qz3^3RU8_|HqP+v~a^_-CXm*fWZOd^Ufrm`x5 z2}Cv$fTi;b6HSd&Tl^tifB#9Ur-@~?-qBuhjPI-AI-g&KCG+)xK%AAx)ryX`#IonM zYP+?@=X99fu;yamTM{1`dA#LLsd}F8TV#@c=f%q|o^Wu_kaC-l_a}#O+%Zdtr~ptA zSGfR8QWzH?ts-%mRh2y}k7x0;>3gzjWwN}4gRv{;B++_+H_5mlmdyEwvU? zg;v0z2*MSfY$}?;AS6R2L=o&W%u14^MUeDKT=a}U2rOF#vH~u3fjrU}0a%i-@HWDd z+)G1Ot`MGv(|xj2)1he+g^c_%#^*fK2Xp=*E;s6Z_0vsz3v*2aWXs#Vqd4J{)^ zVq4>JX~+W@W~yMCFab#|A_{9zBNqsMbP5JRW0Vyn5~-3l3F5>k0SU^iLRl0SC;}qt z0Wgj72&P%1tr`Ro%Jp(z8l-#CtF!6!^wgAH`c*Z)PsFDc?(8=ij_w}du`8_kVwm9q zwdG&ijdtuVV4aWb8ZM$@K%@q@B zp2$mIMI>dP62fLZ!V4hD38H9$=QRtPa5_*-;TI`l(jTto_a~Ayb9>vidX~L)CKfl< z80;Dg5Thn40P5#O5P^YVixnbD1y-1-l6q-!W#0o7Od3>V0#slSp-B;JW^C<30d>fGS&lPQ44s< zYiFZj$(-rZ-{HZTvSL*L@DLCK0000pGe$H308eEU(EkF6MlQgo(mUDRytuI~N5G9B zdA61;k_R>2+!VKS%Wf93WtWl{nh1)30C4@Ve*j=)28w0?zyS;)z=-{I;3))2TC22H z{NSe|wP8w;G?B!`xjS;%*3@QR2!*Aj_V=7D1Elm)}3y;E~(n1u)?}504S(LibN2;3JL-T6gbYP7=;K3Vt_~iK7eNcUm%EL zKFfFnRMrn{8Nb)V_tXff_3ez3QMFRg^BKA?H%U~t^8>c4Y92PtS!h*1Up9oENilOP z6IQe2WBd9R*ltTfiE`&3&*`FB%B_{!Cpe{asBarHPwiTL_R2@**U@sdJ2iJvmGyjL zE8}nyG1i@!t=iaBuA6kHisdSfhUjxcdvLVm-&kRMvQO#Xq%O?urn&x6ml*Vl)go5j zqnhak$G&5)OKJrCxDhKuOTzjmQ8aNP;N6$i3LOOyVW(BJ(i-0Oh(iTLtM61S-425!O4)y2yS&V8t=LpJC%C{WSvCXOx zXx&-gyy7U=<*dyGRy@g;QOf3;9zbb z3r>##!6nW|BMbsm6-pB9LP3fJP^APUQ^~TWvh(ucu3V>#`ieP8+%Aexz6#g~%kAWd zDLe6mQB@zM`J_>Xo5YDO>0v5h;W(*OUnH25!XOZ+1RzQCI7*nHejq$9i}ER1JXDnx z!|O7g38N)2z|Mjl!Zo9ngA~!IL3!a&M-OsShvF#kOlZS#DG@URW^BO~VThzksp9}x zf(&FVFEA*dny>&jYpz~u_%>0yLjd? z3@;}iOH}%Br82SLNP$F^(-YMO4^pCD7z;GVPPz-Sdj8WarZXNlI5yk5*<{)24J3&` zCWD(&AQCLYI0K4P1qURdo+!iyOVm?JaH*Zor$uOxok)CgK<0PCP?8!nev)J|xcoL$Tb{jT4 z(Ek!Sysc^Sc2P^#FMeTBhG$<)L$pTj?Z%#}wI=3-%9@V)XMCc}p*%`5&7h+Tn6X4u z`eW5-Cr%L_XiAcrvK6%}I-WDr(dp-3bVCo>Q+USKZ~8EiPQ(Y1&welWGdVY~WNYks zX%2rke5BYW!3wDlrDBl?Iqrr-1|dm+EQuzjgi&!c^Z0Z9Q2gxh^(9RwgD`1}IyBt~ zgwz}WkH%H9Jc=|>AZ>Nb0`yd36_{kktlm(8qfg&XdROLP24`1@s*AFeH0qTNN_5%) z`6IKiSS7INuprKh&P6G1{99ftGs`agLmibEq@@qQd|$0L zfE^Nx0|qR0utp9xk@oBa5~>GC&(iuIsK9O#MJ;8lewl%3ye5-CU&Bcwt1a(tv3FUwE15Mt-NXra@2HryF0ph zwk`-qQ+rmN#dhpyj-tt`QfK~yDEE{pGr9`hS@lKF7t_|~=qlUWl}@$A^4Yar>C&P< zL^Q8m`lpNAOO%4%9GG$y-8Uz$Ln6Homg_C{751-|jv20h(nk~@?lLadm79~@9*xyeQYrSfpAwhP5rhTab;`Fn@6q>MN3RLhG- zs99N-Rd~t2qvsebY>C$FgPIiH5yTHrHhnww&E|$f+{{x`NyZaZjnfRI&^8A{01^Qp z?~BSwg}*o>8cR7=QLh(7C3}+Zj}kAjvvJl&s)o-^u{+xNY+nIKIXi#D%iHX4w|AiZ z(p)6n(4)iKZc_~bxog%x`uUsB`SY6tm@;cu-Y}Two5O%t&nHC(!bU;w2t3w%zQITB zPB)4!byI7!^N;n_?OF(Z2`m^b|BD%;hA1%=xOiiEeEJ{b-H4FG-M1UJJGUks3}1=a0pHz`dBSEK<>T z3|qyoc`52Bb??#wU@oSXrQCK2e#|_0EwT(fmQDo+Y_t8Rd;<1B!z%t7_1A~h-ad}G z4WKRbY^zL;Vw&3f_pMVqi1VF}q41MN)pt6-a$)a9wOCXTEy^O^`jWq^WsGccJ9O4A z`$(j}ux}&=Q6qmz8L*^eDG&&wKoI~q&lwr>@I56H z9X*Q6cKuXh$_rjQ0%Xf3LGWX6NVq45Q0-1I%=RfnPe}`t+B)3$dT?rbJzDP`GV&|imK8C_$!tuEwJoa@*7pKL2E74il-~0y;*ADt^u=dI2BUSXpPU&UeSg;9g5cc?P6{l z%2^fIs8_vzJvnW zpQx}L2loS2VB$sHf{p*dFpX-zEf{bkd2VFyEK})S_p@0b`=qP~qHRX$#{PL@Cfw8| z@TY4pB)+YlQJas~C0_b9W!b>~b@5{Dc3avxa-S^b6QTGZiM_Li$NAP8+$9TNNsRw~ zMnkhA9iSe1mH!~Wb?jTIG6SwyY8rM-ppLC@qLLZO?pNzj!#Ev=fOubYf5B-bPmBuf%fP%KK42zzFMf}o3pAFpC< z&?m1xtFc;)vRnEPYZ7hCG5-;=Z5tUemgz`}Jirhn5(Ew9WNBn}2zAaLlQW2B*`jj= zE4#gJ9K}_l9C=ZO%&*QSG=Ep0)CIMf8O4}4KJd450}UR<>W1K6=i7u^-RGV9yR+FW zZI=y4{yDlg`5S;mETKrDu~5kh_Cg%e6@&3YDfX8l86@(h=(b?xiDWd{P>@IB^|G9^ z<52ffXgcAJIj{nPDfqbb_t${0VO$jE-l%S8&XHA&u{My?o2-ZQGFIM@>-bQ{8|ZJ8 zV74L}bS()Z{VHrv-2vh-&+W~(aPIelr!fE*Q@pK!$`-d*j{78;6Qof2T4Do7m?Yia zoT1QU5LsEEoh5}9p|)Mqf@J~0%x)ec2s(4ZQ)F=_otiSWifvfFG(_ z0;E7lO_e4qMi5Jd1{!SM*mN~4SNu&f|hrYU1-FEx1) zjKxYZlmZ=#@9>@DfM!bakg_H@=zyvOa)|14uoE)zPZZ}5tKdG#$D@909hquY?mF+j zyzfOkW1Ou6Nc%V(IF=lwyjU1GPOyq2gYUM}?rrP5pOtid8vl^DSGzm?{HDx>r)_%s zlTQ-akoMTaeHJ;9q{ctLd`}Y0%A3in$zZ1X;aVq!GSt)Gt6tWiKQx3{g`4RRGyWd< z`2`F1P0hpTmQ{JtUwQTc{^ueFh2Q0ZTLONx&n?U!ii|jS8u!hQ7a|S5d*07Yb;3({Zf2+nDC4KDX7HWuzff?Fd)3M^{w#X8X~bE1 zrG9BLJo%dDB`3L(R6=I~Vh;#f*W?&El27T#-DKo&Jyjbn>P|&{Vuf5XeV^JvqAB(! zY^4U&`$_LZ@muFhw;cU}!(IxTRSpc^Q(|5@ZIO+ZL*2(x|!__UAb?6 zE?*b(eKLKmTj3U>5KHoAICHSLi++2C!H06Ml(Ma^F6G+gU0&8AL-sg0F&K8eEoD-v zD(%IW_mW$|H&c5O5q(N7FM1bZSO52Hq%wr3;(`}TRx|a*>401RTa7c&Q=JTR8T9t? zCYQXW5vdYy$qkyKIr|X8gYOL&}oIA_wE8Ngm_E2O*ts>jR?eN_FF*si2$FsS~p+s4QGfm|tVWtlO z`pN81uonGDqLNr?b+rqY1q9$V`h<|rEu+c-&7?Qe;YMd|90sBj&s&(d6F8wuGFaEC zus{WU=%Nl*3IUgF&s%NtlqO3Q5C&vX2GY0+K|_ z1*m$el0>>v#n7dXddF_pkdNT%vg)C3vg&A^)^9{_Mg4Y6u+Yx(Ib-;{{Mc||+zZq+ zB$3MVLjstXPznH*sA?)gNf4P3m`Y<&*Y)#*YuJ4J84FupoXd9oT zhi4&3vFoeOEVad@fAxgc5V;1QsojN?yD~nV&F-_6`O~Wj)GO@ilVpP{Yp40Q+v{%^ z%$|4M_Am=!1pjYAufwL=X$*3jmZ*XQz4dt}1ue*|4H}c!YyxZ=%S!@k_yrfbgYaN-M_+Hw%u;$|1+wE(>`GlQ5vabf- zo4wwE2OK5eHlKgl;@n1qaMsCKWlzHvIx3m}P8UsJnb{RTE0S> z{R)+43*+hNImqD^&|3a>0JfiOG<7uG$UF(Zr~ldj6dp8P8P*{aRLWM)ang_99=rUB zb$Y6d?$6%ou`=yHYt!pdN~HrSfX&KLv4a6lq$Tb@-sft_IU(;!g=v;`1Pe6P>=|ZO~0yhmFjr|#nQFX$9^?hGM*Gf-0L74CEr!irX#&blI z1q48x1zBI9J3hu0F@zTo8!vHT=1NA4JAY_g@m>fzxAyOvJ7b+U{X$$r0cm@+?|3s# zZ;cI$$$p|LN4vTkg@s5fI<+YpnRr(><|o+8uV6MiPq~EW?LKlXZIV0=JEq-I+EZfEPWF2$dS;1fSyDTf`SU6VXEmSy3_^B0)nQSa>|+7W4byB znU6rc))rxKgv8!1)?7!KW4i@Gv`7dD2ngc~a>TNMpTOJ7mGSOXvJ*D5qOUi?Z^%TS z0li+%%?C2}c$Lg4Ijz%F)&|td{7*{6obfM&e{Lsl?8arPAwwvrJ9E!HVT>b_idhV~ zvwas{OYUI*sQW{Hj(=S5>Q-foNGoNkn0wBQ+^#XZZ^pa7!R_3Ui^7mfnC6fZBmtn7 z91Nhc6C?}m=^%=brl&1`62}778GOeOT6rb*p3QINQUBBbLB7~LLCjQNLWP4m1DFaA zEI=kFx&+8%2t7hoYC^$j|1RLXL?p`v3{(5jklk|Rr{$6H>;oy6zjAqy?8k&Ox(+{wjJ5M!pFgg4FaVmeo_YD z(r3sYOvK^*NI6t!GcbH0KgCs z0{{j9Lo+or003@P`=AftP;?8>DI;C;`{$2skuh={!Y0Pdjl)4AtRS`=$@0mmr@QNJ z5qZr^;u!#fXCM!*7;FIm8JRev0s!=b-vkNm*$YS{CJC?8w!#H|X{@9vscml1-!})+ z1X85f>V>^fz^I_^yF<4TYP;?i>>#b>%L_9SSeMI5mru@<~e8#By>{ zNhp$%k|i&MlXw6i0su5K0A>IM@B9C|cf0OxyY1bzZQtve-lPyv-0A`njk9|5QVkvbt%Vgw;RiSPjwuK=E)2LVsUp8zYkZkw^A zvpaO=H!JAYoB2w4iP$-Y^Q>2)NRMmf_dEesm*dqS8bn-@gpgH^AwO$kd9VxWPB;SvLg#t}6Ey+VS>7Dw z8-Ak&9V$cJ`9Mzh8(2OUi`JUP&c*V&<&_RuNXf%cM{9vhc4a3>H%!yq?o^ub*P(N_ zej!Wmt*MsQ0I!%79G83 zdhWum)(J>^*iVAKIza&6U$^z%E4;ms7v5#LmA!(0=kKUQ^%cqeJu{;=ha z`n~N(|9{{A(A6LGmKYTZ%!YjQq3GkA(i4=)wyV4DbzZ|ewr#K!6QlftPxZzCM2dvl zkvoZAm&5Fw*NJG?kh|TMWktPnS$c$Sm9}_&3f$zysUINQn6GW1r}wy4gTQy;Ykz!y zWva5ODobz!fNSHL3rO{dS%5043an?jUJ0(62FH7=w{^fgVw;;uEi41-@ z>nF5g{Oc!qU!lR-a=7F5LaX_dL4S*SN)Aq5EQWJ7@DS@&+ql`dJanupB)H}TfdK{g zHNtdl-+lKEvQ{?lXD;!Kh78 zebN<1Rif$RbbcJkrG$qPLdxiZ1D-t=%JFop$)spWqapevmnoyuR6y_&CDX0yI=$W) z2g=qh`wjM2lEq05pC?Nn{TAsFTA+oCN-zL*Gl4`5ml9~7f?%+q5SIj2vzA1C6Pd1V zbxXO9Z`_I|8u`OOlFLaEmCv=6LqWET^^ADmob?$9N9qniF|azah-o zS7Jk0fL*fo>zDtjv5qOveYhrwM{xp zwsgyI_B3Vf-HK;Z%|^j(-)N28t(bAuPl7rndHS7hf5Bb}!AtATb> z$~Ju$n?Md%dItdNC;46p?)8i!!QXKiA?_9=)#uJ3^1ccx)4oC*bMk(v455~PF8qW_ zL5vn4c3~FL2d8p0jBnyIL1~s{7(eWBqT#K1z%yw@r-j-X-20K359VyU?<}+P59++O zaq_MDUQzcjW0>6S&kI>kil1+ET?`IoRsdd2eJH6I(lmEDtH_*l*CR$eNiu)cn_H{C z$3^3>c8x71w2vkjR;ML5OXBr=T<_!(IGt2d)X+8b+js2#> zA9;3lrfzvu-T6At#-?P{INn`WDq!uXFb|C*#TufZOea1hx1#-gc0V%J*R0EilfUw9Kor4rCW1%4xPCt8 z>%=Kt@>nx}N{mm7V7j$f3h<2!-(_{zh-Zhoni3NS?h?aq705|TP7@1QX|70MIK=^~ zK*K^1oJRnJ#bMK@vTCMnu_kAKD}L!l2X;D7`TbYwkRw3)jKP=uI^i%F8-ZJa)j|qf znI=%-Dk;(wm+x!Wx*N78%Fe)ZZU{))n<24mO!BunGdXm+Y^oYocc|@pzQ-Tz(8l{n zhmWc-p_q2pK6B+pN6R87QRNQ=+D2lO0#vLj6kzl;O$-YJs9&4#cfY^A-+c5@`|f+$ zuAAxA&1$JKz$(S_DA9T#M;L(cCIpVV=6&3US__yjUoy)YaC5z)OYW|Isq?ymlf6b) zqNe8|iu-lC3e5pf`&kniC&|&D3tl#}NslRq;f^K&^Z>?wFuv)2S6PF9efYK3YED0+ zobLEN{j!csbhA1&>h{viFT@$X@$(ROpHI8UO%O{oFs5l30Osr~t{4=jELpBak|R#o z`A}1pCd>!}Nt4omwP|dyHM}Km#FyrYu`c7FsEZvlB5CX!Wbxq#)5e)(!r`>?tl;5S zuZ?x&$(QU7E3_K_o*476ff`-UgM@O&vAW`bC|xws=tVV1tzi+<5DW!b7yD*Go(wMeQEK~i#>0YP5pDkq1Sb`~{FCZ|o5Hbdnl z@)6qQ>$=4Y^SY}j?{9rSth>>-$8G$Z@Pu!_|9bCn$%dP|pZK-9p3AK)%imD{GP)PL zE>pGy$s@pv-O{h>qH?8+7a>dKSA<< znzOR3czXh`*3xLDG34*A|a<1)qQG_V;mScg$nBUjt0dqs^AdWKd?rJ4+w7 zPl5wQgJ3%_Yfr7KT>`$*FFYZ8qNh+&SZ(6s^s~(wQk}fQ=zQF-{(`RowlKEoR65P6aM~a(T=mOXQGbq`CwiuK`+iSc7?S71M~!MT+8xAq7w#8d6TP#AzffO+vTR)l~=JDKZ`q2utjA_C#IvlmCqdG%OMoPI^I^qI4-6|slUqL&i{jemx}2Cwt6_ueC#PR^c?Wbo zJNDyq2(H`aa`z#gl|RWZ^w9el2g6nj-ce@~dT}GEW3r9yRh%}h1#(wLiSg?@*jUQv z!}j8L)Gk|;kYrtKFCNEj#pCcSyu>{IlbB5*Eoh&_vhGX5frO;Gl9P3;=&?2bmS(H2 zy`DMzr0t#+GRQ19rp3aSO{OmV1Kv*J(++WR{Z7N%IΜzY~KszLdjHiymSp40~L1 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 iDcct1G9C}$)9 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
bf#J8w2f5th;wp- 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≪7^T{p=~N7rcA~!FkADCfry-rg5eM>~$+cj>xtE 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 z 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