From d1bc9c57c5adf2162f27e072a4d05f99dd55963a Mon Sep 17 00:00:00 2001 From: dnobori Date: Tue, 7 Jan 2014 05:40:52 +0900 Subject: [PATCH] v4.03-9411-rtm --- ChangeLog | 10 + ChangeLog.txt | 10 + LICENSE | 2037 +----- LICENSE.TXT | 2037 +----- README | 7 +- README.TXT | 7 +- THIRD_PARTY.TXT | 757 +++ WARNING.TXT | 523 ++ configure | 2 + src/BuildUtil/BuildUtil.csproj | 41 +- src/BuildUtil/BuildUtilMain.cs | 2 +- src/BuildUtil/CoreUtil.dll | Bin 346624 -> 0 bytes src/BuildUtil/CoreUtil/Bmp.cs | 188 + src/BuildUtil/CoreUtil/Buf.cs | 673 ++ src/BuildUtil/CoreUtil/Cache.cs | 320 + src/BuildUtil/CoreUtil/Compress.cs | 182 + src/BuildUtil/CoreUtil/Console.cs | 2180 +++++++ src/BuildUtil/CoreUtil/Csv.cs | 497 ++ src/BuildUtil/CoreUtil/Env.cs | 572 ++ src/BuildUtil/CoreUtil/FileIO.cs | 1702 +++++ src/BuildUtil/CoreUtil/GZip.cs | 233 + src/BuildUtil/CoreUtil/Kernel.cs | 170 + src/BuildUtil/CoreUtil/MultiLang.cs | 939 +++ src/BuildUtil/CoreUtil/Packer.cs | 202 + src/BuildUtil/CoreUtil/RC4.cs | 225 + src/BuildUtil/CoreUtil/ReadIni.cs | 306 + src/BuildUtil/CoreUtil/Reg.cs | 537 ++ src/BuildUtil/CoreUtil/Secure.cs | 1029 +++ src/BuildUtil/CoreUtil/Stb.cs | 352 ++ src/BuildUtil/CoreUtil/Str.cs | 4377 +++++++++++++ src/BuildUtil/CoreUtil/Tar.cs | 430 ++ src/BuildUtil/CoreUtil/Thread.cs | 542 ++ src/BuildUtil/CoreUtil/Time.cs | 174 + src/BuildUtil/CoreUtil/Util.cs | 1034 +++ src/BuildUtil/CoreUtil/Win32.cs | 303 + src/BuildUtil/CoreUtil/ZLib.cs | 5609 +++++++++++++++++ src/BuildUtil/CoreUtil/Zip.cs | 482 ++ .../Properties/Resources.Designer.cs | 1049 +++ src/BuildUtil/Properties/Resources.resx | 431 ++ src/BuildUtil/VpnBuilder.cs | 1 + src/Cedar/Cedar.h | 10 +- src/Cedar/Protocol.c | 41 - src/Cedar/WinUi.c | 4 - src/ChangeLog.txt | 10 + src/CurrentBuild.txt | 4 +- src/LICENSE | 2350 ------- src/LICENSE.TXT | 2037 +----- src/Mayaqua/FileIO.c | 254 +- src/Mayaqua/FileIO.h | 12 +- src/Mayaqua/MayaType.h | 1 + src/PenCore/Thumbs.db | Bin 66048 -> 0 bytes src/README | 189 - src/README.TXT | 7 +- src/THIRD_PARTY.TXT | 757 +++ src/WARNING.TXT | 523 ++ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 | Bin 1034007 -> 0 bytes src/bin/SOURCES_OF_BINARY_FILES.TXT | 117 + src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT | 117 + src/bin/hamcore/SeLow_x64.sys | Bin 38112 -> 38112 bytes src/bin/hamcore/SeLow_x86.sys | Bin 30816 -> 30816 bytes src/bin/hamcore/egg1.exe | Bin 66944 -> 0 bytes src/bin/hamcore/egg2.exe | Bin 30080 -> 0 bytes src/bin/hamcore/egg3.exe | Bin 313728 -> 0 bytes src/bin/hamcore/inf/selow_x64/SeLow_x64.inf | 4 +- src/bin/hamcore/inf/selow_x64/inf.cat | Bin 6275 -> 6275 bytes src/bin/hamcore/inf/selow_x86/SeLow_x86.inf | 4 +- src/bin/hamcore/inf/selow_x86/inf.cat | Bin 6275 -> 6275 bytes src/bin/hamcore/inf/x64/INF_VPN.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN10.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN100.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN101.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN102.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN103.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN104.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN105.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN106.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN107.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN108.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN109.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN11.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN110.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN111.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN112.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN113.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN114.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN115.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN116.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN117.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN118.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN119.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN12.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN120.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN121.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN122.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN123.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN124.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN125.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN126.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN127.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN13.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN14.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN15.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN16.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN17.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN18.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN19.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN2.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN20.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN21.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN22.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN23.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN24.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN25.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN26.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN27.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN28.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN29.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN3.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN30.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN31.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN32.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN33.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN34.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN35.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN36.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN37.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN38.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN39.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN4.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN40.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN41.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN42.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN43.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN44.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN45.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN46.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN47.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN48.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN49.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN5.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN50.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN51.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN52.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN53.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN54.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN55.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN56.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN57.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN58.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN59.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN6.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN60.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN61.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN62.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN63.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN64.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN65.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN66.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN67.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN68.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN69.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN7.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN70.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN71.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN72.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN73.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN74.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN75.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN76.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN77.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN78.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN79.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN8.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN80.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN81.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN82.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN83.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN84.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN85.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN86.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN87.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN88.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN89.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN9.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN90.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN91.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN92.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN93.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN94.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN95.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN96.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN97.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN98.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN99.inf | 2 +- src/bin/hamcore/inf/x64/inf.cat | Bin 43113 -> 43113 bytes src/bin/hamcore/inf/x86/INF_VPN.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN10.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN100.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN101.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN102.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN103.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN104.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN105.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN106.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN107.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN108.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN109.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN11.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN110.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN111.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN112.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN113.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN114.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN115.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN116.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN117.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN118.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN119.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN12.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN120.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN121.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN122.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN123.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN124.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN125.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN126.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN127.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN13.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN14.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN15.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN16.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN17.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN18.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN19.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN2.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN20.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN21.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN22.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN23.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN24.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN25.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN26.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN27.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN28.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN29.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN3.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN30.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN31.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN32.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN33.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN34.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN35.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN36.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN37.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN38.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN39.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN4.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN40.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN41.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN42.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN43.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN44.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN45.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN46.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN47.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN48.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN49.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN5.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN50.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN51.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN52.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN53.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN54.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN55.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN56.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN57.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN58.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN59.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN6.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN60.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN61.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN62.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN63.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN64.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN65.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN66.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN67.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN68.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN69.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN7.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN70.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN71.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN72.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN73.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN74.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN75.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN76.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN77.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN78.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN79.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN8.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN80.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN81.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN82.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN83.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN84.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN85.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN86.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN87.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN88.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN89.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN9.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN90.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN91.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN92.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN93.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN94.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN95.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN96.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN97.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN98.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN99.inf | 2 +- src/bin/hamcore/inf/x86/inf.cat | Bin 43113 -> 43113 bytes src/bin/hamcore/install_src.dat | 2 +- src/bin/hamcore/pxwfp_x64.sys | Bin 22240 -> 22240 bytes src/bin/hamcore/pxwfp_x86.sys | Bin 18016 -> 18016 bytes src/bin/hamcore/see.sys | Bin 43104 -> 43104 bytes src/bin/hamcore/see_x64.sys | Bin 38240 -> 38240 bytes src/bin/hamcore/time.htm | 168 - src/bin/hamcore/vpn_driver.sys | Bin 25824 -> 25824 bytes src/bin/hamcore/vpn_driver6.sys | Bin 26208 -> 26208 bytes src/bin/hamcore/vpn_driver6_x64.sys | Bin 28768 -> 28768 bytes src/bin/hamcore/vpn_driver_x64.sys | Bin 29536 -> 29536 bytes src/bin/install_src.dat | 2 +- src/bin/vpnweb.cab | Bin 195783 -> 195785 bytes src/bin/vpnweb.ocx | Bin 333880 -> 333880 bytes src/hamcorebuilder/hamcorebuilder.c | 143 + src/makefiles/freebsd_32bit.mak | 17 + src/makefiles/freebsd_64bit.mak | 17 + src/makefiles/linux_32bit.mak | 17 + src/makefiles/linux_64bit.mak | 17 + src/makefiles/macos_32bit.mak | 17 + src/makefiles/macos_64bit.mak | 17 + src/makefiles/solaris_32bit.mak | 17 + src/makefiles/solaris_64bit.mak | 17 + src/vpn16/Net01.ico | Bin 0 -> 1078 bytes src/vpn16/Resource.h | 17 + src/vpn16/Vpn16.def | 8 + src/vpn16/Vpn16.mak | 86 + src/vpn16/Vpn16.rc | 57 + src/vpn16/Vpn16.vcw | 6 + src/vpn16/vpn16.c | 461 ++ src/vpn16/vpn16.h | 106 + src/vpnweb/vpnweb.h | 2 +- src/vpnweb/vpnweb_i.c | 2 +- src/vpnweb/vpnweb_p.c | 2 +- 356 files changed, 29166 insertions(+), 9153 deletions(-) create mode 100644 ChangeLog create mode 100644 ChangeLog.txt create mode 100644 THIRD_PARTY.TXT create mode 100644 WARNING.TXT delete mode 100644 src/BuildUtil/CoreUtil.dll create mode 100644 src/BuildUtil/CoreUtil/Bmp.cs create mode 100644 src/BuildUtil/CoreUtil/Buf.cs create mode 100644 src/BuildUtil/CoreUtil/Cache.cs create mode 100644 src/BuildUtil/CoreUtil/Compress.cs create mode 100644 src/BuildUtil/CoreUtil/Console.cs create mode 100644 src/BuildUtil/CoreUtil/Csv.cs create mode 100644 src/BuildUtil/CoreUtil/Env.cs create mode 100644 src/BuildUtil/CoreUtil/FileIO.cs create mode 100644 src/BuildUtil/CoreUtil/GZip.cs create mode 100644 src/BuildUtil/CoreUtil/Kernel.cs create mode 100644 src/BuildUtil/CoreUtil/MultiLang.cs create mode 100644 src/BuildUtil/CoreUtil/Packer.cs create mode 100644 src/BuildUtil/CoreUtil/RC4.cs create mode 100644 src/BuildUtil/CoreUtil/ReadIni.cs create mode 100644 src/BuildUtil/CoreUtil/Reg.cs create mode 100644 src/BuildUtil/CoreUtil/Secure.cs create mode 100644 src/BuildUtil/CoreUtil/Stb.cs create mode 100644 src/BuildUtil/CoreUtil/Str.cs create mode 100644 src/BuildUtil/CoreUtil/Tar.cs create mode 100644 src/BuildUtil/CoreUtil/Thread.cs create mode 100644 src/BuildUtil/CoreUtil/Time.cs create mode 100644 src/BuildUtil/CoreUtil/Util.cs create mode 100644 src/BuildUtil/CoreUtil/Win32.cs create mode 100644 src/BuildUtil/CoreUtil/ZLib.cs create mode 100644 src/BuildUtil/CoreUtil/Zip.cs create mode 100644 src/BuildUtil/Properties/Resources.Designer.cs create mode 100644 src/BuildUtil/Properties/Resources.resx create mode 100644 src/ChangeLog.txt delete mode 100644 src/LICENSE delete mode 100644 src/PenCore/Thumbs.db delete mode 100644 src/README create mode 100644 src/THIRD_PARTY.TXT create mode 100644 src/WARNING.TXT delete mode 100644 src/bin/BuiltHamcoreFiles/unix/hamcore.se2 create mode 100644 src/bin/SOURCES_OF_BINARY_FILES.TXT create mode 100644 src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT delete mode 100644 src/bin/hamcore/egg1.exe delete mode 100644 src/bin/hamcore/egg2.exe delete mode 100644 src/bin/hamcore/egg3.exe delete mode 100644 src/bin/hamcore/time.htm create mode 100644 src/hamcorebuilder/hamcorebuilder.c create mode 100644 src/vpn16/Net01.ico create mode 100644 src/vpn16/Resource.h create mode 100644 src/vpn16/Vpn16.def create mode 100644 src/vpn16/Vpn16.mak create mode 100644 src/vpn16/Vpn16.rc create mode 100644 src/vpn16/Vpn16.vcw create mode 100644 src/vpn16/vpn16.c create mode 100644 src/vpn16/vpn16.h diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 00000000..910cf2f2 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,10 @@ +ChangeLog of SoftEther VPN +-------------------------- + +The ChangeLog of SoftEther VPN is on our web site: +http://www.softether.org/5-download/history + +(In Japanese: http://ja.softether.org/5-download/history) + +Enjoy it! + diff --git a/ChangeLog.txt b/ChangeLog.txt new file mode 100644 index 00000000..910cf2f2 --- /dev/null +++ b/ChangeLog.txt @@ -0,0 +1,10 @@ +ChangeLog of SoftEther VPN +-------------------------- + +The ChangeLog of SoftEther VPN is on our web site: +http://www.softether.org/5-download/history + +(In Japanese: http://ja.softether.org/5-download/history) + +Enjoy it! + diff --git a/LICENSE b/LICENSE index 52c728da..92c3170b 100644 --- a/LICENSE +++ b/LICENSE @@ -56,13 +56,17 @@ COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. THE FOLLOWING GPLV2 CONDITIONS APPLY ON ALL SOFTETHER VPN PROGRAMS WHICH ARE DEVELOPED BY SOFTETHER VPN PROJECT. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH +LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. + GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. Preamble @@ -320,2031 +324,8 @@ DAMAGES. END OF TERMS AND CONDITIONS -Note that the above copyright notices and use conditions do not apply on the -software components listed in below which are included in this Software. When -you use or distribute Software with including these libraries, you have to -follow the conditions of these libraries. - -These library's copyright notices and conditions are following; - -------------------- - -BitVisor(R) VPN Client Module (IPsec Driver): -Copyright (c) 2007, 2008 University of Tsukuba. -Copyright (C) 2007, 2008 National Institute of Information and Communications -Technology. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University of Tsukuba nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -Microsoft(R) C Runtime Library: -(c) 2007 Microsoft Corporation. All Rights Reserved. - -------------------- - -RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): - -License to copy and use this software is granted provided that it is -identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface -(Cryptoki)" in all material mentioning or referencing this software. - -License is also granted to make and use derivative works provided that such -works are identified as "derived from the RSA Security Inc. PKCS #11 -Cryptographic Token Interface (Cryptoki)" in all material mentioning or -referencing the derived work. - -RSA Security Inc. makes no representations concerning either the -merchantability of this software or the suitability of this software for any -particular purpose. It is provided "as is" without express or implied warranty -of any kind. - -------------------- - -WinPcap: -Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the Politecnico di Torino nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libedit: -Copyright (c) 1992, 1993 The Regents of the University of California. All -rights reserved. - -This code is derived from software contributed to Berkeley by Christos Zoulas -of Cornell University. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libiconv: - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - - This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide complete object -files to the recipients so that they can relink them with the library, after -making changes to the library and recompiling it. And you must show them these -terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated -libraries. This license is quite different from the ordinary one; be sure to -read it in full, and don't assume that anything in it is the same as in the -ordinary license. - - The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to -running a utility program or application program. However, in a textual and -legal sense, the linked executable is a combined work, a derivative of the -original library, and the ordinary General Public License treats it as such. - - Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker conditions -might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while preserving -your freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards changes -in header files, but we have achieved it as regards changes in the actual -functions of the Library.) The hope is that this will lead to faster -development of free libraries. - - The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - - Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it may -be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with -modifications and/or translated straightforwardly into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) - - "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - - Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License -along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table -of data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make a -good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a -purpose that is entirely well-defined independent of the application. -Therefore, Subsection 2d requires that any application-supplied function or -table used by this function must be optional: if the application does not -supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do this, -you must alter all the notices that refer to this License, so that they refer -to the ordinary GNU General Public License, version 2, instead of to this -License. (If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you wish.) -Do not make any other change in these notices. - - Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software -interchange. - - If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the -object code. - - 5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of this -License. - - However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. -Whether this is true is especially significant if the work can be linked -without the Library, or if the work is itself a library. The threshold for -this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten lines -or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables containing -this object code plus portions of the Library will still fall under Section -6.) - - Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your choice, -provided that the terms permit modification of the work for the customer's own -use and reverse engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above) ; and, if the work is -an executable linked with the Library, with the complete machine-readable -"work that uses the Library", as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified executable -containing the modified Library. (It is understood that the user who changes -the contents of definitions files in the Library will not necessarily be able -to recompile the application to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at least three -years, to give the same user the materials specified in Subsection 6a, above, -for a charge no more than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. - - d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - - It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - - 7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on -the Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not have -their licenses terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you do -not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this -License to do so, and all its terms and conditions for copying, distributing -or modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible for -enforcing compliance by third parties to this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution -of the Library by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Library does not specify a license version number, you may -choose any version ever published by the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -------------------- - -ncurses: -Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, distribute with -modifications, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright holders -shall not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization. - -------------------- - -OpenSSL: -OpenSSL License -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must -display the following acknowledgment: "This product includes software -developed by the OpenSSL Project for use in the OpenSSL Toolkit. -(http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to -endorse or promote products derived from this software without prior written -permission. For written permission, please contact openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" nor may -"OpenSSL" appear in their names without prior written permission of the -OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following -acknowledgment: "This product includes software developed by the OpenSSL -Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim Hudson -(tjh@cryptsoft.com). - -Original SSLeay License -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. - -This package is an SSL implementation written by Eric Young -(eay@cryptsoft.com). The implementation was written so as to conform with -Netscapes SSL. - -This library is free for commercial and non-commercial use as long as the -following conditions are aheared to. The following conditions apply to all -code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; -not just the SSL code. The SSL documentation included with this distribution -is covered by the same copyright terms except that the holder is Tim Hudson -(tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in the code -are not to be removed. If this package is used in a product, Eric Young should -be given attribution as the author of the parts of the library used. This can -be in the form of a textual message at program startup or in documentation -(online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the copyright notice, this list -of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must -display the following acknowledgement: "This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' -can be left out if the rouines from the library being used are not -cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from the -apps directory (application code) you must include an acknowledgement: "This -product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence [including the GNU Public -Licence.] - -------------------- - -zlib: -Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate and -zlib specifications were written by L. Peter Deutsch. Thanks to all the people -who reported problems and suggested various improvements in zlib; they are too -numerous to cite here. - -Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the -use of this software. - - Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software in a -product, an acknowledgment in the product documentation would be appreciated -but is not required. - 2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. - -------------------- - -Intel AESNI Sample Library: - -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -* Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Issue Date: Aug 6, 2010 - -------------------- - -NOTES - -SoftEther provides source codes of some GPL/LGPL/other libraries listed above -on its web server. Anyone can download, use and re-distribute them under -individual licenses which are contained on each archive file, available from -the following URL: -http://uploader.softether.co.jp/src/ - - - -BitVisor(R) VPN Client Module (IPsec Driver): -Copyright (c) 2007, 2008 University of Tsukuba. -Copyright (C) 2007, 2008 National Institute of Information and Communications -Technology. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University of Tsukuba nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -Microsoft(R) C Runtime Library: -(c) 2007 Microsoft Corporation. All Rights Reserved. - -------------------- - -RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): - -License to copy and use this software is granted provided that it is -identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface -(Cryptoki)" in all material mentioning or referencing this software. - -License is also granted to make and use derivative works provided that such -works are identified as "derived from the RSA Security Inc. PKCS #11 -Cryptographic Token Interface (Cryptoki)" in all material mentioning or -referencing the derived work. - -RSA Security Inc. makes no representations concerning either the -merchantability of this software or the suitability of this software for any -particular purpose. It is provided "as is" without express or implied warranty -of any kind. - -------------------- - -WinPcap: -Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the Politecnico di Torino nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libedit: -Copyright (c) 1992, 1993 The Regents of the University of California. All -rights reserved. - -This code is derived from software contributed to Berkeley by Christos Zoulas -of Cornell University. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libiconv: - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - - This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide complete object -files to the recipients so that they can relink them with the library, after -making changes to the library and recompiling it. And you must show them these -terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated -libraries. This license is quite different from the ordinary one; be sure to -read it in full, and don't assume that anything in it is the same as in the -ordinary license. - - The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to -running a utility program or application program. However, in a textual and -legal sense, the linked executable is a combined work, a derivative of the -original library, and the ordinary General Public License treats it as such. - - Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker conditions -might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while preserving -your freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards changes -in header files, but we have achieved it as regards changes in the actual -functions of the Library.) The hope is that this will lead to faster -development of free libraries. - - The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - - Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it may -be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with -modifications and/or translated straightforwardly into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) - - "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - - Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License -along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table -of data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make a -good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a -purpose that is entirely well-defined independent of the application. -Therefore, Subsection 2d requires that any application-supplied function or -table used by this function must be optional: if the application does not -supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do this, -you must alter all the notices that refer to this License, so that they refer -to the ordinary GNU General Public License, version 2, instead of to this -License. (If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you wish.) -Do not make any other change in these notices. - - Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software -interchange. - - If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the -object code. - - 5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of this -License. - - However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. -Whether this is true is especially significant if the work can be linked -without the Library, or if the work is itself a library. The threshold for -this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten lines -or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables containing -this object code plus portions of the Library will still fall under Section -6.) - - Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your choice, -provided that the terms permit modification of the work for the customer's own -use and reverse engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above) ; and, if the work is -an executable linked with the Library, with the complete machine-readable -"work that uses the Library", as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified executable -containing the modified Library. (It is understood that the user who changes -the contents of definitions files in the Library will not necessarily be able -to recompile the application to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at least three -years, to give the same user the materials specified in Subsection 6a, above, -for a charge no more than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. - - d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - - It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - - 7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on -the Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not have -their licenses terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you do -not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this -License to do so, and all its terms and conditions for copying, distributing -or modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible for -enforcing compliance by third parties to this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution -of the Library by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Library does not specify a license version number, you may -choose any version ever published by the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -------------------- - -ncurses: -Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, distribute with -modifications, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright holders -shall not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization. - -------------------- - -OpenSSL: -OpenSSL License -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must -display the following acknowledgment: "This product includes software -developed by the OpenSSL Project for use in the OpenSSL Toolkit. -(http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to -endorse or promote products derived from this software without prior written -permission. For written permission, please contact openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" nor may -"OpenSSL" appear in their names without prior written permission of the -OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following -acknowledgment: "This product includes software developed by the OpenSSL -Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim Hudson -(tjh@cryptsoft.com). - -Original SSLeay License -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. - -This package is an SSL implementation written by Eric Young -(eay@cryptsoft.com). The implementation was written so as to conform with -Netscapes SSL. - -This library is free for commercial and non-commercial use as long as the -following conditions are aheared to. The following conditions apply to all -code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; -not just the SSL code. The SSL documentation included with this distribution -is covered by the same copyright terms except that the holder is Tim Hudson -(tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in the code -are not to be removed. If this package is used in a product, Eric Young should -be given attribution as the author of the parts of the library used. This can -be in the form of a textual message at program startup or in documentation -(online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the copyright notice, this list -of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must -display the following acknowledgement: "This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' -can be left out if the rouines from the library being used are not -cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from the -apps directory (application code) you must include an acknowledgement: "This -product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence [including the GNU Public -Licence.] - -------------------- - -zlib: -Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate and -zlib specifications were written by L. Peter Deutsch. Thanks to all the people -who reported problems and suggested various improvements in zlib; they are too -numerous to cite here. - -Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the -use of this software. - - Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software in a -product, an acknowledgment in the product documentation would be appreciated -but is not required. - 2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. - -------------------- - -Intel AESNI Sample Library: - -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -* Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Issue Date: Aug 6, 2010 - -------------------- - -NOTES WRITTEN BY SOFTETHER CORPORATION - -Note for users of non-Windows version of PacketiX VPN: The enumerated bundle -of License Agreements above are copies of original License Agreements of each -library programs which PacketiX VPN uses. PacketiX VPN is not a delivered work -from these libraries. PacketiX VPN is a separated work from the libraries, but -it may call functions of the libraries (whether or not PacketiX VPN calls such -functions are depended on the user's intention to link them or not on user's -side computer). While some libraries indicate GPL or LGPL as a condition to -re-distribute, PacketiX VPN is not license under GPL nor LGPL. Therefore, we -took special care not to make PacketiX VPN become delivered works of any GPL -or LGPL libraries. In order to achieve that, both PacketiX VPN and GPL/LGPL -libraries are distributed with isolated forms (means that any program files of -PacketiX VPN are not bound nor linked to any GPL/LGPL libraries). If a user of -PacketiX VPN wants to link GPL/LGPL libraries by their own decisions, -operations and responsibilities, he may do that on his computer. However, if a -delivered work under copyright law is created as a result of such an -operation, such a delivered work must not re-distributed to other people, -because it may violate GPL/LGPL libraries' conditions. - -Note for users of Windows version of PacketiX VPN: For technical reason, the -above texts are exactly same as a file which is also contained on the -non-Windows version of PacketiX VPN. Actually, the Windows version of PacketiX -VPN has no relations to any GPL/LGPL libraries enumerated above. - -SoftEther Corporation provides source codes of some GPL/LGPL/other libraries -listed above on its web server. Anyone can download, use and re-distribute -them under individual licenses which are contained on each archive file, -available from the following URL: -http://uploader.softether.co.jp/src/ - - - -THE IMPORTANT NOTICES ABOUT SOFTETHER VPN - -FUNCTIONS OF VPN COMMUNICATIONS EMBEDDED ON THIS SOFTWARE ARE VERY POWERFUL -THAN EVER. THIS STRONG VPN ABILITY WILL BRING YOU HUGE BENEFITS. HOWEVER, IF -YOU MISUSE THIS SOFTWARE, IT MIGHT DAMAGES YOURSELF. IN ORDER TO AVOID SUCH -RISKS, THIS DOCUMENT ACCOUNTS IMPORTANT NOTICES FOR CUSTOMERS WHO ARE WILLING -TO USE THIS SOFTWARE. THE FOLLOWING INSTRUCTIONS ARE VERY IMPORTANT. READ AND -UNDERSTAND IT CAREFULLY. ADDITIONALLY, IF YOU ARE PLANNING TO USE THE DYNAMIC -DNS, THE NAT TRAVERSAL OR THE VPN AZURE FUNCTIONS, READ THE SECTION 3.5 -CAREFULLY. THESE FUNCTIONS ARE FREE SERVICES PROVIDED VIA THE INTERNET, ARE -NOT GUARANTEED, AND ARE NOT INTENDED TO BE USED FOR BUSINESS OR COMMERCIAL -USE. DO NOT USE THESE SERVICES FOR YOUR BUSINESS OR COMMERCIAL USE. - - -1. VPN Communication Protocols -1.1. SoftEther VPN Protocol -SoftEther VPN can perform VPN communication. Unlike traditional VPN protocols, -SoftEther VPN has an implementation of the newly-designed "SoftEther VPN -Protocol (SE-VPN Protocol)" . SE-VPN protocol encapsulates any Ethernet -packets into a HTTPS (HTTP over SSL) connection. Therefore SE-VPN protocol can -communicate beyond firewalls even if the firewall is configured to block -traditional VPN packets by network administrator. SE-VPN protocol is designed -and implemented to comply TLS 1.0 (RFC 5246) and HTTPS (RFC 2818). However, it -sometimes have different behavior to RFCs. If you are a network administrator -and want to block SE-VPN protocols on the firewall, you can adopt a -"white-list" policy on the firewall to filter any TCP or UDP packets on the -border except explicitly allowed packets towards specific web sites and -servers. - -1.2. NAT Traversal Function -Generally, if you use traditional VPN systems you have to request a network -administrator to make the NAT or firewall to "open" or "relay" specific TCP or -UDP ports. However, there are demands somehow to eliminate such working costs -on network administrators. In order to satisfy such demands, SoftEther VPN has -the newly-implemented "NAT Traversal" function. NAT Traversal is enabled by -default. A SoftEther VPN Server running on the computer behind NAT or firewall -can accept VPN connections from the Internet, without any special -configurations on firewalls or NATs. If you want to disable the NAT Traversal -function, modify the "DisableNatTraversal" to "true" on the configuration file -of SoftEther VPN Server. In order to disable it on the client-side, append -"/tcp" suffix on the destination hostname. - -1.3. Dynamic DNS Function -Traditional legacy VPN system requires a static global IP address on the VPN -server. In consideration of shortage of global IP addresses, SoftEther -Corporation implements the "Dynamic DNS Function" on SoftEther VPN Server. -Dynamic DNS is enabled by default. Dynamic DNS function notify the current -global IP address of the PC to the Dynamic DNS Servers which are operated by -SoftEther Corporation. A globally-unique hostname (FQDN) such as -"abc.softether.net" ( "abc" varies as unique per a user) will be assigned on -the VPN Server. If you tell this unique hostname to a VPN user, the user can -specify it as the destination VPN Sever hostname on the VPN Client and will be -able to connect the VPN Server. No IP addresses are required to know -beforehand. If the IP address of the VPN Server varies, the registered IP -address related to the hostname of Dynamic DNS service will be changed -automatically. By this mechanism, no longer need a static global IP address -which costs monthly to ISPs. You can use consumer-level inexpensive Internet -connection with dynamic IP address in order to operate an enterprise-level VPN -system. If you want to disable Dynamic DNS, specify "true" on the "Disabled" -items of the "DDnsClient" directive on the SoftEther VPN Server configuration -file. * Note for residents in People's Republic of China: If your VPN Server -is running on the People's Republic of China, the DNS suffix will be replaced -to "sedns.cn" domain. The "sedns.cn" domain is the service possessed and -operated by "Beijing Daiyuu SoftEther Technology Co., Ltd" which is a -Chinese-local enterprise. - -1.4. VPN over ICMP / VPN over DNS functions -If you want to make a VPN connection between SoftEther VPN Client / Bridge and -SoftEther VPN Server, but if TCP and UDP packets are prohibited by the -firewall, then you can encapsulates payloads into "ICMP" (as known as Ping) or -"DNS" packets. This function can realize a VPN connection by using ICMP or DNS -even if the firewall or router blocks every TCP or UDP connections. VPN over -ICMP / VPN over DNS functions are designed to comply standard ICMP and DNS -specifications as possible, however it sometimes has a behavior not to fully -comply them. Therefore, few poor-quality routers may be caused a -memory-overflow or something troubles when a lot of ICMP or DNS packets are -passed, and such routers sometimes freezes or reboots. It might affects other -users on the same network. To avoid such risks, append the suffix "/tcp" on -the destination hostname which is specified on the VPN-client side to disable -VPN over ICMP / DNS functions. - -1.5. VPN Azure Cloud Service -If your SoftEther VPN Server is placed behind the NAT or firwall, and by some -reason you cannot use NAT Traversal function, Dynamic DNS function or VPN over -ICMP/DNS function, you can use VPN Azure Clouse Service. SoftEther Corporation -operates VPN Azure Cloud on Internet. After the VPN Server makes a connection -to the VPN Azure Cloud, the hostname "abc.vpnazure.net" ( "abc" is a unique -hostname) can be specified to connect to the VPN Server via the VPN Azure -Cloud. Practically, such a hostname is pointing a global IP address of one of -cloud servers which are operated by SoftEther Corporation. If A VPN Client -connects to such a VPN Azure host, then the VPN Azure host will relay all -traffics between the VPN Client and the VPN Server. VPN Azure is disabled by -default. You can activate it easily by using VPN Server Configuration Tool. - -1.6. UDP Acceleration -SoftEther VPN has the UDP Acceleration Function. If a VPN consists of two -sites detects that UDP channel can be established, UDP will be automatically -used. By this function, throughput of UDP increases. If direct UDP channel can -be established, direct UDP packets will be used. However, if there is -something obstacles such as firewalls or NATs, the "UDP Hole Punching" -technology will be used, instead. The "UDP Hole Punching" uses the cloud -servers which SoftEther Corporation operates on Internet. UDP Acceleration can -be disabled anytime by setting up so on the VPN-client side. - - -2. VPN Software -2.1. SoftEther VPN Client -If you use SoftEther VPN Client on Windows, the Virtual Network Adapter device -driver will be installed on Windows. The Virtual Network Adapter is -implemented as a kernel-mode driver for Windows. The driver is -digitally-signed by a certificate issued by VeriSign, Inc. and also sub-signed -by Symantec Corporation. A message to ask you want to sure install the driver -might be popped up on the screen. SoftEther VPN Client may response the -message if possible. SoftEther VPN Client also optimizes the configuration of -MMCSS (Multimedia Class Scheduler Service) on Windows. You can undo the -optimizations of MMCSS afterwards. - -2.2. SoftEther VPN Server / Bridge -If you use SoftEther VPN Server / Bridge on Windows with "Local Bridge" -functions, you have to install the low-level Ethernet packet processing driver -on the computer. The driver is digitally-signed by a certificate issued by -VeriSign, Inc. and also sub-signed by Symantec Corporation. SoftEther VPN -Server / Bridge may disable the TCP/IP offloading features on the physical -network adapter for Local Bridge function. In Windows Vista / 2008 or greater -version, VPN Server may inject a packet-filter driver which complies Windows -Filter Platform (WPF) specification into the kernel in order to provide IPsec -function. The packet-filter driver will be loaded available only if IPsec -function is enabled. Once you enables IPsec function of SoftEther VPN Server, -the built-in IPsec function of Windows will be disabled. After you disabled -IPsec function of SoftEther VPN Server, then the built-in IPsec function of -Windows will revive. In order to provide the Local Bridge function, SoftEther -VPN Server / Bridge disables the TCP/IP offloading function on the operating -system. - -2.3. User-mode Installation -You can install SoftEther VPN Server and SoftEther VPN Bridge as "User-mode" -on Windows. In other words, even if you don't have Windows system -administrator's privileges, you can install SoftEther VPN as a normal user. -User-mode install will disable a few functions, however other most functions -work well. Therefore, for example, an employee can install SoftEther VPN -Server on the computer in the office network, and he will be able to connect -to the server from his home. In order to realize such a system by user-self, -no system administrative privileges are required in the view-point of -technical. However, breaking rules of the company to install software on the -computer without authority might be regarded as an unfavorable behavior. If -you are an employee and belong to the company, and the company-policy -prohibits installing software or making communications towards Internet -without permission, you have to obtain a permission from the network -administrator or the executive officer of your company in advance to install -SoftEther VPN. If you install VPN Server / Bridge as User-mode, an icon will -be appeared on the Windows task-tray. If you feel that the icon disturbs you, -you can hide it by your operation. However, you must not exploit this hiding -function to install VPN Server on other person's computer as a spyware. Such -behavior might be an offence against the criminal law. - -2.4. Keep Alive Function -SoftEther VPN Server and SoftEther VPN Bridge has Keep Alive Function by -default. The purpose of this function is to sustain the Internet line active. -The function transmits UDP packets with a random-byte-array-payload -periodically. This function is useful to avoid automatic disconnection on -mobile or dial-up connections. You can disable Keep Alive Function anytime. - -2.5. Uninstallation -The uninstallation process of SoftEther VPN software will delete all program -files. However, non-program files (such as files and data which are generated -by running of programs) ) will not be deleted. For technical reason, the exe -and resource files of uninstaller might remain. Such remaining files never -affects to use the computer, however you can delete it manually. Kernel-mode -drivers might not be deleted, however such drivers will not be loaded after -the next boot of Windows. You can use "sc" command of Windows to delete -kernel-mode drivers manually. - -2.6. Security -You should set the administrator's password on SoftEther VPN Server / Bridge -after installation. If you neglect to do it, another person can access to -SoftEther VPN Server / Bridge and can set the password without your -permission. This caution might be also applied on SoftEther VPN Client for -Linux. - -2.7. Automatic Update Notification -SoftEther VPN software for Windows has an automatic update notification -function. It accesses to the SoftEther Update server periodically to check -whether or not the latest version of software is released. If the latest -version is released, the notification message will be popped up on the screen. -In order to achieve this purpose, the version, language settings, the unique -identifier, the IP address of your computer and the hostname of VPN Server -which is connected to will be sent to the SoftEther Update server. No personal -information will be sent. Automatic Update Notification is enabled by default, -however you can disable it on the configuration screen. The setting whether -turned on or turned off will be saved individually corresponding to each -destination VPN server, by VPN Server Manager. - -2.8. Virtual NAT Function -A Virtual Hub on SoftEther VPN Server / Bridge has "Virtual NAT Function" . -Virtual NAT Function can share a single IP address on the physical network by -multiple private IP address of VPN Clients. There are two operation mode of -Virtual NAT: User-mode and Kernel-mode. In the user-mode operation, Virtual -NAT shares an IP address which is assigned on the host operating system. -Unlike user-mode, the kernel-mode operation attempts to find DHCP servers on -the physical network. If there are two or more physical networks, a DHCP -server will be sought automatically for each segments serially. If a DHCP -server found, and an IP address is acquired, the IP address will be used by -the Virtual NAT. In this case, an IP entry as a DHCP client will be registered -on the IP pool of the physical DHCP Server. The physical default gateway and -the DNS server will be used by the Virtual NAT in order to communicate with -hosts in Internet. In kernel-mode operation, a Virtual Hub has a virtual MAC -address which is operating on the physical Ethernet segment. In order to check -the connectivity to Internet, SoftEther VPN periodically sends DNS query -packet to resolve the IP address of host "www.yahoo.com" or "www.baidu.com" , -and attempts to connect to the TCP port 80 of such a resulted IP address for -connectivity check. - -2.9. Unattended Installation of Kernel-mode Components -When SoftEther VPN will detect a necessity to install the kernel-mode -components on Windows, a confirmation message will be appeared by Windows -system. In this occasion, SoftEther VPN software will switch to the Unattended -Installation mode in order to respond "Yes" to Windows. This is a solution to -prevent dead-locks when a remote-administration is performed from remote -place. - -2.10. Windows Firewall -SoftEther VPN software will register itself as a safe-program. Such an entry -will be remain after the uninstallation. You can remove it manually from the -Control Panel of Windows. - - -3. Internet Services -3.1. Internet Services which are provided by SoftEther Corporation -SoftEther Corporation provides Dynamic DNS, NAT Traversal and VPN Azure server -services on the Internet. These services are free of charge. Customers can -access to the services by using SoftEther VPN software, via Internet. These -service will be planned to be available from Open-Source version of "SoftEther -VPN" which will be released in the future. - -3.2. Sent Information and Privacy Protection -SoftEther VPN software may send an IP address, hostname, the version of VPN -software on the customer's computer to the cloud service operated by SoftEther -Corporation, in order to use the above services. These sending of information -are minimal necessary to use the services. No personal information will be -sent. SoftEther Corporation records log files of the cloud service servers for -90 days at least with the received information. Such logs will be used for -troubleshooting and other legitimate activities. SoftEther Corporation may -provide logs to a public servant of Japanese government who are belonging to -courts, police stations and the prosecutor's office, in order to comply such -authorities' order. (Every Japanese public servants are liable by law to keep -the information close.) Moreover, the IP addresses or other information will -be processed statistically and provided to the public, not to expose the each -concrete IP address, in order to release the release of research activities. - -3.3. Communication Data via VPN Azure Service -Regardless of the above 3.2 rule, if the customer sends or receives VPN -packets using VPN Azure Cloud Service, the actual payloads will stored and -forwarded via the volatile memory of the servers for very short period. Such a -behavior is naturally needed to provide the "VPN relay service" . No payloads -will be recorded on "fixed" storages such as hard-drives. However, the -"Wiretapping for Criminals Procedures Act" (The 137th legislation ruled on -August 18, 1999 in Japan) requires telecommunication companies to allow the -Japanese government authority to conduct a wire-tapping on the line. VPN Azure -Servers which are physically placed on Japan are subjects of this law. - -3.4. Comply to Japanese Telecommunication Laws -SoftEther Corporation complies with Japanese Telecommunication Laws as -necessary to provide online services via Internet. - -3.5. Free and Academic Experiment Services -SoftEther provides Dynamic DNS, NAT Traversal and VPN Azure as academic -experiment services. Therefore, there services can be used for free of charge. -These services are not parts of "SoftEther VPN Software Products" . These -services are provided without any warranty. The services may be suspended or -discontinued by technical or operational matters. In such occasions, users -will not be able to use the services. A user have to understand such risks, -and to acknowledge that such risks are borne by a user-self. SoftEther will -never be liable to results or damages of use or unable-to-use of the service. -Even if the user has already paid the license-fee of the commercial version of -SoftEther VPN, such paid fees don't include any fees of these services. -Therefore, if the online services will stop or be discontinued, no refunds or -recoveries of damages will be provided by SoftEther Corporation. - -3.6. DNS Proxy Cloud Servers -In some regions, when a user uses Internet, a DNS query sometimes broken or -lost when it is passing through the ISP line. If SoftEther VPN Server, Client -or Bridge detects a possibility that the accessing to the actual VPN server -might be unstable, then DNS queries will be also transferred to the DNS proxy -cloud servers which are operated by SoftEther Corporation. A DNS proxy cloud -server will respond DNS queries with answering correct a IP address. - - -4. General Cautions -4.1. Needs an Approval from Network Administrator -SoftEther VPN has powerful functions which don't require special settings by -network administrators. For example, you need not to ask the administrator to -configure the existing firewall in order to "open" a TCP/UDP port. Such -characteristic features are for the purpose to eliminate working times and -costs of network administrators, and avoid misconfiguration-risks around the -tasks to open specific exception ports on the firewall. However, any employees -belong to the company have to obtain an approval from the network -administrator before installs SoftEther VPN. If your network administrator -neglects to provide such an approval, you can consider to take an approval -from an upper authority. (For example, executive officer of the company.) If -you use SoftEther VPN without any approvals from the authority of your -company, you might have disadvantage. SoftEther Corporation will be never -liable for results or damages of using SoftEther VPN. - -4.2. Observe Laws of Your Country -If your country's law prohibits the use of encryption, you have to disable the -encryption function of SoftEther VPN by yourself. Similarly, in some countries -or regions, some functions of SoftEther VPN might be prohibited to use by -laws. Other countries' laws are none of SoftEther Corporation's concern -because SoftEther Corporation is an enterprise which is located and registered -in Japan physically. For example, there might be a risk that a part of -SoftEther VPN conflicts an existing patent which is valid only on the specific -region. SoftEther Corporation has no interests in such specific region outside -Japan's territory. Therefore, if you want to use SoftEther VPN in regions -outside Japan, you have to be careful not to violate third-person's rights. -You have to verify the legitimacy of the use of SoftEther VPN in the specific -region before you actually use it in such region. By nature, there are almost -200 countries in the World, and each country's law is different each other. It -is practically impossible to verify every countries' laws and regulations and -make the software comply with all countries' laws in advance to release the -software. Therefore SoftEther Corporation has verified the legitimacy of -SoftEther VPN against the laws and regulations of only Japan. If a user uses -SoftEther VPN in a specific country, and damaged by public servants of the -government authority, SoftEther Corporation will never be liable to recover or -compensate such damages or criminal responsibilities. - - -5. VPN Gate Academic Experiment Project -(This chapter applies only on SoftEther VPN software package which contains -the extension plug-in for VPN Gate Academic Experiment Project.) -5.1. About VPN Gate Academic Experiment Project -VPN Gate Academic Experiment Project is an online service operated for just -the academic research purpose at the graduate school of University of Tsukuba, -Japan. The purpose of this research is to expend our knowledge about the -"Global Distributed Public VPN Relay Server" (GDPVRS) technology. For details, -please visit http://www.vpngate.net/. - -5.2. About VPN Gate Service -SoftEther VPN Server and SoftEther VPN Client may contain "VPN Gate Service" -program. However, VPN Gate Service is disabled by default. -VPN Gate Service should be activated and enabled by the voluntary intention of -the owner of the computer which SoftEther VPN Server or SoftEther VPN Client -is installed on. After you activate VPN Gate Service, the computer will be -start to serve as a part of the Global Distributed Public VPN Relay Servers. -The IP address, hostname and related information of the computer will be sent -and registered to the directory server of VPN Gate Academic Experiment -Project, and they will be published and disclosed to the public. This -mechanism will allow any VPN Gate Client software's user to connect to the VPN -Gate Service running on your computer. While the VPN session between a VPN -Gate Client and your VPN Gate Service is established, the VPN Gate Client's -user can send/receive any IP packets towards the Internet via the VPN Gate -Service. The global IP address of the VPN Gate Service's hosing computer will -be used as the source IP address of such communications which a VPN Gate -Client initiates. -VPN Gate Service will send some information to the VPN Gate Academic -Experiment Service Directory Server. The information includes the operator's -information which described in section 5.5, logging settings, uptime, -operating system version, type of protocol, port numbers, quality information, -statistical information, VPN Gate clients' log history data (includes dates, -IP addresses, version numbers and IDs) and the version of the software. These -information will be exposed on the directory. VPN Gate Service also receives a -key for encoding which is described on the chapter 5.9 from the directory -server. - -5.3. Details of VPN Gate Service's Behavior -If you enable VPN Gate Service manually, which is disabled by default, the -"VPNGATE" Virtual Hub will be created on the SoftEther VPN Server. If you are -using SoftEther VPN Client and attempt to active VPN Gate Service on it, an -equivalent program to SoftEther VPN Server will be invoked on the same process -of SoftEther VPN Client, and the "VPNGATE" Virtual Hub will be created. The -"VPNGATE" Virtual Hub contains a user named "VPN" by default which permits -anyone on the Internet to make a VPN connection to the Virtual Hub. Once a VPN -Client connects to the "VPNGATE" Virtual Hub, any communication between the -user and the Internet will pass through the Virtual Hub, and -transmitted/received using the physical network interface on the computer -which SoftEther VPN Server (or SoftEther VPN Client) is running on. This will -cause the result that a destination host specified by the VPN Client will -identify that the source of the communication has initiated from the VPN Gate -Service's hosting computer's IP address. However, for safety, any packets -which destinations are within 192.168.0.0/255.255.0.0, 172.16.0.0/255.240.0.0 -or 10.0.0.0/255.0.0.0 will be blocked by the "VPNGATE" Virtual Hub in order to -protect your local network. Therefore, if you run VPN Gate Service on your -corporate network or private network, it is safe because anonymous VPN Client -users will not be permitted to access such private networks. VPN Gate Service -also serves as relay for accessing to the VPN Gate Directory Server. -In order to make VPN Gate Service familiar with firewalls and NATs, it opens -an UDP port by using the NAT Traversal function which is described on the -section 1.2. It also opens and listens on some TCP ports, and some TCP and UDP -ports will be specified as the target port of Universal Plug and Play (UPnP) -Port Transfer entries which are requested to your local routers. UPnP request -packets will be sent periodically. Some routers keep such an opened TCP/UDP -port permanently on the device. If you wish to close them, do it manually. -VPN Gate Service also provides the mirror-site function for www.vpngate.net. -This is a mechanism that a copy of the latest contents from www.vpngate.net -will be hosted by the mirror-site tiny HTTP server which is running on the VPN -Gate Service program. It will register itself on the mirror-sites list in -www.vpngate.net. However, it never relays any other communications which are -not towards www.vpngate.net. - -5.4. Communication between Internet via VPN Gate Service -VPN Gate Service provides a routing between users and the Internet, by using -the Virtual NAT Function which is described on the section 2.8. VPN Gate -Service sends polling Ping packets to the server which is located on -University of Tsukuba, and the Google Public DNS Server which is identified as -8.8.8.8, in order to check the latest quality of your Internet line. VPN Gate -Service also sends and receives a lot of random packets to/from the Speed Test -Server on University of Tsukuba. These quality data will be reported to VPN -Gate Directory Server, automatically and periodically. The result will be -saved and disclosed to the public. These periodical polling communication are -adjusted not to occupy the Internet line, however in some circumstances they -might occupy the line. - -5.5. Operator's Information of VPN Gate Service -If you activate VPN Gate Service on your computer, the computer will be a part -of the Global Distributed Public VPN Relay Servers. Therefore, the Operator's -administrative information of your VPN Gate Service should be reported and -registered on the VPN Gate Service Directory. Operator's information contains -the name of the operator and the abuse-reporting contact e-mail address. These -information can be inputted on the screen if the VPN Gate configuration. -Inputted information will be transmitted to the VPN Gate Directory Server, -stored and disclosed to the public. So you have to be careful to input -information. By the way, until you specify something as the operator's -information, the computer's hostname will be used automatically as the field -of the name of the operator, by appending the "'s owner" string after the -hostname. - -5.6. Observe Laws to Operate VPN Gate Service -In some countries or regions, a user who is planning to activate and operate -VPN Gate Service, he are mandated to obtain a license or register a service -from/to the government. If your region has such a regulation, you must fulfill -mandated process before activating VPN Gate Service in advance. Neither the -developers nor operators of the VPN Gate Academic Experiment Project will be -liable for legal/criminal responsibilities or damages which are occurred from -failure to comply your local laws. - -5.7. Protect Privacy of Communication -Most of countries have a law which requires communication service's operators, -including VPN Gate Service operators, to protect the privacy of communication -of third-persons. When you operate VPN Gate Service, you must always protect -user's privacy. - -5.8. Packet Logs -The packet logging function is implemented on VPN Gate Service. It records -essential headers of major TCP/IP packets which are transmitted via the -Virtual Hub. This function will be helpful to investigate the "original IP -address" of the initiator of communication who was a connected user of your -VPN Gate Service, by checking the packet logs and the connection logs. The -packet logs are recorded only for such legitimate investigates purpose. Do not -peek nor leak packet logs except the rightful purpose. Such act will be -violate the section 5.7. - -5.9. Packet Logs Automatic Archiving and Encoding Function -The VPN Gate Academic Experiment Service is operated and running under the -Japanese constitution and laws. The Japanese constitution laws demand strictly -protection over the privacy of communication. Because this service is under -Japanese rules, the program of VPN Gate Service implements this "Automatic Log -File Encoding" protection mechanism, and enabled by default. -The VPN Gate Service is currently configured to encode packet log files which -has passed two or more weeks automatically, by default. In order to protect -privacy of communication, if a packet log file is once encoded, even the -administrator of the local computer cannot censor the packet log file. This -mechanism protects privacy of end-users of VPN Gate Service. -You can change the VPN Gate Service setting to disable this automatic encoding -function. Then packet log files will never be encoded even after two weeks -passed. In such a configuration, all packet logs will remain as plain-text on -the disk. Therefore you have to take care not to violate user's privacy. -If you are liable to decode an encoded packet log files (for example: a VPN -Gate Service's user illegally abused your VPN Gate Service and you have to -decode the packet logs in order to comply the laws), contact the administrator -of the VPN Gate Academic Experiment Service at Graduate School of University -of Tsukuba, Japan. You can find the contact address at -http://www.vpngate.net/. The administrator of VPN Gate Service will respond to -decode the packet logs if there is an appropriate and legal request from court -or other judicial authorities, according to laws. - -5.10. Caution if You Operate VPN Gate Service in the Japan's Territories -When a user operates VPN Gate Service in the Japan's territories, such an act -may be regulated under the Japanese Telecommunication Laws if the operation is -a subject to the law. However, in such a circumstance, according to the -"Japanese Telecommunication Business Compete Manual [supplemental version]" , -non- profitable operations of communications are not identified as a -"telecommunication business" . So usual operators of VPN Gate Service are not -subjects to "telecommunication business operators" , and not be mandated to -register to the government. Even so, legalities to protect the privacy of -communication still imposed. As a conclusion, if you operate VPN Gate Service -in the Japan's Territories, you must not leak the secrets of communications -which are transmitted via your operating VPN Gate Service. - -5.11. VPN Gate Client -If SoftEther VPN Client contains the VPN Gate Client plug-in, you can use it -to obtain the list of current operating VPN Gate Service servers in the -Internet, and make a VPN connection to a specific server on the list. -VPN Gate Client always keeps the latest list of the VPN Gate Services -periodically. Be careful if you are using a pay-per-use Internet line. -When you start the VPN Gate Client software, the screen which asks you -activate or not VPN Gate Service will be appeared. For details of VPN Gate -Service, read the above sections. - -5.12. Caution before Joining or Exploiting VPN Gate Academic Experiment -Project -The VPN Gate Academic Experiment Service is operated as a research project at -the graduate school on University of Tsukuba, Japan. The service is governed -under the Japanese laws. Other countries' laws are none of our concerns nor -responsibilities. -By nature, there are almost 200 countries in the World, with different laws. -It is impossible to verify every countries' laws and regulations and make the -software comply with all countries' laws in advance to release the software. -If a user uses VPN Gate service in a specific country, and damaged by public -servants of the authority, the developer of either the service or software -will never be liable to recover or compensate such damages or criminal -responsibilities. -By using this software and service, the user must observe all concerned laws -and rules with user's own responsibility. The user will be completely liable -to any damages and responsibilities which are results of using this software -and service, regardless of either inside or outside of Japan's territory. -If you don't agree nor understand the above warnings, do not use any of VPN -Gate Academic Experiment Service functions. -VPN Gate is a research project for just academic purpose only. VPN Gate was -developed as a plug-in for SoftEther VPN and UT-VPN. However, all parts of VPN -Gate were developed on this research project at University of Tsukuba. Any -parts of VPN Gate are not developed by SoftEther Corporation. The VPN Gate -Research Project is not a subject to be led, operated, promoted nor guaranteed -by SoftEther Corporation. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH +LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. diff --git a/LICENSE.TXT b/LICENSE.TXT index 52c728da..92c3170b 100644 --- a/LICENSE.TXT +++ b/LICENSE.TXT @@ -56,13 +56,17 @@ COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. THE FOLLOWING GPLV2 CONDITIONS APPLY ON ALL SOFTETHER VPN PROGRAMS WHICH ARE DEVELOPED BY SOFTETHER VPN PROJECT. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH +LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. + GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. Preamble @@ -320,2031 +324,8 @@ DAMAGES. END OF TERMS AND CONDITIONS -Note that the above copyright notices and use conditions do not apply on the -software components listed in below which are included in this Software. When -you use or distribute Software with including these libraries, you have to -follow the conditions of these libraries. - -These library's copyright notices and conditions are following; - -------------------- - -BitVisor(R) VPN Client Module (IPsec Driver): -Copyright (c) 2007, 2008 University of Tsukuba. -Copyright (C) 2007, 2008 National Institute of Information and Communications -Technology. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University of Tsukuba nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -Microsoft(R) C Runtime Library: -(c) 2007 Microsoft Corporation. All Rights Reserved. - -------------------- - -RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): - -License to copy and use this software is granted provided that it is -identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface -(Cryptoki)" in all material mentioning or referencing this software. - -License is also granted to make and use derivative works provided that such -works are identified as "derived from the RSA Security Inc. PKCS #11 -Cryptographic Token Interface (Cryptoki)" in all material mentioning or -referencing the derived work. - -RSA Security Inc. makes no representations concerning either the -merchantability of this software or the suitability of this software for any -particular purpose. It is provided "as is" without express or implied warranty -of any kind. - -------------------- - -WinPcap: -Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the Politecnico di Torino nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libedit: -Copyright (c) 1992, 1993 The Regents of the University of California. All -rights reserved. - -This code is derived from software contributed to Berkeley by Christos Zoulas -of Cornell University. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libiconv: - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - - This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide complete object -files to the recipients so that they can relink them with the library, after -making changes to the library and recompiling it. And you must show them these -terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated -libraries. This license is quite different from the ordinary one; be sure to -read it in full, and don't assume that anything in it is the same as in the -ordinary license. - - The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to -running a utility program or application program. However, in a textual and -legal sense, the linked executable is a combined work, a derivative of the -original library, and the ordinary General Public License treats it as such. - - Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker conditions -might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while preserving -your freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards changes -in header files, but we have achieved it as regards changes in the actual -functions of the Library.) The hope is that this will lead to faster -development of free libraries. - - The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - - Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it may -be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with -modifications and/or translated straightforwardly into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) - - "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - - Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License -along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table -of data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make a -good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a -purpose that is entirely well-defined independent of the application. -Therefore, Subsection 2d requires that any application-supplied function or -table used by this function must be optional: if the application does not -supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do this, -you must alter all the notices that refer to this License, so that they refer -to the ordinary GNU General Public License, version 2, instead of to this -License. (If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you wish.) -Do not make any other change in these notices. - - Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software -interchange. - - If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the -object code. - - 5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of this -License. - - However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. -Whether this is true is especially significant if the work can be linked -without the Library, or if the work is itself a library. The threshold for -this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten lines -or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables containing -this object code plus portions of the Library will still fall under Section -6.) - - Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your choice, -provided that the terms permit modification of the work for the customer's own -use and reverse engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above) ; and, if the work is -an executable linked with the Library, with the complete machine-readable -"work that uses the Library", as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified executable -containing the modified Library. (It is understood that the user who changes -the contents of definitions files in the Library will not necessarily be able -to recompile the application to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at least three -years, to give the same user the materials specified in Subsection 6a, above, -for a charge no more than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. - - d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - - It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - - 7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on -the Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not have -their licenses terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you do -not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this -License to do so, and all its terms and conditions for copying, distributing -or modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible for -enforcing compliance by third parties to this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution -of the Library by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Library does not specify a license version number, you may -choose any version ever published by the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -------------------- - -ncurses: -Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, distribute with -modifications, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright holders -shall not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization. - -------------------- - -OpenSSL: -OpenSSL License -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must -display the following acknowledgment: "This product includes software -developed by the OpenSSL Project for use in the OpenSSL Toolkit. -(http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to -endorse or promote products derived from this software without prior written -permission. For written permission, please contact openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" nor may -"OpenSSL" appear in their names without prior written permission of the -OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following -acknowledgment: "This product includes software developed by the OpenSSL -Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim Hudson -(tjh@cryptsoft.com). - -Original SSLeay License -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. - -This package is an SSL implementation written by Eric Young -(eay@cryptsoft.com). The implementation was written so as to conform with -Netscapes SSL. - -This library is free for commercial and non-commercial use as long as the -following conditions are aheared to. The following conditions apply to all -code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; -not just the SSL code. The SSL documentation included with this distribution -is covered by the same copyright terms except that the holder is Tim Hudson -(tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in the code -are not to be removed. If this package is used in a product, Eric Young should -be given attribution as the author of the parts of the library used. This can -be in the form of a textual message at program startup or in documentation -(online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the copyright notice, this list -of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must -display the following acknowledgement: "This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' -can be left out if the rouines from the library being used are not -cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from the -apps directory (application code) you must include an acknowledgement: "This -product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence [including the GNU Public -Licence.] - -------------------- - -zlib: -Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate and -zlib specifications were written by L. Peter Deutsch. Thanks to all the people -who reported problems and suggested various improvements in zlib; they are too -numerous to cite here. - -Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the -use of this software. - - Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software in a -product, an acknowledgment in the product documentation would be appreciated -but is not required. - 2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. - -------------------- - -Intel AESNI Sample Library: - -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -* Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Issue Date: Aug 6, 2010 - -------------------- - -NOTES - -SoftEther provides source codes of some GPL/LGPL/other libraries listed above -on its web server. Anyone can download, use and re-distribute them under -individual licenses which are contained on each archive file, available from -the following URL: -http://uploader.softether.co.jp/src/ - - - -BitVisor(R) VPN Client Module (IPsec Driver): -Copyright (c) 2007, 2008 University of Tsukuba. -Copyright (C) 2007, 2008 National Institute of Information and Communications -Technology. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University of Tsukuba nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -Microsoft(R) C Runtime Library: -(c) 2007 Microsoft Corporation. All Rights Reserved. - -------------------- - -RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): - -License to copy and use this software is granted provided that it is -identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface -(Cryptoki)" in all material mentioning or referencing this software. - -License is also granted to make and use derivative works provided that such -works are identified as "derived from the RSA Security Inc. PKCS #11 -Cryptographic Token Interface (Cryptoki)" in all material mentioning or -referencing the derived work. - -RSA Security Inc. makes no representations concerning either the -merchantability of this software or the suitability of this software for any -particular purpose. It is provided "as is" without express or implied warranty -of any kind. - -------------------- - -WinPcap: -Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the Politecnico di Torino nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libedit: -Copyright (c) 1992, 1993 The Regents of the University of California. All -rights reserved. - -This code is derived from software contributed to Berkeley by Christos Zoulas -of Cornell University. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libiconv: - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - - This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide complete object -files to the recipients so that they can relink them with the library, after -making changes to the library and recompiling it. And you must show them these -terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated -libraries. This license is quite different from the ordinary one; be sure to -read it in full, and don't assume that anything in it is the same as in the -ordinary license. - - The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to -running a utility program or application program. However, in a textual and -legal sense, the linked executable is a combined work, a derivative of the -original library, and the ordinary General Public License treats it as such. - - Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker conditions -might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while preserving -your freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards changes -in header files, but we have achieved it as regards changes in the actual -functions of the Library.) The hope is that this will lead to faster -development of free libraries. - - The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - - Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it may -be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with -modifications and/or translated straightforwardly into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) - - "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - - Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License -along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table -of data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make a -good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a -purpose that is entirely well-defined independent of the application. -Therefore, Subsection 2d requires that any application-supplied function or -table used by this function must be optional: if the application does not -supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do this, -you must alter all the notices that refer to this License, so that they refer -to the ordinary GNU General Public License, version 2, instead of to this -License. (If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you wish.) -Do not make any other change in these notices. - - Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software -interchange. - - If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the -object code. - - 5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of this -License. - - However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. -Whether this is true is especially significant if the work can be linked -without the Library, or if the work is itself a library. The threshold for -this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten lines -or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables containing -this object code plus portions of the Library will still fall under Section -6.) - - Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your choice, -provided that the terms permit modification of the work for the customer's own -use and reverse engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above) ; and, if the work is -an executable linked with the Library, with the complete machine-readable -"work that uses the Library", as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified executable -containing the modified Library. (It is understood that the user who changes -the contents of definitions files in the Library will not necessarily be able -to recompile the application to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at least three -years, to give the same user the materials specified in Subsection 6a, above, -for a charge no more than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. - - d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - - It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - - 7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on -the Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not have -their licenses terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you do -not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this -License to do so, and all its terms and conditions for copying, distributing -or modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible for -enforcing compliance by third parties to this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution -of the Library by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Library does not specify a license version number, you may -choose any version ever published by the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -------------------- - -ncurses: -Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, distribute with -modifications, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright holders -shall not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization. - -------------------- - -OpenSSL: -OpenSSL License -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must -display the following acknowledgment: "This product includes software -developed by the OpenSSL Project for use in the OpenSSL Toolkit. -(http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to -endorse or promote products derived from this software without prior written -permission. For written permission, please contact openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" nor may -"OpenSSL" appear in their names without prior written permission of the -OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following -acknowledgment: "This product includes software developed by the OpenSSL -Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim Hudson -(tjh@cryptsoft.com). - -Original SSLeay License -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. - -This package is an SSL implementation written by Eric Young -(eay@cryptsoft.com). The implementation was written so as to conform with -Netscapes SSL. - -This library is free for commercial and non-commercial use as long as the -following conditions are aheared to. The following conditions apply to all -code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; -not just the SSL code. The SSL documentation included with this distribution -is covered by the same copyright terms except that the holder is Tim Hudson -(tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in the code -are not to be removed. If this package is used in a product, Eric Young should -be given attribution as the author of the parts of the library used. This can -be in the form of a textual message at program startup or in documentation -(online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the copyright notice, this list -of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must -display the following acknowledgement: "This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' -can be left out if the rouines from the library being used are not -cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from the -apps directory (application code) you must include an acknowledgement: "This -product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence [including the GNU Public -Licence.] - -------------------- - -zlib: -Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate and -zlib specifications were written by L. Peter Deutsch. Thanks to all the people -who reported problems and suggested various improvements in zlib; they are too -numerous to cite here. - -Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the -use of this software. - - Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software in a -product, an acknowledgment in the product documentation would be appreciated -but is not required. - 2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. - -------------------- - -Intel AESNI Sample Library: - -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -* Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Issue Date: Aug 6, 2010 - -------------------- - -NOTES WRITTEN BY SOFTETHER CORPORATION - -Note for users of non-Windows version of PacketiX VPN: The enumerated bundle -of License Agreements above are copies of original License Agreements of each -library programs which PacketiX VPN uses. PacketiX VPN is not a delivered work -from these libraries. PacketiX VPN is a separated work from the libraries, but -it may call functions of the libraries (whether or not PacketiX VPN calls such -functions are depended on the user's intention to link them or not on user's -side computer). While some libraries indicate GPL or LGPL as a condition to -re-distribute, PacketiX VPN is not license under GPL nor LGPL. Therefore, we -took special care not to make PacketiX VPN become delivered works of any GPL -or LGPL libraries. In order to achieve that, both PacketiX VPN and GPL/LGPL -libraries are distributed with isolated forms (means that any program files of -PacketiX VPN are not bound nor linked to any GPL/LGPL libraries). If a user of -PacketiX VPN wants to link GPL/LGPL libraries by their own decisions, -operations and responsibilities, he may do that on his computer. However, if a -delivered work under copyright law is created as a result of such an -operation, such a delivered work must not re-distributed to other people, -because it may violate GPL/LGPL libraries' conditions. - -Note for users of Windows version of PacketiX VPN: For technical reason, the -above texts are exactly same as a file which is also contained on the -non-Windows version of PacketiX VPN. Actually, the Windows version of PacketiX -VPN has no relations to any GPL/LGPL libraries enumerated above. - -SoftEther Corporation provides source codes of some GPL/LGPL/other libraries -listed above on its web server. Anyone can download, use and re-distribute -them under individual licenses which are contained on each archive file, -available from the following URL: -http://uploader.softether.co.jp/src/ - - - -THE IMPORTANT NOTICES ABOUT SOFTETHER VPN - -FUNCTIONS OF VPN COMMUNICATIONS EMBEDDED ON THIS SOFTWARE ARE VERY POWERFUL -THAN EVER. THIS STRONG VPN ABILITY WILL BRING YOU HUGE BENEFITS. HOWEVER, IF -YOU MISUSE THIS SOFTWARE, IT MIGHT DAMAGES YOURSELF. IN ORDER TO AVOID SUCH -RISKS, THIS DOCUMENT ACCOUNTS IMPORTANT NOTICES FOR CUSTOMERS WHO ARE WILLING -TO USE THIS SOFTWARE. THE FOLLOWING INSTRUCTIONS ARE VERY IMPORTANT. READ AND -UNDERSTAND IT CAREFULLY. ADDITIONALLY, IF YOU ARE PLANNING TO USE THE DYNAMIC -DNS, THE NAT TRAVERSAL OR THE VPN AZURE FUNCTIONS, READ THE SECTION 3.5 -CAREFULLY. THESE FUNCTIONS ARE FREE SERVICES PROVIDED VIA THE INTERNET, ARE -NOT GUARANTEED, AND ARE NOT INTENDED TO BE USED FOR BUSINESS OR COMMERCIAL -USE. DO NOT USE THESE SERVICES FOR YOUR BUSINESS OR COMMERCIAL USE. - - -1. VPN Communication Protocols -1.1. SoftEther VPN Protocol -SoftEther VPN can perform VPN communication. Unlike traditional VPN protocols, -SoftEther VPN has an implementation of the newly-designed "SoftEther VPN -Protocol (SE-VPN Protocol)" . SE-VPN protocol encapsulates any Ethernet -packets into a HTTPS (HTTP over SSL) connection. Therefore SE-VPN protocol can -communicate beyond firewalls even if the firewall is configured to block -traditional VPN packets by network administrator. SE-VPN protocol is designed -and implemented to comply TLS 1.0 (RFC 5246) and HTTPS (RFC 2818). However, it -sometimes have different behavior to RFCs. If you are a network administrator -and want to block SE-VPN protocols on the firewall, you can adopt a -"white-list" policy on the firewall to filter any TCP or UDP packets on the -border except explicitly allowed packets towards specific web sites and -servers. - -1.2. NAT Traversal Function -Generally, if you use traditional VPN systems you have to request a network -administrator to make the NAT or firewall to "open" or "relay" specific TCP or -UDP ports. However, there are demands somehow to eliminate such working costs -on network administrators. In order to satisfy such demands, SoftEther VPN has -the newly-implemented "NAT Traversal" function. NAT Traversal is enabled by -default. A SoftEther VPN Server running on the computer behind NAT or firewall -can accept VPN connections from the Internet, without any special -configurations on firewalls or NATs. If you want to disable the NAT Traversal -function, modify the "DisableNatTraversal" to "true" on the configuration file -of SoftEther VPN Server. In order to disable it on the client-side, append -"/tcp" suffix on the destination hostname. - -1.3. Dynamic DNS Function -Traditional legacy VPN system requires a static global IP address on the VPN -server. In consideration of shortage of global IP addresses, SoftEther -Corporation implements the "Dynamic DNS Function" on SoftEther VPN Server. -Dynamic DNS is enabled by default. Dynamic DNS function notify the current -global IP address of the PC to the Dynamic DNS Servers which are operated by -SoftEther Corporation. A globally-unique hostname (FQDN) such as -"abc.softether.net" ( "abc" varies as unique per a user) will be assigned on -the VPN Server. If you tell this unique hostname to a VPN user, the user can -specify it as the destination VPN Sever hostname on the VPN Client and will be -able to connect the VPN Server. No IP addresses are required to know -beforehand. If the IP address of the VPN Server varies, the registered IP -address related to the hostname of Dynamic DNS service will be changed -automatically. By this mechanism, no longer need a static global IP address -which costs monthly to ISPs. You can use consumer-level inexpensive Internet -connection with dynamic IP address in order to operate an enterprise-level VPN -system. If you want to disable Dynamic DNS, specify "true" on the "Disabled" -items of the "DDnsClient" directive on the SoftEther VPN Server configuration -file. * Note for residents in People's Republic of China: If your VPN Server -is running on the People's Republic of China, the DNS suffix will be replaced -to "sedns.cn" domain. The "sedns.cn" domain is the service possessed and -operated by "Beijing Daiyuu SoftEther Technology Co., Ltd" which is a -Chinese-local enterprise. - -1.4. VPN over ICMP / VPN over DNS functions -If you want to make a VPN connection between SoftEther VPN Client / Bridge and -SoftEther VPN Server, but if TCP and UDP packets are prohibited by the -firewall, then you can encapsulates payloads into "ICMP" (as known as Ping) or -"DNS" packets. This function can realize a VPN connection by using ICMP or DNS -even if the firewall or router blocks every TCP or UDP connections. VPN over -ICMP / VPN over DNS functions are designed to comply standard ICMP and DNS -specifications as possible, however it sometimes has a behavior not to fully -comply them. Therefore, few poor-quality routers may be caused a -memory-overflow or something troubles when a lot of ICMP or DNS packets are -passed, and such routers sometimes freezes or reboots. It might affects other -users on the same network. To avoid such risks, append the suffix "/tcp" on -the destination hostname which is specified on the VPN-client side to disable -VPN over ICMP / DNS functions. - -1.5. VPN Azure Cloud Service -If your SoftEther VPN Server is placed behind the NAT or firwall, and by some -reason you cannot use NAT Traversal function, Dynamic DNS function or VPN over -ICMP/DNS function, you can use VPN Azure Clouse Service. SoftEther Corporation -operates VPN Azure Cloud on Internet. After the VPN Server makes a connection -to the VPN Azure Cloud, the hostname "abc.vpnazure.net" ( "abc" is a unique -hostname) can be specified to connect to the VPN Server via the VPN Azure -Cloud. Practically, such a hostname is pointing a global IP address of one of -cloud servers which are operated by SoftEther Corporation. If A VPN Client -connects to such a VPN Azure host, then the VPN Azure host will relay all -traffics between the VPN Client and the VPN Server. VPN Azure is disabled by -default. You can activate it easily by using VPN Server Configuration Tool. - -1.6. UDP Acceleration -SoftEther VPN has the UDP Acceleration Function. If a VPN consists of two -sites detects that UDP channel can be established, UDP will be automatically -used. By this function, throughput of UDP increases. If direct UDP channel can -be established, direct UDP packets will be used. However, if there is -something obstacles such as firewalls or NATs, the "UDP Hole Punching" -technology will be used, instead. The "UDP Hole Punching" uses the cloud -servers which SoftEther Corporation operates on Internet. UDP Acceleration can -be disabled anytime by setting up so on the VPN-client side. - - -2. VPN Software -2.1. SoftEther VPN Client -If you use SoftEther VPN Client on Windows, the Virtual Network Adapter device -driver will be installed on Windows. The Virtual Network Adapter is -implemented as a kernel-mode driver for Windows. The driver is -digitally-signed by a certificate issued by VeriSign, Inc. and also sub-signed -by Symantec Corporation. A message to ask you want to sure install the driver -might be popped up on the screen. SoftEther VPN Client may response the -message if possible. SoftEther VPN Client also optimizes the configuration of -MMCSS (Multimedia Class Scheduler Service) on Windows. You can undo the -optimizations of MMCSS afterwards. - -2.2. SoftEther VPN Server / Bridge -If you use SoftEther VPN Server / Bridge on Windows with "Local Bridge" -functions, you have to install the low-level Ethernet packet processing driver -on the computer. The driver is digitally-signed by a certificate issued by -VeriSign, Inc. and also sub-signed by Symantec Corporation. SoftEther VPN -Server / Bridge may disable the TCP/IP offloading features on the physical -network adapter for Local Bridge function. In Windows Vista / 2008 or greater -version, VPN Server may inject a packet-filter driver which complies Windows -Filter Platform (WPF) specification into the kernel in order to provide IPsec -function. The packet-filter driver will be loaded available only if IPsec -function is enabled. Once you enables IPsec function of SoftEther VPN Server, -the built-in IPsec function of Windows will be disabled. After you disabled -IPsec function of SoftEther VPN Server, then the built-in IPsec function of -Windows will revive. In order to provide the Local Bridge function, SoftEther -VPN Server / Bridge disables the TCP/IP offloading function on the operating -system. - -2.3. User-mode Installation -You can install SoftEther VPN Server and SoftEther VPN Bridge as "User-mode" -on Windows. In other words, even if you don't have Windows system -administrator's privileges, you can install SoftEther VPN as a normal user. -User-mode install will disable a few functions, however other most functions -work well. Therefore, for example, an employee can install SoftEther VPN -Server on the computer in the office network, and he will be able to connect -to the server from his home. In order to realize such a system by user-self, -no system administrative privileges are required in the view-point of -technical. However, breaking rules of the company to install software on the -computer without authority might be regarded as an unfavorable behavior. If -you are an employee and belong to the company, and the company-policy -prohibits installing software or making communications towards Internet -without permission, you have to obtain a permission from the network -administrator or the executive officer of your company in advance to install -SoftEther VPN. If you install VPN Server / Bridge as User-mode, an icon will -be appeared on the Windows task-tray. If you feel that the icon disturbs you, -you can hide it by your operation. However, you must not exploit this hiding -function to install VPN Server on other person's computer as a spyware. Such -behavior might be an offence against the criminal law. - -2.4. Keep Alive Function -SoftEther VPN Server and SoftEther VPN Bridge has Keep Alive Function by -default. The purpose of this function is to sustain the Internet line active. -The function transmits UDP packets with a random-byte-array-payload -periodically. This function is useful to avoid automatic disconnection on -mobile or dial-up connections. You can disable Keep Alive Function anytime. - -2.5. Uninstallation -The uninstallation process of SoftEther VPN software will delete all program -files. However, non-program files (such as files and data which are generated -by running of programs) ) will not be deleted. For technical reason, the exe -and resource files of uninstaller might remain. Such remaining files never -affects to use the computer, however you can delete it manually. Kernel-mode -drivers might not be deleted, however such drivers will not be loaded after -the next boot of Windows. You can use "sc" command of Windows to delete -kernel-mode drivers manually. - -2.6. Security -You should set the administrator's password on SoftEther VPN Server / Bridge -after installation. If you neglect to do it, another person can access to -SoftEther VPN Server / Bridge and can set the password without your -permission. This caution might be also applied on SoftEther VPN Client for -Linux. - -2.7. Automatic Update Notification -SoftEther VPN software for Windows has an automatic update notification -function. It accesses to the SoftEther Update server periodically to check -whether or not the latest version of software is released. If the latest -version is released, the notification message will be popped up on the screen. -In order to achieve this purpose, the version, language settings, the unique -identifier, the IP address of your computer and the hostname of VPN Server -which is connected to will be sent to the SoftEther Update server. No personal -information will be sent. Automatic Update Notification is enabled by default, -however you can disable it on the configuration screen. The setting whether -turned on or turned off will be saved individually corresponding to each -destination VPN server, by VPN Server Manager. - -2.8. Virtual NAT Function -A Virtual Hub on SoftEther VPN Server / Bridge has "Virtual NAT Function" . -Virtual NAT Function can share a single IP address on the physical network by -multiple private IP address of VPN Clients. There are two operation mode of -Virtual NAT: User-mode and Kernel-mode. In the user-mode operation, Virtual -NAT shares an IP address which is assigned on the host operating system. -Unlike user-mode, the kernel-mode operation attempts to find DHCP servers on -the physical network. If there are two or more physical networks, a DHCP -server will be sought automatically for each segments serially. If a DHCP -server found, and an IP address is acquired, the IP address will be used by -the Virtual NAT. In this case, an IP entry as a DHCP client will be registered -on the IP pool of the physical DHCP Server. The physical default gateway and -the DNS server will be used by the Virtual NAT in order to communicate with -hosts in Internet. In kernel-mode operation, a Virtual Hub has a virtual MAC -address which is operating on the physical Ethernet segment. In order to check -the connectivity to Internet, SoftEther VPN periodically sends DNS query -packet to resolve the IP address of host "www.yahoo.com" or "www.baidu.com" , -and attempts to connect to the TCP port 80 of such a resulted IP address for -connectivity check. - -2.9. Unattended Installation of Kernel-mode Components -When SoftEther VPN will detect a necessity to install the kernel-mode -components on Windows, a confirmation message will be appeared by Windows -system. In this occasion, SoftEther VPN software will switch to the Unattended -Installation mode in order to respond "Yes" to Windows. This is a solution to -prevent dead-locks when a remote-administration is performed from remote -place. - -2.10. Windows Firewall -SoftEther VPN software will register itself as a safe-program. Such an entry -will be remain after the uninstallation. You can remove it manually from the -Control Panel of Windows. - - -3. Internet Services -3.1. Internet Services which are provided by SoftEther Corporation -SoftEther Corporation provides Dynamic DNS, NAT Traversal and VPN Azure server -services on the Internet. These services are free of charge. Customers can -access to the services by using SoftEther VPN software, via Internet. These -service will be planned to be available from Open-Source version of "SoftEther -VPN" which will be released in the future. - -3.2. Sent Information and Privacy Protection -SoftEther VPN software may send an IP address, hostname, the version of VPN -software on the customer's computer to the cloud service operated by SoftEther -Corporation, in order to use the above services. These sending of information -are minimal necessary to use the services. No personal information will be -sent. SoftEther Corporation records log files of the cloud service servers for -90 days at least with the received information. Such logs will be used for -troubleshooting and other legitimate activities. SoftEther Corporation may -provide logs to a public servant of Japanese government who are belonging to -courts, police stations and the prosecutor's office, in order to comply such -authorities' order. (Every Japanese public servants are liable by law to keep -the information close.) Moreover, the IP addresses or other information will -be processed statistically and provided to the public, not to expose the each -concrete IP address, in order to release the release of research activities. - -3.3. Communication Data via VPN Azure Service -Regardless of the above 3.2 rule, if the customer sends or receives VPN -packets using VPN Azure Cloud Service, the actual payloads will stored and -forwarded via the volatile memory of the servers for very short period. Such a -behavior is naturally needed to provide the "VPN relay service" . No payloads -will be recorded on "fixed" storages such as hard-drives. However, the -"Wiretapping for Criminals Procedures Act" (The 137th legislation ruled on -August 18, 1999 in Japan) requires telecommunication companies to allow the -Japanese government authority to conduct a wire-tapping on the line. VPN Azure -Servers which are physically placed on Japan are subjects of this law. - -3.4. Comply to Japanese Telecommunication Laws -SoftEther Corporation complies with Japanese Telecommunication Laws as -necessary to provide online services via Internet. - -3.5. Free and Academic Experiment Services -SoftEther provides Dynamic DNS, NAT Traversal and VPN Azure as academic -experiment services. Therefore, there services can be used for free of charge. -These services are not parts of "SoftEther VPN Software Products" . These -services are provided without any warranty. The services may be suspended or -discontinued by technical or operational matters. In such occasions, users -will not be able to use the services. A user have to understand such risks, -and to acknowledge that such risks are borne by a user-self. SoftEther will -never be liable to results or damages of use or unable-to-use of the service. -Even if the user has already paid the license-fee of the commercial version of -SoftEther VPN, such paid fees don't include any fees of these services. -Therefore, if the online services will stop or be discontinued, no refunds or -recoveries of damages will be provided by SoftEther Corporation. - -3.6. DNS Proxy Cloud Servers -In some regions, when a user uses Internet, a DNS query sometimes broken or -lost when it is passing through the ISP line. If SoftEther VPN Server, Client -or Bridge detects a possibility that the accessing to the actual VPN server -might be unstable, then DNS queries will be also transferred to the DNS proxy -cloud servers which are operated by SoftEther Corporation. A DNS proxy cloud -server will respond DNS queries with answering correct a IP address. - - -4. General Cautions -4.1. Needs an Approval from Network Administrator -SoftEther VPN has powerful functions which don't require special settings by -network administrators. For example, you need not to ask the administrator to -configure the existing firewall in order to "open" a TCP/UDP port. Such -characteristic features are for the purpose to eliminate working times and -costs of network administrators, and avoid misconfiguration-risks around the -tasks to open specific exception ports on the firewall. However, any employees -belong to the company have to obtain an approval from the network -administrator before installs SoftEther VPN. If your network administrator -neglects to provide such an approval, you can consider to take an approval -from an upper authority. (For example, executive officer of the company.) If -you use SoftEther VPN without any approvals from the authority of your -company, you might have disadvantage. SoftEther Corporation will be never -liable for results or damages of using SoftEther VPN. - -4.2. Observe Laws of Your Country -If your country's law prohibits the use of encryption, you have to disable the -encryption function of SoftEther VPN by yourself. Similarly, in some countries -or regions, some functions of SoftEther VPN might be prohibited to use by -laws. Other countries' laws are none of SoftEther Corporation's concern -because SoftEther Corporation is an enterprise which is located and registered -in Japan physically. For example, there might be a risk that a part of -SoftEther VPN conflicts an existing patent which is valid only on the specific -region. SoftEther Corporation has no interests in such specific region outside -Japan's territory. Therefore, if you want to use SoftEther VPN in regions -outside Japan, you have to be careful not to violate third-person's rights. -You have to verify the legitimacy of the use of SoftEther VPN in the specific -region before you actually use it in such region. By nature, there are almost -200 countries in the World, and each country's law is different each other. It -is practically impossible to verify every countries' laws and regulations and -make the software comply with all countries' laws in advance to release the -software. Therefore SoftEther Corporation has verified the legitimacy of -SoftEther VPN against the laws and regulations of only Japan. If a user uses -SoftEther VPN in a specific country, and damaged by public servants of the -government authority, SoftEther Corporation will never be liable to recover or -compensate such damages or criminal responsibilities. - - -5. VPN Gate Academic Experiment Project -(This chapter applies only on SoftEther VPN software package which contains -the extension plug-in for VPN Gate Academic Experiment Project.) -5.1. About VPN Gate Academic Experiment Project -VPN Gate Academic Experiment Project is an online service operated for just -the academic research purpose at the graduate school of University of Tsukuba, -Japan. The purpose of this research is to expend our knowledge about the -"Global Distributed Public VPN Relay Server" (GDPVRS) technology. For details, -please visit http://www.vpngate.net/. - -5.2. About VPN Gate Service -SoftEther VPN Server and SoftEther VPN Client may contain "VPN Gate Service" -program. However, VPN Gate Service is disabled by default. -VPN Gate Service should be activated and enabled by the voluntary intention of -the owner of the computer which SoftEther VPN Server or SoftEther VPN Client -is installed on. After you activate VPN Gate Service, the computer will be -start to serve as a part of the Global Distributed Public VPN Relay Servers. -The IP address, hostname and related information of the computer will be sent -and registered to the directory server of VPN Gate Academic Experiment -Project, and they will be published and disclosed to the public. This -mechanism will allow any VPN Gate Client software's user to connect to the VPN -Gate Service running on your computer. While the VPN session between a VPN -Gate Client and your VPN Gate Service is established, the VPN Gate Client's -user can send/receive any IP packets towards the Internet via the VPN Gate -Service. The global IP address of the VPN Gate Service's hosing computer will -be used as the source IP address of such communications which a VPN Gate -Client initiates. -VPN Gate Service will send some information to the VPN Gate Academic -Experiment Service Directory Server. The information includes the operator's -information which described in section 5.5, logging settings, uptime, -operating system version, type of protocol, port numbers, quality information, -statistical information, VPN Gate clients' log history data (includes dates, -IP addresses, version numbers and IDs) and the version of the software. These -information will be exposed on the directory. VPN Gate Service also receives a -key for encoding which is described on the chapter 5.9 from the directory -server. - -5.3. Details of VPN Gate Service's Behavior -If you enable VPN Gate Service manually, which is disabled by default, the -"VPNGATE" Virtual Hub will be created on the SoftEther VPN Server. If you are -using SoftEther VPN Client and attempt to active VPN Gate Service on it, an -equivalent program to SoftEther VPN Server will be invoked on the same process -of SoftEther VPN Client, and the "VPNGATE" Virtual Hub will be created. The -"VPNGATE" Virtual Hub contains a user named "VPN" by default which permits -anyone on the Internet to make a VPN connection to the Virtual Hub. Once a VPN -Client connects to the "VPNGATE" Virtual Hub, any communication between the -user and the Internet will pass through the Virtual Hub, and -transmitted/received using the physical network interface on the computer -which SoftEther VPN Server (or SoftEther VPN Client) is running on. This will -cause the result that a destination host specified by the VPN Client will -identify that the source of the communication has initiated from the VPN Gate -Service's hosting computer's IP address. However, for safety, any packets -which destinations are within 192.168.0.0/255.255.0.0, 172.16.0.0/255.240.0.0 -or 10.0.0.0/255.0.0.0 will be blocked by the "VPNGATE" Virtual Hub in order to -protect your local network. Therefore, if you run VPN Gate Service on your -corporate network or private network, it is safe because anonymous VPN Client -users will not be permitted to access such private networks. VPN Gate Service -also serves as relay for accessing to the VPN Gate Directory Server. -In order to make VPN Gate Service familiar with firewalls and NATs, it opens -an UDP port by using the NAT Traversal function which is described on the -section 1.2. It also opens and listens on some TCP ports, and some TCP and UDP -ports will be specified as the target port of Universal Plug and Play (UPnP) -Port Transfer entries which are requested to your local routers. UPnP request -packets will be sent periodically. Some routers keep such an opened TCP/UDP -port permanently on the device. If you wish to close them, do it manually. -VPN Gate Service also provides the mirror-site function for www.vpngate.net. -This is a mechanism that a copy of the latest contents from www.vpngate.net -will be hosted by the mirror-site tiny HTTP server which is running on the VPN -Gate Service program. It will register itself on the mirror-sites list in -www.vpngate.net. However, it never relays any other communications which are -not towards www.vpngate.net. - -5.4. Communication between Internet via VPN Gate Service -VPN Gate Service provides a routing between users and the Internet, by using -the Virtual NAT Function which is described on the section 2.8. VPN Gate -Service sends polling Ping packets to the server which is located on -University of Tsukuba, and the Google Public DNS Server which is identified as -8.8.8.8, in order to check the latest quality of your Internet line. VPN Gate -Service also sends and receives a lot of random packets to/from the Speed Test -Server on University of Tsukuba. These quality data will be reported to VPN -Gate Directory Server, automatically and periodically. The result will be -saved and disclosed to the public. These periodical polling communication are -adjusted not to occupy the Internet line, however in some circumstances they -might occupy the line. - -5.5. Operator's Information of VPN Gate Service -If you activate VPN Gate Service on your computer, the computer will be a part -of the Global Distributed Public VPN Relay Servers. Therefore, the Operator's -administrative information of your VPN Gate Service should be reported and -registered on the VPN Gate Service Directory. Operator's information contains -the name of the operator and the abuse-reporting contact e-mail address. These -information can be inputted on the screen if the VPN Gate configuration. -Inputted information will be transmitted to the VPN Gate Directory Server, -stored and disclosed to the public. So you have to be careful to input -information. By the way, until you specify something as the operator's -information, the computer's hostname will be used automatically as the field -of the name of the operator, by appending the "'s owner" string after the -hostname. - -5.6. Observe Laws to Operate VPN Gate Service -In some countries or regions, a user who is planning to activate and operate -VPN Gate Service, he are mandated to obtain a license or register a service -from/to the government. If your region has such a regulation, you must fulfill -mandated process before activating VPN Gate Service in advance. Neither the -developers nor operators of the VPN Gate Academic Experiment Project will be -liable for legal/criminal responsibilities or damages which are occurred from -failure to comply your local laws. - -5.7. Protect Privacy of Communication -Most of countries have a law which requires communication service's operators, -including VPN Gate Service operators, to protect the privacy of communication -of third-persons. When you operate VPN Gate Service, you must always protect -user's privacy. - -5.8. Packet Logs -The packet logging function is implemented on VPN Gate Service. It records -essential headers of major TCP/IP packets which are transmitted via the -Virtual Hub. This function will be helpful to investigate the "original IP -address" of the initiator of communication who was a connected user of your -VPN Gate Service, by checking the packet logs and the connection logs. The -packet logs are recorded only for such legitimate investigates purpose. Do not -peek nor leak packet logs except the rightful purpose. Such act will be -violate the section 5.7. - -5.9. Packet Logs Automatic Archiving and Encoding Function -The VPN Gate Academic Experiment Service is operated and running under the -Japanese constitution and laws. The Japanese constitution laws demand strictly -protection over the privacy of communication. Because this service is under -Japanese rules, the program of VPN Gate Service implements this "Automatic Log -File Encoding" protection mechanism, and enabled by default. -The VPN Gate Service is currently configured to encode packet log files which -has passed two or more weeks automatically, by default. In order to protect -privacy of communication, if a packet log file is once encoded, even the -administrator of the local computer cannot censor the packet log file. This -mechanism protects privacy of end-users of VPN Gate Service. -You can change the VPN Gate Service setting to disable this automatic encoding -function. Then packet log files will never be encoded even after two weeks -passed. In such a configuration, all packet logs will remain as plain-text on -the disk. Therefore you have to take care not to violate user's privacy. -If you are liable to decode an encoded packet log files (for example: a VPN -Gate Service's user illegally abused your VPN Gate Service and you have to -decode the packet logs in order to comply the laws), contact the administrator -of the VPN Gate Academic Experiment Service at Graduate School of University -of Tsukuba, Japan. You can find the contact address at -http://www.vpngate.net/. The administrator of VPN Gate Service will respond to -decode the packet logs if there is an appropriate and legal request from court -or other judicial authorities, according to laws. - -5.10. Caution if You Operate VPN Gate Service in the Japan's Territories -When a user operates VPN Gate Service in the Japan's territories, such an act -may be regulated under the Japanese Telecommunication Laws if the operation is -a subject to the law. However, in such a circumstance, according to the -"Japanese Telecommunication Business Compete Manual [supplemental version]" , -non- profitable operations of communications are not identified as a -"telecommunication business" . So usual operators of VPN Gate Service are not -subjects to "telecommunication business operators" , and not be mandated to -register to the government. Even so, legalities to protect the privacy of -communication still imposed. As a conclusion, if you operate VPN Gate Service -in the Japan's Territories, you must not leak the secrets of communications -which are transmitted via your operating VPN Gate Service. - -5.11. VPN Gate Client -If SoftEther VPN Client contains the VPN Gate Client plug-in, you can use it -to obtain the list of current operating VPN Gate Service servers in the -Internet, and make a VPN connection to a specific server on the list. -VPN Gate Client always keeps the latest list of the VPN Gate Services -periodically. Be careful if you are using a pay-per-use Internet line. -When you start the VPN Gate Client software, the screen which asks you -activate or not VPN Gate Service will be appeared. For details of VPN Gate -Service, read the above sections. - -5.12. Caution before Joining or Exploiting VPN Gate Academic Experiment -Project -The VPN Gate Academic Experiment Service is operated as a research project at -the graduate school on University of Tsukuba, Japan. The service is governed -under the Japanese laws. Other countries' laws are none of our concerns nor -responsibilities. -By nature, there are almost 200 countries in the World, with different laws. -It is impossible to verify every countries' laws and regulations and make the -software comply with all countries' laws in advance to release the software. -If a user uses VPN Gate service in a specific country, and damaged by public -servants of the authority, the developer of either the service or software -will never be liable to recover or compensate such damages or criminal -responsibilities. -By using this software and service, the user must observe all concerned laws -and rules with user's own responsibility. The user will be completely liable -to any damages and responsibilities which are results of using this software -and service, regardless of either inside or outside of Japan's territory. -If you don't agree nor understand the above warnings, do not use any of VPN -Gate Academic Experiment Service functions. -VPN Gate is a research project for just academic purpose only. VPN Gate was -developed as a plug-in for SoftEther VPN and UT-VPN. However, all parts of VPN -Gate were developed on this research project at University of Tsukuba. Any -parts of VPN Gate are not developed by SoftEther Corporation. The VPN Gate -Research Project is not a subject to be led, operated, promoted nor guaranteed -by SoftEther Corporation. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH +LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. diff --git a/README b/README index df623ce6..899da01c 100644 --- a/README +++ b/README @@ -114,10 +114,10 @@ on all the following open-source repositories: https://github.com/SoftEtherVPN/SoftEtherVPN/ - SourceForge - https://sourceforge.net/projects/softethervpn/ + https://sourceforge.net/p/softethervpn/code/ci/master/tree/ - Google Code - https://code.google.com/p/softether/ + https://code.google.com/p/softether/source/browse/ To fetch the source code from GitHub: @@ -179,6 +179,9 @@ SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. + ADVERTISEMENT ------------- diff --git a/README.TXT b/README.TXT index df623ce6..899da01c 100644 --- a/README.TXT +++ b/README.TXT @@ -114,10 +114,10 @@ on all the following open-source repositories: https://github.com/SoftEtherVPN/SoftEtherVPN/ - SourceForge - https://sourceforge.net/projects/softethervpn/ + https://sourceforge.net/p/softethervpn/code/ci/master/tree/ - Google Code - https://code.google.com/p/softether/ + https://code.google.com/p/softether/source/browse/ To fetch the source code from GitHub: @@ -179,6 +179,9 @@ SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. + ADVERTISEMENT ------------- diff --git a/THIRD_PARTY.TXT b/THIRD_PARTY.TXT new file mode 100644 index 00000000..53a665f7 --- /dev/null +++ b/THIRD_PARTY.TXT @@ -0,0 +1,757 @@ +BitVisor(R) VPN Client Module (IPsec Driver): +Copyright (c) 2007, 2008 University of Tsukuba. +Copyright (C) 2007, 2008 National Institute of Information and Communications +Technology. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +3. Neither the name of the University of Tsukuba nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------- + +Microsoft(R) C Runtime Library: +(c) 2007 Microsoft Corporation. All Rights Reserved. + +------------------- + +RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): + +License to copy and use this software is granted provided that it is +identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface +(Cryptoki)" in all material mentioning or referencing this software. + +License is also granted to make and use derivative works provided that such +works are identified as "derived from the RSA Security Inc. PKCS #11 +Cryptographic Token Interface (Cryptoki)" in all material mentioning or +referencing the derived work. + +RSA Security Inc. makes no representations concerning either the +merchantability of this software or the suitability of this software for any +particular purpose. It is provided "as is" without express or implied warranty +of any kind. + +------------------- + +WinPcap: +Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +3. Neither the name of the Politecnico di Torino nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------- + +libedit: +Copyright (c) 1992, 1993 The Regents of the University of California. All +rights reserved. + +This code is derived from software contributed to Berkeley by Christos Zoulas +of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors may be +used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------- + +libiconv: + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public Licenses are intended +to guarantee your freedom to share and change free software--to make sure the +software is free for all its users. + + This license, the Library General Public License, applies to some specially +designated Free Software Foundation software, and to any other libraries whose +authors decide to use it. You can use it for your libraries, too. + + When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom to +distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you distribute +copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis or for +a fee, you must give the recipients all the rights that we gave you. You must +make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide complete object +files to the recipients so that they can relink them with the library, after +making changes to the library and recompiling it. And you must show them these +terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright the +library, and (2) offer you this license which gives you legal permission to +copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain that +everyone understands that there is no warranty for this free library. If the +library is modified by someone else and passed on, we want its recipients to +know that what they have is not the original version, so that any problems +introduced by others will not reflect on the original authors' reputations. + + Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that companies distributing free software will +individually obtain patent licenses, thus in effect transforming the program +into proprietary software. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License, which was designed for utility programs. This license, +the GNU Library General Public License, applies to certain designated +libraries. This license is quite different from the ordinary one; be sure to +read it in full, and don't assume that anything in it is the same as in the +ordinary license. + + The reason we have a separate public license for some libraries is that they +blur the distinction we usually make between modifying or adding to a program +and simply using it. Linking a program with a library, without changing the +library, is in some sense simply using the library, and is analogous to +running a utility program or application program. However, in a textual and +legal sense, the linked executable is a combined work, a derivative of the +original library, and the ordinary General Public License treats it as such. + + Because of this blurred distinction, using the ordinary General Public +License for libraries did not effectively promote software sharing, because +most developers did not use the libraries. We concluded that weaker conditions +might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the users +of those programs of all benefit from the free status of the libraries +themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while preserving +your freedom as a user of such programs to change the free libraries that are +incorporated in them. (We have not seen how to achieve this as regards changes +in header files, but we have achieved it as regards changes in the actual +functions of the Library.) The hope is that this will lead to faster +development of free libraries. + + The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code derived +from the library, while the latter only works together with the library. + + Note that it is possible for a library to be covered by the ordinary General +Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which contains a +notice placed by the copyright holder or other authorized party saying it may +be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data prepared so +as to be conveniently linked with application programs (which use some of +those functions and data) to form executables. + + The "Library", below, refers to any such software library or work which has +been distributed under these terms. A "work based on the Library" means either +the Library or any derivative work under copyright law: that is to say, a work +containing the Library or a portion of it, either verbatim or with +modifications and/or translated straightforwardly into another language. +(Hereinafter, translation is included without limitation in the term +"modification".) + + "Source code" for a work means the preferred form of the work for making +modifications to it. For a library, complete source code means all the source +code for all modules it contains, plus any associated interface definition +files, plus the scripts used to control compilation and installation of the +library. + + Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running a program +using the Library is not restricted, and output from such a program is covered +only if its contents constitute a work based on the Library (independent of +the use of the Library in a tool for writing it). Whether that is true depends +on what the Library does and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's complete +source code as you receive it, in any medium, provided that you conspicuously +and appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and distribute a copy of this License +along with the Library. + + You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Library or any portion of it, +thus forming a work based on the Library, and copy and distribute such +modifications or work under the terms of Section 1 above, provided that you +also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices stating +that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to all +third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a table +of data to be supplied by an application program that uses the facility, other +than as an argument passed when the facility is invoked, then you must make a +good faith effort to ensure that, in the event an application does not supply +such function or table, the facility still operates, and performs whatever +part of its purpose remains meaningful. + + (For example, a function in a library to compute square roots has a +purpose that is entirely well-defined independent of the application. +Therefore, Subsection 2d requires that any application-supplied function or +table used by this function must be optional: if the application does not +supply it, the square root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Library, and can be reasonably +considered independent and separate works in themselves, then this License, +and its terms, do not apply to those sections when you distribute them as +separate works. But when you distribute the same sections as part of a whole +which is a work based on the Library, the distribution of the whole must be on +the terms of this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based on +the Library. + +In addition, mere aggregation of another work not based on the Library with +the Library (or with a work based on the Library) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do this, +you must alter all the notices that refer to this License, so that they refer +to the ordinary GNU General Public License, version 2, instead of to this +License. (If a newer version than version 2 of the ordinary GNU General Public +License has appeared, then you can specify that version instead if you wish.) +Do not make any other change in these notices. + + Once this change is made in a given copy, it is irreversible for that copy, +so the ordinary GNU General Public License applies to all subsequent copies +and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of the Library +into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or derivative of +it, under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you accompany it with the complete +corresponding machine-readable source code, which must be distributed under +the terms of Sections 1 and 2 above on a medium customarily used for software +interchange. + + If distribution of object code is made by offering access to copy from a +designated place, then offering equivalent access to copy the source code from +the same place satisfies the requirement to distribute the source code, even +though third parties are not compelled to copy the source along with the +object code. + + 5. A program that contains no derivative of any portion of the Library, but +is designed to work with the Library by being compiled or linked with it, is +called a "work that uses the Library". Such a work, in isolation, is not a +derivative work of the Library, and therefore falls outside the scope of this +License. + + However, linking a "work that uses the Library" with the Library creates an +executable that is a derivative of the Library (because it contains portions +of the Library), rather than a "work that uses the library". The executable is +therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file that is +part of the Library, the object code for the work may be a derivative work of +the Library even though the source code is not. +Whether this is true is especially significant if the work can be linked +without the Library, or if the work is itself a library. The threshold for +this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data structure +layouts and accessors, and small macros and small inline functions (ten lines +or less in length), then the use of the object file is unrestricted, +regardless of whether it is legally a derivative work. (Executables containing +this object code plus portions of the Library will still fall under Section +6.) + + Otherwise, if the work is a derivative of the Library, you may distribute +the object code for the work under the terms of Section 6. Any executables +containing that work also fall under Section 6, whether or not they are linked +directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or link a +"work that uses the Library" with the Library to produce a work containing +portions of the Library, and distribute that work under terms of your choice, +provided that the terms permit modification of the work for the customer's own +use and reverse engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the Library +is used in it and that the Library and its use are covered by this License. +You must supply a copy of this License. If the work during execution displays +copyright notices, you must include the copyright notice for the Library among +them, as well as a reference directing the user to the copy of this License. +Also, you must do one of these things: + + a) Accompany the work with the complete corresponding machine-readable +source code for the Library including whatever changes were used in the work +(which must be distributed under Sections 1 and 2 above) ; and, if the work is +an executable linked with the Library, with the complete machine-readable +"work that uses the Library", as object code and/or source code, so that the +user can modify the Library and then relink to produce a modified executable +containing the modified Library. (It is understood that the user who changes +the contents of definitions files in the Library will not necessarily be able +to recompile the application to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at least three +years, to give the same user the materials specified in Subsection 6a, above, +for a charge no more than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy from a +designated place, offer equivalent access to copy the above specified +materials from the same place. + + d) Verify that the user has already received a copy of these materials or +that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the Library" +must include any data and utility programs needed for reproducing the +executable from it. However, as a special exception, the source code +distributed need not include anything that is normally distributed (in either +source or binary form) with the major components (compiler, kernel, and so on) +of the operating system on which the executable runs, unless that component +itself accompanies the executable. + + It may happen that this requirement contradicts the license restrictions of +other proprietary libraries that do not normally accompany the operating +system. Such a contradiction means you cannot use both them and the Library +together in an executable that you distribute. + + 7. You may place library facilities that are a work based on the Library +side-by-side in a single library together with other library facilities not +covered by this License, and distribute such a combined library, provided that +the separate distribution of the work based on the Library and of the other +library facilities is otherwise permitted, and provided that you do these two +things: + + a) Accompany the combined library with a copy of the same work based on +the Library, uncombined with any other library facilities. This must be +distributed under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that part +of it is a work based on the Library, and explaining where to find the +accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute the +Library except as expressly provided under this License. Any attempt otherwise +to copy, modify, sublicense, link with, or distribute the Library is void, and +will automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will not have +their licenses terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Library or its derivative works. These actions are prohibited by law if you do +not accept this License. Therefore, by modifying or distributing the Library +(or any work based on the Library), you indicate your acceptance of this +License to do so, and all its terms and conditions for copying, distributing +or modifying the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the original +licensor to copy, distribute, link with or modify the Library subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. You are not responsible for +enforcing compliance by third parties to this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or otherwise) +that contradict the conditions of this License, they do not excuse you from +the conditions of this License. If you cannot distribute so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not distribute the Library at all. +For example, if a patent license would not permit royalty-free redistribution +of the Library by all those who receive copies directly or indirectly through +you, then the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Library under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In +such case, this License incorporates the limitation as if written in the body +of this License. + + 13. The Free Software Foundation may publish revised and/or new versions of +the Library General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and "any later +version", you have the option of following the terms and conditions either of +that version or of any later version published by the Free Software +Foundation. If the Library does not specify a license version number, you may +choose any version ever published by the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free programs +whose distribution conditions are incompatible with these, write to the author +to ask for permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make +exceptions for this. Our decision will be guided by the two goals of +preserving the free status of all derivatives of our free software and of +promoting the sharing and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE +LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO +LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR +THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + +------------------- + +ncurses: +Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, distribute with +modifications, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright holders +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization. + +------------------- + +OpenSSL: +OpenSSL License +Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. All advertising materials mentioning features or use of this software must +display the following acknowledgment: "This product includes software +developed by the OpenSSL Project for use in the OpenSSL Toolkit. +(http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to +endorse or promote products derived from this software without prior written +permission. For written permission, please contact openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" nor may +"OpenSSL" appear in their names without prior written permission of the +OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following +acknowledgment: "This product includes software developed by the OpenSSL +Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim Hudson +(tjh@cryptsoft.com). + +Original SSLeay License +Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. + +This package is an SSL implementation written by Eric Young +(eay@cryptsoft.com). The implementation was written so as to conform with +Netscapes SSL. + +This library is free for commercial and non-commercial use as long as the +following conditions are aheared to. The following conditions apply to all +code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; +not just the SSL code. The SSL documentation included with this distribution +is covered by the same copyright terms except that the holder is Tim Hudson +(tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in the code +are not to be removed. If this package is used in a product, Eric Young should +be given attribution as the author of the parts of the library used. This can +be in the form of a textual message at program startup or in documentation +(online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the copyright notice, this list +of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software must +display the following acknowledgement: "This product includes cryptographic +software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' +can be left out if the rouines from the library being used are not +cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from the +apps directory (application code) you must include an acknowledgement: "This +product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence [including the GNU Public +Licence.] + +------------------- + +zlib: +Acknowledgments: + The deflate format used by zlib was defined by Phil Katz. The deflate and +zlib specifications were written by L. Peter Deutsch. Thanks to all the people +who reported problems and suggested various improvements in zlib; they are too +numerous to cite here. + +Copyright notice: + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the +use of this software. + + Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software in a +product, an acknowledgment in the product documentation would be appreciated +but is not required. + 2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. + +------------------- + +Intel AESNI Sample Library: + +Copyright (c) 2010, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +* Neither the name of Intel Corporation nor the names of its contributors may +be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Issue Date: Aug 6, 2010 + +------------------- + +NOTES WRITTEN BY SOFTETHER CORPORATION + +Note for users of non-Windows version of PacketiX VPN: The enumerated bundle +of License Agreements above are copies of original License Agreements of each +library programs which PacketiX VPN uses. PacketiX VPN is not a delivered work +from these libraries. PacketiX VPN is a separated work from the libraries, but +it may call functions of the libraries (whether or not PacketiX VPN calls such +functions are depended on the user's intention to link them or not on user's +side computer). While some libraries indicate GPL or LGPL as a condition to +re-distribute, PacketiX VPN is not license under GPL nor LGPL. Therefore, we +took special care not to make PacketiX VPN become delivered works of any GPL +or LGPL libraries. In order to achieve that, both PacketiX VPN and GPL/LGPL +libraries are distributed with isolated forms (means that any program files of +PacketiX VPN are not bound nor linked to any GPL/LGPL libraries). If a user of +PacketiX VPN wants to link GPL/LGPL libraries by their own decisions, +operations and responsibilities, he may do that on his computer. However, if a +delivered work under copyright law is created as a result of such an +operation, such a delivered work must not re-distributed to other people, +because it may violate GPL/LGPL libraries' conditions. + +Note for users of Windows version of PacketiX VPN: For technical reason, the +above texts are exactly same as a file which is also contained on the +non-Windows version of PacketiX VPN. Actually, the Windows version of PacketiX +VPN has no relations to any GPL/LGPL libraries enumerated above. + +SoftEther Corporation provides source codes of some GPL/LGPL/other libraries +listed above on its web server. Anyone can download, use and re-distribute +them under individual licenses which are contained on each archive file, +available from the following URL: +http://uploader.softether.co.jp/src/ + diff --git a/WARNING.TXT b/WARNING.TXT new file mode 100644 index 00000000..ac8ca580 --- /dev/null +++ b/WARNING.TXT @@ -0,0 +1,523 @@ +THE IMPORTANT NOTICES ABOUT SOFTETHER VPN + +FUNCTIONS OF VPN COMMUNICATIONS EMBEDDED ON THIS SOFTWARE ARE VERY POWERFUL +THAN EVER. THIS STRONG VPN ABILITY WILL BRING YOU HUGE BENEFITS. HOWEVER, IF +YOU MISUSE THIS SOFTWARE, IT MIGHT DAMAGES YOURSELF. IN ORDER TO AVOID SUCH +RISKS, THIS DOCUMENT ACCOUNTS IMPORTANT NOTICES FOR CUSTOMERS WHO ARE WILLING +TO USE THIS SOFTWARE. THE FOLLOWING INSTRUCTIONS ARE VERY IMPORTANT. READ AND +UNDERSTAND IT CAREFULLY. ADDITIONALLY, IF YOU ARE PLANNING TO USE THE DYNAMIC +DNS, THE NAT TRAVERSAL OR THE VPN AZURE FUNCTIONS, READ THE SECTION 3.5 +CAREFULLY. THESE FUNCTIONS ARE FREE SERVICES PROVIDED VIA THE INTERNET, ARE +NOT GUARANTEED, AND ARE NOT INTENDED TO BE USED FOR BUSINESS OR COMMERCIAL +USE. DO NOT USE THESE SERVICES FOR YOUR BUSINESS OR COMMERCIAL USE. + + +1. VPN Communication Protocols +1.1. SoftEther VPN Protocol +SoftEther VPN can perform VPN communication. Unlike traditional VPN protocols, +SoftEther VPN has an implementation of the newly-designed "SoftEther VPN +Protocol (SE-VPN Protocol)" . SE-VPN protocol encapsulates any Ethernet +packets into a HTTPS (HTTP over SSL) connection. Therefore SE-VPN protocol can +communicate beyond firewalls even if the firewall is configured to block +traditional VPN packets by network administrator. SE-VPN protocol is designed +and implemented to comply TLS 1.0 (RFC 5246) and HTTPS (RFC 2818). However, it +sometimes have different behavior to RFCs. If you are a network administrator +and want to block SE-VPN protocols on the firewall, you can adopt a +"white-list" policy on the firewall to filter any TCP or UDP packets on the +border except explicitly allowed packets towards specific web sites and +servers. + +1.2. NAT Traversal Function +Generally, if you use traditional VPN systems you have to request a network +administrator to make the NAT or firewall to "open" or "relay" specific TCP or +UDP ports. However, there are demands somehow to eliminate such working costs +on network administrators. In order to satisfy such demands, SoftEther VPN has +the newly-implemented "NAT Traversal" function. NAT Traversal is enabled by +default. A SoftEther VPN Server running on the computer behind NAT or firewall +can accept VPN connections from the Internet, without any special +configurations on firewalls or NATs. If you want to disable the NAT Traversal +function, modify the "DisableNatTraversal" to "true" on the configuration file +of SoftEther VPN Server. In order to disable it on the client-side, append +"/tcp" suffix on the destination hostname. + +1.3. Dynamic DNS Function +Traditional legacy VPN system requires a static global IP address on the VPN +server. In consideration of shortage of global IP addresses, SoftEther +Corporation implements the "Dynamic DNS Function" on SoftEther VPN Server. +Dynamic DNS is enabled by default. Dynamic DNS function notify the current +global IP address of the PC to the Dynamic DNS Servers which are operated by +SoftEther Corporation. A globally-unique hostname (FQDN) such as +"abc.softether.net" ( "abc" varies as unique per a user) will be assigned on +the VPN Server. If you tell this unique hostname to a VPN user, the user can +specify it as the destination VPN Sever hostname on the VPN Client and will be +able to connect the VPN Server. No IP addresses are required to know +beforehand. If the IP address of the VPN Server varies, the registered IP +address related to the hostname of Dynamic DNS service will be changed +automatically. By this mechanism, no longer need a static global IP address +which costs monthly to ISPs. You can use consumer-level inexpensive Internet +connection with dynamic IP address in order to operate an enterprise-level VPN +system. If you want to disable Dynamic DNS, specify "true" on the "Disabled" +items of the "DDnsClient" directive on the SoftEther VPN Server configuration +file. * Note for residents in People's Republic of China: If your VPN Server +is running on the People's Republic of China, the DNS suffix will be replaced +to "sedns.cn" domain. The "sedns.cn" domain is the service possessed and +operated by "Beijing Daiyuu SoftEther Technology Co., Ltd" which is a +Chinese-local enterprise. + +1.4. VPN over ICMP / VPN over DNS functions +If you want to make a VPN connection between SoftEther VPN Client / Bridge and +SoftEther VPN Server, but if TCP and UDP packets are prohibited by the +firewall, then you can encapsulates payloads into "ICMP" (as known as Ping) or +"DNS" packets. This function can realize a VPN connection by using ICMP or DNS +even if the firewall or router blocks every TCP or UDP connections. VPN over +ICMP / VPN over DNS functions are designed to comply standard ICMP and DNS +specifications as possible, however it sometimes has a behavior not to fully +comply them. Therefore, few poor-quality routers may be caused a +memory-overflow or something troubles when a lot of ICMP or DNS packets are +passed, and such routers sometimes freezes or reboots. It might affects other +users on the same network. To avoid such risks, append the suffix "/tcp" on +the destination hostname which is specified on the VPN-client side to disable +VPN over ICMP / DNS functions. + +1.5. VPN Azure Cloud Service +If your SoftEther VPN Server is placed behind the NAT or firwall, and by some +reason you cannot use NAT Traversal function, Dynamic DNS function or VPN over +ICMP/DNS function, you can use VPN Azure Clouse Service. SoftEther Corporation +operates VPN Azure Cloud on Internet. After the VPN Server makes a connection +to the VPN Azure Cloud, the hostname "abc.vpnazure.net" ( "abc" is a unique +hostname) can be specified to connect to the VPN Server via the VPN Azure +Cloud. Practically, such a hostname is pointing a global IP address of one of +cloud servers which are operated by SoftEther Corporation. If A VPN Client +connects to such a VPN Azure host, then the VPN Azure host will relay all +traffics between the VPN Client and the VPN Server. VPN Azure is disabled by +default. You can activate it easily by using VPN Server Configuration Tool. + +1.6. UDP Acceleration +SoftEther VPN has the UDP Acceleration Function. If a VPN consists of two +sites detects that UDP channel can be established, UDP will be automatically +used. By this function, throughput of UDP increases. If direct UDP channel can +be established, direct UDP packets will be used. However, if there is +something obstacles such as firewalls or NATs, the "UDP Hole Punching" +technology will be used, instead. The "UDP Hole Punching" uses the cloud +servers which SoftEther Corporation operates on Internet. UDP Acceleration can +be disabled anytime by setting up so on the VPN-client side. + + +2. VPN Software +2.1. SoftEther VPN Client +If you use SoftEther VPN Client on Windows, the Virtual Network Adapter device +driver will be installed on Windows. The Virtual Network Adapter is +implemented as a kernel-mode driver for Windows. The driver is +digitally-signed by a certificate issued by VeriSign, Inc. and also sub-signed +by Symantec Corporation. A message to ask you want to sure install the driver +might be popped up on the screen. SoftEther VPN Client may response the +message if possible. SoftEther VPN Client also optimizes the configuration of +MMCSS (Multimedia Class Scheduler Service) on Windows. You can undo the +optimizations of MMCSS afterwards. + +2.2. SoftEther VPN Server / Bridge +If you use SoftEther VPN Server / Bridge on Windows with "Local Bridge" +functions, you have to install the low-level Ethernet packet processing driver +on the computer. The driver is digitally-signed by a certificate issued by +VeriSign, Inc. and also sub-signed by Symantec Corporation. SoftEther VPN +Server / Bridge may disable the TCP/IP offloading features on the physical +network adapter for Local Bridge function. In Windows Vista / 2008 or greater +version, VPN Server may inject a packet-filter driver which complies Windows +Filter Platform (WPF) specification into the kernel in order to provide IPsec +function. The packet-filter driver will be loaded available only if IPsec +function is enabled. Once you enables IPsec function of SoftEther VPN Server, +the built-in IPsec function of Windows will be disabled. After you disabled +IPsec function of SoftEther VPN Server, then the built-in IPsec function of +Windows will revive. In order to provide the Local Bridge function, SoftEther +VPN Server / Bridge disables the TCP/IP offloading function on the operating +system. + +2.3. User-mode Installation +You can install SoftEther VPN Server and SoftEther VPN Bridge as "User-mode" +on Windows. In other words, even if you don't have Windows system +administrator's privileges, you can install SoftEther VPN as a normal user. +User-mode install will disable a few functions, however other most functions +work well. Therefore, for example, an employee can install SoftEther VPN +Server on the computer in the office network, and he will be able to connect +to the server from his home. In order to realize such a system by user-self, +no system administrative privileges are required in the view-point of +technical. However, breaking rules of the company to install software on the +computer without authority might be regarded as an unfavorable behavior. If +you are an employee and belong to the company, and the company-policy +prohibits installing software or making communications towards Internet +without permission, you have to obtain a permission from the network +administrator or the executive officer of your company in advance to install +SoftEther VPN. If you install VPN Server / Bridge as User-mode, an icon will +be appeared on the Windows task-tray. If you feel that the icon disturbs you, +you can hide it by your operation. However, you must not exploit this hiding +function to install VPN Server on other person's computer as a spyware. Such +behavior might be an offence against the criminal law. + +2.4. Keep Alive Function +SoftEther VPN Server and SoftEther VPN Bridge has Keep Alive Function by +default. The purpose of this function is to sustain the Internet line active. +The function transmits UDP packets with a random-byte-array-payload +periodically. This function is useful to avoid automatic disconnection on +mobile or dial-up connections. You can disable Keep Alive Function anytime. + +2.5. Uninstallation +The uninstallation process of SoftEther VPN software will delete all program +files. However, non-program files (such as files and data which are generated +by running of programs) ) will not be deleted. For technical reason, the exe +and resource files of uninstaller might remain. Such remaining files never +affects to use the computer, however you can delete it manually. Kernel-mode +drivers might not be deleted, however such drivers will not be loaded after +the next boot of Windows. You can use "sc" command of Windows to delete +kernel-mode drivers manually. + +2.6. Security +You should set the administrator's password on SoftEther VPN Server / Bridge +after installation. If you neglect to do it, another person can access to +SoftEther VPN Server / Bridge and can set the password without your +permission. This caution might be also applied on SoftEther VPN Client for +Linux. + +2.7. Automatic Update Notification +SoftEther VPN software for Windows has an automatic update notification +function. It accesses to the SoftEther Update server periodically to check +whether or not the latest version of software is released. If the latest +version is released, the notification message will be popped up on the screen. +In order to achieve this purpose, the version, language settings, the unique +identifier, the IP address of your computer and the hostname of VPN Server +which is connected to will be sent to the SoftEther Update server. No personal +information will be sent. Automatic Update Notification is enabled by default, +however you can disable it on the configuration screen. The setting whether +turned on or turned off will be saved individually corresponding to each +destination VPN server, by VPN Server Manager. + +2.8. Virtual NAT Function +A Virtual Hub on SoftEther VPN Server / Bridge has "Virtual NAT Function" . +Virtual NAT Function can share a single IP address on the physical network by +multiple private IP address of VPN Clients. There are two operation mode of +Virtual NAT: User-mode and Kernel-mode. In the user-mode operation, Virtual +NAT shares an IP address which is assigned on the host operating system. +Unlike user-mode, the kernel-mode operation attempts to find DHCP servers on +the physical network. If there are two or more physical networks, a DHCP +server will be sought automatically for each segments serially. If a DHCP +server found, and an IP address is acquired, the IP address will be used by +the Virtual NAT. In this case, an IP entry as a DHCP client will be registered +on the IP pool of the physical DHCP Server. The physical default gateway and +the DNS server will be used by the Virtual NAT in order to communicate with +hosts in Internet. In kernel-mode operation, a Virtual Hub has a virtual MAC +address which is operating on the physical Ethernet segment. In order to check +the connectivity to Internet, SoftEther VPN periodically sends DNS query +packet to resolve the IP address of host "www.yahoo.com" or "www.baidu.com" , +and attempts to connect to the TCP port 80 of such a resulted IP address for +connectivity check. + +2.9. Unattended Installation of Kernel-mode Components +When SoftEther VPN will detect a necessity to install the kernel-mode +components on Windows, a confirmation message will be appeared by Windows +system. In this occasion, SoftEther VPN software will switch to the Unattended +Installation mode in order to respond "Yes" to Windows. This is a solution to +prevent dead-locks when a remote-administration is performed from remote +place. + +2.10. Windows Firewall +SoftEther VPN software will register itself as a safe-program. Such an entry +will be remain after the uninstallation. You can remove it manually from the +Control Panel of Windows. + + +3. Internet Services +3.1. Internet Services which are provided by SoftEther Corporation +SoftEther Corporation provides Dynamic DNS, NAT Traversal and VPN Azure server +services on the Internet. These services are free of charge. Customers can +access to the services by using SoftEther VPN software, via Internet. These +service will be planned to be available from Open-Source version of "SoftEther +VPN" which will be released in the future. + +3.2. Sent Information and Privacy Protection +SoftEther VPN software may send an IP address, hostname, the version of VPN +software on the customer's computer to the cloud service operated by SoftEther +Corporation, in order to use the above services. These sending of information +are minimal necessary to use the services. No personal information will be +sent. SoftEther Corporation records log files of the cloud service servers for +90 days at least with the received information. Such logs will be used for +troubleshooting and other legitimate activities. SoftEther Corporation may +provide logs to a public servant of Japanese government who are belonging to +courts, police stations and the prosecutor's office, in order to comply such +authorities' order. (Every Japanese public servants are liable by law to keep +the information close.) Moreover, the IP addresses or other information will +be processed statistically and provided to the public, not to expose the each +concrete IP address, in order to release the release of research activities. + +3.3. Communication Data via VPN Azure Service +Regardless of the above 3.2 rule, if the customer sends or receives VPN +packets using VPN Azure Cloud Service, the actual payloads will stored and +forwarded via the volatile memory of the servers for very short period. Such a +behavior is naturally needed to provide the "VPN relay service" . No payloads +will be recorded on "fixed" storages such as hard-drives. However, the +"Wiretapping for Criminals Procedures Act" (The 137th legislation ruled on +August 18, 1999 in Japan) requires telecommunication companies to allow the +Japanese government authority to conduct a wire-tapping on the line. VPN Azure +Servers which are physically placed on Japan are subjects of this law. + +3.4. Comply to Japanese Telecommunication Laws +SoftEther Corporation complies with Japanese Telecommunication Laws as +necessary to provide online services via Internet. + +3.5. Free and Academic Experiment Services +SoftEther provides Dynamic DNS, NAT Traversal and VPN Azure as academic +experiment services. Therefore, there services can be used for free of charge. +These services are not parts of "SoftEther VPN Software Products" . These +services are provided without any warranty. The services may be suspended or +discontinued by technical or operational matters. In such occasions, users +will not be able to use the services. A user have to understand such risks, +and to acknowledge that such risks are borne by a user-self. SoftEther will +never be liable to results or damages of use or unable-to-use of the service. +Even if the user has already paid the license-fee of the commercial version of +SoftEther VPN, such paid fees don't include any fees of these services. +Therefore, if the online services will stop or be discontinued, no refunds or +recoveries of damages will be provided by SoftEther Corporation. + +3.6. DNS Proxy Cloud Servers +In some regions, when a user uses Internet, a DNS query sometimes broken or +lost when it is passing through the ISP line. If SoftEther VPN Server, Client +or Bridge detects a possibility that the accessing to the actual VPN server +might be unstable, then DNS queries will be also transferred to the DNS proxy +cloud servers which are operated by SoftEther Corporation. A DNS proxy cloud +server will respond DNS queries with answering correct a IP address. + + +4. General Cautions +4.1. Needs an Approval from Network Administrator +SoftEther VPN has powerful functions which don't require special settings by +network administrators. For example, you need not to ask the administrator to +configure the existing firewall in order to "open" a TCP/UDP port. Such +characteristic features are for the purpose to eliminate working times and +costs of network administrators, and avoid misconfiguration-risks around the +tasks to open specific exception ports on the firewall. However, any employees +belong to the company have to obtain an approval from the network +administrator before installs SoftEther VPN. If your network administrator +neglects to provide such an approval, you can consider to take an approval +from an upper authority. (For example, executive officer of the company.) If +you use SoftEther VPN without any approvals from the authority of your +company, you might have disadvantage. SoftEther Corporation will be never +liable for results or damages of using SoftEther VPN. + +4.2. Observe Laws of Your Country +If your country's law prohibits the use of encryption, you have to disable the +encryption function of SoftEther VPN by yourself. Similarly, in some countries +or regions, some functions of SoftEther VPN might be prohibited to use by +laws. Other countries' laws are none of SoftEther Corporation's concern +because SoftEther Corporation is an enterprise which is located and registered +in Japan physically. For example, there might be a risk that a part of +SoftEther VPN conflicts an existing patent which is valid only on the specific +region. SoftEther Corporation has no interests in such specific region outside +Japan's territory. Therefore, if you want to use SoftEther VPN in regions +outside Japan, you have to be careful not to violate third-person's rights. +You have to verify the legitimacy of the use of SoftEther VPN in the specific +region before you actually use it in such region. By nature, there are almost +200 countries in the World, and each country's law is different each other. It +is practically impossible to verify every countries' laws and regulations and +make the software comply with all countries' laws in advance to release the +software. Therefore SoftEther Corporation has verified the legitimacy of +SoftEther VPN against the laws and regulations of only Japan. If a user uses +SoftEther VPN in a specific country, and damaged by public servants of the +government authority, SoftEther Corporation will never be liable to recover or +compensate such damages or criminal responsibilities. + + +5. VPN Gate Academic Experiment Project +(This chapter applies only on SoftEther VPN software package which contains +the extension plug-in for VPN Gate Academic Experiment Project.) +5.1. About VPN Gate Academic Experiment Project +VPN Gate Academic Experiment Project is an online service operated for just +the academic research purpose at the graduate school of University of Tsukuba, +Japan. The purpose of this research is to expend our knowledge about the +"Global Distributed Public VPN Relay Server" (GDPVRS) technology. For details, +please visit http://www.vpngate.net/. + +5.2. About VPN Gate Service +SoftEther VPN Server and SoftEther VPN Client may contain "VPN Gate Service" +program. However, VPN Gate Service is disabled by default. +VPN Gate Service should be activated and enabled by the voluntary intention of +the owner of the computer which SoftEther VPN Server or SoftEther VPN Client +is installed on. After you activate VPN Gate Service, the computer will be +start to serve as a part of the Global Distributed Public VPN Relay Servers. +The IP address, hostname and related information of the computer will be sent +and registered to the directory server of VPN Gate Academic Experiment +Project, and they will be published and disclosed to the public. This +mechanism will allow any VPN Gate Client software's user to connect to the VPN +Gate Service running on your computer. While the VPN session between a VPN +Gate Client and your VPN Gate Service is established, the VPN Gate Client's +user can send/receive any IP packets towards the Internet via the VPN Gate +Service. The global IP address of the VPN Gate Service's hosing computer will +be used as the source IP address of such communications which a VPN Gate +Client initiates. +VPN Gate Service will send some information to the VPN Gate Academic +Experiment Service Directory Server. The information includes the operator's +information which described in section 5.5, logging settings, uptime, +operating system version, type of protocol, port numbers, quality information, +statistical information, VPN Gate clients' log history data (includes dates, +IP addresses, version numbers and IDs) and the version of the software. These +information will be exposed on the directory. VPN Gate Service also receives a +key for encoding which is described on the chapter 5.9 from the directory +server. + +5.3. Details of VPN Gate Service's Behavior +If you enable VPN Gate Service manually, which is disabled by default, the +"VPNGATE" Virtual Hub will be created on the SoftEther VPN Server. If you are +using SoftEther VPN Client and attempt to active VPN Gate Service on it, an +equivalent program to SoftEther VPN Server will be invoked on the same process +of SoftEther VPN Client, and the "VPNGATE" Virtual Hub will be created. The +"VPNGATE" Virtual Hub contains a user named "VPN" by default which permits +anyone on the Internet to make a VPN connection to the Virtual Hub. Once a VPN +Client connects to the "VPNGATE" Virtual Hub, any communication between the +user and the Internet will pass through the Virtual Hub, and +transmitted/received using the physical network interface on the computer +which SoftEther VPN Server (or SoftEther VPN Client) is running on. This will +cause the result that a destination host specified by the VPN Client will +identify that the source of the communication has initiated from the VPN Gate +Service's hosting computer's IP address. However, for safety, any packets +which destinations are within 192.168.0.0/255.255.0.0, 172.16.0.0/255.240.0.0 +or 10.0.0.0/255.0.0.0 will be blocked by the "VPNGATE" Virtual Hub in order to +protect your local network. Therefore, if you run VPN Gate Service on your +corporate network or private network, it is safe because anonymous VPN Client +users will not be permitted to access such private networks. VPN Gate Service +also serves as relay for accessing to the VPN Gate Directory Server. +In order to make VPN Gate Service familiar with firewalls and NATs, it opens +an UDP port by using the NAT Traversal function which is described on the +section 1.2. It also opens and listens on some TCP ports, and some TCP and UDP +ports will be specified as the target port of Universal Plug and Play (UPnP) +Port Transfer entries which are requested to your local routers. UPnP request +packets will be sent periodically. Some routers keep such an opened TCP/UDP +port permanently on the device. If you wish to close them, do it manually. +VPN Gate Service also provides the mirror-site function for www.vpngate.net. +This is a mechanism that a copy of the latest contents from www.vpngate.net +will be hosted by the mirror-site tiny HTTP server which is running on the VPN +Gate Service program. It will register itself on the mirror-sites list in +www.vpngate.net. However, it never relays any other communications which are +not towards www.vpngate.net. + +5.4. Communication between Internet via VPN Gate Service +VPN Gate Service provides a routing between users and the Internet, by using +the Virtual NAT Function which is described on the section 2.8. VPN Gate +Service sends polling Ping packets to the server which is located on +University of Tsukuba, and the Google Public DNS Server which is identified as +8.8.8.8, in order to check the latest quality of your Internet line. VPN Gate +Service also sends and receives a lot of random packets to/from the Speed Test +Server on University of Tsukuba. These quality data will be reported to VPN +Gate Directory Server, automatically and periodically. The result will be +saved and disclosed to the public. These periodical polling communication are +adjusted not to occupy the Internet line, however in some circumstances they +might occupy the line. + +5.5. Operator's Information of VPN Gate Service +If you activate VPN Gate Service on your computer, the computer will be a part +of the Global Distributed Public VPN Relay Servers. Therefore, the Operator's +administrative information of your VPN Gate Service should be reported and +registered on the VPN Gate Service Directory. Operator's information contains +the name of the operator and the abuse-reporting contact e-mail address. These +information can be inputted on the screen if the VPN Gate configuration. +Inputted information will be transmitted to the VPN Gate Directory Server, +stored and disclosed to the public. So you have to be careful to input +information. By the way, until you specify something as the operator's +information, the computer's hostname will be used automatically as the field +of the name of the operator, by appending the "'s owner" string after the +hostname. + +5.6. Observe Laws to Operate VPN Gate Service +In some countries or regions, a user who is planning to activate and operate +VPN Gate Service, he are mandated to obtain a license or register a service +from/to the government. If your region has such a regulation, you must fulfill +mandated process before activating VPN Gate Service in advance. Neither the +developers nor operators of the VPN Gate Academic Experiment Project will be +liable for legal/criminal responsibilities or damages which are occurred from +failure to comply your local laws. + +5.7. Protect Privacy of Communication +Most of countries have a law which requires communication service's operators, +including VPN Gate Service operators, to protect the privacy of communication +of third-persons. When you operate VPN Gate Service, you must always protect +user's privacy. + +5.8. Packet Logs +The packet logging function is implemented on VPN Gate Service. It records +essential headers of major TCP/IP packets which are transmitted via the +Virtual Hub. This function will be helpful to investigate the "original IP +address" of the initiator of communication who was a connected user of your +VPN Gate Service, by checking the packet logs and the connection logs. The +packet logs are recorded only for such legitimate investigates purpose. Do not +peek nor leak packet logs except the rightful purpose. Such act will be +violate the section 5.7. + +5.9. Packet Logs Automatic Archiving and Encoding Function +The VPN Gate Academic Experiment Service is operated and running under the +Japanese constitution and laws. The Japanese constitution laws demand strictly +protection over the privacy of communication. Because this service is under +Japanese rules, the program of VPN Gate Service implements this "Automatic Log +File Encoding" protection mechanism, and enabled by default. +The VPN Gate Service is currently configured to encode packet log files which +has passed two or more weeks automatically, by default. In order to protect +privacy of communication, if a packet log file is once encoded, even the +administrator of the local computer cannot censor the packet log file. This +mechanism protects privacy of end-users of VPN Gate Service. +You can change the VPN Gate Service setting to disable this automatic encoding +function. Then packet log files will never be encoded even after two weeks +passed. In such a configuration, all packet logs will remain as plain-text on +the disk. Therefore you have to take care not to violate user's privacy. +If you are liable to decode an encoded packet log files (for example: a VPN +Gate Service's user illegally abused your VPN Gate Service and you have to +decode the packet logs in order to comply the laws), contact the administrator +of the VPN Gate Academic Experiment Service at Graduate School of University +of Tsukuba, Japan. You can find the contact address at +http://www.vpngate.net/. The administrator of VPN Gate Service will respond to +decode the packet logs if there is an appropriate and legal request from court +or other judicial authorities, according to laws. + +5.10. Caution if You Operate VPN Gate Service in the Japan's Territories +When a user operates VPN Gate Service in the Japan's territories, such an act +may be regulated under the Japanese Telecommunication Laws if the operation is +a subject to the law. However, in such a circumstance, according to the +"Japanese Telecommunication Business Compete Manual [supplemental version]" , +non- profitable operations of communications are not identified as a +"telecommunication business" . So usual operators of VPN Gate Service are not +subjects to "telecommunication business operators" , and not be mandated to +register to the government. Even so, legalities to protect the privacy of +communication still imposed. As a conclusion, if you operate VPN Gate Service +in the Japan's Territories, you must not leak the secrets of communications +which are transmitted via your operating VPN Gate Service. + +5.11. VPN Gate Client +If SoftEther VPN Client contains the VPN Gate Client plug-in, you can use it +to obtain the list of current operating VPN Gate Service servers in the +Internet, and make a VPN connection to a specific server on the list. +VPN Gate Client always keeps the latest list of the VPN Gate Services +periodically. Be careful if you are using a pay-per-use Internet line. +When you start the VPN Gate Client software, the screen which asks you +activate or not VPN Gate Service will be appeared. For details of VPN Gate +Service, read the above sections. + +5.12. Caution before Joining or Exploiting VPN Gate Academic Experiment +Project +The VPN Gate Academic Experiment Service is operated as a research project at +the graduate school on University of Tsukuba, Japan. The service is governed +under the Japanese laws. Other countries' laws are none of our concerns nor +responsibilities. +By nature, there are almost 200 countries in the World, with different laws. +It is impossible to verify every countries' laws and regulations and make the +software comply with all countries' laws in advance to release the software. +If a user uses VPN Gate service in a specific country, and damaged by public +servants of the authority, the developer of either the service or software +will never be liable to recover or compensate such damages or criminal +responsibilities. +By using this software and service, the user must observe all concerned laws +and rules with user's own responsibility. The user will be completely liable +to any damages and responsibilities which are results of using this software +and service, regardless of either inside or outside of Japan's territory. +If you don't agree nor understand the above warnings, do not use any of VPN +Gate Academic Experiment Service functions. +VPN Gate is a research project for just academic purpose only. VPN Gate was +developed as a plug-in for SoftEther VPN and UT-VPN. However, all parts of VPN +Gate were developed on this research project at University of Tsukuba. Any +parts of VPN Gate are not developed by SoftEther Corporation. The VPN Gate +Research Project is not a subject to be led, operated, promoted nor guaranteed +by SoftEther Corporation. + diff --git a/configure b/configure index 7b7c249e..588da8a2 100755 --- a/configure +++ b/configure @@ -9,6 +9,8 @@ echo echo 'This program is free software; you can redistribute it and/or' echo 'modify it under the terms of the GNU General Public License' echo 'version 2 as published by the Free Software Foundation.' +echo +echo 'Read and understand README.TXT, LICENSE.TXT and WARNING.TXT before use.' echo '---------------------------------------------------------------------' echo diff --git a/src/BuildUtil/BuildUtil.csproj b/src/BuildUtil/BuildUtil.csproj index effc6d26..929d944a 100644 --- a/src/BuildUtil/BuildUtil.csproj +++ b/src/BuildUtil/BuildUtil.csproj @@ -45,13 +45,10 @@ false - - False - .\CoreUtil.dll - + @@ -65,9 +62,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + True True @@ -167,6 +194,12 @@ false + + + ResXFileCodeGenerator + Resources.Designer.cs + + ", CurrentLanguage.Name), 0, false) != -1; + } + + GoogleTranslateUrl = string.Format("http://translate.google.com/translate?js=n&prev=_t&hl=en&ie=UTF-8&layout=2&eotf=1&sl=ja&tl={1}&u={0}", + HttpUtility.UrlEncode((isSsl ? "https://" : "http://") + host + this.OriginalUrl, Str.Utf8Encoding), + this.CurrentLanguageCode); + + OriginalFullUrl = (isSsl ? "https://" : "http://") + host + this.OriginalUrl; + + ContentsPrintLanguage = this.CurrentLanguage; + if (IsCurrentLanguageSupported == false) + { + ContentsPrintLanguage = CoreLanguageList.Japanese; + } + + if (fast == false) + { + mfs = new MultiLanguageFilterStream(Response.Filter, ContentsPrintLanguage, this.CurrentLanguage, this.BasicHostName, this.ReplaceList); + mfs.Page = Page; + Response.Filter = mfs; + } + } + + public string ConvertPath(string url) + { + return ConvertPath(url, this.CurrentLanguage); + } + public string ConvertPath(string url, CoreLanguageClass lang) + { + string ja = CoreLanguageList.Japanese.Name; + + if (url.StartsWith("/" + ja, StringComparison.InvariantCultureIgnoreCase)) + { + url = "/" + lang.Name + url.Substring(ja.Length + 1); + } + + return url; + } + + public string GetPathForLanguage(CoreLanguageClass lang) + { + string url = PhysicalUrl; + + return ConvertPath(url, lang); + } + + public string GetFullUrlForLanguage(CoreLanguageClass lang) + { + string url = (IsSSL ? "https://" : "http://") + Host + GetPathForLanguage(lang); + + if (Str.IsEmptyStr(Args) == false) + { + url += "?" + Args; + } + + return url; + } + + public string ProcStr(string str) + { + return ProcStr(str, ContentsPrintLanguage); + } + + public static string ProcStrDefault(string str) + { + return ProcStr(str, CoreLanguageClass.CurrentThreadLanguageClass); + } + + public static string ProcStr(string str, CoreLanguageClass lang) + { + return ProcStr(str, lang, lang); + } + + public static string ProcStr(string str, CoreLanguageClass lang, CoreLanguageClass langPure) + { + MultiLanguageFilterStream st = new MultiLanguageFilterStream(null, lang, langPure, null, null); + + return st.FilterString(str); + } + + public static string GetCurrentLangCodeFromPath(string str) + { + char[] sps = + { + '/', '?', + }; + string[] tokens = str.Split(sps, StringSplitOptions.RemoveEmptyEntries); + + if (tokens.Length >= 1) + { + return tokens[0].ToLower(); + } + + return CoreLanguageList.Japanese.Name; + } +} + +public static class MultiString +{ + public const string ChangeLanguage = "[j]Select Language[e]Select Language[/]"; + public const string LanguageNotSupported = "[j]申ã—訳ã”ã–ã„ã¾ã›ã‚“ãŒã€ä»¥ä¸‹ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ç¾åœ¨æ—¥æœ¬èªžã§å…¬é–‹ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]Unfortunately, following contents are not published in English yet. [/]"; + public const string ThisIsTranslatedByMachine = "Following contents are translated automatically by Google Translate."; + public const string GoogleTranslate = "[j]Google ã§ç¿»è¨³[e]Click here to translate the contents into English by Google Now[/]"; + public const string ShowSrc = "Show the original page"; + + public static string GetStr(string srcStr, CoreLanguageClass lang) + { + return MultiLang.ProcStr(srcStr, lang); + } +} + +public class MultiLanguageFilterStream : Stream +{ + public static readonly List> langKeys = new List>(); + public readonly List> ReplaceList = null; + public const string TagPure = ""; + public const string TagEndPure = ""; + public bool DisableFilter = false; + public Page Page; + + static MultiLanguageFilterStream() + { + langKeys.Add(new KeyValuePair("[j]", CoreLanguageList.Japanese)); + langKeys.Add(new KeyValuePair("[e]", CoreLanguageList.English)); + langKeys.Add(new KeyValuePair("[/]", null)); + } + + Stack stack = new Stack(); + CoreLanguageClass currentBodyLanguage + { + get + { + if (stack.Count == 0) + { + return null; + } + else + { + return stack.ToArray()[0]; + } + } + } + bool isLang(CoreLanguageClass lang) + { + CoreLanguageClass[] langList = stack.ToArray(); + + foreach (CoreLanguageClass c in langList) + { + if (c != lang) + { + return false; + } + } + + return true; + } + CoreLanguageClass lastBodyLanguage + { + get + { + if (stack.Count == 0) + { + return null; + } + else + { + return stack.Peek(); + } + } + } + + public string FilterString(string src) + { + string[] strList = Str.DivideStringMulti(src, true, + TagPure, TagEndPure); + + bool b = false; + + StringBuilder ret = new StringBuilder(); + + foreach (string str in strList) + { + if (str == TagPure) + { + b = true; + } + else if (str == TagEndPure) + { + b = false; + } + + ret.Append(filterStringInner(str, b ? this.currentLanguagePure : this.currentLanguage, this.currentLanguagePure)); + } + + return ret.ToString(); + } + + string filterStringInner(string src, CoreLanguageClass useLang, CoreLanguageClass useLangPure) + { + int i; + string ret = src; + + if (Str.IsEmptyStr(basicHostName) == false) + { + ret = Str.ReplaceStr(ret, "=\"/\"", "=\"http://" + basicHostName + "/\"", false); + ret = Str.ReplaceStr(ret, "=\'/\'", "=\'http://" + basicHostName + "/\'", false); + + ret = Str.ReplaceStr(ret, "=\"/" + CoreLanguageList.Japanese.Name + "/\"", "=\"http://" + basicHostName + "/" + useLangPure.Name + "/\"", false); + ret = Str.ReplaceStr(ret, "=\'/" + CoreLanguageList.Japanese.Name + "/\'", "=\'http://" + basicHostName + "/" + useLangPure.Name + "/\'", false); + } + + ret = Str.ReplaceStr(ret, "=\"/" + CoreLanguageList.Japanese.Name + "/", "=\"/" + useLangPure.Name + "/", false); + ret = Str.ReplaceStr(ret, "=\'/" + CoreLanguageList.Japanese.Name + "/", "=\'/" + useLangPure.Name + "/", false); + + ret = Str.ReplaceStr(ret, "_lm_" + CoreLanguageList.Japanese.Name, "_lm_" + useLang.Name, false); + + if (this.ReplaceList != null) + { + foreach (KeyValuePair p in this.ReplaceList) + { + ret = Str.ReplaceStr(ret, p.Key, p.Value, false); + } + } + + StringBuilder ret2 = new StringBuilder(); + + int next = 0; + while (true) + { + int min = int.MaxValue; + int j = -1; + for (i = 0; i < langKeys.Count; i++) + { + int r = Str.SearchStr(ret, langKeys[i].Key, next, false); + if (r != -1) + { + if (r < min) + { + j = i; + min = r; + } + } + } + + if (j != -1) + { + KeyValuePair v = langKeys[j]; + + if (currentBodyLanguage == null || isLang(useLang)) + { + ret2.Append(ret.Substring(next, min - next)); + } + + if (v.Value != null) + { + if (lastBodyLanguage == null || v.Value.Id <= lastBodyLanguage.Id) + { + stack.Push(v.Value); + } + else + { + stack.Pop(); + stack.Push(v.Value); + } + } + else + { + stack.Pop(); + } + + next = min + v.Key.Length; + } + else + { + if (currentBodyLanguage == null || isLang(useLang)) + { + ret2.Append(ret.Substring(next, ret.Length - next)); + } + break; + } + } + + ret = ret2.ToString(); + + string lang = useLangPure != CoreLanguageList.Japanese ? useLangPure.Name : "ja"; + + if (useLangPure != CoreLanguageList.Japanese) + { + ret = Str.ReplaceStr(ret, "", + string.Format("", lang), false); + } + + ret = Str.ReplaceStr(ret, "", string.Format("", lang), false); + + next = 0; + while (true) + { + i = Str.SearchStr(ret, "", next, false); + if (j == -1) + { + break; + } + string linkStr = ret.Substring(i, j - i + 2 - 1); + int k = Str.SearchStr(linkStr, "href=\"", 0, false); + if (k != -1) + { + int m = Str.SearchStr(linkStr, "\"", k + 6, false); + if (m != -1) + { + string fileName = linkStr.Substring(k + 6, m - k - 6); + fileName = Str.ReplaceStr(fileName, ".css", "_" + lang + ".css", false); + string linkStr2 = string.Format("", fileName); + + ret = ret.Substring(0, j + 2) + linkStr2 + ret.Substring(j + 2); + next = j + 2 + linkStr2.Length; + } + } + } + + return ret; + } + + Stream baseStream; + long position; + CoreLanguageClass currentLanguage; + CoreLanguageClass currentLanguagePure; + string basicHostName; + + public override bool CanRead + { + get { return true; } + } + + public override bool CanSeek + { + get { return true; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override void Flush() + { + baseStream.Flush(); + } + + public override long Length + { + get { return 0; } + } + + public override long Position + { + get + { + return position; + } + set + { + position = value; + } + } + + public override long Seek(long offset, SeekOrigin origin) + { + return baseStream.Seek(offset, origin); + } + + public override void SetLength(long value) + { + baseStream.SetLength(value); + } + + public MultiLanguageFilterStream(Stream baseStream, CoreLanguageClass currentLanguage, CoreLanguageClass currentLanguagePure, string basicHostName, List> replaceList) + { + this.baseStream = baseStream; + this.currentLanguage = currentLanguage; + this.currentLanguagePure = currentLanguagePure; + this.basicHostName = basicHostName; + this.ReplaceList = replaceList; + } + + public override int Read(byte[] buffer, int offset, int count) + { + return baseStream.Read(buffer, offset, count); + } + + string savedString = ""; + + public override void Write(byte[] buffer, int offset, int count) + { + if (DisableFilter) + { + baseStream.Write(buffer, offset, count); + return; + } + byte[] data = new byte[count]; + Buffer.BlockCopy(buffer, offset, data, 0, count); + + string inSrc = savedString + ByteDataToString(data);// Str.Utf8Encoding.GetString(data); + + savedString = ""; + + if (inSrc.Length >= 2) + { + int len = inSrc.Length; + string last2 = inSrc.Substring(len - 2, 2); + string last1 = inSrc.Substring(len - 1, 1); + + if (last1 == "[") + { + inSrc = inSrc.Substring(0, len - 1); + + savedString = last1; + } + else if (Str.InStr(last2, "[")) + { + inSrc = inSrc.Substring(0, len - 2); + + savedString = last2; + } + } + + string inStr = FilterString(inSrc); + + data = StringToByteData(inStr);// Str.Utf8Encoding.GetBytes(inStr); + + if (data.Length >= 1) + { + baseStream.Write(data, 0, data.Length); + //byte[] t = Str.Utf8Encoding.GetBytes("" + count.ToString() + ""); + //baseStream.Write(t, 0, t.Length); + } + } + + public static string ByteDataToString(byte[] data) + { + StringBuilder sb = new StringBuilder(); + + foreach (byte b in data) + { + if (b <= 0x7f && b != (byte)('\\')) + { + sb.Append((char)b); + } + else + { + sb.Append("\\" + ((uint)b).ToString("X2")); + } + } + + return sb.ToString(); + } + + public byte[] StringToByteData(string str) + { + int i, len; + + len = str.Length; + Buf b = new Buf(); + + for (i = 0; i < len; i++) + { + char c = str[i]; + if (c == '\\') + { + string tmp = ""; + + //try + { + tmp = "" + str[i + 1] + str[i + 2]; + } + /*catch (Exception ex) + { + tmp += "|err=" + ex.Message + ",len=" + len + ",i=" + i + "|src=" + str + "|"; + byte[] aa = Str.Utf8Encoding.GetBytes(tmp); + b.Write(aa); + }*/ + + i += 2; + + //try + { + b.WriteByte(byte.Parse(tmp, System.Globalization.NumberStyles.HexNumber)); + } + //catch + { + } + } + else + { + b.WriteByte((byte)c); + } + } + + return b.ByteData; + } +} + + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Packer.cs b/src/BuildUtil/CoreUtil/Packer.cs new file mode 100644 index 00000000..c03782dd --- /dev/null +++ b/src/BuildUtil/CoreUtil/Packer.cs @@ -0,0 +1,202 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Runtime.InteropServices; + +namespace CoreUtil +{ + public enum PackerFileFormat + { + ZipRaw, + ZipCompressed, + Tar, + TarGZip, + } + + public delegate bool ProgressDelegate(string fileNameFullPath, string fileNameRelative, int currentFileNum, int totalFileNum); + + public static class Packer + { + public static byte[] PackDir(PackerFileFormat format, string rootDirPath, string appendPrefixDirName) + { + return PackDir(format, rootDirPath, appendPrefixDirName, null); + } + public static byte[] PackDir(PackerFileFormat format, string topDirPath, string appendPrefixDirName, ProgressDelegate proc) + { + string[] fileList = Directory.GetFiles(topDirPath, "*", SearchOption.AllDirectories); + List relativeFileList = new List(); + + foreach (string fileName in fileList) + { + string relativePath = IO.GetRelativeFileName(fileName, topDirPath); + + if (Str.IsEmptyStr(appendPrefixDirName) == false) + { + relativePath = IO.RemoteLastEnMark(appendPrefixDirName) + "\\" + relativePath; + } + + relativeFileList.Add(relativePath); + } + + return PackFiles(format, fileList, relativeFileList.ToArray(), proc); + } + + public static byte[] PackFiles(PackerFileFormat format, string[] srcFileNameList, string[] relativeNameList) + { + return PackFiles(format, srcFileNameList, relativeNameList, null); + } + public static byte[] PackFiles(PackerFileFormat format, string[] srcFileNameList, string[] relativeNameList, ProgressDelegate proc) + { + if (srcFileNameList.Length != relativeNameList.Length) + { + throw new ApplicationException("srcFileNameList.Length != relativeNameList.Length"); + } + + int num = srcFileNameList.Length; + int i; + + ZipPacker zip = new ZipPacker(); + TarPacker tar = new TarPacker(); + + for (i = 0; i < num; i++) + { + if (proc != null) + { + bool ret = proc(srcFileNameList[i], relativeNameList[i], i, num); + + if (ret == false) + { + continue; + } + } + + byte[] srcData = File.ReadAllBytes(srcFileNameList[i]); + DateTime date = File.GetLastWriteTime(srcFileNameList[i]); + + switch (format) + { + case PackerFileFormat.Tar: + case PackerFileFormat.TarGZip: + tar.AddFileSimple(relativeNameList[i], srcData, 0, srcData.Length, date); + break; + + case PackerFileFormat.ZipRaw: + case PackerFileFormat.ZipCompressed: + zip.AddFileSimple(relativeNameList[i], date, FileAttributes.Normal, srcData, (format == PackerFileFormat.ZipCompressed)); + break; + } + } + + switch (format) + { + case PackerFileFormat.Tar: + tar.Finish(); + return tar.GeneratedData.Read(); + + case PackerFileFormat.TarGZip: + tar.Finish(); + return tar.CompressToGZip(); + + case PackerFileFormat.ZipCompressed: + case PackerFileFormat.ZipRaw: + zip.Finish(); + return zip.GeneratedData.Read(); + + default: + throw new ApplicationException("format"); + } + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/RC4.cs b/src/BuildUtil/CoreUtil/RC4.cs new file mode 100644 index 00000000..5033e12f --- /dev/null +++ b/src/BuildUtil/CoreUtil/RC4.cs @@ -0,0 +1,225 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Diagnostics; +using System.Web.Mail; +using System.Net; +using System.Net.Sockets; +using System.Net.NetworkInformation; + +namespace CoreUtil +{ + public class RC4 : ICloneable + { + uint x, y; + uint[] state; + + public RC4(byte[] key) + { + state = new uint[256]; + + uint i, t, u, ki, si; + + x = 0; + y = 0; + + for (i = 0; i < 256; i++) + { + state[i] = i; + } + + ki = si = 0; + for (i = 0; i < 256; i++) + { + t = state[i]; + + si = (si + key[ki] + t) & 0xff; + u = state[si]; + state[si] = t; + state[i] = u; + if (++ki >= key.Length) + { + ki = 0; + } + } + } + + private RC4() + { + } + + public object Clone() + { + RC4 rc4 = new RC4(); + + rc4.x = this.x; + rc4.y = this.y; + rc4.state = (uint[])this.state.Clone(); + + return rc4; + } + + public byte[] Encrypt(byte[] src) + { + return Encrypt(src, src.Length); + } + public byte[] Encrypt(byte[] src, int len) + { + return Encrypt(src, 0, len); + } + public byte[] Encrypt(byte[] src, int offset, int len) + { + byte[] dst = new byte[len]; + + uint x, y, sx, sy; + x = this.x; + y = this.y; + + int src_i = 0, dst_i = 0, end_src_i; + + for (end_src_i = src_i + len; src_i != end_src_i; src_i++, dst_i++) + { + x = (x + 1) & 0xff; + sx = state[x]; + y = (sx + y) & 0xff; + state[x] = sy = state[y]; + state[y] = sx; + dst[dst_i] = (byte)(src[src_i + offset] ^ state[(sx + sy) & 0xff]); + } + + this.x = x; + this.y = y; + + return dst; + } + public void SkipDecrypt(int len) + { + SkipEncrypt(len); + } + public void SkipEncrypt(int len) + { + uint x, y, sx, sy; + x = this.x; + y = this.y; + + int src_i = 0, dst_i = 0, end_src_i; + + for (end_src_i = src_i + len; src_i != end_src_i; src_i++, dst_i++) + { + x = (x + 1) & 0xff; + sx = state[x]; + y = (sx + y) & 0xff; + state[x] = sy = state[y]; + state[y] = sx; + } + + this.x = x; + this.y = y; + } + + public byte[] Decrypt(byte[] src) + { + return Decrypt(src, src.Length); + } + public byte[] Decrypt(byte[] src, int len) + { + return Decrypt(src, 0, len); + } + public byte[] Decrypt(byte[] src, int offset, int len) + { + return Encrypt(src, offset, len); + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/ReadIni.cs b/src/BuildUtil/CoreUtil/ReadIni.cs new file mode 100644 index 00000000..811d5ae3 --- /dev/null +++ b/src/BuildUtil/CoreUtil/ReadIni.cs @@ -0,0 +1,306 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Web.Mail; + +namespace CoreUtil +{ + class IniCache + { + static Dictionary caches = new Dictionary(); + + class IniCacheEntry + { + DateTime lastUpdate; + public DateTime LastUpdate + { + get { return lastUpdate; } + } + + Dictionary datas; + public Dictionary Datas + { + get { return datas; } + } + + public IniCacheEntry(DateTime lastUpdate, Dictionary datas) + { + this.lastUpdate = lastUpdate; + this.datas = datas; + } + } + + public static Dictionary GetCache(string filename, DateTime lastUpdate) + { + lock (caches) + { + try + { + IniCacheEntry e = caches[filename]; + if (e.LastUpdate == lastUpdate || lastUpdate.Ticks == 0) + { + return e.Datas; + } + else + { + return null; + } + } + catch + { + return null; + } + } + } + + public static void AddCache(string filename, DateTime lastUpdate, Dictionary datas) + { + lock (caches) + { + if (caches.ContainsKey(filename)) + { + caches.Remove(filename); + } + + caches.Add(filename, new IniCacheEntry(lastUpdate, datas)); + } + } + } + + public class ReadIni + { + Dictionary datas; + bool updated; + + public bool Updated + { + get + { + return updated; + } + } + + public StrData this[string key] + { + get + { + string s; + try + { + s = datas[key.ToUpper()]; + } + catch + { + s = null; + } + + return new StrData(s); + } + } + + public string[] GetKeys() + { + List ret = new List(); + + foreach (string s in datas.Keys) + { + ret.Add(s); + } + + return ret.ToArray(); + } + + public ReadIni(string filename) + { + init(null, filename); + } + + void init(byte[] data) + { + init(data, null); + } + void init(byte[] data, string filename) + { + updated = false; + + lock (typeof(ReadIni)) + { + string[] lines; + string srcstr; + DateTime lastUpdate = new DateTime(0); + + if (filename != null) + { + lastUpdate = IO.GetLastWriteTimeUtc(filename); + + datas = IniCache.GetCache(filename, lastUpdate); + } + + if (datas == null) + { + if (data == null) + { + try + { + data = Buf.ReadFromFile(filename).ByteData; + } + catch + { + data = new byte[0]; + datas = IniCache.GetCache(filename, new DateTime()); + } + } + + if (datas == null) + { + datas = new Dictionary(); + Encoding currentEncoding = Str.Utf8Encoding; + srcstr = currentEncoding.GetString(data); + + lines = Str.GetLines(srcstr); + + foreach (string s in lines) + { + string line = s.Trim(); + + if (Str.IsEmptyStr(line) == false) + { + if (line.StartsWith("#") == false && + line.StartsWith("//") == false && + line.StartsWith(";") == false) + { + string key, value; + + if (Str.GetKeyAndValue(line, out key, out value)) + { + key = key.ToUpper(); + + if (datas.ContainsKey(key) == false) + { + datas.Add(key, value); + } + else + { + int i; + for (i = 1; ; i++) + { + string key2 = string.Format("{0}({1})", key, i).ToUpper(); + + if (datas.ContainsKey(key2) == false) + { + datas.Add(key2, value); + break; + } + } + } + } + } + } + } + + if (filename != null) + { + IniCache.AddCache(filename, lastUpdate, datas); + } + + updated = true; + } + } + } + } + } +} + + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Reg.cs b/src/BuildUtil/CoreUtil/Reg.cs new file mode 100644 index 00000000..6634b1e5 --- /dev/null +++ b/src/BuildUtil/CoreUtil/Reg.cs @@ -0,0 +1,537 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Diagnostics; +using System.Web.Mail; +using System.Net; +using System.Net.Sockets; +using System.Net.NetworkInformation; +using Microsoft.Win32; + +namespace CoreUtil +{ + public class AppReg + { + string appSubKey; + public string AppSubKey + { + get { return appSubKey; } + } + RegRoot rootKey; + public RegRoot RootKey + { + get { return rootKey; } + } + + public AppReg(RegRoot root, string subkey) + { + subkey = subkey.TrimEnd('\\'); + this.rootKey = root; + this.appSubKey = subkey; + } + + public AppReg GetSubReg(string subKeyName) + { + return new AppReg(rootKey, appSubKey + "\\" + subKeyName); + } + + public bool WriteStr(string name, string value) + { + return Reg.WriteStr(rootKey, appSubKey, name, value); + } + + public bool WriteInt(string name, int value) + { + return Reg.WriteInt(rootKey, appSubKey, name, value); + } + + public bool WriteStrList(string name, string[] values) + { + return Reg.WriteStrList(rootKey, appSubKey, name, values); + } + + public bool WriteByte(string name, byte[] data) + { + return Reg.WriteByte(rootKey, appSubKey, name, data); + } + + public bool DeleteValue(string name) + { + return Reg.DeleteValue(rootKey, appSubKey, name); + } + + public string ReadStr(string name) + { + return Reg.ReadStr(rootKey, appSubKey, name); + } + + public int ReadInt(string name) + { + return Reg.ReadInt(rootKey, appSubKey, name); + } + + public string[] ReadStrList(string name) + { + return Reg.ReadStrList(rootKey, appSubKey, name); + } + + public byte[] ReadByte(string name) + { + return Reg.ReadByte(rootKey, appSubKey, name); + } + } + + public enum RegRoot + { + LocalMachine = 0, + CurrentUser = 1, + Users = 2, + } + + public static class Reg + { + static RegistryKey rootKey(RegRoot r) + { + switch (r) + { + case RegRoot.LocalMachine: + return Registry.LocalMachine; + + case RegRoot.CurrentUser: + return Registry.CurrentUser; + + case RegRoot.Users: + return Registry.Users; + } + + throw new ArgumentException(); + } + + public static string[] EnumValue(RegRoot root, string keyname) + { + try + { + RegistryKey key = rootKey(root).OpenSubKey(keyname); + + if (key == null) + { + return new string[0]; + } + + try + { + return key.GetValueNames(); + } + finally + { + key.Close(); + } + } + catch + { + return new string[0]; + } + } + + public static string[] EnumKey(RegRoot root, string keyname) + { + try + { + RegistryKey key = rootKey(root).OpenSubKey(keyname); + + if (key == null) + { + return new string[0]; + } + + try + { + return key.GetSubKeyNames(); + } + finally + { + key.Close(); + } + } + catch + { + return new string[0]; + } + } + + public static bool WriteByte(RegRoot root, string keyname, string valuename, byte[] data) + { + return WriteValue(root, keyname, valuename, data); + } + + public static byte[] ReadByte(RegRoot root, string keyname, string valuename) + { + object o = ReadValue(root, keyname, valuename); + if (o == null) + { + return new byte[0]; + } + + try + { + return (byte[])o; + } + catch + { + return new byte[0]; + } + } + + public static bool WriteInt(RegRoot root, string keyname, string valuename, int value) + { + return WriteValue(root, keyname, valuename, value); + } + + public static int ReadInt(RegRoot root, string keyname, string valuename) + { + object o = ReadValue(root, keyname, valuename); + if (o == null) + { + return 0; + } + + try + { + return (int)o; + } + catch + { + return 0; + } + } + + public static bool WriteStrList(RegRoot root, string keyname, string valuename, string[] value) + { + return WriteValue(root, keyname, valuename, value); + } + + public static string[] ReadStrList(RegRoot root, string keyname, string valuename) + { + object o = ReadValue(root, keyname, valuename); + if (o == null) + { + return new string[0]; + } + + try + { + return (string[])o; + } + catch + { + return new string[0]; + } + } + + public static bool WriteStr(RegRoot root, string keyname, string valuename, string value) + { + return WriteValue(root, keyname, valuename, value); + } + + public static string ReadStr(RegRoot root, string keyname, string valuename) + { + object o = ReadValue(root, keyname, valuename); + if (o == null) + { + return ""; + } + + try + { + return (string)o; + } + catch + { + return ""; + } + } + + public static bool WriteValue(RegRoot root, string keyname, string valuename, object o) + { + try + { + RegistryKey key = rootKey(root).OpenSubKey(keyname, true); + + if (key == null) + { + key = rootKey(root).CreateSubKey(keyname); + + if (key == null) + { + return false; + } + } + + try + { + key.SetValue(valuename, o); + + return true; + } + catch + { + return false; + } + finally + { + key.Close(); + } + } + catch + { + return false; + } + } + + public static object ReadValue(RegRoot root, string keyname, string valuename) + { + try + { + RegistryKey key = rootKey(root).OpenSubKey(keyname); + + if (key == null) + { + return null; + } + + try + { + return key.GetValue(valuename); + } + finally + { + key.Close(); + } + } + catch + { + return null; + } + } + + public static bool IsValue(RegRoot root, string keyname, string valuename) + { + try + { + RegistryKey key = rootKey(root).OpenSubKey(keyname); + + try + { + object o = key.GetValue(valuename); + + if (o == null) + { + return false; + } + } + finally + { + key.Close(); + } + + return true; + } + catch + { + return false; + } + } + + public static bool DeleteValue(RegRoot root, string keyname, string valuename) + { + try + { + RegistryKey key = rootKey(root).OpenSubKey(keyname, true); + + if (key == null) + { + return false; + } + + try + { + key.DeleteValue(valuename); + + return true; + } + finally + { + key.Close(); + } + } + catch + { + return false; + } + } + + public static bool DeleteKey(RegRoot root, string keyname) + { + return DeleteKey(root, keyname, false); + } + public static bool DeleteKey(RegRoot root, string keyname, bool deleteAll) + { + try + { + if (deleteAll == false) + { + rootKey(root).DeleteSubKey(keyname); + } + else + { + rootKey(root).DeleteSubKeyTree(keyname); + } + + return true; + } + catch + { + return false; + } + } + + public static bool NewKey(RegRoot root, string keyname) + { + if (IsKey(root, keyname)) + { + return true; + } + + try + { + RegistryKey key = rootKey(root).CreateSubKey(keyname); + + if (key == null) + { + return false; + } + + key.Close(); + + return true; + } + catch + { + return false; + } + } + + public static bool IsKey(RegRoot root, string name) + { + try + { + RegistryKey key = rootKey(root).OpenSubKey(name); + + if (key == null) + { + return false; + } + + key.Close(); + + return true; + } + catch + { + return false; + } + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Secure.cs b/src/BuildUtil/CoreUtil/Secure.cs new file mode 100644 index 00000000..964b1dc5 --- /dev/null +++ b/src/BuildUtil/CoreUtil/Secure.cs @@ -0,0 +1,1029 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Web.Mail; +using System.Runtime.InteropServices; + +namespace CoreUtil +{ + public class CommonSign + { + byte[] keyData; + static uint init_dummy = CryptoConfigHelper.Init(); + + public CommonSign(byte[] key) + { + init(key); + } + public CommonSign(Buf buf) + { + init(buf.ByteData); + } + public CommonSign(string filename) + { + init(Buf.ReadFromFile(filename).ByteData); + } + void init(byte[] key) + { + keyData = (byte[])key.Clone(); + } + + public byte[] Sign(byte[] data) + { + Buf b = new Buf(data); + b.SeekToEnd(); + b.Write(keyData); + + return Secure.HashSHA1(b.ByteData); + } + public bool Verify(byte[] data, byte[] sign) + { + byte[] sign2 = Sign(data); + + return Util.CompareByte(sign, sign2); + } + } + + public class Rsa + { + byte[] data; + Cert cert; + static uint init_dummy = CryptoConfigHelper.Init(); + static object lockObj = new object(); + + public Rsa(byte[] data) + { + init(data); + } + public Rsa(string filename) + { + Buf b = Buf.ReadFromFile(filename); + init(b.ByteData); + } + public Rsa(Buf b) + { + init(b.ByteData); + } + void init(byte[] data) + { + this.data = (byte[])data.Clone(); + this.cert = null; + + Cert.deleteOldTempFiles(); + } + + public Rsa(Cert cert) + { + init(cert); + } + void init(Cert cert) + { + this.cert = (Cert)cert.Clone(); + this.data = null; + + Cert.deleteOldTempFiles(); + } + + public byte[] SignData(byte[] data) + { + lock (lockObj) + { + byte[] ret; + using (RsaInner rsa = new RsaInner(this.data, this.cert)) + { + ret = rsa.SignData(data); + } + return ret; + } + } + + public byte[] SignHash(byte[] hash) + { + lock (lockObj) + { + byte[] ret; + using (RsaInner rsa = new RsaInner(this.data, this.cert)) + { + ret = rsa.SignHash(hash); + } + return ret; + } + } + + public bool VerifyData(byte[] data, byte[] sign) + { + lock (lockObj) + { + bool ret; + using (RsaInner rsa = new RsaInner(this.data, this.cert)) + { + ret = rsa.VerifyData(data, sign); + } + return ret; + } + } + + public bool VerifyHash(byte[] hash, byte[] sign) + { + lock (lockObj) + { + bool ret; + using (RsaInner rsa = new RsaInner(this.data, this.cert)) + { + ret = rsa.VerifyHash(hash, sign); + } + return ret; + } + } + + public byte[] Encrypt(byte[] data) + { + lock (lockObj) + { + using (RsaInner rsa = new RsaInner(this.data, this.cert)) + { + return rsa.Encrypt(data); + } + } + } + + public byte[] Decrypt(byte[] data) + { + lock (lockObj) + { + using (RsaInner rsa = new RsaInner(this.data, this.cert)) + { + return rsa.Decrypt(data); + } + } + } + + public int KeySizeBit + { + get + { + lock (lockObj) + { + using (RsaInner rsa = new RsaInner(this.data, this.cert)) + { + return rsa.KeySizeBit; + } + } + } + } + } + + class RsaInner : IDisposable + { + static string sha1rsa = CryptoConfig.MapNameToOID("SHA1"); + RSACryptoServiceProvider rsa; + static object lockObj = new Object(); + static LocalDataStoreSlot slot = Thread.AllocateDataSlot(); + static LocalDataStoreSlot slot2 = Thread.AllocateDataSlot(); + static uint init_dummy = CryptoConfigHelper.Init(); + + public static void Lock() + { + } + + public static void Unlock() + { + } + + public RsaInner(byte[] data, Cert cert) + { + if (data != null) + { + init(data); + } + else + { + init(cert); + } + } + public RsaInner(byte[] data) + { + init(data); + } + public RsaInner(string filename) + { + Buf b = Buf.ReadFromFile(filename); + init(b.ByteData); + } + public RsaInner(Buf b) + { + init(b.ByteData); + } + void init(byte[] data) + { + Lock(); + rsa = readRsaPrivate(data); + } + + public RsaInner(Cert cert) + { + init(cert); + } + void init(Cert cert) + { + Lock(); + string text1 = cert.X509Cert.GetKeyAlgorithm(); + byte[] buffer1 = cert.X509Cert.GetKeyAlgorithmParameters(); + byte[] buffer2 = cert.X509Cert.GetPublicKey(); + Oid oid1 = new Oid("1.2.840.113549.1.1.1", "RSA"); + + rsa = (RSACryptoServiceProvider)(new PublicKey(oid1, new AsnEncodedData(oid1, buffer1), new AsnEncodedData(oid1, buffer2))).Key; + } + + public byte[] SignData(byte[] data) + { + byte[] hash = Secure.HashSHA1(data); + return SignHash(hash); + } + + public byte[] SignHash(byte[] hash) + { + byte[] ret = null; + ret = rsa.SignHash(hash, sha1rsa); + + return ret; + } + + public bool VerifyData(byte[] data, byte[] sign) + { + byte[] hash = Secure.HashSHA1(data); + return VerifyHash(hash, sign); + } + + public bool VerifyHash(byte[] hash, byte[] sign) + { + return rsa.VerifyHash(hash, sha1rsa, sign); + } + + public byte[] Encrypt(byte[] data) + { + return rsa.Encrypt(data, false); + } + + public byte[] Decrypt(byte[] data) + { + return rsa.Decrypt(data, false); + } + + static RSACryptoServiceProvider readRsaPrivate(byte[] data) + { + // From http://forums.l-space-design.com/blogs/day_of_the_developer/archive/2006/06/08/216.aspx + string t = Str.AsciiEncoding.GetString(data); + if (!t.StartsWith("-----BEGIN RSA PRIVATE KEY-----")) + { + throw new ArgumentException("Not an RSA Private Key"); + } + t = t.Substring("-----BEGIN RSA PRIVATE KEY-----".Length); + t = t.Substring(0, t.IndexOf("----")); + t = t.Replace("\r", "").Replace("\n", ""); + byte[] byteArray = System.Convert.FromBase64String(t); + System.IO.MemoryStream s = new MemoryStream(byteArray); + BinaryReader binr = new BinaryReader(s, Str.AsciiEncoding); + byte[] MODULUS, E, D, P, Q, DP, DQ, IQ; + // --------- Set up stream to decode the asn.1 encoded RSA private key ------ + byte bt = 0; + ushort twobytes = 0; + int elems = 0; + RSAParameters result = new RSAParameters(); + try + { + twobytes = binr.ReadUInt16(); + if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81) + binr.ReadByte(); //advance 1 byte + else if (twobytes == 0x8230) + binr.ReadInt16(); //advance 2 bytes + else + return null; + twobytes = binr.ReadUInt16(); + if (twobytes != 0x0102) //version number + return null; + bt = binr.ReadByte(); + if (bt != 0x00) + return null; + //------ all private key components are Integer sequences ---- + elems = getIntegerSize(binr); + MODULUS = binr.ReadBytes(elems); + elems = getIntegerSize(binr); + E = binr.ReadBytes(elems); + elems = getIntegerSize(binr); + D = binr.ReadBytes(elems); + elems = getIntegerSize(binr); + P = binr.ReadBytes(elems); + elems = getIntegerSize(binr); + Q = binr.ReadBytes(elems); + elems = getIntegerSize(binr); + DP = binr.ReadBytes(elems); + elems = getIntegerSize(binr); + DQ = binr.ReadBytes(elems); + elems = getIntegerSize(binr); + IQ = binr.ReadBytes(elems); + result.Modulus = MODULUS; + result.Exponent = E; + result.D = D; + result.P = P; + result.Q = Q; + result.DP = DP; + result.DQ = DQ; + result.InverseQ = IQ; + } + catch (Exception) + { + return null; + } + finally + { + binr.Close(); + } + CspParameters cp = new CspParameters(); + cp.Flags = CspProviderFlags.UseMachineKeyStore; + RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cp); + RSA.PersistKeyInCsp = false; + RSA.ImportParameters(result); + return RSA; + } + + static int getIntegerSize(BinaryReader binr) + { + byte bt = 0; + byte lowbyte = 0x00; + byte highbyte = 0x00; + int count = 0; + bt = binr.ReadByte(); + if (bt != 0x02) //expect integer + return 0; + bt = binr.ReadByte(); + if (bt == 0x81) + count = binr.ReadByte(); // data size in next byte + else + if (bt == 0x82) + { + highbyte = binr.ReadByte(); // data size in next 2 bytes + lowbyte = binr.ReadByte(); + byte[] modint = { lowbyte, highbyte, 0x00, 0x00 }; + count = BitConverter.ToInt32(modint, 0); + } + else + { + count = bt; // we already have the data size + } + while (binr.PeekChar() == 0x00) + { //remove high order zeros in data + binr.ReadByte(); + count -= 1; + } + return count; + } + + public void Dispose() + { + rsa.Clear(); + rsa = null; + Unlock(); + } + + public int KeySizeBit + { + get + { + return rsa.KeySize; + } + } + } + + public class Cert + { + X509Certificate2 x509; + static TimeSpan deleteOldCertSpan = new TimeSpan(0, 0, 30); + static object lockObj = new Object(); + static RSACryptoServiceProvider rsaDummy = null; + static uint init_dummy = CryptoConfigHelper.Init(); + + public int KeySizeBit + { + get + { + Rsa r = new Rsa(this); + + return r.KeySizeBit; + } + } + + public X509Certificate2 X509Cert + { + get { return x509; } + } + + public Rsa RsaPublicKey + { + get + { + return new Rsa(this); + } + } + + public Cert(byte[] data) + { + init(data); + } + public Cert(string filename) + { + init(IO.ReadFile(filename)); + } + public Cert(Buf buf) + { + init(buf.ByteData); + } + void init(byte[] data) + { + deleteOldTempFiles(); + x509 = new X509Certificate2(data); + + if (rsaDummy == null) + { + rsaDummy = (RSACryptoServiceProvider)(new X509Certificate2(data).PublicKey.Key); + } + } + + public byte[] Hash + { + get + { + return x509.GetCertHash(); + } + } + + public byte[] PublicKey + { + get + { + return x509.GetPublicKey(); + } + } + + public byte[] ByteData + { + get + { + return x509.Export(X509ContentType.Cert); + } + } + public Buf ToBuf() + { + return new Buf(ByteData); + } + public void ToFile(string filename) + { + ToBuf().WriteToFile(filename); + } + + public Cert Clone() + { + return new Cert(this.ByteData); + } + + static DateTime lastDeletedDateTime = new DateTime(); + static readonly TimeSpan deleteTimeSpan = new TimeSpan(0, 1, 0); + internal static void deleteOldTempFiles() + { + lock (lockObj) + { + DateTime now = Time.NowDateTime; + + if (lastDeletedDateTime.Ticks == 0 || + now >= (lastDeletedDateTime + deleteTimeSpan)) + { + lastDeletedDateTime = now; + + string tempDir = Path.GetTempPath(); + string[] files = Directory.GetFiles(tempDir); + + if (files != null) + { + foreach (string name in files) + { + try + { + if (Str.StrCmpi(Path.GetExtension(name), ".tmp") && Path.GetFileName(name).StartsWith("tmp", StringComparison.CurrentCultureIgnoreCase)) + { + DateTime dt = File.GetLastWriteTimeUtc(name); + if ((DateTime.UtcNow - dt) >= deleteOldCertSpan) + { + FileInfo info = new FileInfo(name); + + if (info.Length == 0) + { + try + { + File.Delete(name); + } + catch + { + } + } + } + } + } + catch + { + } + } + } + } + } + } + } + + public class Secure + { + static RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); + static MD5 md5 = new MD5CryptoServiceProvider(); + static uint init_dummy = CryptoConfigHelper.Init(); + public const uint SHA1Size = 20; + public const uint MD5Size = 16; + static object rand_lock = new object(); + + public static byte[] Rand(uint size) + { + lock (rand_lock) + { + byte[] ret = new byte[size]; + rng.GetBytes(ret); + return ret; + } + } + public static uint Rand32() + { + return BitConverter.ToUInt32(Rand(4), 0); + } + public static ulong Rand64() + { + return BitConverter.ToUInt64(Rand(8), 0); + } + public static ushort Rand16() + { + return BitConverter.ToUInt16(Rand(2), 0); + } + public static int Rand32i() + { + return BitConverter.ToInt32(Rand(4), 0); + } + public static long Rand64i() + { + return BitConverter.ToInt64(Rand(8), 0); + } + public static short Rand16i() + { + return BitConverter.ToInt16(Rand(2), 0); + } + public static int Rand31i() + { + while (true) + { + int i = Rand32i(); + if (i >= 0) + { + return i; + } + } + } + public static long Rand63i() + { + while (true) + { + long i = Rand64i(); + if (i >= 0) + { + return i; + } + } + } + public static short Rand15i() + { + while (true) + { + short i = Rand16i(); + if (i >= 0) + { + return i; + } + } + } + public static byte Rand8() + { + return Rand(1)[0]; + } + public static bool Rand1() + { + return (Rand32() % 2) == 0; + } + + // MD5 + public static byte[] HashMD5(byte[] data) + { + byte[] ret; + + RsaInner.Lock(); + try + { + ret = md5.ComputeHash(data); + } + finally + { + RsaInner.Unlock(); + } + + return ret; + } + + // SHA1 + public static byte[] HashSHA1(byte[] data) + { + SHA1 sha1 = new SHA1Managed(); + + return sha1.ComputeHash(data); + } + + // SHA256 + public static byte[] HashSHA256(byte[] data) + { + SHA256 sha256 = new SHA256Managed(); + + return sha256.ComputeHash(data); + } + + public static byte[] PkcsPadding(byte[] srcData, int destSize) + { + int srcSize = srcData.Length; + + if ((srcSize + 11) > destSize) + { + throw new OverflowException(); + } + + int randSize = destSize - srcSize - 3; + byte[] rand = Secure.Rand((uint)randSize); + + Buf b = new Buf(); + b.WriteByte(0x00); + b.WriteByte(0x02); + b.Write(rand); + b.WriteByte(0x00); + b.Write(srcData); + + return b.ByteData; + } + } + + public class CryptoConfigHelper + { + static object objLock = new Object(); + static bool flag = false; + + public static uint Init() + { + try + { + lock (objLock) + { + if (flag == false) + { + flag = true; + Type t = typeof(CryptoConfig); + Hashtable ht = (Hashtable)t.InvokeMember("DefaultOidHT", System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static, + null, null, null); + List values = new List(); + + foreach (string key in ht.Keys) + { + string value = (string)ht[key]; + + values.Add(value); + } + + foreach (string s in values) + { + ht.Add(s, s); + } + } + } + } + catch + { + } + + return 0; + } + } + + public static class ExeSignChecker + { + public static bool IsKernelModeSignedFile(string fileName) + { + return IsKernelModeSignedFile(File.ReadAllBytes(fileName)); + } + + public static bool IsKernelModeSignedFile(byte[] data) + { + string str = Str.AsciiEncoding.GetString(data); + + if (str.IndexOf("Microsoft Code Verification Root") != -1 && + str.IndexOf("http://crl.microsoft.com/pki/crl/products/MicrosoftCodeVerifRoot.crl") != -1) + { + return true; + } + + return false; + } + + enum SignChecker_MemoryAllocator { HGlobal, CoTaskMem }; + enum SignChecker_UiChoice { All = 1, NoUI, NoBad, NoGood }; + enum SignChecker_StateAction { Ignore = 0, Verify, Close, AutoCache, AutoCacheFlush }; + enum SignChecker_UnionChoice { File = 1, Catalog, Blob, Signer, Cert }; + enum SignChecker_RevocationCheckFlags { None = 0, WholeChain }; + enum SignChecker_TrustProviderFlags + { + UseIE4Trust = 1, + NoIE4Chain = 2, + NoPolicyUsage = 4, + RevocationCheckNone = 16, + RevocationCheckEndCert = 32, + RevocationCheckChain = 64, + RecovationCheckChainExcludeRoot = 128, + Safer = 256, + HashOnly = 512, + UseDefaultOSVerCheck = 1024, + LifetimeSigning = 2048 + }; + enum SignChecker_UIContext { Execute = 0, Install }; + + [DllImport("Wintrust.dll", PreserveSig = true, SetLastError = false)] + static extern uint WinVerifyTrust(IntPtr hWnd, IntPtr pgActionID, IntPtr pWinTrustData); + + sealed class SignCheckerUnmanagedPointer : IDisposable + { + private IntPtr m_ptr; + private SignChecker_MemoryAllocator m_meth; + public SignCheckerUnmanagedPointer(IntPtr ptr, SignChecker_MemoryAllocator method) + { + m_meth = method; + m_ptr = ptr; + } + + ~SignCheckerUnmanagedPointer() + { + Dispose(false); + } + + void Dispose(bool disposing) + { + if (m_ptr != IntPtr.Zero) + { + if (m_meth == SignChecker_MemoryAllocator.HGlobal) + { + Marshal.FreeHGlobal(m_ptr); + } + else if (m_meth == SignChecker_MemoryAllocator.CoTaskMem) + { + Marshal.FreeCoTaskMem(m_ptr); + } + m_ptr = IntPtr.Zero; + } + + if (disposing) + { + GC.SuppressFinalize(this); + } + } + + public void Dispose() + { + Dispose(true); + } + + public static implicit operator IntPtr(SignCheckerUnmanagedPointer ptr) + { + return ptr.m_ptr; + } + } + + struct WINTRUST_FILE_INFO : IDisposable + { + public WINTRUST_FILE_INFO(string fileName, Guid subject) + { + cbStruct = (uint)Marshal.SizeOf(typeof(WINTRUST_FILE_INFO)); + pcwszFilePath = fileName; + + if (subject != Guid.Empty) + { + tmp = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Guid))); + Marshal.StructureToPtr(subject, tmp, false); + } + else + { + tmp = IntPtr.Zero; + } + hFile = IntPtr.Zero; + } + public uint cbStruct; + [MarshalAs(UnmanagedType.LPTStr)] + public string pcwszFilePath; + public IntPtr hFile; + public IntPtr tmp; + + public void Dispose() + { + Dispose(true); + } + + private void Dispose(bool disposing) + { + if (tmp != IntPtr.Zero) + { + Marshal.DestroyStructure(this.tmp, typeof(Guid)); + Marshal.FreeHGlobal(this.tmp); + } + } + } + + [StructLayout(LayoutKind.Sequential)] + struct WINTRUST_DATA : IDisposable + { + public WINTRUST_DATA(WINTRUST_FILE_INFO fileInfo) + { + this.cbStruct = (uint)Marshal.SizeOf(typeof(WINTRUST_DATA)); + pInfoStruct = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(WINTRUST_FILE_INFO))); + Marshal.StructureToPtr(fileInfo, pInfoStruct, false); + dwUnionChoice = SignChecker_UnionChoice.File; + pPolicyCallbackData = IntPtr.Zero; + pSIPCallbackData = IntPtr.Zero; + dwUIChoice = SignChecker_UiChoice.NoUI; + fdwRevocationChecks = SignChecker_RevocationCheckFlags.WholeChain; + dwStateAction = SignChecker_StateAction.Ignore; + hWVTStateData = IntPtr.Zero; + pwszURLReference = IntPtr.Zero; + dwProvFlags = SignChecker_TrustProviderFlags.RevocationCheckChain; + + dwUIContext = SignChecker_UIContext.Execute; + } + + public uint cbStruct; + public IntPtr pPolicyCallbackData; + public IntPtr pSIPCallbackData; + public SignChecker_UiChoice dwUIChoice; + public SignChecker_RevocationCheckFlags fdwRevocationChecks; + public SignChecker_UnionChoice dwUnionChoice; + public IntPtr pInfoStruct; + public SignChecker_StateAction dwStateAction; + public IntPtr hWVTStateData; + private IntPtr pwszURLReference; + public SignChecker_TrustProviderFlags dwProvFlags; + public SignChecker_UIContext dwUIContext; + + public void Dispose() + { + Dispose(true); + } + + private void Dispose(bool disposing) + { + if (dwUnionChoice == SignChecker_UnionChoice.File) + { + WINTRUST_FILE_INFO info = new WINTRUST_FILE_INFO(); + Marshal.PtrToStructure(pInfoStruct, info); + info.Dispose(); + Marshal.DestroyStructure(pInfoStruct, typeof(WINTRUST_FILE_INFO)); + } + + Marshal.FreeHGlobal(pInfoStruct); + } + } + + public static bool CheckFileDigitalSignature(string fileName) + { + Guid wintrust_action_generic_verify_v2 = new Guid("{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}"); + WINTRUST_FILE_INFO fileInfo = new WINTRUST_FILE_INFO(fileName, Guid.Empty); + WINTRUST_DATA data = new WINTRUST_DATA(fileInfo); + + uint ret = 0; + + using (SignCheckerUnmanagedPointer guidPtr = new SignCheckerUnmanagedPointer(Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Guid))), SignChecker_MemoryAllocator.HGlobal)) + using (SignCheckerUnmanagedPointer wvtDataPtr = new SignCheckerUnmanagedPointer(Marshal.AllocHGlobal(Marshal.SizeOf(typeof(WINTRUST_DATA))), SignChecker_MemoryAllocator.HGlobal)) + { + IntPtr pGuid = guidPtr; + IntPtr pData = wvtDataPtr; + + Marshal.StructureToPtr(wintrust_action_generic_verify_v2, pGuid, false); + Marshal.StructureToPtr(data, pData, false); + + ret = WinVerifyTrust(IntPtr.Zero, pGuid, pData); + } + + if (ret != 0) + { + return false; + } + + return true; + } + } +} + + + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Stb.cs b/src/BuildUtil/CoreUtil/Stb.cs new file mode 100644 index 00000000..d1c7a5ec --- /dev/null +++ b/src/BuildUtil/CoreUtil/Stb.cs @@ -0,0 +1,352 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Diagnostics; +using System.Web.Mail; +using System.Net; +using System.Net.Sockets; +using System.Net.NetworkInformation; +using System.Net.Mail; +using System.Net.Mime; +using System.Reflection; +using CoreUtil; + +namespace CoreUtil +{ + public class Stb + { + Dictionary entryList; + + public string this[string name] + { + get + { + if (entryList.ContainsKey(name.ToUpper())) + { + return entryList[name.ToUpper()].String; + } + else + { + return ""; + } + } + } + + public Stb(string filename) + { + init(IO.ReadFile(filename)); + } + + public Stb(byte[] data) + { + init(data); + } + + void init(byte[] data) + { + entryList = new Dictionary(); + MemoryStream ms = new MemoryStream(data); + StreamReader sr = new StreamReader(ms); + string prefix = ""; + + while (true) + { + string tmp = sr.ReadLine(); + if (tmp == null) + { + break; + } + + StbEntry t = StbEntry.ParseTableLine(tmp, ref prefix); + if (t != null) + { + if (entryList.ContainsKey(t.Name.ToUpper()) == false) + { + entryList.Add(t.Name.ToUpper(), t); + } + } + } + } + + const string standardStbFileName = "|strtable.stb"; + static string defaultStbFileName = standardStbFileName; + static object lockObj = new object(); + static Stb defaultStb = null; + public static string DefaultStbFileName + { + set + { + defaultStbFileName = value; + } + + get + { + return defaultStbFileName; + } + } + public static Stb DefaultStb + { + get + { + lock (lockObj) + { + if (defaultStb == null) + { + defaultStb = new Stb(Stb.DefaultStbFileName); + } + + return defaultStb; + } + } + } + public static string SS(string name) + { + return DefaultStb[name]; + } + public static uint II(string name) + { + return Str.StrToUInt(SS(name)); + } + } + + public class StbEntry + { + string name; + public string Name + { + get { return name; } + } + + string str; + public string String + { + get { return str; } + } + + public StbEntry(string name, string str) + { + this.name = name; + this.str = str; + } + public static StbEntry ParseTableLine(string line, ref string prefix) + { + int i, len; + int string_start; + int len_name; + string name, name2; + + line = line.TrimStart(' ', '\t'); + len = line.Length; + if (len == 0) + { + return null; + } + + if (line[0] == '#' || (line[0] == '/' && line[1] == '/')) + { + return null; + } + + bool b = false; + len_name = 0; + for (i = 0; i < line.Length; i++) + { + if (line[i] == ' ' || line[i] == '\t') + { + b = true; + break; + } + len_name++; + } + + if (b == false) + { + return null; + } + + name = line.Substring(0, len_name); + + string_start = len_name; + for (i = len_name; i < len; i++) + { + if (line[i] != ' ' && line[i] != '\t') + { + break; + } + string_start++; + } + if (i == len) + { + return null; + } + + string str = line.Substring(string_start); + + str = UnescapeStr(str); + + if (Str.StrCmpi(name, "PREFIX")) + { + prefix = str; + prefix = prefix.TrimStart(); + + if (Str.StrCmpi(prefix, "$") || Str.StrCmpi(prefix, "NULL")) + { + prefix = ""; + } + + return null; + } + + name2 = ""; + + if (prefix != "") + { + name2 += prefix + "@"; + } + + name2 += name; + + return new StbEntry(name2, str); + } + + public static string UnescapeStr(string str) + { + int i, len; + string tmp; + + len = str.Length; + tmp = ""; + + for (i = 0; i < len; i++) + { + if (str[i] == '\\') + { + i++; + switch (str[i]) + { + case '\\': + tmp += '\\'; + break; + + case ' ': + tmp += ' '; + break; + + case 'n': + case 'N': + tmp += '\n'; + break; + + case 'r': + case 'R': + tmp += '\r'; + break; + + case 't': + case 'T': + tmp += '\t'; + break; + } + } + else + { + tmp += str[i]; + } + } + + return tmp; + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Str.cs b/src/BuildUtil/CoreUtil/Str.cs new file mode 100644 index 00000000..f333b8f7 --- /dev/null +++ b/src/BuildUtil/CoreUtil/Str.cs @@ -0,0 +1,4377 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Runtime.Serialization.Formatters.Soap; +using System.Runtime.Serialization.Formatters.Binary; +using System.Xml; +using System.Xml.Serialization; +using System.Web.Mail; +using System.Runtime.InteropServices; + +namespace CoreUtil +{ + [FlagsAttribute] + public enum PrintFFLags + { + Minus = 1, + Plus = 2, + Zero = 4, + Blank = 8, + Sharp = 16, + } + + public class PrintFParsedParam + { + public bool Ok = false; + public readonly PrintFFLags Flags = 0; + public readonly int Width = 0; + public readonly int Precision = 0; + public readonly bool NoPrecision = true; + public readonly string Type = ""; + + static PrintFFLags charToFlag(char c) + { + switch (c) + { + case '-': + return PrintFFLags.Minus; + + case '+': + return PrintFFLags.Plus; + + case '0': + return PrintFFLags.Zero; + + case ' ': + return PrintFFLags.Blank; + + case '#': + return PrintFFLags.Sharp; + } + + return 0; + } + + public string GetString(object param) + { + int i; + StringBuilder sb; + string tmp = "(error)"; + double f; + bool signed = false; + + switch (this.Type) + { + case "c": + case "C": + if (param is char) + { + tmp += (char)param; + } + else if (param is string) + { + string s = (string)param; + if (s.Length >= 1) + { + tmp += s[0]; + } + } + break; + + case "d": + case "i": + sb = new StringBuilder(); + int count = this.Width; + if (this.Precision != 0) + { + count = this.Precision; + } + for (i = 1; i < this.Precision; i++) + { + sb.Append("#"); + } + sb.Append("0"); + + if (param is int) + { + tmp = ((int)param).ToString(sb.ToString()); + } + else if (param is long) + { + tmp = ((long)param).ToString(sb.ToString()); + } + else if (param is uint) + { + tmp = ((int)((uint)param)).ToString(sb.ToString()); + } + else if (param is ulong) + { + tmp = ((long)((ulong)param)).ToString(sb.ToString()); + } + else if (param is decimal) + { + tmp = ((decimal)param).ToString(sb.ToString()); + } + signed = true; + + break; + + case "u": + sb = new StringBuilder(); + for (i = 1; i < this.Precision; i++) + { + sb.Append("#"); + } + sb.Append("0"); + + if (param is int) + { + tmp = ((uint)((int)param)).ToString(sb.ToString()); + } + else if (param is long) + { + tmp = ((ulong)((long)param)).ToString(sb.ToString()); + } + else if (param is uint) + { + tmp = ((uint)param).ToString(sb.ToString()); + } + else if (param is ulong) + { + tmp = ((ulong)param).ToString(sb.ToString()); + } + else if (param is decimal) + { + tmp = ((decimal)param).ToString(sb.ToString()); + } + + break; + + case "x": + case "X": + sb = new StringBuilder(); + sb.Append(this.Type); + sb.Append(this.Precision.ToString()); + + if (param is int) + { + tmp = ((uint)((int)param)).ToString(sb.ToString()); + } + else if (param is long) + { + tmp = ((ulong)((long)param)).ToString(sb.ToString()); + } + else if (param is uint) + { + tmp = ((uint)param).ToString(sb.ToString()); + } + else if (param is ulong) + { + tmp = ((ulong)param).ToString(sb.ToString()); + } + + break; + + case "e": + case "E": + case "f": + f = 0; + + if (param is int) + { + f = (double)((int)param); + } + else if (param is long) + { + f = (double)((long)param); + } + else if (param is uint) + { + f = (double)((uint)param); + } + else if (param is ulong) + { + f = (double)((ulong)param); + } + else if (param is decimal) + { + f = (double)((long)param); + } + else if (param is float) + { + f = (double)((float)param); + } + else if (param is double) + { + f = (double)param; + } + else + { + break; + } + + int prectmp = Precision; + if (prectmp == 0 && NoPrecision) + { + prectmp = 6; + } + + tmp = f.ToString(string.Format("{0}{1}", Type, prectmp)); + + break; + + case "s": + case "S": + if (param == null) + { + tmp = "(null)"; + } + else + { + tmp = param.ToString(); + } + break; + } + + int normalWidth = Str.GetStrWidth(tmp); + int targetWidth = Math.Max(this.Width, normalWidth); + + if ((this.Flags & PrintFFLags.Plus) != 0) + { + if (signed) + { + if (tmp.StartsWith("-") == false) + { + tmp = "+" + tmp; + } + } + } + else + { + if ((this.Flags & PrintFFLags.Blank) != 0) + { + if (signed) + { + if (tmp.StartsWith("-") == false) + { + tmp = " " + tmp; + } + } + } + } + + if ((this.Flags & PrintFFLags.Minus) != 0) + { + int w = targetWidth - Str.GetStrWidth(tmp); + if (w < 0) + { + w = 0; + } + + tmp += Str.MakeCharArray(' ', w); + } + else if ((this.Flags & PrintFFLags.Zero) != 0) + { + int w = targetWidth - Str.GetStrWidth(tmp); + if (w < 0) + { + w = 0; + } + + tmp = Str.MakeCharArray('0', w) + tmp; + } + else + { + int w = targetWidth - Str.GetStrWidth(tmp); + if (w < 0) + { + w = 0; + } + + tmp = Str.MakeCharArray(' ', w) + tmp; + } + + if ((this.Flags & PrintFFLags.Sharp) != 0) + { + if (Type == "x" || Type == "X") + { + tmp = "0x" + tmp; + } + } + + return tmp; + } + + public PrintFParsedParam(string str) + { + Str.NormalizeString(ref str); + + if (str.StartsWith("%") == false) + { + return; + } + + str = str.Substring(1); + + Queue q = new Queue(); + foreach (char c in str) + { + q.Enqueue(c); + } + + while (q.Count >= 1) + { + char c = q.Peek(); + PrintFFLags f = charToFlag(c); + + if (f == 0) + { + break; + } + + this.Flags |= f; + q.Dequeue(); + } + + Queue q2 = new Queue(); + + while (q.Count >= 1) + { + bool bf = false; + char c = q.Peek(); + + switch (c) + { + case 'h': + case 'l': + case 'I': + case 'c': + case 'C': + case 'd': + case 'i': + case 'o': + case 'u': + case 'x': + case 'X': + case 'e': + case 'E': + case 'f': + case 'g': + case 'G': + case 'n': + case 'p': + case 's': + case 'S': + bf = true; + break; + + default: + q2.Enqueue(c); + break; + } + + if (bf) + { + break; + } + + q.Dequeue(); + } + + string[] widthAndPrec = (new string(q2.ToArray())).Split('.'); + + if (widthAndPrec.Length == 1) + { + this.Width = Str.StrToInt(widthAndPrec[0]); + } + else if (widthAndPrec.Length == 2) + { + this.Width = Str.StrToInt(widthAndPrec[0]); + this.Precision = Str.StrToInt(widthAndPrec[1]); + this.NoPrecision = false; + } + + this.Width = Math.Max(this.Width, 0); + this.Precision = Math.Max(this.Precision, 0); + + + while (q.Count >= 1) + { + char c = q.Peek(); + bool bf = false; + + switch (c) + { + case 'c': + case 'C': + case 'd': + case 'i': + case 'o': + case 'u': + case 'x': + case 'X': + case 'e': + case 'E': + case 'f': + case 'g': + case 'G': + case 'a': + case 'A': + case 'n': + case 'p': + case 's': + case 'S': + bf = true; + break; + + default: + break; + } + + if (bf) + { + break; + } + + q.Dequeue(); + } + + this.Type = new string(q.ToArray()); + if (this.Type.Length >= 1) + { + this.Type = this.Type.Substring(0, 1); + } + + this.Ok = (Str.IsEmptyStr(this.Type) == false); + } + } + + public class StrEqualityComparer : IEqualityComparer + { + bool caseSensitive; + + public StrEqualityComparer() + { + this.caseSensitive = false; + } + + public StrEqualityComparer(bool caseSensitive) + { + this.caseSensitive = caseSensitive; + } + + public bool Equals(string x, string y) + { + return x.Equals(y, caseSensitive ? StringComparison.InvariantCulture : StringComparison.InvariantCultureIgnoreCase); + } + + public int GetHashCode(string obj) + { + return obj.GetHashCode(); + } + } + + + public class StrComparer : IComparer + { + bool caseSensitive; + + public StrComparer() + { + this.caseSensitive = false; + } + + public StrComparer(bool caseSensitive) + { + this.caseSensitive = caseSensitive; + } + + public int Compare(string x, string y) + { + return string.Compare(x, y, !caseSensitive); + } + } + + public delegate bool RemoveStringFunction(string str); + + public static class Str + { + public static string NormalizeStrSoftEther(string str) + { + return NormalizeStrSoftEther(str, false); + } + public static string NormalizeStrSoftEther(string str, bool trim) + { + bool b = false; + StringReader sr = new StringReader(str); + StringWriter sw = new StringWriter(); + while (true) + { + string line = sr.ReadLine(); + if (line == null) + { + break; + } + if (b) + { + sw.WriteLine(); + } + b = true; + line = normalizeStrSoftEtherInternal(line); + sw.Write(line); + } + + int len = str.Length; + + try + { + if (str[len - 1] == '\n' || str[len - 1] == '\r') + { + sw.WriteLine(); + } + } + catch + { + } + + str = sw.ToString(); + + if (trim) + { + str = str.Trim(); + } + + return str; + } + static string normalizeStrSoftEtherInternal(string str) + { + if (str.Trim().Length == 0) + { + return ""; + } + + int i; + StringBuilder sb1 = new StringBuilder(); + for (i = 0; i < str.Length; i++) + { + char c = str[i]; + + if (c == ' ' || c == ' ' || c == '\t') + { + sb1.Append(c); + } + else + { + break; + } + } + string str2 = str.Substring(i).Trim(); + + string str1 = sb1.ToString(); + + str1 = ReplaceStr(str1, " ", " "); + str1 = ReplaceStr(str1, "\t", " "); + + return str1 + normalizeStrSoftEtherInternal2(str2); + } + static string normalizeStrSoftEtherInternal2(string str) + { + NormalizeString(ref str, true, true, false, true); + char[] chars = str.ToCharArray(); + StringBuilder sb = new StringBuilder(); + + int i; + for (i = 0; i < chars.Length; i++) + { + char c = chars[i]; + bool insert_space = false; + bool insert_space2 = false; + + char c1 = (char)0; + if (i >= 1) + { + c1 = chars[i - 1]; + } + + char c2 = (char)0; + if (i < (chars.Length - 1)) + { + c2 = chars[i + 1]; + } + + if (c == '\'' || c1 == '\'' || c2 == '\'' || c == '\"' || c1 == '\"' || c2 == '\"' || c == '>' || c1 == '>' || c2 == '>' || c == '<' || c1 == '<' || c2 == '<') + { + } + else if (c == '(' || c == '[' || c == '{' || c == '<') + { + if (c1 != '「' && c1 != '『' && c1 != '。' && c1 != 'ã€' && c1 != '・') + { + insert_space = true; + } + } + else if (c == ')' || c == ']' || c == '}' || c == '>') + { + if (c2 != '.' && c2 != ',' && c2 != '。' && c2 != 'ã€') + { + insert_space2 = true; + } + } + else if (c == '~') + { + if (c1 != '~') + { + insert_space = true; + } + + if (c2 != '~') + { + insert_space2 = true; + } + } + else if (IsZenkaku(c) == false) + { + if (IsZenkaku(c1)) + { + if (c != '.' && c != ',' && c != ';' && c != ':' && c1 != '※' && c1 != '〒' && c1 != 'â„¡' && c1 != '「' && c1 != '『' && c1 != '。' && c1 != 'ã€' && c1 != '・') + { + insert_space = true; + } + } + } + else + { + if (IsZenkaku(c1) == false) + { + if (c != '。' && c != 'ã€' && c != 'ã€' && c != 'ã€' && c != '・' && c1 != '(' && c1 != '[' && c1 != '{' && c1 != '<' && c1 != ';' && c1 != ':') + { + insert_space = true; + } + } + } + + if (insert_space) + { + sb.Append(' '); + } + + sb.Append(c); + + if (insert_space2) + { + sb.Append(' '); + } + } + + str = sb.ToString(); + + NormalizeString(ref str, true, true, false, true); + + return str; + } + + public static bool IsZenkaku(char c) + { + return !((c >= (char)0) && (c <= (char)256)); + } + + public static string[] DivideStringMulti(string str, bool caseSensitive, params string[] keywords) + { + List ret = new List(); + int next = 0; + + while (true) + { + int foundIndex; + string foundKeyword; + int r = Str.SearchStrMulti(str, next, caseSensitive, out foundIndex, out foundKeyword, keywords); + if (r == -1) + { + ret.Add(str.Substring(next)); + break; + } + else + { + ret.Add(str.Substring(next, r - next)); + ret.Add(foundKeyword); + next = r + foundKeyword.Length; + } + } + + return ret.ToArray(); + } + + public static bool IsSuitableEncodingForString(string str, Encoding enc) + { + try + { + str = Str.NormalizeCrlf(str); + + byte[] utf1 = Str.Utf8Encoding.GetBytes(str); + + byte[] b = enc.GetBytes(str); + string str2 = enc.GetString(b); + + byte[] utf2 = Str.Utf8Encoding.GetBytes(str2); + + return Util.CompareByte(utf1, utf2); + } + catch + { + return false; + } + } + + public static bool IsCharNumOrAlpha(char c) + { + if (c >= 'a' && c <= 'z') + { + return true; + } + if (c >= 'A' && c <= 'Z') + { + return true; + } + if (c >= '0' && c <= '9') + { + return true; + } + return false; + } + public static bool IsStringNumOrAlpha(string s) + { + foreach (char c in s) + { + if (IsCharNumOrAlpha(c) == false) + { + return false; + } + } + return true; + } + + public static string[] StrToStrLineBySplitting(string str) + { + StringReader r = new StringReader(str); + List ret = new List(); + + while (true) + { + string line = r.ReadLine(); + if (line == null) + { + break; + } + + if (IsEmptyStr(line) == false) + { + ret.Add(line.Trim()); + } + } + + return ret.ToArray(); + } + + public static string GetLeft(string str, int len) + { + if (str == null) + { + return null; + } + if (str.Length > len) + { + return str.Substring(0, len); + } + else + { + return str; + } + } + + public static string[] SplitStringForSearch(string str) + { + bool b = false; + int i, len; + len = str.Length; + List ret = new List(); + string currentStr = ""; + + for (i = 0; i < len; i++) + { + char c = str[i]; + + if (c == '\"') + { + b = !b; + if (b == false) + { + currentStr = currentStr.Trim(); + if (Str.IsEmptyStr(currentStr) == false) + { + ret.Add(currentStr); + currentStr = ""; + } + } + } + else + { + if (b == false && (c == ' ' || c == ' ' || c == '\t')) + { + currentStr = currentStr.Trim(); + if (Str.IsEmptyStr(currentStr) == false) + { + ret.Add(currentStr); + currentStr = ""; + } + } + else + { + currentStr += c; + } + } + } + + currentStr = currentStr.Trim(); + if (Str.IsEmptyStr(currentStr) == false) + { + ret.Add(currentStr); + } + + return ret.ToArray(); + } + + public static string AppendZeroToNumString(string str, int numKeta) + { + int n = numKeta - str.Length; + + if (n >= 1) + { + return MakeCharArray('0', n) + str; + } + else + { + return str; + } + } + + public static Encoding CheckBOM(byte[] data) + { + int i; + return CheckBOM(data, out i); + } + public static Encoding CheckBOM(byte[] data, out int bomNumBytes) + { + bomNumBytes = 0; + try + { + if (data[0] == 0x00 && data[1] == 0x00 && data[2] == 0xfe && data[3] == 0xff) + { + bomNumBytes = 3; + return Encoding.GetEncoding("utf-32BE"); + } + else if (data[0] == 0xff && data[1] == 0xfe && data[2] == 0x00 && data[3] == 0x00) + { + bomNumBytes = 4; + return Encoding.GetEncoding("utf-32"); + } + else if (data[0] == 0xff && data[1] == 0xfe) + { + bomNumBytes = 2; + return Encoding.GetEncoding("utf-16"); + } + else if (data[0] == 0xfe && data[1] == 0xff) + { + bomNumBytes = 2; + return Encoding.GetEncoding("unicodeFFFE"); + } + else if (data[0] == 0xef && data[1] == 0xbb && data[2] == 0xbf) + { + bomNumBytes = 3; + return Encoding.GetEncoding("utf-8"); + } + else + { + return null; + } + } + catch + { + return null; + } + } + + public static byte[] GetBOM(Encoding encoding) + { + if (Str.StrCmpi(encoding.BodyName, "utf-32BE")) + { + return new byte[] { 0x00, 0x00, 0xfe, 0xff }; + } + else if (Str.StrCmpi(encoding.BodyName, "utf-32")) + { + return new byte[] {0xff, 0xfe, 0x00, 0x00 }; + } + else if (Str.StrCmpi(encoding.BodyName, "utf-16")) + { + return new byte[] { 0xff, 0xfe }; + } + else if (Str.StrCmpi(encoding.BodyName, "unicodeFFFE")) + { + return new byte[] { 0xfe, 0xff }; + } + else if (Str.StrCmpi(encoding.BodyName, "utf-8")) + { + return new byte[] { 0xef, 0xbb, 0xbf }; + } + else + { + return null; + } + } + + public static byte[] ConvertEncoding(byte[] srcData, Encoding destEncoding) + { + return ConvertEncoding(srcData, destEncoding, false); + } + public static byte[] ConvertEncoding(byte[] srcData, Encoding destEncoding, bool appendBom) + { + Encoding srcEncoding = GetEncoding(srcData); + if (srcEncoding == null) + { + srcEncoding = Str.ShiftJisEncoding; + } + + int nb; + if (CheckBOM(srcData, out nb) != null) + { + srcData = Util.RemoveStartByteArray(srcData, nb); + } + + string str = srcEncoding.GetString(srcData); + + byte[] b1 = null; + if (appendBom) + { + b1 = GetBOM(destEncoding); + } + byte[] b2 = destEncoding.GetBytes(str); + + return Util.CombineByteArray(b1, b2); + } + + public static string ReadTextFile(string filename) + { + byte[] data = IO.ReadFileData(filename); + int bomSize = 0; + + Encoding enc = GetEncoding(data, out bomSize); + if (enc == null) + { + enc = Str.Utf8Encoding; + } + if (bomSize >= 1) + { + data = Util.CopyByte(data, bomSize); + } + + return enc.GetString(data); + } + + public static void WriteTextFile(string filename, Encoding enc, bool writeBom) + { + Buf buf = new Buf(); + byte[] bom = GetBOM(enc); + if (writeBom && bom != null && bom.Length >= 1) + { + buf.Write(bom); + } + buf.Write(enc.GetBytes(filename)); + + buf.SeekToBegin(); + + File.WriteAllBytes(filename, buf.Read()); + } + + public static Encoding GetEncoding(byte[] data) + { + int i; + return GetEncoding(data, out i); + } + public static Encoding GetEncoding(byte[] data, out int bomSize) + { + const byte bESC = 0x1B; + const byte bAT = 0x40; + const byte bDollar = 0x24; + const byte bAnd = 0x26; + const byte bOP = 0x28; + const byte bB = 0x42; + const byte bD = 0x44; + const byte bJ = 0x4A; + const byte bI = 0x49; + bomSize = 0; + + int len = data.Length; + int binary = 0; + int ucs2 = 0; + int sjis = 0; + int euc = 0; + int utf8 = 0; + byte b1, b2; + + Encoding bomEncoding = CheckBOM(data, out bomSize); + if (bomEncoding != null) + { + return bomEncoding; + } + + for (int i = 0; i < len; i++) + { + if (data[i] <= 0x06 || data[i] == 0x7F || data[i] == 0xFF) + { + //'binary' + binary++; + if (len - 1 > i && data[i] == 0x00 + && i > 0 && data[i - 1] <= 0x7F) + { + //smells like raw unicode + ucs2++; + } + } + } + + + if (binary > 0) + { + if (ucs2 > 0) + { + //JIS + //ucs2(Unicode) + + int n1 = 0, n2 = 0; + for (int i = 0; i < (len / 2); i++) + { + byte e1 = data[i * 2]; + byte e2 = data[i * 2 + 1]; + + if (e1 == 0 && e2 != 0) + { + n1++; + } + else if (e1 != 0 && e2 == 0) + { + n2++; + } + } + + if (n1 > n2) + { + return Encoding.GetEncoding("unicodeFFFE"); + } + else + { + return System.Text.Encoding.Unicode; + } + } + else + { + //binary + return null; + } + } + + for (int i = 0; i < len - 1; i++) + { + b1 = data[i]; + b2 = data[i + 1]; + + if (b1 == bESC) + { + if (b2 >= 0x80) + //not Japanese + //ASCII + return System.Text.Encoding.ASCII; + else if (len - 2 > i && + b2 == bDollar && data[i + 2] == bAT) + //JIS_0208 1978 + //JIS + return System.Text.Encoding.GetEncoding(50220); + else if (len - 2 > i && + b2 == bDollar && data[i + 2] == bB) + //JIS_0208 1983 + //JIS + return System.Text.Encoding.GetEncoding(50220); + else if (len - 5 > i && + b2 == bAnd && data[i + 2] == bAT && data[i + 3] == bESC && + data[i + 4] == bDollar && data[i + 5] == bB) + //JIS_0208 1990 + //JIS + return System.Text.Encoding.GetEncoding(50220); + else if (len - 3 > i && + b2 == bDollar && data[i + 2] == bOP && data[i + 3] == bD) + //JIS_0212 + //JIS + return System.Text.Encoding.GetEncoding(50220); + else if (len - 2 > i && + b2 == bOP && (data[i + 2] == bB || data[i + 2] == bJ)) + //JIS_ASC + //JIS + return System.Text.Encoding.GetEncoding(50220); + else if (len - 2 > i && + b2 == bOP && data[i + 2] == bI) + //JIS_KANA + //JIS + return System.Text.Encoding.GetEncoding(50220); + } + } + + for (int i = 0; i < len - 1; i++) + { + b1 = data[i]; + b2 = data[i + 1]; + if (((b1 >= 0x81 && b1 <= 0x9F) || (b1 >= 0xE0 && b1 <= 0xFC)) && + ((b2 >= 0x40 && b2 <= 0x7E) || (b2 >= 0x80 && b2 <= 0xFC))) + { + sjis += 2; + i++; + } + } + for (int i = 0; i < len - 1; i++) + { + b1 = data[i]; + b2 = data[i + 1]; + if (((b1 >= 0xA1 && b1 <= 0xFE) && (b2 >= 0xA1 && b2 <= 0xFE)) || + (b1 == 0x8E && (b2 >= 0xA1 && b2 <= 0xDF))) + { + euc += 2; + i++; + } + else if (len - 2 > i && + b1 == 0x8F && (b2 >= 0xA1 && b2 <= 0xFE) && + (data[i + 2] >= 0xA1 && data[i + 2] <= 0xFE)) + { + euc += 3; + i += 2; + } + } + for (int i = 0; i < len - 1; i++) + { + b1 = data[i]; + b2 = data[i + 1]; + if ((b1 >= 0xC0 && b1 <= 0xDF) && (b2 >= 0x80 && b2 <= 0xBF)) + { + utf8 += 2; + i++; + } + else if (len - 2 > i && + (b1 >= 0xE0 && b1 <= 0xEF) && (b2 >= 0x80 && b2 <= 0xBF) && + (data[i + 2] >= 0x80 && data[i + 2] <= 0xBF)) + { + utf8 += 3; + i += 2; + } + } + + if (euc > sjis && euc > utf8) + //EUC + return System.Text.Encoding.GetEncoding(51932); + else if (sjis > euc && sjis > utf8) + //SJIS + return System.Text.Encoding.GetEncoding(932); + else if (utf8 > euc && utf8 > sjis) + //UTF8 + return System.Text.Encoding.UTF8; + + return null; + } + + public static bool StartsWithMulti(string str, StringComparison comp, params string[] keys) + { + NormalizeString(ref str); + + foreach (string key in keys) + { + if (str.StartsWith(key, comp)) + { + return true; + } + } + + return false; + } + + public static bool IsCharForMail(char c) + { + switch (c) + { + case '<': + case '>': + case ' ': + case ';': + case ':': + case '/': + case '(': + case ')': + case '&': + case ',': + case '%': + case '$': + case '#': + case '\"': + case '\'': + case '!': + case '=': + case '\\': + return false; + } + + if (c >= 0x80) + { + return false; + } + + if (IsAscii(c) == false) + { + return false; + } + + return true; + } + + public static string LinkMailtoOnText(string text) + { + NormalizeString(ref text); + + StringBuilder sb = new StringBuilder(); + + string tmp = ""; + + int i; + for (i = 0; i < text.Length; i++) + { + char c = text[i]; + + if (IsCharForMail(c) == false) + { + if (Str.CheckMailAddress(tmp) == false) + { + tmp += c; + sb.Append(tmp); + tmp = ""; + } + else + { + sb.AppendFormat("{0}", tmp); + sb.Append(c); + tmp = ""; + } + } + else + { + tmp += c; + } + } + if (Str.CheckMailAddress(tmp) == false) + { + sb.Append(tmp); + tmp = ""; + } + else + { + sb.AppendFormat("{0}", tmp); + tmp = ""; + } + + return sb.ToString(); + } + + public static string LinkUrlOnText(string text, string target) + { + int findStart = 0; + + NormalizeString(ref text); + NormalizeString(ref target); + + StringBuilder sb = new StringBuilder(); + + while (true) + { + int foundStrIndex; + int foundIndex = FindStrings(text, findStart, StringComparison.InvariantCultureIgnoreCase, out foundStrIndex, + "http://", "https://", "ftp://", "telnet://", "mailto://", "news://"); + + if (foundIndex != -1) + { + int i; + int endOfUrl = -1; + for (i = foundIndex; i < text.Length; i++) + { + char c = text[i]; + + if (IsValidForUrl(c) == false) + { + endOfUrl = i; + break; + } + + if (c == '<' || c == '&') + { + if (StartsWithMulti(text.Substring(i), StringComparison.InvariantCultureIgnoreCase, + HtmlSpacing, HtmlCrlf, HtmlBr, HtmlLt, HtmlGt)) + { + endOfUrl = i; + break; + } + } + } + + if (endOfUrl == -1) + { + endOfUrl = text.Length; + } + + string url = text.Substring(foundIndex, endOfUrl - foundIndex); + string beforeUrl = text.Substring(findStart, foundIndex - findStart); + + sb.Append(beforeUrl); + + if (Str.IsEmptyStr(target) == false) + { + sb.AppendFormat("{1}", url, url, target); + } + else + { + sb.AppendFormat("{1}", url, url); + } + + findStart = endOfUrl; + } + else + { + sb.Append(text.Substring(findStart)); + + break; + } + } + + return LinkMailtoOnText(sb.ToString()); + } + + public static int FindStrings(string str, int findStartIndex, StringComparison comp, out int foundKeyIndex, params string[] keys) + { + int ret = -1; + foundKeyIndex = -1; + int n = 0; + + foreach (string key in keys) + { + int i = str.IndexOf(key, findStartIndex, comp); + + if (i != -1) + { + if (ret == -1) + { + ret = i; + foundKeyIndex = n; + } + else + { + if (ret > i) + { + ret = i; + foundKeyIndex = n; + } + } + } + + n++; + } + + return ret; + } + + public static bool IsValidForUrl(char c) + { + if (c >= '0' && c <= '9') + { + return true; + } + if (c >= 'a' && c <= 'z') + { + return true; + } + if (c >= 'A' && c <= 'Z') + { + return true; + } + switch (c) + { + case '_': + case '-': + case '?': + case '!': + case '\"': + case ',': + case '\'': + case '/': + case '\\': + case '&': + case ';': + case '%': + case '#': + case '@': + case '~': + case ':': + case '=': + case '+': + case '*': + case '$': + case '.': + return true; + } + + return false; + } + + public static List RemoteStringFromList(List str, RemoveStringFunction func) + { + List ret = new List(); + + foreach (string s in str) + { + if (func(s) == false) + { + ret.Add(s); + } + } + + return ret; + } + + public const string ConstZenkaku = "`{ï½ï¼ï¼‘23456789ï¼ï¼Šï¼ï¼‹ï¼â€ï¼ƒï¼„%&’()ï¼ï¿£ï½œï¿¥ï¼»ï¼½ï¼ ï¼›ï¼šï¼œï¼žï¼Ÿï¼¿ï¼¾ã€€ï½ï½‚cdefghijklï½ï½Žï½ï½ï½‘rstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ‘"; + public const string ConstHankaku = "`{}0123456789/*-+!\"#$%&'()=~|\\[]@;:<>?_^ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'"; + public const string ConstKanaZenkaku = "ー「ã€ã‚¢ã‚¤ã‚¦ã‚¨ã‚ªã‚«ã‚­ã‚¯ã‚±ã‚³ã‚µã‚·ã‚¹ã‚»ã‚½ã‚¿ãƒãƒ„テトナニヌãƒãƒŽãƒãƒ’フヘホマミムメモヤユヨラリルレロワヲンァゥェォャュョッィ゛゜"; + public const string ConstKanaHankaku = "ー「」アイウエオカキクケコサシスセソタï¾ï¾‚テトナニヌネノハヒフï¾ï¾Žï¾ï¾ï¾‘メモヤユヨラリルレロワヲï¾ï½§ï½©ï½ªï½«ï½¬ï½­ï½®ï½¯ï½¨ï¾žï¾Ÿ"; + + public static void RemoveSpace(ref string str) + { + NormalizeString(ref str); + + str = str.Replace(" ", "").Replace(" ", "").Replace("\t", ""); + } + + public static void TrimStartWith(ref string str, string key, StringComparison sc) + { + if (str.StartsWith(key, sc)) + { + str = str.Substring(key.Length); + } + } + + public static void TrimEndsWith(ref string str, string key, StringComparison sc) + { + if (str.EndsWith(key, sc)) + { + str = str.Substring(0, str.Length - key.Length); + } + } + + public static void RemoveSpaceChar(ref string str) + { + if (Str.IsEmptyStr(str)) + { + return; + } + + StringBuilder sb = new StringBuilder(); + + foreach (char c in str) + { + if (c == ' ' || c == '\t' || c == ' ') + { + } + else + { + sb.Append(c); + } + } + + str = sb.ToString(); + } + + public static void NormalizeStringStandard(ref string str) + { + NormalizeString(ref str, true, true, false, true); + } + public static void NormalizeString(ref string str, bool space, bool toHankaku, bool toZenkaku, bool toZenkakuKana) + { + NormalizeString(ref str); + + if (space) + { + str = NormalizeSpace(str); + } + + if (toHankaku) + { + str = ZenkakuToHankaku(str); + } + + if (toZenkaku) + { + str = HankakuToZenkaku(str); + } + + if (toZenkakuKana) + { + str = KanaHankakuToZenkaku(str); + } + } + + public static string NormalizeSpace(string str) + { + NormalizeString(ref str); + char[] sps = + { + ' ', ' ', '\t', + }; + + string[] tokens = str.Split(sps, StringSplitOptions.RemoveEmptyEntries); + + return Str.CombineStringArray(tokens, " "); + } + + public static string KanaHankakuToZenkaku(string str) + { + NormalizeString(ref str); + + str = str.Replace("ガ", "ガ"); + str = str.Replace("ギ", "ã‚®"); + str = str.Replace("グ", "ã‚°"); + str = str.Replace("ゲ", "ゲ"); + str = str.Replace("ゴ", "ã‚´"); + str = str.Replace("ザ", "ザ"); + str = str.Replace("ジ", "ジ"); + str = str.Replace("ズ", "ズ"); + str = str.Replace("ゼ", "ゼ"); + str = str.Replace("ゾ", "ゾ"); + str = str.Replace("ダ", "ダ"); + str = str.Replace("ï¾ï¾ž", "ヂ"); + str = str.Replace("ヅ", "ヅ"); + str = str.Replace("デ", "デ"); + str = str.Replace("ド", "ド"); + str = str.Replace("バ", "ãƒ"); + str = str.Replace("ビ", "ビ"); + str = str.Replace("ブ", "ブ"); + str = str.Replace("ï¾ï¾ž", "ベ"); + str = str.Replace("ボ", "ボ"); + + char[] a = str.ToCharArray(); + int i; + for (i = 0; i < a.Length; i++) + { + int j = ConstKanaHankaku.IndexOf(a[i]); + + if (j != -1) + { + a[i] = ConstKanaZenkaku[j]; + } + } + + return new string(a); + } + + public static string ZenkakuToHankaku(string str) + { + NormalizeString(ref str); + + str = ReplaceStr(str, "“", " \""); + str = ReplaceStr(str, "â€", "\" "); + str = ReplaceStr(str, "‘", "'"); + str = ReplaceStr(str, "’", "'"); + + char[] a = str.ToCharArray(); + int i; + for (i = 0; i < a.Length; i++) + { + int j = ConstZenkaku.IndexOf(a[i]); + + if (j != -1) + { + a[i] = ConstHankaku[j]; + } + } + + return new string(a); + } + + public static string HankakuToZenkaku(string str) + { + NormalizeString(ref str); + + str = KanaHankakuToZenkaku(str); + + char[] a = str.ToCharArray(); + int i; + for (i = 0; i < a.Length; i++) + { + int j = ConstHankaku.IndexOf(a[i]); + + if (j != -1) + { + a[i] = ConstZenkaku[j]; + } + } + + return new string(a); + } + + public const string HtmlSpacing = " "; + public const string HtmlCrlf = "
"; + public const string HtmlBr = "
"; + public const string HtmlLt = "<"; + public const string HtmlGt = ">"; + public const string HtmlAmp = "&"; + public const int HtmlNumTabChar = 8; + public static string HtmlTab + { + get + { + int i; + StringBuilder sb = new StringBuilder(); + for (i = 0; i < HtmlNumTabChar; i++) + { + sb.Append(HtmlSpacing); + } + return sb.ToString(); + } + } + + public static string ToUrl(string str, Encoding e) + { + Str.NormalizeString(ref str); + return HttpUtility.UrlEncode(str, e); + } + + public static string FromUrl(string str, Encoding e) + { + Str.NormalizeString(ref str); + return HttpUtility.UrlDecode(str, e); + } + + public static string FromHtml(string str) + { + str = Str.ReplaceStr(str, HtmlCrlf, "\r\n", false); + + str = str.Replace(HtmlSpacing, " "); + + str = str.Replace(HtmlLt, "<").Replace(HtmlGt, ">").Replace(HtmlAmp, "&"); + + str = NormalizeCrlf(str); + + return str; + } + + public static string ToHtml(string str) + { + return ToHtml(str, false); + } + public static string ToHtml(string str, bool forceAllSpaceToTag) + { + str = NormalizeCrlf(str); + + str = str.Replace("&", HtmlAmp); + + str = str.Replace("<", HtmlLt).Replace(">", HtmlGt); + + if (str.IndexOf(' ') != -1) + { + if (forceAllSpaceToTag) + { + str = str.Replace(" ", HtmlSpacing); + } + else + { + int i; + StringBuilder sb = new StringBuilder(); + bool flag = false; + + for (i = 0; i < str.Length; i++) + { + char c = str[i]; + + if (c == ' ') + { + if (flag == false) + { + flag = true; + sb.Append(' '); + } + else + { + sb.Append(HtmlSpacing); + } + } + else + { + flag = false; + sb.Append(c); + } + } + + str = sb.ToString(); + } + } + + str = str.Replace("\t", HtmlTab); + + str = str.Replace("\r\n", HtmlCrlf); + + return str; + } + + public static bool IsPrintable(char c) + { + if (c >= 256) + { + return true; + } + + if (c >= 32 && c <= 126) + { + return true; + } + + return false; + } + public static bool IsPrintable(string str) + { + foreach (char c in str) + { + if (IsPrintable(c) == false) + { + return false; + } + } + + return true; + } + + public static string Unescape(string str) + { + StringBuilder sb = new StringBuilder(); + + int i; + for (i = 0; i < str.Length; i++) + { + char c = str[i]; + + if (IsPrintable(c) && c != '\\') + { + sb.Append(c); + } + else + { + string s = "" + c; + switch (c) + { + case '\r': + s = "\\r"; + break; + + case '\n': + s = "\\n"; + break; + + case '\0': + s = "\\0"; + break; + + case '\t': + s = "\\t"; + break; + + case '\\': + s = "\\\\"; + break; + + default: + s = "0x" + Convert.ToString((int)c, 16); + break; + } + sb.Append(s); + } + } + + return sb.ToString(); + } + + public static string Escape(string str) + { + StringBuilder sb = new StringBuilder(); + + int i, j, hex; + string padding = "00000000"; + str = str + padding; + StringBuilder sb2; + + for (i = 0; i < str.Length - padding.Length; i++) + { + char c = str[i]; + char d = c; + + if (c == '\\') + { + char c1 = str[i + 1]; + + switch (c1) + { + case '\'': + d = '\''; + i++; + break; + + case '?': + d = '?'; + i++; + break; + + case '\\': + d = '\\'; + i++; + break; + + case 't': + d = '\t'; + i++; + break; + + case 'r': + d = '\r'; + i++; + break; + + case 'n': + d = '\n'; + i++; + break; + + case ' ': + d = ' '; + i++; + break; + + case ' ': + d = ' '; + i++; + break; + + case '\t': + d = '\t'; + i++; + break; + + case '0': + d = '\0'; + i++; + break; + + case 'x': + i++; + sb2 = new StringBuilder(); + for (j = 0; j < 4; j++) + { + char c2 = str[++i]; + + if ((c2 >= '0' && c2 <= '9') || (c2 >= 'a' && c2 <= 'f') || (c2 >= 'A' && c2 <= 'F')) + { + sb2.Append(c2); + } + else + { + i--; + break; + } + } + hex = Convert.ToInt32(sb2.ToString(), 16); + d = (char)hex; + break; + + default: + if (c1 >= '0' && c1 <= '7') + { + sb2 = new StringBuilder(); + for (j = 0; j < 3; j++) + { + char c2 = str[++i]; + + if (c2 >= '0' && c2 <= '7') + { + sb2.Append(c2); + } + else + { + i--; + break; + } + } + hex = Convert.ToInt32(sb2.ToString(), 8); + d = (char)hex; + } + else + { + d = '\\'; + i++; + } + break; + } + } + + if (d != '\0') + { + sb.Append(d); + } + else + { + break; + } + } + + return sb.ToString(); + } + + public static int GetStrWidth(string str) + { + int ret = 0; + foreach (char c in str) + { + if (c <= 255) + { + ret++; + } + else + { + ret += 2; + } + } + return ret; + } + + public static string TrimCrlf(string str) + { + int len; + if (str == null) + { + return ""; + } + len = str.Length; + if (len == 0) + { + return ""; + } + + if (str[len - 1] == '\n') + { + if (len >= 2 && str[len - 2] == '\r') + { + str = str.Substring(0, len - 2); + } + + str = str.Substring(0, len - 1); + } + else if (str[len - 1] == '\r') + { + str = str.Substring(0, len - 1); + } + + return str; + } + + public static bool IsAllUpperStr(string str) + { + int i, len; + if (str == null) + { + return false; + } + + len = str.Length; + + for (i = 0; i < len; i++) + { + char c = str[i]; + + if ((c >= '0' && c <= '9') || + (c >= 'A' && c <= 'Z')) + { + } + else + { + return false; + } + } + + return true; + } + + public static List StrArrayToList(string[] strArray) + { + List ret = new List(); + + foreach (string s in strArray) + { + ret.Add(s); + } + + return ret; + } + + private static string[] __new_ParseCmdLine(string str) + { + List o; + int i, len, mode; + char c; + StringBuilder tmp; + bool ignore_space = false; + if (str == null) + { + return new string[0]; + } + + o = new List(); + tmp = new StringBuilder(); + + mode = 0; + len = str.Length; + for (i = 0; i < len; i++) + { + c = str[i]; + + switch (mode) + { + case 0: + if (c == ' ' || c == '\t') + { + } + else + { + if (c == '\"') + { + if (str[i + 1] == '\"') + { + tmp.Append("\""); + i++; + } + else + { + ignore_space = true; + } + } + else + { + tmp.Append(c); + } + } + + mode = 1; + break; + + case 1: + if (ignore_space == false && (c == ' ' || c == '\t')) + { + o.Add(tmp.ToString()); + + tmp = new StringBuilder(); + mode = 0; + } + else + { + if (c == '\"') + { + if (str[i + 1] == '\"') + { + tmp.Append("\""); + i++; + } + else + { + if (ignore_space == false) + { + ignore_space = true; + } + else + { + ignore_space = false; + } + } + } + else + { + tmp.Append(c); + } + } + break; + + } + } + + if (tmp.Length >= 1) + { + o.Add(tmp.ToString()); + } + + List ret = new List(); + foreach (string s in o) + { + ret.Add(s); + } + + return ret.ToArray(); + } + + public static int CompareString(string s1, string s2) + { + try + { + return string.Compare(s1, s2, true); + } + catch + { + return 0; + } + } + public static int CompareStringCaseSensitive(string s1, string s2) + { + try + { + return string.Compare(s1, s2, false); + } + catch + { + return 0; + } + } + + public static string ReplaceStr(string str, string oldKeyword, string newKeyword) + { + return ReplaceStr(str, oldKeyword, newKeyword, false); + } + public static string ReplaceStr(string str, string oldKeyword, string newKeyword, bool caseSensitive) + { + int len_string, len_old, len_new; + if (str == null || oldKeyword == null || newKeyword == null) + { + return null; + } + + if (caseSensitive == false) + { + return str.Replace(oldKeyword, newKeyword); + } + + int i, j, num; + StringBuilder sb = new StringBuilder(); + + len_string = str.Length; + len_old = oldKeyword.Length; + len_new = newKeyword.Length; + + i = j = num = 0; + + while (true) + { + i = SearchStr(str, oldKeyword, i, caseSensitive); + if (i == -1) + { + sb.Append(str.Substring(j, len_string - j)); + break; + } + + num++; + + sb.Append(str.Substring(j, i - j)); + sb.Append(newKeyword); + + i += len_old; + j = i; + } + + return sb.ToString(); + } + + public static int SearchStrMulti(string str, int start, bool caseSensitive, out int foundIndex, out string foundKeyword, params string[] keywords) + { + int i; + foundIndex = -1; + foundKeyword = ""; + int ret = -1; + int min = int.MaxValue; + for (i = 0; i < keywords.Length; i++) + { + string keyword = keywords[i]; + int r = Str.SearchStr(str, keyword, start, caseSensitive); + if (r != -1) + { + if (min > r) + { + min = r; + foundKeyword = str.Substring(r, keyword.Length); + foundIndex = i; + } + } + } + + if (foundIndex != -1) + { + ret = min; + } + + return ret; + } + + public static int SearchStr(string str, string keyword, int start) + { + return SearchStr(str, keyword, start, false); + } + public static int SearchStr(string str, string keyword, int start, bool caseSensitive) + { + if (str == null || keyword == null) + { + return -1; + } + + try + { + return str.IndexOf(keyword, start, (caseSensitive ? StringComparison.InvariantCulture : StringComparison.InvariantCultureIgnoreCase)); + } + catch + { + return -1; + } + } + + public static void Printf(string fmt, params object[] args) + { + if (args.Length == 0) + { + Console.Write(fmt); + } + else + { + Console.Write(FormatC(fmt, args)); + } + } + + public static string FormatC(string fmt) + { + return FormatC(fmt, new object[0]); + } + public static string FormatC(string fmt, params object[] args) + { + int i, len; + StringBuilder tmp; + List o; + int mode = 0; + int pos = 0; + if (fmt == null) + { + return null; + } + + len = fmt.Length; + tmp = new StringBuilder(); + o = new List(); + + mode = 0; + + for (i = 0; i < len; i++) + { + char c = fmt[i]; + + if (mode == 0) + { + switch (c) + { + case '%': + if (fmt[i + 1] == '%') + { + i++; + tmp.Append("%"); + } + else + { + mode = 1; + o.Add(tmp.ToString()); + tmp = new StringBuilder(); + + tmp.Append(c); + } + break; + + default: + tmp.Append(c); + break; + } + } + else + { + switch (c) + { + case 'c': + case 'C': + case 'd': + case 'i': + case 'o': + case 'u': + case 'x': + case 'X': + case 'e': + case 'E': + case 'f': + case 'g': + case 'G': + case 'a': + case 'A': + case 'n': + case 'p': + case 's': + case 'S': + tmp.Append(c); + + PrintFParsedParam pp = new PrintFParsedParam(tmp.ToString()); + string s; + if (pp.Ok) + { + s = pp.GetString(args[pos++]); + } + else + { + s = "(parse_error)"; + } + + o.Add(s); + + tmp = new StringBuilder(); + mode = 0; + break; + + default: + tmp.Append(c); + break; + } + } + } + + if (tmp.Length >= 1) + { + o.Add(tmp.ToString()); + } + + StringBuilder retstr = new StringBuilder(); + foreach (string stmp in o) + { + retstr.Append(stmp); + } + + return retstr.ToString(); + } + + static Encoding asciiEncoding = Encoding.ASCII; + public static Encoding AsciiEncoding + { + get { return asciiEncoding; } + } + + static Encoding shiftJisEncoding = Encoding.GetEncoding("shift_jis"); + public static Encoding ShiftJisEncoding + { + get { return shiftJisEncoding; } + } + + static Encoding iso2022JpEncoding = Encoding.GetEncoding("ISO-2022-JP"); + public static Encoding ISO2022JPEncoding + { + get { return iso2022JpEncoding; } + } + + static Encoding eucJpEncoding = Encoding.GetEncoding("euc-jp"); + public static Encoding EucJpEncoding + { + get { return eucJpEncoding; } + } + + static Encoding iso88591Encoding = Encoding.GetEncoding("iso-8859-1"); + public static Encoding ISO88591Encoding + { + get { return iso88591Encoding; } + } + + static Encoding gb2312Encoding = Encoding.GetEncoding("gb2312"); + public static Encoding GB2312Encoding + { + get { return gb2312Encoding; } + } + + static Encoding utf8Encoding = Encoding.UTF8; + public static Encoding Utf8Encoding + { + get { return utf8Encoding; } + } + + static Encoding uniEncoding = Encoding.Unicode; + public static Encoding UniEncoding + { + get { return uniEncoding; } + } + + public static void NormalizeString(ref string str) + { + if (str == null) + { + str = ""; + } + + str = str.Trim(); + } + + public static string PasswordPrompt() + { + Queue ret = new Queue(); + bool escape = false; + + while (true) + { + ConsoleKeyInfo ki = Console.ReadKey(true); + char c = ki.KeyChar; + + if (c >= 0x20 && c <= 0x7e) + { + ret.Enqueue(c); + Console.Write("*"); + } + else if (c == 0x04 || c == 0x1a || c == 0x0d || c == 0x0a) + { + if (c == 0x04 || c == 0x1a) + { + escape = true; + } + break; + } + else if (c == 0x08) + { + Console.Write(c); + Console.Write(" "); + Console.Write(c); + + if (ret.Count >= 1) + { + ret.Dequeue(); + } + } + } + + Console.WriteLine(); + + if (escape) + { + return null; + } + + return new string(ret.ToArray()); + } + + public static bool CheckStrLen(string str, int maxLen) + { + if (str == null) + { + return false; + } + + if (str.Length > maxLen) + { + return false; + } + + return true; + } + + public static bool IsSafe(string s) + { + foreach (char c in s) + { + if (IsSafe(c) == false) + { + return false; + } + } + + return true; + } + + public static bool IsSafe(char c) + { + char[] b = Path.GetInvalidFileNameChars(); + + foreach (char bb in b) + { + if (bb == c) + { + return false; + } + } + + if (c == '\\' || c == '/') + { + return false; + } + + return true; + } + + public static string MakeSafePathName(string name) + { + char[] a = name.ToCharArray(); + char[] b = Path.GetInvalidFileNameChars(); + StringBuilder sb = new StringBuilder(); + + int i; + for (i = 0; i < a.Length; i++) + { + int j; + bool ok = true; + + for (j = 0; j < b.Length; j++) + { + if (b[j] == a[i]) + { + ok = false; + break; + } + } + + if (a[i] == '\\' || a[i] == '/') + { + ok = true; + a[i] = '\\'; + } + + string s; + + if (ok == false) + { + s = "_" + ((int)a[i]).ToString() + "_"; + } + else + { + s = "" + a[i]; + } + + sb.Append(s); + } + + return sb.ToString(); + } + + public static string MakeSafeFileName(string name) + { + char[] a = name.ToCharArray(); + char[] b = Path.GetInvalidFileNameChars(); + StringBuilder sb = new StringBuilder(); + + int i; + for (i = 0; i < a.Length; i++) + { + int j; + bool ok = true; + + for (j = 0; j < b.Length; j++) + { + if (b[j] == a[i]) + { + ok = false; + break; + } + } + + string s; + + if (ok == false) + { + s = "_" + ((int)a[i]).ToString() + "_"; + } + else + { + s = "" + a[i]; + } + + sb.Append(s); + } + + return sb.ToString(); + } + + public static object CloneObject(object o) + { + return BinaryToObject(ObjectToBinary(o)); + } + + public static object AnyToObject(byte[] data) + { + if (data.Length >= 5) + { + if (Str.StrCmpi(Encoding.ASCII.GetString(data, 0, 5), "= '0' && c <= '9') + { + return true; + } + if (c >= 'A' && c <= 'Z') + { + return true; + } + if (c >= 'a' && c <= 'z') + { + return true; + } + if (c == '!' || c == '\"' || c == '#' || c == '$' || c == '%' || c == '&' || c == '\'' || + c == '(' || c == ')' || c == '-' || c == ' ' || c == '=' || c == '~' || c == '^' || c == '_' || + c == '\\' || c == '|' || c == '{' || c == '}' || c == '[' || c == ']' || c == '@' || + c == '*' || c == '+' || c == '.' || c == '<' || c == '>' || + c == ',' || c == '?' || c == '/' || c == ' ' || c == '^' || c == '\'') + { + return true; + } + return false; + } + public static bool IsAscii(string str) + { + foreach (char c in str) + { + if (IsAscii(c) == false) + { + return false; + } + } + return true; + } + + public static string GetBpsStr(int size) + { + return GetBpsStr(size); + } + public static string GetBpsStr(long size) + { + if (size >= 1000000000000L) + { + return ((double)(size) / 1000.0f / 1000.0f / 1000.0f / 1000.0f).ToString(".00") + " Tbps"; + } + if (size >= 1000 * 1000 * 1000) + { + return ((double)(size) / 1000.0f / 1000.0f / 1000.0f).ToString(".00") + " Gbps"; + } + if (size >= 1000 * 1000) + { + return ((double)(size) / 1000.0f / 1000.0f).ToString(".00") + " Mbps"; + } + if (size >= 1000) + { + return ((double)(size) / 1000.0f).ToString(".00") + " Kbps"; + } + return ((double)(size)).ToString() + " bps"; + } + + public static string GetFileSizeStr(int size) + { + return GetFileSizeStr(size); + } + public static string GetFileSizeStr(long size) + { + if (size >= 1099511627776L) + { + return ((double)(size) / 1024.0f / 1024.0f / 1024.0f / 1024.0f).ToString(".00") + " TB"; + } + if (size >= 1024 * 1024 * 1024) + { + return ((double)(size) / 1024.0f / 1024.0f / 1024.0f).ToString(".00") + " GB"; + } + if (size >= 1024 * 1024) + { + return ((double)(size) / 1024.0f / 1024.0f).ToString(".00") + " MB"; + } + if (size >= 1024) + { + return ((double)(size) / 1024.0f).ToString(".00") + " KB"; + } + return ((double)(size)).ToString() + " Bytes"; + } + + public static string IntToStr(int i) + { + return i.ToString(); + } + public static string IntToStr(uint i) + { + return i.ToString(); + } + + public static string LongToStr(long i) + { + return i.ToString(); + } + public static string LongToStr(ulong i) + { + return i.ToString(); + } + + public static bool StrToBool(string s) + { + if (s == null) + { + return false; + } + + Str.NormalizeString(ref s, true, true, false, false); + + if (s.StartsWith("y", StringComparison.InvariantCultureIgnoreCase)) + { + return true; + } + + if (s.StartsWith("t", StringComparison.InvariantCultureIgnoreCase)) + { + return true; + } + + if (Str.StrToInt(s) != 0) + { + return true; + } + + return false; + } + + public static int StrToInt(string str) + { + try + { + Str.RemoveSpaceChar(ref str); + Str.NormalizeString(ref str, true, true, false, false); + str = str.Replace(",", ""); + return int.Parse(str); + } + catch + { + return 0; + } + } + public static uint StrToUInt(string str) + { + try + { + Str.RemoveSpaceChar(ref str); + Str.NormalizeString(ref str, true, true, false, false); + str = str.Replace(",", ""); + return uint.Parse(str); + } + catch + { + return 0; + } + } + + public static long StrToLong(string str) + { + try + { + Str.RemoveSpaceChar(ref str); + Str.NormalizeString(ref str, true, true, false, false); + str = str.Replace(",", ""); + return long.Parse(str); + } + catch + { + return 0; + } + } + public static ulong StrToULong(string str) + { + try + { + Str.RemoveSpaceChar(ref str); + Str.NormalizeString(ref str, true, true, false, false); + str = str.Replace(",", ""); + return ulong.Parse(str); + } + catch + { + return 0; + } + } + + public static bool IsStrDateTime(string str) + { + try + { + Str.NormalizeString(ref str, true, true, false, false); + StrToDateTime(str); + return true; + } + catch + { + return false; + } + } + public static DateTime StrToDateTime(string str, bool toUtc) + { + return StrToDateTime(str).ToUniversalTime(); + } + public static DateTime StrToDateTime(string str) + { + Str.NormalizeString(ref str, true, true, false, false); + str = str.Trim(); + string[] sps = + { + " ", + "_", + " ", + "\t", + }; + + string[] tokens = str.Split(sps, StringSplitOptions.RemoveEmptyEntries); + + if (tokens.Length != 2) + { + int r1 = str.IndexOf("å¹´", StringComparison.InvariantCultureIgnoreCase); + int r2 = str.IndexOf("月", StringComparison.InvariantCultureIgnoreCase); + int r3 = str.IndexOf("æ—¥", StringComparison.InvariantCultureIgnoreCase); + + if (r1 != -1 && r2 != -1 && r3 != -1) + { + tokens = new string[2]; + + tokens[0] = str.Substring(0, r3 + 1); + tokens[1] = str.Substring(r3 + 1); + } + } + + if (tokens.Length == 2) + { + DateTime dt1 = StrToDate(tokens[0]); + DateTime dt2 = StrToTime(tokens[1]); + + return dt1.Date + dt2.TimeOfDay; + } + else if (tokens.Length == 1) + { + if (tokens[0].Length == 14) + { + // yyyymmddhhmmss + DateTime dt1 = StrToDate(tokens[0].Substring(0, 8)); + DateTime dt2 = StrToTime(tokens[0].Substring(8)); + + return dt1.Date + dt2.TimeOfDay; + } + else if (tokens[0].Length == 12) + { + // yymmddhhmmss + DateTime dt1 = StrToDate(tokens[0].Substring(0, 6)); + DateTime dt2 = StrToTime(tokens[0].Substring(6)); + + return dt1.Date + dt2.TimeOfDay; + } + else + { + DateTime dt1 = StrToDate(tokens[0]); + + return dt1.Date; + } + } + + throw new ArgumentException(); + } + + public static bool IsStrTime(string str) + { + try + { + Str.NormalizeString(ref str, true, true, false, false); + StrToTime(str); + return true; + } + catch + { + return false; + } + } + public static DateTime StrToTime(string str, bool toUtc) + { + return StrToTime(str).ToUniversalTime(); + } + public static DateTime StrToTime(string str) + { + string[] sps = + { + "/", + "-", + ":", + "時", + "分", + "秒", + }; + Str.NormalizeString(ref str, true, true, false, false); + str = str.Trim(); + + string[] tokens; + + tokens = str.Split(sps, StringSplitOptions.RemoveEmptyEntries); + if (tokens.Length == 3) + { + // hh:mm:ss + string hourStr = tokens[0]; + string minuteStr = tokens[1]; + string secondStr = tokens[2]; + int hour = -1; + int minute = -1; + int second = -1; + + if ((hourStr.Length == 1 || hourStr.Length == 2) && IsNumber(hourStr)) + { + hour = StrToInt(hourStr); + } + if ((minuteStr.Length == 1 || minuteStr.Length == 2) && IsNumber(minuteStr)) + { + minute = StrToInt(minuteStr); + } + if ((secondStr.Length == 1 || secondStr.Length == 2) && IsNumber(secondStr)) + { + second = StrToInt(secondStr); + } + + if (hour < 0 || hour >= 25 || minute < 0 || minute >= 60 || second < 0 || second >= 60) + { + throw new ArgumentException(); + } + + return new DateTime(2000, 1, 1, hour, minute, second); + } + else if (tokens.Length == 2) + { + // hh:mm + string hourStr = tokens[0]; + string minuteStr = tokens[1]; + int hour = -1; + int minute = -1; + int second = 0; + + if ((hourStr.Length == 1 || hourStr.Length == 2) && IsNumber(hourStr)) + { + hour = StrToInt(hourStr); + } + if ((minuteStr.Length == 1 || minuteStr.Length == 2) && IsNumber(minuteStr)) + { + minute = StrToInt(minuteStr); + } + + if (hour < 0 || hour >= 25 || minute < 0 || minute >= 60 || second < 0 || second >= 60) + { + throw new ArgumentException(); + } + + return new DateTime(2000, 1, 1, hour, minute, second); + } + else if (tokens.Length == 1) + { + string hourStr = tokens[0]; + int hour = -1; + int minute = 0; + int second = 0; + + if ((hourStr.Length == 1 || hourStr.Length == 2) && IsNumber(hourStr)) + { + // hh + hour = StrToInt(hourStr); + } + else + { + if ((hourStr.Length == 4) && IsNumber(hourStr)) + { + // hhmm + int i = StrToInt(hourStr); + hour = i / 100; + minute = i % 100; + } + else if ((hourStr.Length == 6) && IsNumber(hourStr)) + { + // hhmmss + int i = StrToInt(hourStr); + hour = i / 10000; + minute = ((i % 10000) / 100); + second = i % 100; + } + } + + if (hour < 0 || hour >= 25 || minute < 0 || minute >= 60 || second < 0 || second >= 60) + { + throw new ArgumentException(); + } + + return new DateTime(2000, 1, 1, hour, minute, second); + } + + throw new ArgumentException(); + } + + public static bool IsStrDate(string str) + { + try + { + Str.NormalizeString(ref str, true, true, false, false); + StrToDate(str); + return true; + } + catch + { + return false; + } + } + public static DateTime StrToDate(string str, bool toUtc) + { + return StrToDate(str).ToUniversalTime(); + } + public static DateTime StrToDate(string str) + { + string[] sps = + { + "/", + "/", + "-", + ":", + "å¹´", + "月", + "æ—¥", + }; + str = str.Trim(); + Str.NormalizeString(ref str, true, true, false, false); + + string[] youbi = + { + "月", "ç«", "æ°´", "木", "金", "土", "æ—¥", + }; + + foreach (string ys in youbi) + { + string ys2 = string.Format("({0})", ys); + + str = str.Replace(ys2, ""); + } + + string[] tokens; + + tokens = str.Split(sps, StringSplitOptions.RemoveEmptyEntries); + if (tokens.Length == 3) + { + // yyyy/mm/dd + string yearStr = tokens[0]; + string monthStr = tokens[1]; + string dayStr = tokens[2]; + int year = 0; + int month = 0; + int day = 0; + + if ((yearStr.Length == 1 || yearStr.Length == 2) && IsNumber(yearStr)) + { + year = 2000 + StrToInt(yearStr); + } + else if (yearStr.Length == 4 && IsNumber(yearStr)) + { + year = StrToInt(yearStr); + } + + if ((monthStr.Length == 1 || monthStr.Length == 2) && IsNumber(monthStr)) + { + month = StrToInt(monthStr); + } + if ((dayStr.Length == 1 || dayStr.Length == 2) && IsNumber(dayStr)) + { + day = StrToInt(dayStr); + } + + if (year < 1800 || year >= 2100 || month <= 0 || month >= 13 || day <= 0 || day >= 32) + { + throw new ArgumentException(); + } + + return new DateTime(year, month, day); + } + else if (tokens.Length == 1) + { + if (str.Length == 8) + { + // yyyymmdd + string yearStr = str.Substring(0, 4); + string monthStr = str.Substring(4, 2); + string dayStr = str.Substring(6, 2); + int year = int.Parse(yearStr); + int month = int.Parse(monthStr); + int day = int.Parse(dayStr); + + if (year < 1800 || year >= 2100 || month <= 0 || month >= 13 || day <= 0 || day >= 32) + { + throw new ArgumentException(); + } + + return new DateTime(year, month, day); + } + else if (str.Length == 6) + { + // yymmdd + string yearStr = str.Substring(0, 2); + string monthStr = str.Substring(2, 2); + string dayStr = str.Substring(4, 2); + int year = int.Parse(yearStr) + 2000; + int month = int.Parse(monthStr); + int day = int.Parse(dayStr); + + if (year < 1800 || year >= 2100 || month <= 0 || month >= 13 || day <= 0 || day >= 32) + { + throw new ArgumentException(); + } + + return new DateTime(year, month, day); + } + } + + throw new ArgumentException(); + } + + public static string TimeToStr(DateTime dt) + { + return TimeToStr(dt, false); + } + public static string TimeToStr(DateTime dt, CoreLanguage lang) + { + return TimeToStr(dt, false, lang); + } + public static string TimeToStr(DateTime dt, bool toLocalTime) + { + return TimeToStr(dt, toLocalTime, CoreLanguageClass.CurrentThreadLanguage); + } + public static string TimeToStr(DateTime dt, bool toLocalTime, CoreLanguage lang) + { + string s = DateTimeToStr(dt, toLocalTime, lang); + + string[] tokens = s.Split(' '); + + return tokens[1]; + } + public static string TimeToStrShort(DateTime dt) + { + return TimeToStrShort(dt, false); + } + public static string TimeToStrShort(DateTime dt, bool toLocalTime) + { + string s = DateTimeToStrShort(dt, toLocalTime); + + string[] tokens = s.Split('_'); + + return tokens[1]; + } + + public static string DateToStr(DateTime dt) + { + return DateToStr(dt, false); + } + public static string DateToStr(DateTime dt, CoreLanguage lang) + { + return DateToStr(dt, false, lang); + } + public static string DateToStr(DateTime dt, bool toLocalTime) + { + return DateToStr(dt, toLocalTime, false); + } + public static string DateToStr(DateTime dt, bool toLocalTime, CoreLanguage lang) + { + return DateToStr(dt, toLocalTime, false, lang); + } + public static string DateToStr(DateTime dt, bool toLocalTime, bool noDayOfWeek) + { + return DateToStr(dt, toLocalTime, noDayOfWeek, CoreLanguageClass.CurrentThreadLanguage); + } + public static string DateToStr(DateTime dt, bool toLocalTime, bool noDayOfWeek, CoreLanguage lang) + { + string s = DateTimeToStr(dt, toLocalTime, lang); + + string[] tokens = s.Split(' '); + + string ret = tokens[0]; + + if (noDayOfWeek) + { + string[] tokens2 = s.Split('('); + + ret = tokens2[0]; + } + + return ret; + } + public static string DateToStrShort(DateTime dt) + { + return DateToStrShort(dt, false); + } + public static string DateToStrShort(DateTime dt, bool toLocalTime) + { + string s = DateTimeToStrShort(dt, toLocalTime); + + string[] tokens = s.Split('_'); + + return tokens[0]; + } + + public static string DayOfWeekToStr(CoreLanguage lang, int d) + { + if (lang == CoreLanguage.Japanese) + { + string[] youbi = + { + "æ—¥", "月", "ç«", "æ°´", "木", "金", "土", + }; + + return youbi[d]; + } + else + { + string[] youbi = + { + "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", + }; + + return youbi[d]; + } + } + + public static string DateTimeToStr(DateTime dt) + { + return DateTimeToStr(dt, false); + } + public static string DateTimeToStr(DateTime dt, CoreLanguage lang) + { + return DateTimeToStr(dt, false, lang); + } + public static string DateTimeToStr(DateTime dt, bool toLocalTime) + { + return DateTimeToStr(dt, toLocalTime, CoreLanguageClass.CurrentThreadLanguage); + } + public static string DateTimeToStr(DateTime dt, bool toLocalTime, CoreLanguage lang) + { + if (toLocalTime) + { + dt = dt.ToLocalTime(); + } + + if (lang == CoreLanguage.Japanese) + { + return dt.ToString("yyyyå¹´M月dæ—¥") + "(" + DayOfWeekToStr(lang, (int)dt.DayOfWeek) + ")" + dt.ToString(" H時m分s秒"); + } + else + { + return dt.ToString("yyyy-MM-dd(") + DayOfWeekToStr(lang, (int)dt.DayOfWeek) + dt.ToString(") H:mm:ss"); + } + } + public static string DateTimeToStrShort(DateTime dt) + { + return DateTimeToStrShort(dt, false); + } + public static string DateTimeToStrShort(DateTime dt, bool toLocalTime) + { + if (toLocalTime) + { + dt = dt.ToLocalTime(); + } + + return dt.ToString("yyyyMMdd_HHmmss"); + } + public static string DateTimeToStrShortWithMilliSecs(DateTime dt) + { + return DateTimeToStrShortWithMilliSecs(dt, false); + } + public static string DateTimeToStrShortWithMilliSecs(DateTime dt, bool toLocalTime) + { + if (toLocalTime) + { + dt = dt.ToLocalTime(); + } + + long ticks = dt.Ticks % 10000000; + if (ticks >= 9990000) + { + ticks = 9990000; + } + + string msecStr = ((decimal)ticks / (decimal)10000000).ToString(".000"); + + return dt.ToString("yyyyMMdd_HHmmss") + "." + msecStr.Split('.')[1]; + } + + public static string Base64ToSafe64(string str) + { + return str.Replace('=', '(').Replace('+', ')').Replace('/', '_'); + } + public static string Safe64ToBase64(string str) + { + return str.Replace('(', '=').Replace(')', '+').Replace('_', '/'); + } + + public static string Base64Encode(byte[] data) + { + try + { + return Convert.ToBase64String(data); + } + catch + { + return ""; + } + } + + public static byte[] Base64Decode(string str) + { + try + { + return Convert.FromBase64String(str); + } + catch + { + return new byte[0]; + } + } + + public static byte[] StrToByte(string str) + { + Str.NormalizeString(ref str, true, true, false, false); + return Base64Decode(Safe64ToBase64(str)); + } + + public static string Encode64(string str) + { + return Convert.ToBase64String(Encoding.UTF8.GetBytes(str)).Replace("/", "(").Replace("+", ")"); + } + + public static string Decode64(string str) + { + return Encoding.UTF8.GetString(Convert.FromBase64String(str.Replace(")", "+").Replace("(", "/"))); + } + + + public static bool CheckMailAddress(string str) + { + str = str.Trim(); + if (str.Length == 0) + { + return false; + } + + string[] tokens = str.Split('@'); + + if (tokens.Length != 2) + { + return false; + } + + string a = tokens[0]; + string b = tokens[1]; + + if (a.Length == 0 || b.Length == 0) + { + return false; + } + + if (b.IndexOf(".") == -1) + { + return false; + } + + return IsAscii(str); + } + + public static bool StrCmpi(string s1, string s2) + { + try + { + if (s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase)) + { + return true; + } + + return false; + } + catch + { + return false; + } + } + + public static bool StrCmp(string s1, string s2) + { + try + { + if (s1 == s2) + { + return true; + } + + return false; + } + catch + { + return false; + } + } + public static string ByteToHex(byte[] data) + { + return ByteToHex(data, ""); + } + public static string ByteToHex(byte[] data, string paddingStr) + { + StringBuilder ret = new StringBuilder(); + foreach (byte b in data) + { + string s = b.ToString("X"); + if (s.Length == 1) + { + s = "0" + s; + } + + ret.Append(s); + + if (paddingStr != null) + { + ret.Append(paddingStr); + } + } + + return ret.ToString().Trim(); + } + + public static byte[] HexToByte(string str) + { + try + { + List o = new List(); + string tmp = ""; + int i, len; + + str = str.ToUpper().Trim(); + len = str.Length; + + for (i = 0; i < len; i++) + { + char c = str[i]; + if (('0' <= c && c <= '9') || ('A' <= c && c <= 'F')) + { + tmp += c; + if (tmp.Length == 2) + { + byte b = Convert.ToByte(tmp, 16); + o.Add(b); + tmp = ""; + } + } + else if (c == ' ' || c == ',' || c == '-' || c == ';') + { + } + else + { + break; + } + } + + return o.ToArray(); + } + catch + { + return new byte[0]; + } + } + + public static string[] GetLines(string str) + { + List a = new List(); + StringReader sr = new StringReader(str); + while (true) + { + string s = sr.ReadLine(); + if (s == null) + { + break; + } + a.Add(s); + } + return a.ToArray(); + } + + public static string LinesToStr(string[] lines) + { + StringWriter sw = new StringWriter(); + foreach (string s in lines) + { + sw.WriteLine(s); + } + return sw.ToString(); + } + + public static bool IsEmptyStr(string str) + { + if (str == null || str.Trim().Length == 0) + { + return true; + } + else + { + return false; + } + } + public static bool IsSolidStr(string str) + { + return !IsEmptyStr(str); + } + + public static bool IsSplitChar(char c, string splitStr) + { + if (splitStr == null) + { + splitStr = StrToken.DefaultSplitStr; + } + + foreach (char t in splitStr) + { + string a = "" + t; + string b = "" + c; + if (Str.StrCmpi(a, b)) + { + return true; + } + } + + return false; + } + + public static bool GetKeyAndValue(string str, out string key, out string value) + { + return GetKeyAndValue(str, out key, out value, null); + } + public static bool GetKeyAndValue(string str, out string key, out string value, string splitStr) + { + uint mode = 0; + string keystr = "", valuestr = ""; + if (splitStr == null) + { + splitStr = StrToken.DefaultSplitStr; + } + + foreach (char c in str) + { + switch (mode) + { + case 0: + if (IsSplitChar(c, splitStr) == false) + { + mode = 1; + keystr += c; + } + break; + + case 1: + if (IsSplitChar(c, splitStr) == false) + { + keystr += c; + } + else + { + mode = 2; + } + break; + + case 2: + if (IsSplitChar(c, splitStr) == false) + { + mode = 3; + valuestr += c; + } + break; + + case 3: + valuestr += c; + break; + } + } + + if (mode == 0) + { + value = ""; + key = ""; + return false; + } + else + { + value = valuestr; + key = keystr; + return true; + } + } + + public static int StrCmpRetInt(string s1, string s2) + { + return string.Compare(s1, s2, false); + } + public static int StrCmpiRetInt(string s1, string s2) + { + return string.Compare(s1, s2, true); + } + + public static bool IsStrInList(string str, params string[] args) + { + return IsStrInList(str, true, args); + } + public static bool IsStrInList(string str, bool ignoreCase, params string[] args) + { + foreach (string s in args) + { + if (ignoreCase) + { + if (StrCmpi(str, s)) + { + return true; + } + } + else + { + if (StrCmp(str, s)) + { + return true; + } + } + } + + return false; + } + + public static bool IsDouble(string str) + { + double v; + Str.NormalizeString(ref str, true, true, false, false); + str = str.Replace(",", ""); + return double.TryParse(str, out v); + } + + public static bool IsLong(string str) + { + long v; + Str.RemoveSpaceChar(ref str); + Str.NormalizeString(ref str, true, true, false, false); + str = str.Replace(",", ""); + return long.TryParse(str, out v); + } + + public static bool IsInt(string str) + { + int v; + Str.RemoveSpaceChar(ref str); + Str.NormalizeString(ref str, true, true, false, false); + str = str.Replace(",", ""); + return int.TryParse(str, out v); + } + + public static bool IsNumber(string str) + { + str = str.Trim(); + Str.RemoveSpaceChar(ref str); + Str.NormalizeString(ref str, true, true, false, false); + str = str.Replace(",", ""); + + foreach (char c in str) + { + if (IsNumber(c) == false) + { + return false; + } + } + + return true; + } + public static bool IsNumber(char c) + { + if (c >= '0' && c <= '9') + { + } + else if (c == '-') + { + } + else + { + return false; + } + + return true; + } + + public static bool InStr(string str, string keyword) + { + return InStr(str, keyword, false); + } + public static bool InStr(string str, string keyword, bool caseSensitive) + { + if (str.IndexOf(keyword, (caseSensitive ? StringComparison.InvariantCulture : StringComparison.InvariantCultureIgnoreCase)) == -1) + { + return false; + } + + return true; + } + + public static string MakeCharArray(char c, int len) + { + return new string(c, len); + } + + public static string NormalizeCrlf(string str) + { + return NormalizeCrlf(str, new byte[] { 13, 10 }); + } + public static string NormalizeCrlf(string str, byte[] crlfData) + { + byte[] srcData = Str.Utf8Encoding.GetBytes(str); + byte[] destData = NormalizeCrlf(srcData, crlfData); + return Str.Utf8Encoding.GetString(destData); + } + public static byte[] NormalizeCrlf(byte[] srcData) + { + return NormalizeCrlf(srcData, new byte[] { 13, 10 }); + } + public static byte[] NormalizeCrlf(byte[] srcData, byte[] crlfData) + { + Buf ret = new Buf(); + + int i; + Buf b = new Buf(); + for (i = 0; i < srcData.Length; i++) + { + bool isNewLine = false; + if (srcData[i] == 13) + { + if (i < (srcData.Length - 1) && srcData[i + 1] == 10) + { + i++; + } + isNewLine = true; + } + else if (srcData[i] == 10) + { + isNewLine = true; + } + + if (isNewLine) + { + ret.Write(b.ByteData); + ret.Write(crlfData); + + b.Clear(); + } + else + { + b.WriteByte(srcData[i]); + } + } + ret.Write(b.ByteData); + + return ret.ByteData; + } + + public static string[] UniqueToken(string[] t) + { + Dictionary o = new Dictionary(); + List ret = new List(); + + foreach (string s in t) + { + string key = s.ToUpper(); + + if (o.ContainsKey(key) == false) + { + o.Add(key, new Object()); + + ret.Add(s); + } + } + + return ret.ToArray(); + } + + public static string ToStr3(long v) + { + bool neg = false; + + if (v < 0) + { + neg = true; + v = v * (long)-1; + } + + string tmp, tmp2; + int i; + + tmp = Str.LongToStr(v); + + tmp2 = ""; + for (i = tmp.Length - 1; i >= 0; i--) + { + tmp2 += tmp[i]; + } + + int len = tmp.Length; + + tmp = ""; + for (i = 0; i < len; i++) + { + if (i != 0 && (i % 3) == 0) + { + tmp += ","; + } + + tmp += tmp2[i]; + } + + char[] array = tmp.ToCharArray(); + Array.Reverse(array); + + string str = new string(array); + + if (neg) + { + str = "-" + str; + } + + return str; + } + + public static string[] ParseCmdLine(string str) + { + List o; + int i, len, mode; + string tmp; + bool ignoreSpace = false; + + o = new List(); + mode = 0; + len = str.Length; + + tmp = ""; + + for (i = 0; i < len; i++) + { + char c = str[i]; + + switch (mode) + { + case 0: + if (c == ' ' || c == '\t') + { + } + else + { + if (c == '\"') + { + if ((i != (len - 1)) && str[i + 1] == '\"') + { + tmp += '\"'; + i++; + } + else + { + ignoreSpace = true; + } + } + else + { + tmp += c; + } + + mode = 1; + } + break; + + case 1: + if (ignoreSpace == false && (c == ' ' || c == '\t')) + { + o.Add(tmp); + tmp = ""; + mode = 0; + } + else + { + if (c == '\"') + { + if ((i != (len - 1)) && str[i + 1] == '\"') + { + tmp += '\"'; + i++; + } + else + { + if (ignoreSpace == false) + { + ignoreSpace = true; + } + else + { + ignoreSpace = false; + } + } + } + else + { + tmp += c; + } + } + break; + } + } + + if (tmp.Length != 0) + { + o.Add(tmp); + tmp = ""; + } + + return o.ToArray(); + } + + public static string ObjectToXMLSimple(object o) + { + return ObjectToXMLSimple(o, o.GetType()); + } + public static string ObjectToXMLSimple(object o, Type t) + { + XmlSerializer xs = new XmlSerializer(t); + + MemoryStream ms = new MemoryStream(); + xs.Serialize(ms, o); + + return Str.Utf8Encoding.GetString(ms.ToArray()); + } + + public static object XMLToObjectSimple(string str, Type t) + { + XmlSerializer xs = new XmlSerializer(t); + + MemoryStream ms = new MemoryStream(); + byte[] data = Str.Utf8Encoding.GetBytes(str); + ms.Write(data, 0, data.Length); + ms.Position = 0; + + return xs.Deserialize(ms); + } + + public static bool IsStrOkForXML(string str) + { + try + { + XmlCheckObjectInternal o = new XmlCheckObjectInternal(); + o.Str = str; + + string xmlstr = ObjectToXMLSimple(o); + + XMLToObjectSimple(xmlstr, typeof(XmlCheckObjectInternal)); + + return true; + } + catch + { + return false; + } + } + } + + public class XmlCheckObjectInternal + { + public string Str; + } + + public class StrToken + { + string[] tokens; + + public string[] Tokens + { + get { return tokens; } + } + + public string this[uint index] + { + get { return tokens[index]; } + } + + public uint NumTokens + { + get + { + return (uint)Tokens.Length; + } + } + + const string defaultSplitStr = " ,\t\r\n"; + + public static string DefaultSplitStr + { + get { return defaultSplitStr; } + } + + public StrToken(string[] tokens) + { + List a = new List(); + foreach (string s in tokens) + { + a.Add(s); + } + + this.tokens = a.ToArray(); + } + + public StrToken(string str) + : this(str, null) + { + } + public StrToken(string str, string splitStr) + { + if (splitStr == null) + { + splitStr = defaultSplitStr; + } + int i, len; + len = splitStr.Length; + char[] chars = new char[len]; + for (i = 0; i < len; i++) + { + chars[i] = splitStr[i]; + } + tokens = str.Split(chars, StringSplitOptions.RemoveEmptyEntries); + } + } + + public class StrData + { + string strValue; + + public string StrValue + { + get { return strValue; } + } + + public uint IntValue + { + get + { + return Str.StrToUInt(strValue); + } + } + + public ulong Int64Value + { + get + { + return Str.StrToULong(strValue); + } + } + + public bool BoolValue + { + get + { + string s = strValue.Trim(); + + if (Str.IsEmptyStr(s)) + { + return false; + } + if (s.StartsWith("true", StringComparison.CurrentCultureIgnoreCase)) + { + return true; + } + if ("true".StartsWith(s, StringComparison.CurrentCultureIgnoreCase)) + { + return true; + } + if (s.StartsWith("yes", StringComparison.CurrentCultureIgnoreCase)) + { + return true; + } + if ("yes".StartsWith(s, StringComparison.CurrentCultureIgnoreCase)) + { + return true; + } + + if (Str.StrToUInt(s) != 0) + { + return true; + } + + return false; + } + } + + public StrData(string str) + { + if (str == null) + { + str = ""; + } + strValue = str; + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Tar.cs b/src/BuildUtil/CoreUtil/Tar.cs new file mode 100644 index 00000000..c0dc3696 --- /dev/null +++ b/src/BuildUtil/CoreUtil/Tar.cs @@ -0,0 +1,430 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Runtime.InteropServices; + +namespace CoreUtil +{ + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct TarHeader + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)] + public byte[] Name; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public byte[] Mode; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public byte[] UID; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public byte[] GID; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] + public byte[] Size; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] + public byte[] MTime; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public byte[] CheckSum; + + public byte TypeFlag; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)] + public byte[] LinkName; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] + public byte[] Magic; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] + public byte[] Version; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public byte[] UName; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public byte[] GName; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public byte[] DevMajor; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public byte[] DevMinor; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 155)] + public byte[] Prefix; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] + public byte[] Padding; + + public TarHeader(bool dummy) + { + this.Name = new byte[100]; + this.Mode = new byte[8]; + this.UID = new byte[8]; + this.GID = new byte[8]; + this.Size = new byte[12]; + this.MTime = new byte[12]; + this.CheckSum = new byte[8]; + this.LinkName = new byte[100]; + this.Magic = new byte[6]; + this.Version = new byte[2]; + this.UName = new byte[32]; + this.GName = new byte[32]; + this.DevMajor = new byte[8]; + this.DevMinor = new byte[8]; + this.Prefix = new byte[155]; + this.Padding = new byte[12]; + this.TypeFlag = 0; + + this.Version[0] = 0x20; + this.Version[1] = 0x00; + + byte[] data = Str.ShiftJisEncoding.GetBytes("ustar "); + Util.CopyByte(this.Magic, 0, data, 0, 6); + } + + public void SetName(string name, Encoding encoding) + { + byte[] data = encoding.GetBytes(name); + if (data.Length <= 100) + { + Util.CopyByte(this.Name, 0, data, 0, data.Length); + } + else + { + Util.CopyByte(this.Name, 0, data, 0, 100); + Util.CopyByte(this.Prefix, 0, data, 100, data.Length - 100); + } + } + + public void SetMode(string str) + { + StrToByteArray(this.Mode, str); + } + + public void SetUID(string str) + { + StrToByteArray(this.UID, str); + } + + public void SetGID(string str) + { + StrToByteArray(this.GID, str); + } + + public void SetSize(long size) + { + if (size >= 0x1FFFFFFFF || size < 0) + { + throw new InvalidDataException("size"); + } + StrToByteArray(this.Size, Str.AppendZeroToNumString(Convert.ToString(size, 8), 11)); + } + + public void SetMTime(DateTime dt) + { + uint t = Util.DateTimeToUnixTime(dt.ToUniversalTime()); + + StrToByteArray(this.MTime, Str.AppendZeroToNumString(Convert.ToString(t, 8), 11)); + } + + public void CalcChecksum() + { + TarHeader h2 = this; + Array.Clear(h2.CheckSum, 0, h2.CheckSum.Length); + byte[] data = Util.StructToByte(h2); + SetChecksum(data); + } + + public void SetChecksum(byte[] data) + { + ulong sum = 0; + int i; + for (i = 0; i < data.Length; i++) + { + sum += (ulong)data[i]; + } + + sum += 0x100; + + StrToByteArray(this.CheckSum, Str.AppendZeroToNumString(Convert.ToString((long)sum, 8), 6)); + this.CheckSum[7] = 0x20; + } + + public void SetTypeFlag(int flag) + { + this.TypeFlag = (byte)flag.ToString()[0]; + } + + public void SetUName(string str) + { + StrToByteArray(this.UName, str); + } + + public void SetGName(string str) + { + StrToByteArray(this.GName, str); + } + + public static void StrToByteArray(byte[] dst, string str) + { + Encoding e = Str.ShiftJisEncoding; + + byte[] d = e.GetBytes(str); + + Array.Clear(dst, 0, dst.Length); + Util.CopyByte(dst, 0, d, 0, Math.Min(d.Length, dst.Length - 1)); + } + } + + public static class TarUtil + { + public static TarHeader CreateTarHeader(string name, Encoding encoding, int type, long size, DateTime dt) + { + return CreateTarHeader(name, encoding, type, size, dt, "0000777"); + } + + public static TarHeader CreateTarHeader(string name, Encoding encoding, int type, long size, DateTime dt, string mode) + { + TarHeader h = new TarHeader(false); + + h.SetName(name, encoding); + + h.SetMode(mode); + h.SetMTime(dt); + h.SetName(name, encoding); + h.SetSize(size); + h.SetTypeFlag(type); + h.SetGID("0000000"); + h.SetUID("0000000"); + + h.CalcChecksum(); + + return h; + } + } + + public class TarPacker + { + Fifo fifo; + Dictionary dirList; + Encoding encoding; + + public TarPacker() + : this(Str.ShiftJisEncoding) + { + } + public TarPacker(Encoding encoding) + { + fifo = new Fifo(); + dirList = new Dictionary(new StrEqualityComparer(true)); + this.encoding = encoding; + } + + public void AddDirectory(string name, DateTime dt, string mode) + { + name = name.Replace('\\', '/'); + if (name.EndsWith("/") == false) + { + name = name + "/"; + } + + if (dirList.ContainsKey(name) == false) + { + TarHeader h = TarUtil.CreateTarHeader(name, encoding, 5, 0, dt, mode); + fifo.Write(Util.StructToByte(h)); + + dirList.Add(name, 0); + } + } + + public void AddDirectory(string name, DateTime dt) + { + AddDirectory(name, dt, "0000777"); + } + + long currentFileSize = 0; + long currentPos = 0; + + public void AddFileSimple(string name, byte[] data, int pos, int len, DateTime dt) + { + AddFileSimple(name, data, pos, len, dt, "0000777", "0000777"); + } + + public void AddFileSimple(string name, byte[] data, int pos, int len, DateTime dt, string directory_mode, string mode) + { + AddFileStart(name, len, dt, directory_mode, mode); + AddFileData(data, pos, len); + } + + public void AddFileStart(string name, long size, DateTime dt) + { + AddFileStart(name, size, dt, "0000777", "0000777"); + } + + public void AddFileStart(string name, long size, DateTime dt, string directory_mode, string mode) + { + if (currentFileSize != 0 || currentPos != 0) + { + throw new ApplicationException("last file not completed."); + } + + name = name.Replace('\\', '/'); + if (Str.InStr(name, "/", true)) + { + AddDirectory(Path.GetDirectoryName(name), dt, directory_mode); + } + + TarHeader h = TarUtil.CreateTarHeader(name, encoding, 0, size, dt, mode); + fifo.Write(Util.StructToByte(h)); + + currentFileSize = size; + currentPos = 0; + } + + public void AddFileData(byte[] data, int pos, int len) + { + long totalSize = currentPos + len; + + if (totalSize > currentFileSize) + { + throw new ApplicationException("totalSize > currentFileSize"); + } + + fifo.Write(data, pos, len); + + currentPos += len; + if (currentPos >= currentFileSize) + { + long padding = ((currentFileSize + 511) / 512) * 512 - currentFileSize; + + byte[] pad = new byte[padding]; + Array.Clear(pad, 0, pad.Length); + fifo.Write(pad, 0, pad.Length); + + currentFileSize = 0; + currentPos = 0; + } + } + + public Fifo GeneratedData + { + get + { + return this.fifo; + } + } + + public void Finish() + { + byte[] data = new byte[1024]; + Array.Clear(data, 0, data.Length); + + fifo.Write(data); + } + + public byte[] CompressToGZip() + { + GZipPacker g = new GZipPacker(); + byte[] data = this.fifo.Read(); + + g.Write(data, 0, data.Length, true); + + return g.GeneratedData.Read(); + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Thread.cs b/src/BuildUtil/CoreUtil/Thread.cs new file mode 100644 index 00000000..d59adae6 --- /dev/null +++ b/src/BuildUtil/CoreUtil/Thread.cs @@ -0,0 +1,542 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Diagnostics; +using System.Web.Mail; +using System.Net; +using System.Net.Sockets; +using System.Net.NetworkInformation; +using System.Net.Mail; +using System.Net.Mime; +using CoreUtil; + +#pragma warning disable 0618 + +namespace CoreUtil +{ + class WorkerQueuePrivate + { + object lockObj = new object(); + + List thread_list; + ThreadProc thread_proc; + int num_worker_threads; + Queue taskQueue = new Queue(); + Exception raised_exception = null; + + void worker_thread(object param) + { + while (true) + { + object task = null; + + lock (lockObj) + { + if (taskQueue.Count == 0) + { + return; + } + task = taskQueue.Dequeue(); + } + + try + { + this.thread_proc(task); + } + catch (Exception ex) + { + if (raised_exception == null) + { + raised_exception = ex; + } + + Console.WriteLine(ex.Message); + } + } + } + + public WorkerQueuePrivate(ThreadProc thread_proc, int num_worker_threads, object[] tasks) + { + thread_list = new List(); + int i; + + this.thread_proc = thread_proc; + this.num_worker_threads = num_worker_threads; + + foreach (object task in tasks) + { + taskQueue.Enqueue(task); + } + + raised_exception = null; + + for (i = 0; i < num_worker_threads; i++) + { + ThreadObj t = new ThreadObj(worker_thread); + + thread_list.Add(t); + } + + foreach (ThreadObj t in thread_list) + { + t.WaitForEnd(); + } + + if (raised_exception != null) + { + throw raised_exception; + } + } + } + + public static class Tick64 + { + static object lock_obj = new object(); + static uint last_value = 0; + static bool is_first = true; + static uint num_round = 0; + + public static long Value + { + get + { + unchecked + { + lock (lock_obj) + { + uint current_value = (uint)(System.Environment.TickCount + 3864700935); + + if (is_first) + { + last_value = current_value; + is_first = false; + } + + if (last_value > current_value) + { + num_round++; + } + + last_value = current_value; + + ulong ret = 4294967296UL * (ulong)num_round + current_value; + + return (long)ret; + } + } + } + } + + public static uint ValueUInt32 + { + get + { + unchecked + { + return (uint)((ulong)Value); + } + } + } + } + + public class Event + { + EventWaitHandle h; + public const int Infinite = Timeout.Infinite; + + public Event() + { + init(false); + } + + public Event(bool manualReset) + { + init(manualReset); + } + + void init(bool manualReset) + { + h = new EventWaitHandle(false, (manualReset ? EventResetMode.ManualReset : EventResetMode.AutoReset)); + } + + public void Set() + { + h.Set(); + } + + public bool Wait() + { + return Wait(Infinite); + } + public bool Wait(int millisecs) + { + return h.WaitOne(millisecs, false); + } + + static EventWaitHandle[] toArray(Event[] events) + { + List list = new List(); + + foreach (Event e in events) + { + list.Add(e.h); + } + + return list.ToArray(); + } + + public static bool WaitAll(Event[] events) + { + return WaitAll(events, Infinite); + } + public static bool WaitAll(Event[] events, int millisecs) + { + if (events.Length <= 64) + { + return waitAllInner(events, millisecs); + } + else + { + return waitAllMulti(events, millisecs); + } + } + + static bool waitAllMulti(Event[] events, int millisecs) + { + int numBlocks = (events.Length + 63) / 64; + List[] list = new List[numBlocks]; + int i; + for (i = 0; i < numBlocks; i++) + { + list[i] = new List(); + } + for (i = 0; i < events.Length; i++) + { + list[i / 64].Add(events[i]); + } + + double start = Time.NowDouble; + double giveup = start + (double)millisecs / 1000.0; + foreach (List o in list) + { + double now = Time.NowDouble; + if (now <= giveup || millisecs < 0) + { + int waitmsecs; + if (millisecs >= 0) + { + waitmsecs = (int)((giveup - now) * 1000.0); + } + else + { + waitmsecs = Timeout.Infinite; + } + + bool ret = waitAllInner(o.ToArray(), waitmsecs); + if (ret == false) + { + return false; + } + } + else + { + return false; + } + } + + return true; + } + + static bool waitAllInner(Event[] events, int millisecs) + { + if (events.Length == 1) + { + return events[0].Wait(millisecs); + } + return EventWaitHandle.WaitAll(toArray(events), millisecs, false); + } + + public static bool WaitAny(Event[] events) + { + return WaitAny(events, Infinite); + } + public static bool WaitAny(Event[] events, int millisecs) + { + if (events.Length == 1) + { + return events[0].Wait(millisecs); + } + return ((WaitHandle.WaitTimeout == EventWaitHandle.WaitAny(toArray(events), millisecs, false)) ? false : true); + } + + public IntPtr Handle + { + get + { + return h.Handle; + } + } + } + + public class ThreadData + { + static LocalDataStoreSlot slot = Thread.AllocateDataSlot(); + + public readonly SortedDictionary DataList = new SortedDictionary(); + + public static ThreadData CurrentThreadData + { + get + { + return GetCurrentThreadData(); + } + } + + public static ThreadData GetCurrentThreadData() + { + ThreadData t; + + try + { + t = (ThreadData)Thread.GetData(slot); + } + catch + { + t = null; + } + + if (t == null) + { + t = new ThreadData(); + + Thread.SetData(slot, t); + } + + return t; + } + } + + public delegate void ThreadProc(object userObject); + + public class ThreadObj + { + static int defaultStackSize = 100000; + + static LocalDataStoreSlot currentObjSlot = Thread.AllocateDataSlot(); + + public const int Infinite = Timeout.Infinite; + + ThreadProc proc; + Thread thread; + EventWaitHandle waitInit; + EventWaitHandle waitEnd; + EventWaitHandle waitInitForUser; + public Thread Thread + { + get { return thread; } + } + object userObject; + + public ThreadObj(ThreadProc threadProc) + { + init(threadProc, null, 0); + } + + public ThreadObj(ThreadProc threadProc, int stacksize) + { + init(threadProc, null, stacksize); + } + + public ThreadObj(ThreadProc threadProc, object userObject) + { + init(threadProc, userObject, 0); + } + + public ThreadObj(ThreadProc threadProc, object userObject, int stacksize) + { + init(threadProc, userObject, stacksize); + } + + void init(ThreadProc threadProc, object userObject, int stacksize) + { + if (stacksize == 0) + { + stacksize = defaultStackSize; + } + + this.proc = threadProc; + this.userObject = userObject; + waitInit = new EventWaitHandle(false, EventResetMode.AutoReset); + waitEnd = new EventWaitHandle(false, EventResetMode.ManualReset); + waitInitForUser = new EventWaitHandle(false, EventResetMode.ManualReset); + this.thread = new Thread(new ParameterizedThreadStart(commonThreadProc), stacksize); + this.thread.Start(this); + waitInit.WaitOne(); + } + + public static int DefaultStackSize + { + get + { + return defaultStackSize; + } + + set + { + defaultStackSize = value; + } + } + + void commonThreadProc(object obj) + { + Thread.SetData(currentObjSlot, this); + + waitInit.Set(); + + try + { + this.proc(this.userObject); + } + finally + { + waitEnd.Set(); + } + } + + public static ThreadObj GetCurrentThreadObj() + { + return (ThreadObj)Thread.GetData(currentObjSlot); + } + + public static void NoticeInited() + { + GetCurrentThreadObj().waitInitForUser.Set(); + } + + public void WaitForInit() + { + waitInitForUser.WaitOne(); + } + + public void WaitForEnd(int timeout) + { + waitEnd.WaitOne(timeout, false); + } + public void WaitForEnd() + { + waitEnd.WaitOne(); + } + + public static void Sleep(int millisec) + { + if (millisec == 0x7fffffff) + { + millisec = ThreadObj.Infinite; + } + + Thread.Sleep(millisec); + } + + public static void Yield() + { + Thread.Sleep(0); + } + + public static void ProcessWorkQueue(ThreadProc thread_proc, int num_worker_threads, object[] tasks) + { + WorkerQueuePrivate q = new WorkerQueuePrivate(thread_proc, num_worker_threads, tasks); + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Time.cs b/src/BuildUtil/CoreUtil/Time.cs new file mode 100644 index 00000000..dae7f21e --- /dev/null +++ b/src/BuildUtil/CoreUtil/Time.cs @@ -0,0 +1,174 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Diagnostics; +using System.Web.Mail; + +namespace CoreUtil +{ + class TimeHelper + { + internal Stopwatch Sw; + internal long Freq; + internal DateTime FirstDateTime; + + public TimeHelper() + { + FirstDateTime = DateTime.Now; + Sw = new Stopwatch(); + Sw.Start(); + Freq = Stopwatch.Frequency; + } + + public DateTime GetDateTime() + { + return FirstDateTime + this.Sw.Elapsed; + } + } + + public static class Time + { + static TimeHelper h = new TimeHelper(); + static TimeSpan baseTimeSpan = new TimeSpan(0, 0, 1); + + static public TimeSpan NowTimeSpan + { + get + { + return h.Sw.Elapsed.Add(baseTimeSpan); + } + } + + static public long NowLong100Usecs + { + get + { + return NowTimeSpan.Ticks; + } + } + + static public long NowLongMillisecs + { + get + { + return NowLong100Usecs / 10000; + } + } + + static public long Tick64 + { + get + { + return NowLongMillisecs; + } + } + + static public double NowDouble + { + get + { + return (double)NowLong100Usecs / (double)10000000.0; + } + } + + static public DateTime NowDateTime + { + get + { + return h.GetDateTime(); + } + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Util.cs b/src/BuildUtil/CoreUtil/Util.cs new file mode 100644 index 00000000..1cf91eb7 --- /dev/null +++ b/src/BuildUtil/CoreUtil/Util.cs @@ -0,0 +1,1034 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Web.Mail; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; +using System.ComponentModel; +using System.Runtime.InteropServices; + +namespace CoreUtil +{ + public enum CoreLanguage + { + Japanese = 0, + English = 1, + } + + public class CoreLanguageClass + { + public readonly CoreLanguage Language; + public readonly int Id; + readonly string name; + public string Name + { + get + { + if (name == "ja") + { + if (CoreLanguageList.RegardsJapanAsJP) + { + return "jp"; + } + } + + return name; + } + } + public readonly string TitleInEnglish; + public readonly string TitleInNative; + + public CoreLanguageClass(CoreLanguage lang, int id, string name, + string titleInEnglish, string titleInNative) + { + this.Language = lang; + this.Id = id; + this.name = name; + this.TitleInEnglish = titleInEnglish; + this.TitleInNative = titleInNative; + } + + public static void SetCurrentThreadLanguageClass(CoreLanguageClass lang) + { + ThreadData.CurrentThreadData.DataList["current_thread_language"] = lang; + } + + public static CoreLanguageClass CurrentThreadLanguageClass + { + get + { + return GetCurrentThreadLanguageClass(); + } + + set + { + SetCurrentThreadLanguageClass(value); + } + } + + public static CoreLanguage CurrentThreadLanguage + { + get + { + return CurrentThreadLanguageClass.Language; + } + } + + public static CoreLanguageClass GetCurrentThreadLanguageClass() + { + CoreLanguageClass lang = null; + + try + { + lang = (CoreLanguageClass)ThreadData.CurrentThreadData.DataList["current_thread_language"]; + } + catch + { + } + + if (lang == null) + { + lang = CoreLanguageList.DefaultLanguage; + + SetCurrentThreadLanguageClass(lang); + } + + return lang; + } + } + + public static class CoreLanguageList + { + public static readonly CoreLanguageClass DefaultLanguage; + public static readonly CoreLanguageClass Japanese; + public static readonly CoreLanguageClass English; + public static bool RegardsJapanAsJP = false; + + public static readonly List LanguageList = new List(); + + static CoreLanguageList() + { + CoreLanguageList.LanguageList = new List(); + + CoreLanguageList.Japanese = new CoreLanguageClass(CoreLanguage.Japanese, + 0, "ja", "Japanese", "日本語"); + CoreLanguageList.English = new CoreLanguageClass(CoreLanguage.English, + 1, "en", "English", "English"); + + CoreLanguageList.DefaultLanguage = CoreLanguageList.Japanese; + + CoreLanguageList.LanguageList.Add(CoreLanguageList.Japanese); + CoreLanguageList.LanguageList.Add(CoreLanguageList.English); + } + + public static CoreLanguageClass GetLanguageClassByName(string name) + { + Str.NormalizeStringStandard(ref name); + + foreach (CoreLanguageClass c in LanguageList) + { + if (Str.StrCmpi(c.Name, name)) + { + return c; + } + } + + return DefaultLanguage; + } + + public static CoreLanguageClass GetLangugageClassByEnum(CoreLanguage lang) + { + foreach (CoreLanguageClass c in LanguageList) + { + if (c.Language == lang) + { + return c; + } + } + + return DefaultLanguage; + } + } + + public static class Util + { + public const int SizeOfInt32 = 4; + public const int SizeOfInt16 = 2; + public const int SizeOfInt64 = 8; + public const int SizeOfInt8 = 1; + + public static byte[] ToByte(ushort i) + { + byte[] ret = BitConverter.GetBytes(i); + Endian(ret); + return ret; + } + public static byte[] ToByte(short i) + { + byte[] ret = BitConverter.GetBytes(i); + Endian(ret); + return ret; + } + public static byte[] ToByte(uint i) + { + byte[] ret = BitConverter.GetBytes(i); + Endian(ret); + return ret; + } + public static byte[] ToByte(int i) + { + byte[] ret = BitConverter.GetBytes(i); + Endian(ret); + return ret; + } + public static byte[] ToByte(ulong i) + { + byte[] ret = BitConverter.GetBytes(i); + Endian(ret); + return ret; + } + public static byte[] ToByte(long i) + { + byte[] ret = BitConverter.GetBytes(i); + Endian(ret); + return ret; + } + public static ushort ByteToUShort(byte[] b) + { + byte[] c = CloneByteArray(b); + Endian(c); + return BitConverter.ToUInt16(c, 0); + } + public static short ByteToShort(byte[] b) + { + byte[] c = CloneByteArray(b); + Endian(c); + return BitConverter.ToInt16(c, 0); + } + public static uint ByteToUInt(byte[] b) + { + byte[] c = CloneByteArray(b); + Endian(c); + return BitConverter.ToUInt32(c, 0); + } + public static int ByteToInt(byte[] b) + { + byte[] c = CloneByteArray(b); + Endian(c); + return BitConverter.ToInt32(c, 0); + } + public static ulong ByteToULong(byte[] b) + { + byte[] c = CloneByteArray(b); + Endian(c); + return BitConverter.ToUInt64(c, 0); + } + public static long ByteToLong(byte[] b) + { + byte[] c = CloneByteArray(b); + Endian(c); + return BitConverter.ToInt64(c, 0); + } + + public static byte[] ReadAllFromStream(Stream st) + { + byte[] tmp = new byte[32 * 1024]; + Buf b = new Buf(); + + while (true) + { + int r = st.Read(tmp, 0, tmp.Length); + + if (r == 0) + { + break; + } + + b.Write(tmp, 0, r); + } + + return b.ByteData; + } + + public static List CloneList(List src) + { + List ret = new List(); + foreach (T t in src) + { + ret.Add(t); + } + return ret; + } + + public static byte[] ExtractByteArray(byte[] data, int pos, int len) + { + byte[] ret = new byte[len]; + + Util.CopyByte(ret, 0, data, pos, len); + + return ret; + } + + public static T[] CombineArray(params T[][] arrays) + { + List o = new List(); + foreach (T[] array in arrays) + { + foreach (T element in array) + { + o.Add(element); + } + } + return o.ToArray(); + } + + public static byte[] CombineByteArray(byte[] b1, byte[] b2) + { + Buf b = new Buf(); + + if (b1 != null) + { + b.Write(b1); + } + + if (b2 != null) + { + b.Write(b2); + } + + return b.ByteData; + } + + public static byte[] RemoveStartByteArray(byte[] src, int numBytes) + { + if (numBytes == 0) + { + return src; + } + int num = src.Length - numBytes; + byte[] ret = new byte[num]; + Util.CopyByte(ret, 0, src, numBytes, num); + return ret; + } + + public static DateTime[] GetYearNendoList(DateTime startYear, DateTime endYear) + { + startYear = GetStartOfNendo(startYear); + endYear = GetEndOfNendo(endYear); + + if (startYear > endYear) + { + throw new ArgumentException(); + } + + List ret = new List(); + + DateTime dt; + for (dt = startYear; dt <= endYear; dt = GetStartOfNendo(dt.AddYears(1))) + { + ret.Add(dt); + } + + return ret.ToArray(); + } + + public static DateTime[] GetYearList(DateTime startYear, DateTime endYear) + { + startYear = GetStartOfYear(startYear); + endYear = GetEndOfYear(endYear); + + if (startYear > endYear) + { + throw new ArgumentException(); + } + + List ret = new List(); + + DateTime dt; + for (dt = startYear; dt <= endYear; dt = GetStartOfYear(dt.AddYears(1))) + { + ret.Add(dt); + } + + return ret.ToArray(); + } + + public static DateTime[] GetMonthList(DateTime startMonth, DateTime endMonth) + { + startMonth = GetStartOfMonth(startMonth); + endMonth = GetEndOfMonth(endMonth); + + if (startMonth > endMonth) + { + throw new ArgumentException(); + } + + List ret = new List(); + + DateTime dt; + for (dt = startMonth; dt <= endMonth; dt = GetStartOfMonth(dt.AddMonths(1))) + { + ret.Add(dt); + } + + return ret.ToArray(); + } + + public static int GetAge(DateTime birthDay, DateTime now) + { + birthDay = birthDay.Date; + now = now.Date; + + DateTime dayBirthDay = new DateTime(2000, birthDay.Month, birthDay.Day); + DateTime dayNow = new DateTime(2000, now.Month, now.Day); + + int ret = now.Year - birthDay.Year; + + if (dayBirthDay > dayNow) + { + ret -= 1; + } + + return Math.Max(ret, 0); + } + + public static int GetNumOfDaysInMonth(DateTime dt) + { + DateTime dt1 = new DateTime(dt.Year, dt.Month, dt.Day); + DateTime dt2 = dt1.AddMonths(1); + TimeSpan span = dt2 - dt1; + + return span.Days; + } + + public static int GetNumMonthSpan(DateTime dt1, DateTime dt2, bool kiriage) + { + if (dt1 > dt2) + { + DateTime dtt = dt2; + dt2 = dt1; + dt1 = dtt; + } + + int i; + DateTime dt = dt1; + for (i = 0; ; i++) + { + if (kiriage) + { + if (dt >= dt2) + { + return i; + } + } + else + { + if (dt >= dt2.AddMonths(1).AddTicks(-1)) + { + return i; + } + } + + dt = dt.AddMonths(1); + } + } + + public static DateTime GetStartOfMonth(DateTime dt) + { + return new DateTime(dt.Year, dt.Month, 1); + } + + public static DateTime GetEndOfMonth(DateTime dt) + { + return new DateTime(dt.Year, dt.Month, 1).AddMonths(1).AddSeconds(-1).Date; + } + + public static DateTime GetStartOfYear(DateTime dt) + { + return new DateTime(dt.Year, 1, 1, 0, 0, 0); + } + + public static DateTime GetEndOfYear(DateTime dt) + { + return GetStartOfYear(dt).AddYears(1).AddSeconds(-1).Date; + } + + public static DateTime GetEndOfMonthForSettle(DateTime dt) + { + dt = new DateTime(dt.Year, dt.Month, 1).AddMonths(1).AddSeconds(-1).Date; + if (dt.Month == 4 && (new DateTime(dt.Year, 4, 29).DayOfWeek == DayOfWeek.Sunday)) + { + dt = dt.AddDays(1); + } + while ((dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Saturday) || + (dt.Month == 12 && dt.Day >= 29) || + (dt.Month == 1 && dt.Day <= 3)) + { + dt = dt.AddDays(1); + } + return dt; + } + + public static DateTime GetStartOfDay(DateTime dt) + { + return dt.Date; + } + + public static DateTime GetEndOfDate(DateTime dt) + { + return GetStartOfDay(dt).AddDays(1).AddTicks(-1); + } + + public static int GetNendo(DateTime dt) + { + if (dt.Month >= 4) + { + return dt.Year; + } + else + { + return dt.Year - 1; + } + } + + public static DateTime GetStartOfNendo(DateTime dt) + { + return GetStartOfNendo(GetNendo(dt)); + } + public static DateTime GetStartOfNendo(int nendo) + { + return new DateTime(nendo, 4, 1, 0, 0, 0).Date; + } + + public static DateTime GetEndOfNendo(DateTime dt) + { + return GetEndOfNendo(GetNendo(dt)); + } + public static DateTime GetEndOfNendo(int nendo) + { + return new DateTime(nendo + 1, 3, 31, 0, 0, 0).Date; + } + + public static void Endian(byte[] b) + { + if (Env.IsLittleEndian) + { + Array.Reverse(b); + } + } + public static byte[] EndianRetByte(byte[] b) + { + b = Util.CloneByteArray(b); + + Endian(b); + + return b; + } + public static UInt16 Endian(UInt16 v) + { + return Util.ByteToUShort(Util.EndianRetByte(Util.ToByte(v))); + } + public static UInt32 Endian(UInt32 v) + { + return Util.ByteToUInt(Util.EndianRetByte(Util.ToByte(v))); + } + public static UInt64 Endian(UInt64 v) + { + return Util.ByteToULong(Util.EndianRetByte(Util.ToByte(v))); + } + + public static string SafeDomainStr(string str) + { + string ret = str.Replace("(", "").Replace(")", "").Replace(" ", "").Replace("-", "").Replace("#", "") + .Replace("%", "").Replace("%", "").Replace("&", "").Replace(".", ""); + if (ret == "") + { + ret = "host"; + } + + return ret; + } + + public static byte[] CopyByte(byte[] src) + { + return (byte[])src.Clone(); + } + public static byte[] CopyByte(byte[] src, int srcOffset) + { + return CopyByte(src, srcOffset, src.Length - srcOffset); + } + public static byte[] CopyByte(byte[] src, int srcOffset, int size) + { + byte[] ret = new byte[size]; + CopyByte(ret, 0, src, srcOffset, size); + return ret; + } + public static void CopyByte(byte[] dst, byte[] src, int srcOffset, int size) + { + CopyByte(dst, 0, src, srcOffset, size); + } + public static void CopyByte(byte[] dst, int dstOffset, byte[] src) + { + CopyByte(dst, dstOffset, src, 0, src.Length); + } + public static void CopyByte(byte[] dst, int dstOffset, byte[] src, int srcOffset, int size) + { + Array.Copy(src, srcOffset, dst, dstOffset, size); + } + + public static bool IsZero(byte[] data) + { + return IsZero(data, 0, data.Length); + } + public static bool IsZero(byte[] data, int offset, int size) + { + int i; + for (i = offset; i < offset + size; i++) + { + if (data[i] != 0) + { + return false; + } + } + return true; + } + + public static bool CompareByte(byte[] b1, byte[] b2) + { + if (b1.Length != b2.Length) + { + return false; + } + int i, len; + len = b1.Length; + for (i = 0; i < len; i++) + { + if (b1[i] != b2[i]) + { + return false; + } + } + return true; + } + + public static int CompareByteRetInt(byte[] b1, byte[] b2) + { + int i; + for (i = 0; ; i++) + { + int a1 = -1, a2 = -1; + if (b1.Length < i) + { + a1 = (int)b1[i]; + } + if (b2.Length < i) + { + a2 = (int)b2[i]; + } + + if (a1 > a2) + { + return 1; + } + else if (a1 < a2) + { + return -1; + } + if (a1 == -1 && a2 == -1) + { + return 0; + } + } + } + + public static byte[] CloneByteArray(byte[] src) + { + byte[] ret = new byte[src.Length]; + + Util.CopyByte(ret, src, 0, src.Length); + + return ret; + } + + public static DateTime UnixTimeToDateTime(uint t) + { + return new DateTime(1970, 1, 1).AddSeconds(t); + } + + public static uint DateTimeToUnixTime(DateTime dt) + { + TimeSpan ts = dt - new DateTime(1970, 1, 1); + if (ts.Ticks < 0) + { + throw new InvalidDataException("dt"); + } + + return (uint)ts.TotalSeconds; + } + + public static DateTime ConvertDateTime(ulong time64) + { + if (time64 == 0) + { + return new DateTime(0); + } + return new DateTime(((long)time64 + 62135629200000) * 10000); + } + + public static ulong ConvertDateTime(DateTime dt) + { + if (dt.Ticks == 0) + { + return 0; + } + return (ulong)dt.Ticks / 10000 - 62135629200000; + } + + public static TimeSpan ConvertTimeSpan(ulong tick) + { + return new TimeSpan((long)tick * 10000); + } + + public static ulong ConvertTimeSpan(TimeSpan span) + { + return (ulong)span.Ticks / 10000; + } + + public static ushort DateTimeToDosDate(DateTime dt) + { + return (ushort)( + ((uint)(dt.Year - 1980) << 9) | + ((uint)dt.Month << 5) | + (uint)dt.Day); + } + + public static ushort DateTimeToDosTime(DateTime dt) + { + return (ushort)( + ((uint)dt.Hour << 11) | + ((uint)dt.Minute << 5) | + ((uint)dt.Second >> 1)); + } + + public static bool IsNullOrEmpty(object o) + { + if (o == null) + { + return true; + } + + if (o is string) + { + string s = (string)o; + + return Str.IsEmptyStr(s); + } + + if (o is Array) + { + Array a = (Array)o; + if (a.Length == 0) + { + return true; + } + } + + return false; + } + + public static byte[] GetXmlSchemaFromType(Type type) + { + XmlSchemas sms = new XmlSchemas(); + XmlSchemaExporter ex = new XmlSchemaExporter(sms); + XmlReflectionImporter im = new XmlReflectionImporter(); + XmlTypeMapping map = im.ImportTypeMapping(type); + ex.ExportTypeMapping(map); + sms.Compile(null, false); + + MemoryStream ms = new MemoryStream(); + StreamWriter sw = new StreamWriter(ms); + foreach (System.Xml.Schema.XmlSchema sm in sms) + { + sm.Write(sw); + } + sw.Close(); + ms.Flush(); + + byte[] data = ms.ToArray(); + return data; + } + public static string GetXmlSchemaFromTypeString(Type type) + { + byte[] data = GetXmlSchemaFromType(type); + + return Str.Utf8Encoding.GetString(data); + } + + public static string ObjectToXmlString(object o) + { + byte[] data = ObjectToXml(o); + + return Str.Utf8Encoding.GetString(data); + } + public static byte[] ObjectToXml(object o) + { + if (o == null) + { + return null; + } + Type t = o.GetType(); + + return ObjectToXml(o, t); + } + public static string ObjectToXmlString(object o, Type t) + { + byte[] data = ObjectToXml(o, t); + + return Str.Utf8Encoding.GetString(data); + } + public static byte[] ObjectToXml(object o, Type t) + { + if (o == null) + { + return null; + } + + MemoryStream ms = new MemoryStream(); + XmlSerializer x = new XmlSerializer(t); + + x.Serialize(ms, o); + + return ms.ToArray(); + } + + public static object XmlToObject(string str, Type t) + { + if (Str.IsEmptyStr(str)) + { + return null; + } + + byte[] data = Str.Utf8Encoding.GetBytes(str); + + return XmlToObject(data, t); + } + public static object XmlToObject(byte[] data, Type t) + { + if (data == null || data.Length == 0) + { + return null; + } + + MemoryStream ms = new MemoryStream(); + ms.Write(data, 0, data.Length); + ms.Position = 0; + + XmlSerializer x = new XmlSerializer(t); + + return x.Deserialize(ms); + } + + public static void NoOP(object o) + { + } + public static void NoOP() + { + } + + public static bool False + { + get + { + return false; + } + } + + public static bool True + { + get + { + return true; + } + } + + public static int Zero + { + get + { + return 0; + } + } + + public static object ByteToStruct(byte[] src, Type type) + { + int size = src.Length; + if (size != SizeOfStruct(type)) + { + throw new SystemException("size error"); + } + + IntPtr p = Marshal.AllocHGlobal(size); + + try + { + Marshal.Copy(src, 0, p, size); + + return Marshal.PtrToStructure(p, type); + } + finally + { + Marshal.FreeHGlobal(p); + } + } + + public static byte[] StructToByte(object obj) + { + int size = SizeOfStruct(obj); + IntPtr p = Marshal.AllocHGlobal(size); + try + { + Marshal.StructureToPtr(obj, p, false); + + byte[] ret = new byte[size]; + + Marshal.Copy(p, ret, 0, size); + + return ret; + } + finally + { + Marshal.FreeHGlobal(p); + } + } + + public static int SizeOfStruct(object obj) + { + return Marshal.SizeOf(obj); + } + public static int SizeOfStruct(Type type) + { + return Marshal.SizeOf(type); + } + + public static XmlAndXsd GenerateXmlAndXsd(object obj) + { + XmlAndXsd ret = new XmlAndXsd(); + Type type = obj.GetType(); + + ret.XsdFileName = Str.MakeSafeFileName(type.Name + ".xsd"); + ret.XsdData = GetXmlSchemaFromType(type); + + ret.XmlFileName = Str.MakeSafeFileName(type.Name + ".xml"); + string str = Util.ObjectToXmlString(obj); + str = str.Replace( + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xsi:noNamespaceSchemaLocation=\"" + + ret.XsdFileName + + "\""); + ret.XmlData = Str.Utf8Encoding.GetBytes(str); + + return ret; + } + } + + public class XmlAndXsd + { + public byte[] XmlData; + public byte[] XsdData; + public string XmlFileName; + public string XsdFileName; + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/Win32.cs b/src/BuildUtil/CoreUtil/Win32.cs new file mode 100644 index 00000000..06c42b1a --- /dev/null +++ b/src/BuildUtil/CoreUtil/Win32.cs @@ -0,0 +1,303 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Web.Mail; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Xml.Serialization; +using System.DirectoryServices; +using CoreUtil; +using CoreUtil.Internal; + +namespace CoreUtil +{ + public static class Win32 + { + static Win32() + { + } + + public static void CreateUser(string machineName, string userName, string password, string description) + { + Str.NormalizeString(ref userName); + Str.NormalizeString(ref password); + Str.NormalizeString(ref description); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + using (DirectoryEntry newUser = sam.Children.Add(userName, "user")) + { + newUser.Invoke("SetPassword", new object[] { password }); + newUser.Invoke("Put", new object[] { "Description", description }); + newUser.CommitChanges(); + Console.WriteLine(newUser.Path); + } + } + + try + { + AddUserToGroup(machineName, userName, "Users"); + } + catch + { + } + } + + public static void ChangeUserPassword(string machineName, string userName, string oldPassword, string newPassword) + { + Str.NormalizeString(ref userName); + Str.NormalizeString(ref oldPassword); + Str.NormalizeString(ref newPassword); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + using (DirectoryEntry user = sam.Children.Find(userName, "user")) + { + user.Invoke("ChangePassword", oldPassword, newPassword); + } + } + } + + public static void SetUserPassword(string machineName, string userName, string password) + { + Str.NormalizeString(ref userName); + Str.NormalizeString(ref password); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + using (DirectoryEntry user = sam.Children.Find(userName, "user")) + { + user.Invoke("SetPassword", password); + } + } + } + + public static string[] GetMembersOfGroup(string machineName, string groupName) + { + List ret = new List(); + + Str.NormalizeString(ref groupName); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + using (DirectoryEntry g = sam.Children.Find(groupName, "group")) + { + object members = g.Invoke("Members", null); + + foreach (object member in (IEnumerable)members) + { + using (DirectoryEntry e = new DirectoryEntry(member)) + { + ret.Add(e.Name); + } + } + + return ret.ToArray(); + } + } + } + + public static bool IsUserMemberOfGroup(string machineName, string userName, string groupName) + { + Str.NormalizeString(ref userName); + Str.NormalizeString(ref groupName); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + using (DirectoryEntry g = sam.Children.Find(groupName, "group")) + { + using (DirectoryEntry u = sam.Children.Find(userName, "user")) + { + return (bool)g.Invoke("IsMember", u.Path); + } + } + } + } + + public static void DeleteUserFromGroup(string machineName, string userName, string groupName) + { + Str.NormalizeString(ref userName); + Str.NormalizeString(ref groupName); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + using (DirectoryEntry g = sam.Children.Find(groupName, "group")) + { + using (DirectoryEntry u = sam.Children.Find(userName, "user")) + { + g.Invoke("Remove", u.Path); + } + } + } + } + + public static void AddUserToGroup(string machineName, string userName, string groupName) + { + Str.NormalizeString(ref userName); + Str.NormalizeString(ref groupName); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + using (DirectoryEntry g = sam.Children.Find(groupName, "group")) + { + using (DirectoryEntry u = sam.Children.Find(userName, "user")) + { + g.Invoke("Add", u.Path); + } + } + } + } + + public static void DeleteUser(string machineName, string userName) + { + Str.NormalizeString(ref userName); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + using (DirectoryEntry u = sam.Children.Find(userName, "user")) + { + sam.Children.Remove(u); + } + } + } + + public static bool IsUserExists(string machineName, string userName) + { + Str.NormalizeString(ref userName); + + using (DirectoryEntry sam = OpenSam(machineName)) + { + try + { + using (DirectoryEntry user = sam.Children.Find(userName, "user")) + { + if (user == null) + { + return false; + } + + return true; + } + } + catch (COMException ce) + { + if ((uint)ce.ErrorCode == 0x800708AD) + { + return false; + } + else + { + throw; + } + } + } + } + + public static DirectoryEntry OpenSam() + { + return OpenSam(null); + } + public static DirectoryEntry OpenSam(string machineName) + { + if (Str.IsEmptyStr(machineName)) + { + machineName = Env.MachineName; + } + + return new DirectoryEntry(string.Format("WinNT://{0},computer", + machineName)); + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/CoreUtil/ZLib.cs b/src/BuildUtil/CoreUtil/ZLib.cs new file mode 100644 index 00000000..2612eb60 --- /dev/null +++ b/src/BuildUtil/CoreUtil/ZLib.cs @@ -0,0 +1,5609 @@ +// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +using System; + +namespace CoreUtil.Internal +{ + + sealed class Adler32 + { + + // largest prime smaller than 65536 + private const int BASE = 65521; + // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 + private const int NMAX = 5552; + + internal long adler32(long adler, byte[] buf, int index, int len) + { + if (buf == null) + { + return 1L; + } + + long s1 = adler & 0xffff; + long s2 = (adler >> 16) & 0xffff; + int k; + + while (len > 0) + { + k = len < NMAX?len:NMAX; + len -= k; + while (k >= 16) + { + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + s1 += (buf[index++] & 0xff); s2 += s1; + k -= 16; + } + if (k != 0) + { + do + { + s1 += (buf[index++] & 0xff); s2 += s1; + } + while (--k != 0); + } + s1 %= BASE; + s2 %= BASE; + } + return (s2 << 16) | s1; + } + + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + internal sealed class Deflate + { + + private const int MAX_MEM_LEVEL = 9; + + private const int Z_DEFAULT_COMPRESSION = - 1; + + private const int MAX_WBITS = 15; // 32K LZ77 window + private const int DEF_MEM_LEVEL = 8; + + internal class Config + { + internal int good_length; // reduce lazy search above this match length + internal int max_lazy; // do not perform lazy search above this match length + internal int nice_length; // quit search above this match length + internal int max_chain; + internal int func; + internal Config(int good_length, int max_lazy, int nice_length, int max_chain, int func) + { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; + } + } + + private const int STORED = 0; + private const int FAST = 1; + private const int SLOW = 2; + private static Config[] config_table; + + private static readonly System.String[] z_errmsg = new System.String[]{"need dictionary", "stream end", "", "file error", "stream error", "data error", "insufficient memory", "buffer error", "incompatible version", ""}; + + // block not completed, need more input or more output + private const int NeedMore = 0; + + // block flush performed + private const int BlockDone = 1; + + // finish started, need only more output at next deflate + private const int FinishStarted = 2; + + // finish done, accept no more input or output + private const int FinishDone = 3; + + // preset dictionary flag in zlib header + private const int PRESET_DICT = 0x20; + + private const int Z_FILTERED = 1; + private const int Z_HUFFMAN_ONLY = 2; + private const int Z_DEFAULT_STRATEGY = 0; + + private const int Z_NO_FLUSH = 0; + private const int Z_PARTIAL_FLUSH = 1; + private const int Z_SYNC_FLUSH = 2; + private const int Z_FULL_FLUSH = 3; + private const int Z_FINISH = 4; + + private const int Z_OK = 0; + private const int Z_STREAM_END = 1; + private const int Z_NEED_DICT = 2; + private const int Z_ERRNO = - 1; + private const int Z_STREAM_ERROR = - 2; + private const int Z_DATA_ERROR = - 3; + private const int Z_MEM_ERROR = - 4; + private const int Z_BUF_ERROR = - 5; + private const int Z_VERSION_ERROR = - 6; + + private const int INIT_STATE = 42; + private const int BUSY_STATE = 113; + private const int FINISH_STATE = 666; + + // The deflate compression method + private const int Z_DEFLATED = 8; + + private const int STORED_BLOCK = 0; + private const int STATIC_TREES = 1; + private const int DYN_TREES = 2; + + // The three kinds of block type + private const int Z_BINARY = 0; + private const int Z_ASCII = 1; + private const int Z_UNKNOWN = 2; + + private const int Buf_size = 8 * 2; + + // repeat previous bit length 3-6 times (2 bits of repeat count) + private const int REP_3_6 = 16; + + // repeat a zero length 3-10 times (3 bits of repeat count) + private const int REPZ_3_10 = 17; + + // repeat a zero length 11-138 times (7 bits of repeat count) + private const int REPZ_11_138 = 18; + + private const int MIN_MATCH = 3; + private const int MAX_MATCH = 258; + private static readonly int MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + + private const int MAX_BITS = 15; + private const int D_CODES = 30; + private const int BL_CODES = 19; + private const int LENGTH_CODES = 29; + private const int LITERALS = 256; + private static readonly int L_CODES = (LITERALS + 1 + LENGTH_CODES); + private static readonly int HEAP_SIZE = (2 * L_CODES + 1); + + private const int END_BLOCK = 256; + + internal ZStream strm; // pointer back to this zlib stream + internal int status; // as the name implies + internal byte[] pending_buf; // output still pending + internal int pending_buf_size; // size of pending_buf + internal int pending_out; // next pending byte to output to the stream + internal int pending; // nb of bytes in the pending buffer + internal int noheader; // suppress zlib header and adler32 + internal byte data_type; // UNKNOWN, BINARY or ASCII + internal byte method; // STORED (for zip only) or DEFLATED + internal int last_flush; // value of flush param for previous deflate call + + internal int w_size; // LZ77 window size (32K by default) + internal int w_bits; // log2(w_size) (8..16) + internal int w_mask; // w_size - 1 + + internal byte[] window; + // Sliding window. Input bytes are read into the second half of the window, + // and move to the first half later to keep a dictionary of at least wSize + // bytes. With this organization, matches are limited to a distance of + // wSize-MAX_MATCH bytes, but this ensures that IO is always + // performed with a length multiple of the block size. Also, it limits + // the window size to 64K, which is quite useful on MSDOS. + // To do: use the user input buffer as sliding window. + + internal int window_size; + // Actual size of window: 2*wSize, except when the user input buffer + // is directly used as sliding window. + + internal short[] prev; + // Link to older string with same hash index. To limit the size of this + // array to 64K, this link is maintained only for the last 32K strings. + // An index in this array is thus a window index modulo 32K. + + internal short[] head; // Heads of the hash chains or NIL. + + internal int ins_h; // hash index of string to be inserted + internal int hash_size; // number of elements in hash table + internal int hash_bits; // log2(hash_size) + internal int hash_mask; // hash_size-1 + + // Number of bits by which ins_h must be shifted at each input + // step. It must be such that after MIN_MATCH steps, the oldest + // byte no longer takes part in the hash key, that is: + // hash_shift * MIN_MATCH >= hash_bits + internal int hash_shift; + + // Window position at the beginning of the current output block. Gets + // negative when the window is moved backwards. + + internal int block_start; + + internal int match_length; // length of best match + internal int prev_match; // previous match + internal int match_available; // set if previous match exists + internal int strstart; // start of string to insert + internal int match_start; // start of matching string + internal int lookahead; // number of valid bytes ahead in window + + // Length of the best match at previous step. Matches not greater than this + // are discarded. This is used in the lazy match evaluation. + internal int prev_length; + + // To speed up deflation, hash chains are never searched beyond this + // length. A higher limit improves compression ratio but degrades the speed. + internal int max_chain_length; + + // Attempt to find a better match only when the current match is strictly + // smaller than this value. This mechanism is used only for compression + // levels >= 4. + internal int max_lazy_match; + + // Insert new strings in the hash table only if the match length is not + // greater than this length. This saves time but degrades compression. + // max_insert_length is used only for compression levels <= 3. + + internal int level; // compression level (1..9) + internal int strategy; // favor or force Huffman coding + + // Use a faster search when the previous match is longer than this + internal int good_match; + + // Stop searching when current match exceeds this + internal int nice_match; + + internal short[] dyn_ltree; // literal and length tree + internal short[] dyn_dtree; // distance tree + internal short[] bl_tree; // Huffman tree for bit lengths + + internal Tree l_desc = new Tree(); // desc for literal tree + internal Tree d_desc = new Tree(); // desc for distance tree + internal Tree bl_desc = new Tree(); // desc for bit length tree + + // number of codes at each bit length for an optimal tree + internal short[] bl_count = new short[MAX_BITS + 1]; + + // heap used to build the Huffman trees + internal int[] heap = new int[2 * L_CODES + 1]; + + internal int heap_len; // number of elements in the heap + internal int heap_max; // element of largest frequency + // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + // The same heap array is used to build all trees. + + // Depth of each subtree used as tie breaker for trees of equal frequency + internal byte[] depth = new byte[2 * L_CODES + 1]; + + internal int l_buf; // index for literals or lengths */ + + // Size of match buffer for literals/lengths. There are 4 reasons for + // limiting lit_bufsize to 64K: + // - frequencies can be kept in 16 bit counters + // - if compression is not successful for the first block, all input + // data is still in the window so we can still emit a stored block even + // when input comes from standard input. (This can also be done for + // all blocks if lit_bufsize is not greater than 32K.) + // - if compression is not successful for a file smaller than 64K, we can + // even emit a stored file instead of a stored block (saving 5 bytes). + // This is applicable only for zip (not gzip or zlib). + // - creating new Huffman trees less frequently may not provide fast + // adaptation to changes in the input data statistics. (Take for + // example a binary file with poorly compressible code followed by + // a highly compressible string table.) Smaller buffer sizes give + // fast adaptation but have of course the overhead of transmitting + // trees more frequently. + // - I can't count above 4 + internal int lit_bufsize; + + internal int last_lit; // running index in l_buf + + // Buffer for distances. To simplify the code, d_buf and l_buf have + // the same number of elements. To use different lengths, an extra flag + // array would be necessary. + + internal int d_buf; // index of pendig_buf + + internal int opt_len; // bit length of current block with optimal trees + internal int static_len; // bit length of current block with static trees + internal int matches; // number of string matches in current block + internal int last_eob_len; // bit length of EOB code for last block + + // Output buffer. bits are inserted starting at the bottom (least + // significant bits). + internal short bi_buf; + + // Number of valid bits in bi_buf. All bits above the last valid bit + // are always zero. + internal int bi_valid; + + internal Deflate() + { + dyn_ltree = new short[HEAP_SIZE * 2]; + dyn_dtree = new short[(2 * D_CODES + 1) * 2]; // distance tree + bl_tree = new short[(2 * BL_CODES + 1) * 2]; // Huffman tree for bit lengths + } + + internal void lm_init() + { + window_size = 2 * w_size; + + head[hash_size - 1] = 0; + for (int i = 0; i < hash_size - 1; i++) + { + head[i] = 0; + } + + // Set the default configuration parameters: + max_lazy_match = Deflate.config_table[level].max_lazy; + good_match = Deflate.config_table[level].good_length; + nice_match = Deflate.config_table[level].nice_length; + max_chain_length = Deflate.config_table[level].max_chain; + + strstart = 0; + block_start = 0; + lookahead = 0; + match_length = prev_length = MIN_MATCH - 1; + match_available = 0; + ins_h = 0; + } + + // Initialize the tree data structures for a new zlib stream. + internal void tr_init() + { + + l_desc.dyn_tree = dyn_ltree; + l_desc.stat_desc = StaticTree.static_l_desc; + + d_desc.dyn_tree = dyn_dtree; + d_desc.stat_desc = StaticTree.static_d_desc; + + bl_desc.dyn_tree = bl_tree; + bl_desc.stat_desc = StaticTree.static_bl_desc; + + bi_buf = 0; + bi_valid = 0; + last_eob_len = 8; // enough lookahead for inflate + + // Initialize the first block of the first file: + init_block(); + } + + internal void init_block() + { + // Initialize the trees. + for (int i = 0; i < L_CODES; i++) + dyn_ltree[i * 2] = 0; + for (int i = 0; i < D_CODES; i++) + dyn_dtree[i * 2] = 0; + for (int i = 0; i < BL_CODES; i++) + bl_tree[i * 2] = 0; + + dyn_ltree[END_BLOCK * 2] = 1; + opt_len = static_len = 0; + last_lit = matches = 0; + } + + // Restore the heap property by moving down the tree starting at node k, + // exchanging a node with the smallest of its two sons if necessary, stopping + // when the heap property is re-established (each father smaller than its + // two sons). + internal void pqdownheap(short[] tree, int k) + { + int v = heap[k]; + int j = k << 1; // left son of k + while (j <= heap_len) + { + // Set j to the smallest of the two sons: + if (j < heap_len && smaller(tree, heap[j + 1], heap[j], depth)) + { + j++; + } + // Exit if v is smaller than both sons + if (smaller(tree, v, heap[j], depth)) + break; + + // Exchange v with the smallest son + heap[k] = heap[j]; k = j; + // And continue down the tree, setting j to the left son of k + j <<= 1; + } + heap[k] = v; + } + + internal static bool smaller(short[] tree, int n, int m, byte[] depth) + { + return (tree[n * 2] < tree[m * 2] || (tree[n * 2] == tree[m * 2] && depth[n] <= depth[m])); + } + + // Scan a literal or distance tree to determine the frequencies of the codes + // in the bit length tree. + internal void scan_tree(short[] tree, int max_code) + { + int n; // iterates over all tree elements + int prevlen = - 1; // last emitted length + int curlen; // length of current code + int nextlen = tree[0 * 2 + 1]; // length of next code + int count = 0; // repeat count of the current code + int max_count = 7; // max repeat count + int min_count = 4; // min repeat count + + if (nextlen == 0) + { + max_count = 138; min_count = 3; + } + tree[(max_code + 1) * 2 + 1] = (short) SupportClass.Identity(0xffff); // guard + + for (n = 0; n <= max_code; n++) + { + curlen = nextlen; nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen == nextlen) + { + continue; + } + else if (count < min_count) + { + bl_tree[curlen * 2] = (short) (bl_tree[curlen * 2] + count); + } + else if (curlen != 0) + { + if (curlen != prevlen) + bl_tree[curlen * 2]++; + bl_tree[REP_3_6 * 2]++; + } + else if (count <= 10) + { + bl_tree[REPZ_3_10 * 2]++; + } + else + { + bl_tree[REPZ_11_138 * 2]++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) + { + max_count = 138; min_count = 3; + } + else if (curlen == nextlen) + { + max_count = 6; min_count = 3; + } + else + { + max_count = 7; min_count = 4; + } + } + } + + // Construct the Huffman tree for the bit lengths and return the index in + // bl_order of the last bit length code to send. + internal int build_bl_tree() + { + int max_blindex; // index of last bit length code of non zero freq + + // Determine the bit length frequencies for literal and distance trees + scan_tree(dyn_ltree, l_desc.max_code); + scan_tree(dyn_dtree, d_desc.max_code); + + // Build the bit length tree: + bl_desc.build_tree(this); + // opt_len now includes the length of the tree representations, except + // the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + + // Determine the number of bit length codes to send. The pkzip format + // requires that at least 4 bit length codes be sent. (appnote.txt says + // 3 but the actual value used is 4.) + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) + { + if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] != 0) + break; + } + // Update opt_len to include the bit length tree and counts + opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + + return max_blindex; + } + + + // Send the header for a block using dynamic Huffman trees: the counts, the + // lengths of the bit length codes, the literal tree and the distance tree. + // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + internal void send_all_trees(int lcodes, int dcodes, int blcodes) + { + int rank; // index in bl_order + + send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt + send_bits(dcodes - 1, 5); + send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt + for (rank = 0; rank < blcodes; rank++) + { + send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3); + } + send_tree(dyn_ltree, lcodes - 1); // literal tree + send_tree(dyn_dtree, dcodes - 1); // distance tree + } + + // Send a literal or distance tree in compressed form, using the codes in + // bl_tree. + internal void send_tree(short[] tree, int max_code) + { + int n; // iterates over all tree elements + int prevlen = - 1; // last emitted length + int curlen; // length of current code + int nextlen = tree[0 * 2 + 1]; // length of next code + int count = 0; // repeat count of the current code + int max_count = 7; // max repeat count + int min_count = 4; // min repeat count + + if (nextlen == 0) + { + max_count = 138; min_count = 3; + } + + for (n = 0; n <= max_code; n++) + { + curlen = nextlen; nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen == nextlen) + { + continue; + } + else if (count < min_count) + { + do + { + send_code(curlen, bl_tree); + } + while (--count != 0); + } + else if (curlen != 0) + { + if (curlen != prevlen) + { + send_code(curlen, bl_tree); count--; + } + send_code(REP_3_6, bl_tree); + send_bits(count - 3, 2); + } + else if (count <= 10) + { + send_code(REPZ_3_10, bl_tree); + send_bits(count - 3, 3); + } + else + { + send_code(REPZ_11_138, bl_tree); + send_bits(count - 11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) + { + max_count = 138; min_count = 3; + } + else if (curlen == nextlen) + { + max_count = 6; min_count = 3; + } + else + { + max_count = 7; min_count = 4; + } + } + } + + // Output a byte on the stream. + // IN assertion: there is enough room in pending_buf. + internal void put_byte(byte[] p, int start, int len) + { + Array.Copy(p, start, pending_buf, pending, len); + pending += len; + } + + internal void put_byte(byte c) + { + pending_buf[pending++] = c; + } + internal void put_short(int w) + { + put_byte((byte) (w)); + put_byte((byte) (SupportClass.URShift(w, 8))); + } + internal void putShortMSB(int b) + { + put_byte((byte) (b >> 8)); + put_byte((byte) (b)); + } + + internal void send_code(int c, short[] tree) + { + send_bits((tree[c * 2] & 0xffff), (tree[c * 2 + 1] & 0xffff)); + } + + internal void send_bits(int value_Renamed, int length) + { + int len = length; + if (bi_valid > (int) Buf_size - len) + { + int val = value_Renamed; + // bi_buf |= (val << bi_valid); + bi_buf = (short) ((ushort) bi_buf | (ushort) (((val << bi_valid) & 0xffff))); + put_short(bi_buf); + bi_buf = (short) (SupportClass.URShift(val, (Buf_size - bi_valid))); + bi_valid += len - Buf_size; + } + else + { + // bi_buf |= (value) << bi_valid; + bi_buf = (short)((ushort)bi_buf | (ushort)((((value_Renamed) << bi_valid) & 0xffff))); + bi_valid += len; + } + } + + // Send one empty static block to give enough lookahead for inflate. + // This takes 10 bits, of which 7 may remain in the bit buffer. + // The current inflate code requires 9 bits of lookahead. If the + // last two codes for the previous block (real code plus EOB) were coded + // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode + // the last real code. In this case we send two empty static blocks instead + // of one. (There are no problems if the previous block is stored or fixed.) + // To simplify the code, we assume the worst case of last real code encoded + // on one bit only. + internal void _tr_align() + { + send_bits(STATIC_TREES << 1, 3); + send_code(END_BLOCK, StaticTree.static_ltree); + + bi_flush(); + + // Of the 10 bits for the empty block, we have already sent + // (10 - bi_valid) bits. The lookahead for the last real code (before + // the EOB of the previous block) was thus at least one plus the length + // of the EOB plus what we have just sent of the empty static block. + if (1 + last_eob_len + 10 - bi_valid < 9) + { + send_bits(STATIC_TREES << 1, 3); + send_code(END_BLOCK, StaticTree.static_ltree); + bi_flush(); + } + last_eob_len = 7; + } + + + // Save the match info and tally the frequency counts. Return true if + // the current block must be flushed. + internal bool _tr_tally(int dist, int lc) + { + + pending_buf[d_buf + last_lit * 2] = (byte) (SupportClass.URShift(dist, 8)); + pending_buf[d_buf + last_lit * 2 + 1] = (byte) dist; + + pending_buf[l_buf + last_lit] = (byte) lc; last_lit++; + + if (dist == 0) + { + // lc is the unmatched char + dyn_ltree[lc * 2]++; + } + else + { + matches++; + // Here, lc is the match length - MIN_MATCH + dist--; // dist = match distance - 1 + dyn_ltree[(Tree._length_code[lc] + LITERALS + 1) * 2]++; + dyn_dtree[Tree.d_code(dist) * 2]++; + } + + if ((last_lit & 0x1fff) == 0 && level > 2) + { + // Compute an upper bound for the compressed length + int out_length = last_lit * 8; + int in_length = strstart - block_start; + int dcode; + for (dcode = 0; dcode < D_CODES; dcode++) + { + out_length = (int) (out_length + (int) dyn_dtree[dcode * 2] * (5L + Tree.extra_dbits[dcode])); + } + out_length = SupportClass.URShift(out_length, 3); + if ((matches < (last_lit / 2)) && out_length < in_length / 2) + return true; + } + + return (last_lit == lit_bufsize - 1); + // We avoid equality with lit_bufsize because of wraparound at 64K + // on 16 bit machines and because stored blocks are restricted to + // 64K-1 bytes. + } + + // Send the block data compressed using the given Huffman trees + internal void compress_block(short[] ltree, short[] dtree) + { + int dist; // distance of matched string + int lc; // match length or unmatched char (if dist == 0) + int lx = 0; // running index in l_buf + int code; // the code to send + int extra; // number of extra bits to send + + if (last_lit != 0) + { + do + { + dist = ((pending_buf[d_buf + lx * 2] << 8) & 0xff00) | (pending_buf[d_buf + lx * 2 + 1] & 0xff); + lc = (pending_buf[l_buf + lx]) & 0xff; lx++; + + if (dist == 0) + { + send_code(lc, ltree); // send a literal byte + } + else + { + // Here, lc is the match length - MIN_MATCH + code = Tree._length_code[lc]; + + send_code(code + LITERALS + 1, ltree); // send the length code + extra = Tree.extra_lbits[code]; + if (extra != 0) + { + lc -= Tree.base_length[code]; + send_bits(lc, extra); // send the extra length bits + } + dist--; // dist is now the match distance - 1 + code = Tree.d_code(dist); + + send_code(code, dtree); // send the distance code + extra = Tree.extra_dbits[code]; + if (extra != 0) + { + dist -= Tree.base_dist[code]; + send_bits(dist, extra); // send the extra distance bits + } + } // literal or match pair ? + + // Check that the overlay between pending_buf and d_buf+l_buf is ok: + } + while (lx < last_lit); + } + + send_code(END_BLOCK, ltree); + last_eob_len = ltree[END_BLOCK * 2 + 1]; + } + + // Set the data type to ASCII or BINARY, using a crude approximation: + // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. + // IN assertion: the fields freq of dyn_ltree are set and the total of all + // frequencies does not exceed 64K (to fit in an int on 16 bit machines). + internal void set_data_type() + { + int n = 0; + int ascii_freq = 0; + int bin_freq = 0; + while (n < 7) + { + bin_freq += dyn_ltree[n * 2]; n++; + } + while (n < 128) + { + ascii_freq += dyn_ltree[n * 2]; n++; + } + while (n < LITERALS) + { + bin_freq += dyn_ltree[n * 2]; n++; + } + data_type = (byte) (bin_freq > (SupportClass.URShift(ascii_freq, 2))?Z_BINARY:Z_ASCII); + } + + // Flush the bit buffer, keeping at most 7 bits in it. + internal void bi_flush() + { + if (bi_valid == 16) + { + put_short(bi_buf); + bi_buf = 0; + bi_valid = 0; + } + else if (bi_valid >= 8) + { + put_byte((byte) bi_buf); + bi_buf = (short) (SupportClass.URShift(bi_buf, 8)); + bi_valid -= 8; + } + } + + // Flush the bit buffer and align the output on a byte boundary + internal void bi_windup() + { + if (bi_valid > 8) + { + put_short(bi_buf); + } + else if (bi_valid > 0) + { + put_byte((byte) bi_buf); + } + bi_buf = 0; + bi_valid = 0; + } + + // Copy a stored block, storing first the length and its + // one's complement if requested. + internal void copy_block(int buf, int len, bool header) + { + + bi_windup(); // align on byte boundary + last_eob_len = 8; // enough lookahead for inflate + + if (header) + { + put_short((short) len); + put_short((short) ~ len); + } + + // while(len--!=0) { + // put_byte(window[buf+index]); + // index++; + // } + put_byte(window, buf, len); + } + + internal void flush_block_only(bool eof) + { + _tr_flush_block(block_start >= 0?block_start:- 1, strstart - block_start, eof); + block_start = strstart; + strm.flush_pending(); + } + + // Copy without compression as much as possible from the input stream, return + // the current block state. + // This function does not insert new strings in the dictionary since + // uncompressible data is probably not useful. This function is used + // only for the level=0 compression option. + // NOTE: this function should be optimized to avoid extra copying from + // window to pending_buf. + internal int deflate_stored(int flush) + { + // Stored blocks are limited to 0xffff bytes, pending_buf is limited + // to pending_buf_size, and each stored block has a 5 byte header: + + int max_block_size = 0xffff; + int max_start; + + if (max_block_size > pending_buf_size - 5) + { + max_block_size = pending_buf_size - 5; + } + + // Copy as much as possible from input to output: + while (true) + { + // Fill the window as much as possible: + if (lookahead <= 1) + { + fill_window(); + if (lookahead == 0 && flush == Z_NO_FLUSH) + return NeedMore; + if (lookahead == 0) + break; // flush the current block + } + + strstart += lookahead; + lookahead = 0; + + // Emit a stored block if pending_buf will be full: + max_start = block_start + max_block_size; + if (strstart == 0 || strstart >= max_start) + { + // strstart == 0 is possible when wraparound on 16-bit machine + lookahead = (int) (strstart - max_start); + strstart = (int) max_start; + + flush_block_only(false); + if (strm.avail_out == 0) + return NeedMore; + } + + // Flush if we may have to slide, otherwise block_start may become + // negative and the data will be gone: + if (strstart - block_start >= w_size - MIN_LOOKAHEAD) + { + flush_block_only(false); + if (strm.avail_out == 0) + return NeedMore; + } + } + + flush_block_only(flush == Z_FINISH); + if (strm.avail_out == 0) + return (flush == Z_FINISH)?FinishStarted:NeedMore; + + return flush == Z_FINISH?FinishDone:BlockDone; + } + + // Send a stored block + internal void _tr_stored_block(int buf, int stored_len, bool eof) + { + send_bits((STORED_BLOCK << 1) + (eof?1:0), 3); // send block type + copy_block(buf, stored_len, true); // with header + } + + // Determine the best encoding for the current block: dynamic trees, static + // trees or store, and output the encoded block to the zip file. + internal void _tr_flush_block(int buf, int stored_len, bool eof) + { + int opt_lenb, static_lenb; // opt_len and static_len in bytes + int max_blindex = 0; // index of last bit length code of non zero freq + + // Build the Huffman trees unless a stored block is forced + if (level > 0) + { + // Check if the file is ascii or binary + if (data_type == Z_UNKNOWN) + set_data_type(); + + // Construct the literal and distance trees + l_desc.build_tree(this); + + d_desc.build_tree(this); + + // At this point, opt_len and static_len are the total bit lengths of + // the compressed block data, excluding the tree representations. + + // Build the bit length tree for the above two trees, and get the index + // in bl_order of the last bit length code to send. + max_blindex = build_bl_tree(); + + // Determine the best encoding. Compute first the block length in bytes + opt_lenb = SupportClass.URShift((opt_len + 3 + 7), 3); + static_lenb = SupportClass.URShift((static_len + 3 + 7), 3); + + if (static_lenb <= opt_lenb) + opt_lenb = static_lenb; + } + else + { + opt_lenb = static_lenb = stored_len + 5; // force a stored block + } + + if (stored_len + 4 <= opt_lenb && buf != - 1) + { + // 4: two words for the lengths + // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + // Otherwise we can't have processed more than WSIZE input bytes since + // the last block flush, because compression would have been + // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + // transform a block into a stored block. + _tr_stored_block(buf, stored_len, eof); + } + else if (static_lenb == opt_lenb) + { + send_bits((STATIC_TREES << 1) + (eof?1:0), 3); + compress_block(StaticTree.static_ltree, StaticTree.static_dtree); + } + else + { + send_bits((DYN_TREES << 1) + (eof?1:0), 3); + send_all_trees(l_desc.max_code + 1, d_desc.max_code + 1, max_blindex + 1); + compress_block(dyn_ltree, dyn_dtree); + } + + // The above check is made mod 2^32, for files larger than 512 MB + // and uLong implemented on 32 bits. + + init_block(); + + if (eof) + { + bi_windup(); + } + } + + // Fill the window when the lookahead becomes insufficient. + // Updates strstart and lookahead. + // + // IN assertion: lookahead < MIN_LOOKAHEAD + // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + // At least one byte has been read, or avail_in == 0; reads are + // performed for at least two bytes (required for the zip translate_eol + // option -- not supported here). + internal void fill_window() + { + int n, m; + int p; + int more; // Amount of free space at the end of the window. + + do + { + more = (window_size - lookahead - strstart); + + // Deal with !@#$% 64K limit: + if (more == 0 && strstart == 0 && lookahead == 0) + { + more = w_size; + } + else if (more == - 1) + { + // Very unlikely, but possible on 16 bit machine if strstart == 0 + // and lookahead == 1 (input done one byte at time) + more--; + + // If the window is almost full and there is insufficient lookahead, + // move the upper half to the lower one to make room in the upper half. + } + else if (strstart >= w_size + w_size - MIN_LOOKAHEAD) + { + Array.Copy(window, w_size, window, 0, w_size); + match_start -= w_size; + strstart -= w_size; // we now have strstart >= MAX_DIST + block_start -= w_size; + + // Slide the hash table (could be avoided with 32 bit values + // at the expense of memory usage). We slide even when level == 0 + // to keep the hash table consistent if we switch back to level > 0 + // later. (Using level 0 permanently is not an optimal usage of + // zlib, so we don't care about this pathological case.) + + n = hash_size; + p = n; + do + { + m = (head[--p] & 0xffff); + head[p] = (short)(m >= w_size?(m - w_size):0); + //head[p] = (m >= w_size?(short) (m - w_size):0); + } + while (--n != 0); + + n = w_size; + p = n; + do + { + m = (prev[--p] & 0xffff); + prev[p] = (short)(m >= w_size?(m - w_size):0); + //prev[p] = (m >= w_size?(short) (m - w_size):0); + // If n is not on any hash chain, prev[n] is garbage but + // its value will never be used. + } + while (--n != 0); + more += w_size; + } + + if (strm.avail_in == 0) + return ; + + // If there was no sliding: + // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + // more == window_size - lookahead - strstart + // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + // => more >= window_size - 2*WSIZE + 2 + // In the BIG_MEM or MMAP case (not yet supported), + // window_size == input_size + MIN_LOOKAHEAD && + // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + // Otherwise, window_size == 2*WSIZE so more >= 2. + // If there was sliding, more >= WSIZE. So in all cases, more >= 2. + + n = strm.read_buf(window, strstart + lookahead, more); + lookahead += n; + + // Initialize the hash value now that we have some input: + if (lookahead >= MIN_MATCH) + { + ins_h = window[strstart] & 0xff; + ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; + } + // If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + // but this is not important since only literal bytes will be emitted. + } + while (lookahead < MIN_LOOKAHEAD && strm.avail_in != 0); + } + + // Compress as much as possible from the input stream, return the current + // block state. + // This function does not perform lazy evaluation of matches and inserts + // new strings in the dictionary only for unmatched strings or for short + // matches. It is used only for the fast compression options. + internal int deflate_fast(int flush) + { + // short hash_head = 0; // head of the hash chain + int hash_head = 0; // head of the hash chain + bool bflush; // set if current block must be flushed + + while (true) + { + // Make sure that we always have enough lookahead, except + // at the end of the input file. We need MAX_MATCH bytes + // for the next match, plus MIN_MATCH bytes to insert the + // string following the next match. + if (lookahead < MIN_LOOKAHEAD) + { + fill_window(); + if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) + { + return NeedMore; + } + if (lookahead == 0) + break; // flush the current block + } + + // Insert the string window[strstart .. strstart+2] in the + // dictionary, and set hash_head to the head of the hash chain: + if (lookahead >= MIN_MATCH) + { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = (short) strstart; + } + + // Find the longest match, discarding those <= prev_length. + // At this point we have always match_length < MIN_MATCH + + if (hash_head != 0L && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) + { + // To simplify the code, we prevent matches with the string + // of window index 0 (in particular we have to avoid a match + // of the string with itself at the start of the input file). + if (strategy != Z_HUFFMAN_ONLY) + { + match_length = longest_match(hash_head); + } + // longest_match() sets match_start + } + if (match_length >= MIN_MATCH) + { + // check_match(strstart, match_start, match_length); + + bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH); + + lookahead -= match_length; + + // Insert new strings in the hash table only if the match length + // is not too large. This saves time but degrades compression. + if (match_length <= max_lazy_match && lookahead >= MIN_MATCH) + { + match_length--; // string at strstart already in hash table + do + { + strstart++; + + ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = (short) strstart; + + // strstart never exceeds WSIZE-MAX_MATCH, so there are + // always MIN_MATCH bytes ahead. + } + while (--match_length != 0); + strstart++; + } + else + { + strstart += match_length; + match_length = 0; + ins_h = window[strstart] & 0xff; + + ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; + // If lookahead < MIN_MATCH, ins_h is garbage, but it does not + // matter since it will be recomputed at next deflate call. + } + } + else + { + // No match, output a literal byte + + bflush = _tr_tally(0, window[strstart] & 0xff); + lookahead--; + strstart++; + } + if (bflush) + { + + flush_block_only(false); + if (strm.avail_out == 0) + return NeedMore; + } + } + + flush_block_only(flush == Z_FINISH); + if (strm.avail_out == 0) + { + if (flush == Z_FINISH) + return FinishStarted; + else + return NeedMore; + } + return flush == Z_FINISH?FinishDone:BlockDone; + } + + // Same as above, but achieves better compression. We use a lazy + // evaluation for matches: a match is finally adopted only if there is + // no better match at the next window position. + internal int deflate_slow(int flush) + { + // short hash_head = 0; // head of hash chain + int hash_head = 0; // head of hash chain + bool bflush; // set if current block must be flushed + + // Process the input block. + while (true) + { + // Make sure that we always have enough lookahead, except + // at the end of the input file. We need MAX_MATCH bytes + // for the next match, plus MIN_MATCH bytes to insert the + // string following the next match. + + if (lookahead < MIN_LOOKAHEAD) + { + fill_window(); + if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) + { + return NeedMore; + } + if (lookahead == 0) + break; // flush the current block + } + + // Insert the string window[strstart .. strstart+2] in the + // dictionary, and set hash_head to the head of the hash chain: + + if (lookahead >= MIN_MATCH) + { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + // prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = (short) strstart; + } + + // Find the longest match, discarding those <= prev_length. + prev_length = match_length; prev_match = match_start; + match_length = MIN_MATCH - 1; + + if (hash_head != 0 && prev_length < max_lazy_match && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) + { + // To simplify the code, we prevent matches with the string + // of window index 0 (in particular we have to avoid a match + // of the string with itself at the start of the input file). + + if (strategy != Z_HUFFMAN_ONLY) + { + match_length = longest_match(hash_head); + } + // longest_match() sets match_start + + if (match_length <= 5 && (strategy == Z_FILTERED || (match_length == MIN_MATCH && strstart - match_start > 4096))) + { + + // If prev_match is also MIN_MATCH, match_start is garbage + // but we will ignore the current match anyway. + match_length = MIN_MATCH - 1; + } + } + + // If there was a match at the previous step and the current + // match is not better, output the previous match: + if (prev_length >= MIN_MATCH && match_length <= prev_length) + { + int max_insert = strstart + lookahead - MIN_MATCH; + // Do not insert strings in hash table beyond this. + + // check_match(strstart-1, prev_match, prev_length); + + bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH); + + // Insert in hash table all strings up to the end of the match. + // strstart-1 and strstart are already inserted. If there is not + // enough lookahead, the last two strings are not inserted in + // the hash table. + lookahead -= (prev_length - 1); + prev_length -= 2; + do + { + if (++strstart <= max_insert) + { + ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + //prev[strstart&w_mask]=hash_head=head[ins_h]; + hash_head = (head[ins_h] & 0xffff); + prev[strstart & w_mask] = head[ins_h]; + head[ins_h] = (short) strstart; + } + } + while (--prev_length != 0); + match_available = 0; + match_length = MIN_MATCH - 1; + strstart++; + + if (bflush) + { + flush_block_only(false); + if (strm.avail_out == 0) + return NeedMore; + } + } + else if (match_available != 0) + { + + // If there was no match at the previous position, output a + // single literal. If there was a match but the current match + // is longer, truncate the previous match to a single literal. + + bflush = _tr_tally(0, window[strstart - 1] & 0xff); + + if (bflush) + { + flush_block_only(false); + } + strstart++; + lookahead--; + if (strm.avail_out == 0) + return NeedMore; + } + else + { + // There is no previous match to compare with, wait for + // the next step to decide. + + match_available = 1; + strstart++; + lookahead--; + } + } + + if (match_available != 0) + { + bflush = _tr_tally(0, window[strstart - 1] & 0xff); + match_available = 0; + } + flush_block_only(flush == Z_FINISH); + + if (strm.avail_out == 0) + { + if (flush == Z_FINISH) + return FinishStarted; + else + return NeedMore; + } + + return flush == Z_FINISH?FinishDone:BlockDone; + } + + internal int longest_match(int cur_match) + { + int chain_length = max_chain_length; // max hash chain length + int scan = strstart; // current string + int match; // matched string + int len; // length of current match + int best_len = prev_length; // best match length so far + int limit = strstart > (w_size - MIN_LOOKAHEAD)?strstart - (w_size - MIN_LOOKAHEAD):0; + int nice_match = this.nice_match; + + // Stop when cur_match becomes <= limit. To simplify the code, + // we prevent matches with the string of window index 0. + + int wmask = w_mask; + + int strend = strstart + MAX_MATCH; + byte scan_end1 = window[scan + best_len - 1]; + byte scan_end = window[scan + best_len]; + + // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + // It is easy to get rid of this optimization if necessary. + + // Do not waste too much time if we already have a good match: + if (prev_length >= good_match) + { + chain_length >>= 2; + } + + // Do not look for matches beyond the end of the input. This is necessary + // to make deflate deterministic. + if (nice_match > lookahead) + nice_match = lookahead; + + do + { + match = cur_match; + + // Skip to next match if the match length cannot increase + // or if the match length is less than 2: + if (window[match + best_len] != scan_end || window[match + best_len - 1] != scan_end1 || window[match] != window[scan] || window[++match] != window[scan + 1]) + continue; + + // The check at best_len-1 can be removed because it will be made + // again later. (This heuristic is not always a win.) + // It is not necessary to compare scan[2] and match[2] since they + // are always equal when the other bytes match, given that + // the hash keys are equal and that HASH_BITS >= 8. + scan += 2; match++; + + // We check for insufficient lookahead only every 8th comparison; + // the 256th check will be made at strstart+258. + do + { + } + while (window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && scan < strend); + + len = MAX_MATCH - (int) (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) + { + match_start = cur_match; + best_len = len; + if (len >= nice_match) + break; + scan_end1 = window[scan + best_len - 1]; + scan_end = window[scan + best_len]; + } + } + while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length != 0); + + if (best_len <= lookahead) + return best_len; + return lookahead; + } + + internal int deflateInit(ZStream strm, int level, int bits) + { + return deflateInit2(strm, level, Z_DEFLATED, bits, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); + } + internal int deflateInit(ZStream strm, int level) + { + return deflateInit(strm, level, MAX_WBITS); + } + internal int deflateInit2(ZStream strm, int level, int method, int windowBits, int memLevel, int strategy) + { + int noheader = 0; + // byte[] my_version=ZLIB_VERSION; + + // + // if (version == null || version[0] != my_version[0] + // || stream_size != sizeof(z_stream)) { + // return Z_VERSION_ERROR; + // } + + strm.msg = null; + + if (level == Z_DEFAULT_COMPRESSION) + level = 6; + + if (windowBits < 0) + { + // undocumented feature: suppress zlib header + noheader = 1; + windowBits = - windowBits; + } + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || windowBits < 9 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) + { + return Z_STREAM_ERROR; + } + + strm.dstate = (Deflate) this; + + this.noheader = noheader; + w_bits = windowBits; + w_size = 1 << w_bits; + w_mask = w_size - 1; + + hash_bits = memLevel + 7; + hash_size = 1 << hash_bits; + hash_mask = hash_size - 1; + hash_shift = ((hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + window = new byte[w_size * 2]; + prev = new short[w_size]; + head = new short[hash_size]; + + lit_bufsize = 1 << (memLevel + 6); // 16K elements by default + + // We overlay pending_buf and d_buf+l_buf. This works since the average + // output size for (length,distance) codes is <= 24 bits. + pending_buf = new byte[lit_bufsize * 4]; + pending_buf_size = lit_bufsize * 4; + + d_buf = lit_bufsize; + l_buf = (1 + 2) * lit_bufsize; + + this.level = level; + + //System.out.println("level="+level); + + this.strategy = strategy; + this.method = (byte) method; + + return deflateReset(strm); + } + + internal int deflateReset(ZStream strm) + { + strm.total_in = strm.total_out = 0; + strm.msg = null; // + strm.data_type = Z_UNKNOWN; + + pending = 0; + pending_out = 0; + + if (noheader < 0) + { + noheader = 0; // was set to -1 by deflate(..., Z_FINISH); + } + status = (noheader != 0)?BUSY_STATE:INIT_STATE; + strm.adler = strm._adler.adler32(0, null, 0, 0); + + last_flush = Z_NO_FLUSH; + + tr_init(); + lm_init(); + return Z_OK; + } + + internal int deflateEnd() + { + if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) + { + return Z_STREAM_ERROR; + } + // Deallocate in reverse order of allocations: + pending_buf = null; + head = null; + prev = null; + window = null; + // free + // dstate=null; + return status == BUSY_STATE?Z_DATA_ERROR:Z_OK; + } + + internal int deflateParams(ZStream strm, int _level, int _strategy) + { + int err = Z_OK; + + if (_level == Z_DEFAULT_COMPRESSION) + { + _level = 6; + } + if (_level < 0 || _level > 9 || _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) + { + return Z_STREAM_ERROR; + } + + if (config_table[level].func != config_table[_level].func && strm.total_in != 0) + { + // Flush the last buffer: + err = strm.deflate(Z_PARTIAL_FLUSH); + } + + if (level != _level) + { + level = _level; + max_lazy_match = config_table[level].max_lazy; + good_match = config_table[level].good_length; + nice_match = config_table[level].nice_length; + max_chain_length = config_table[level].max_chain; + } + strategy = _strategy; + return err; + } + + internal int deflateSetDictionary(ZStream strm, byte[] dictionary, int dictLength) + { + int length = dictLength; + int index = 0; + + if (dictionary == null || status != INIT_STATE) + return Z_STREAM_ERROR; + + strm.adler = strm._adler.adler32(strm.adler, dictionary, 0, dictLength); + + if (length < MIN_MATCH) + return Z_OK; + if (length > w_size - MIN_LOOKAHEAD) + { + length = w_size - MIN_LOOKAHEAD; + index = dictLength - length; // use the tail of the dictionary + } + Array.Copy(dictionary, index, window, 0, length); + strstart = length; + block_start = length; + + // Insert all strings in the hash table (except for the last two bytes). + // s->lookahead stays null, so s->ins_h will be recomputed at the next + // call of fill_window. + + ins_h = window[0] & 0xff; + ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask; + + for (int n = 0; n <= length - MIN_MATCH; n++) + { + ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; + prev[n & w_mask] = head[ins_h]; + head[ins_h] = (short) n; + } + return Z_OK; + } + + internal int deflate(ZStream strm, int flush) + { + int old_flush; + + if (flush > Z_FINISH || flush < 0) + { + return Z_STREAM_ERROR; + } + + if (strm.next_out == null || (strm.next_in == null && strm.avail_in != 0) || (status == FINISH_STATE && flush != Z_FINISH)) + { + strm.msg = z_errmsg[Z_NEED_DICT - (Z_STREAM_ERROR)]; + return Z_STREAM_ERROR; + } + if (strm.avail_out == 0) + { + strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + this.strm = strm; // just in case + old_flush = last_flush; + last_flush = flush; + + // Write the zlib header + if (status == INIT_STATE) + { + int header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8; + int level_flags = ((level - 1) & 0xff) >> 1; + + if (level_flags > 3) + level_flags = 3; + header |= (level_flags << 6); + if (strstart != 0) + header |= PRESET_DICT; + header += 31 - (header % 31); + + status = BUSY_STATE; + putShortMSB(header); + + + // Save the adler32 of the preset dictionary: + if (strstart != 0) + { + putShortMSB((int) (SupportClass.URShift(strm.adler, 16))); + putShortMSB((int) (strm.adler & 0xffff)); + } + strm.adler = strm._adler.adler32(0, null, 0, 0); + } + + // Flush as much pending output as possible + if (pending != 0) + { + strm.flush_pending(); + if (strm.avail_out == 0) + { + //System.out.println(" avail_out==0"); + // Since avail_out is 0, deflate will be called again with + // more output space, but possibly with both pending and + // avail_in equal to zero. There won't be anything to do, + // but this is not an error situation so make sure we + // return OK instead of BUF_ERROR at next call of deflate: + last_flush = - 1; + return Z_OK; + } + + // Make sure there is something to do and avoid duplicate consecutive + // flushes. For repeated and useless calls with Z_FINISH, we keep + // returning Z_STREAM_END instead of Z_BUFF_ERROR. + } + else if (strm.avail_in == 0 && flush <= old_flush && flush != Z_FINISH) + { + strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + // User must not provide more input after the first FINISH: + if (status == FINISH_STATE && strm.avail_in != 0) + { + strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; + return Z_BUF_ERROR; + } + + // Start a new block or continue the current one. + if (strm.avail_in != 0 || lookahead != 0 || (flush != Z_NO_FLUSH && status != FINISH_STATE)) + { + int bstate = - 1; + switch (config_table[level].func) + { + + case STORED: + bstate = deflate_stored(flush); + break; + + case FAST: + bstate = deflate_fast(flush); + break; + + case SLOW: + bstate = deflate_slow(flush); + break; + + default: + break; + + } + + if (bstate == FinishStarted || bstate == FinishDone) + { + status = FINISH_STATE; + } + if (bstate == NeedMore || bstate == FinishStarted) + { + if (strm.avail_out == 0) + { + last_flush = - 1; // avoid BUF_ERROR next call, see above + } + return Z_OK; + // If flush != Z_NO_FLUSH && avail_out == 0, the next call + // of deflate should use the same flush parameter to make sure + // that the flush is complete. So we don't have to output an + // empty block here, this will be done at next call. This also + // ensures that for a very small output buffer, we emit at most + // one empty block. + } + + if (bstate == BlockDone) + { + if (flush == Z_PARTIAL_FLUSH) + { + _tr_align(); + } + else + { + // FULL_FLUSH or SYNC_FLUSH + _tr_stored_block(0, 0, false); + // For a full flush, this empty block will be recognized + // as a special marker by inflate_sync(). + if (flush == Z_FULL_FLUSH) + { + //state.head[s.hash_size-1]=0; + for (int i = 0; i < hash_size; i++) + // forget history + head[i] = 0; + } + } + strm.flush_pending(); + if (strm.avail_out == 0) + { + last_flush = - 1; // avoid BUF_ERROR at next call, see above + return Z_OK; + } + } + } + + if (flush != Z_FINISH) + return Z_OK; + if (noheader != 0) + return Z_STREAM_END; + + // Write the zlib trailer (adler32) + putShortMSB((int) (SupportClass.URShift(strm.adler, 16))); + putShortMSB((int) (strm.adler & 0xffff)); + strm.flush_pending(); + + // If avail_out is zero, the application will call deflate again + // to flush the rest. + noheader = - 1; // write the trailer only once! + return pending != 0?Z_OK:Z_STREAM_END; + } + static Deflate() + { + { + config_table = new Config[10]; + // good lazy nice chain + config_table[0] = new Config(0, 0, 0, 0, STORED); + config_table[1] = new Config(4, 4, 8, 4, FAST); + config_table[2] = new Config(4, 5, 16, 8, FAST); + config_table[3] = new Config(4, 6, 32, 32, FAST); + + config_table[4] = new Config(4, 4, 16, 16, SLOW); + config_table[5] = new Config(8, 16, 32, 32, SLOW); + config_table[6] = new Config(8, 16, 128, 128, SLOW); + config_table[7] = new Config(8, 32, 128, 256, SLOW); + config_table[8] = new Config(32, 128, 258, 1024, SLOW); + config_table[9] = new Config(32, 258, 258, 4096, SLOW); + } + } + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + sealed class InfBlocks + { + private const int MANY = 1440; + + // And'ing with mask[n] masks the lower n bits + private static readonly int[] inflate_mask = new int[]{0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff}; + + // Table for deflate from PKZIP's appnote.txt. + internal static readonly int[] border = new int[]{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + private const int Z_OK = 0; + private const int Z_STREAM_END = 1; + private const int Z_NEED_DICT = 2; + private const int Z_ERRNO = - 1; + private const int Z_STREAM_ERROR = - 2; + private const int Z_DATA_ERROR = - 3; + private const int Z_MEM_ERROR = - 4; + private const int Z_BUF_ERROR = - 5; + private const int Z_VERSION_ERROR = - 6; + + private const int TYPE = 0; // get type bits (3, including end bit) + private const int LENS = 1; // get lengths for stored + private const int STORED = 2; // processing stored block + private const int TABLE = 3; // get table lengths + private const int BTREE = 4; // get bit lengths tree for a dynamic block + private const int DTREE = 5; // get length, distance trees for a dynamic block + private const int CODES = 6; // processing fixed or dynamic block + private const int DRY = 7; // output remaining window bytes + private const int DONE = 8; // finished last block, done + private const int BAD = 9; // ot a data error--stuck here + + internal int mode; // current inflate_block mode + + internal int left; // if STORED, bytes left to copy + + internal int table; // table lengths (14 bits) + internal int index; // index into blens (or border) + internal int[] blens; // bit lengths of codes + internal int[] bb = new int[1]; // bit length tree depth + internal int[] tb = new int[1]; // bit length decoding tree + + internal InfCodes codes; // if CODES, current state + + internal int last; // true if this block is the last block + + // mode independent information + internal int bitk; // bits in bit buffer + internal int bitb; // bit buffer + internal int[] hufts; // single malloc for tree space + internal byte[] window; // sliding window + internal int end; // one byte after sliding window + internal int read; // window read pointer + internal int write; // window write pointer + internal System.Object checkfn; // check function + internal long check; // check on output + + internal InfBlocks(ZStream z, System.Object checkfn, int w) + { + hufts = new int[MANY * 3]; + window = new byte[w]; + end = w; + this.checkfn = checkfn; + mode = TYPE; + reset(z, null); + } + + internal void reset(ZStream z, long[] c) + { + if (c != null) + c[0] = check; + if (mode == BTREE || mode == DTREE) + { + blens = null; + } + if (mode == CODES) + { + codes.free(z); + } + mode = TYPE; + bitk = 0; + bitb = 0; + read = write = 0; + + if (checkfn != null) + z.adler = check = z._adler.adler32(0L, null, 0, 0); + } + + internal int proc(ZStream z, int r) + { + int t; // temporary storage + int b; // bit buffer + int k; // bits in bit buffer + int p; // input data pointer + int n; // bytes available there + int q; // output window write pointer + int m; // bytes to end of window or read pointer + + // copy input/output information to locals (UPDATE macro restores) + { + p = z.next_in_index; n = z.avail_in; b = bitb; k = bitk; + } + { + q = write; m = (int) (q < read?read - q - 1:end - q); + } + + // process input based on current state + while (true) + { + switch (mode) + { + + case TYPE: + + while (k < (3)) + { + if (n != 0) + { + r = Z_OK; + } + else + { + bitb = b; bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + ; + n--; + b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + t = (int) (b & 7); + last = t & 1; + + switch (SupportClass.URShift(t, 1)) + { + + case 0: // stored + { + b = SupportClass.URShift(b, (3)); k -= (3); + } + t = k & 7; // go to byte boundary + + { + b = SupportClass.URShift(b, (t)); k -= (t); + } + mode = LENS; // get length of stored block + break; + + case 1: // fixed + { + int[] bl = new int[1]; + int[] bd = new int[1]; + int[][] tl = new int[1][]; + int[][] td = new int[1][]; + + InfTree.inflate_trees_fixed(bl, bd, tl, td, z); + codes = new InfCodes(bl[0], bd[0], tl[0], td[0], z); + } + + { + b = SupportClass.URShift(b, (3)); k -= (3); + } + + mode = CODES; + break; + + case 2: // dynamic + + { + b = SupportClass.URShift(b, (3)); k -= (3); + } + + mode = TABLE; + break; + + case 3: // illegal + + { + b = SupportClass.URShift(b, (3)); k -= (3); + } + mode = BAD; + z.msg = "invalid block type"; + r = Z_DATA_ERROR; + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + break; + + case LENS: + + while (k < (32)) + { + if (n != 0) + { + r = Z_OK; + } + else + { + bitb = b; bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + ; + n--; + b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + if (((SupportClass.URShift((~ b), 16)) & 0xffff) != (b & 0xffff)) + { + mode = BAD; + z.msg = "invalid stored block lengths"; + r = Z_DATA_ERROR; + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + left = (b & 0xffff); + b = k = 0; // dump bits + mode = left != 0?STORED:(last != 0?DRY:TYPE); + break; + + case STORED: + if (n == 0) + { + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + + if (m == 0) + { + if (q == end && read != 0) + { + q = 0; m = (int) (q < read?read - q - 1:end - q); + } + if (m == 0) + { + write = q; + r = inflate_flush(z, r); + q = write; m = (int) (q < read?read - q - 1:end - q); + if (q == end && read != 0) + { + q = 0; m = (int) (q < read?read - q - 1:end - q); + } + if (m == 0) + { + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + } + } + r = Z_OK; + + t = left; + if (t > n) + t = n; + if (t > m) + t = m; + Array.Copy(z.next_in, p, window, q, t); + p += t; n -= t; + q += t; m -= t; + if ((left -= t) != 0) + break; + mode = last != 0?DRY:TYPE; + break; + + case TABLE: + + while (k < (14)) + { + if (n != 0) + { + r = Z_OK; + } + else + { + bitb = b; bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + ; + n--; + b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + table = t = (b & 0x3fff); + if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) + { + mode = BAD; + z.msg = "too many length or distance symbols"; + r = Z_DATA_ERROR; + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); + blens = new int[t]; + + { + b = SupportClass.URShift(b, (14)); k -= (14); + } + + index = 0; + mode = BTREE; + goto case BTREE; + + case BTREE: + while (index < 4 + (SupportClass.URShift(table, 10))) + { + while (k < (3)) + { + if (n != 0) + { + r = Z_OK; + } + else + { + bitb = b; bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + ; + n--; + b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + blens[border[index++]] = b & 7; + + { + b = SupportClass.URShift(b, (3)); k -= (3); + } + } + + while (index < 19) + { + blens[border[index++]] = 0; + } + + bb[0] = 7; + t = InfTree.inflate_trees_bits(blens, bb, tb, hufts, z); + if (t != Z_OK) + { + r = t; + if (r == Z_DATA_ERROR) + { + blens = null; + mode = BAD; + } + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + + index = 0; + mode = DTREE; + goto case DTREE; + + case DTREE: + while (true) + { + t = table; + if (!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))) + { + break; + } + + + int i, j, c; + + t = bb[0]; + + while (k < (t)) + { + if (n != 0) + { + r = Z_OK; + } + else + { + bitb = b; bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + ; + n--; + b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + if (tb[0] == - 1) + { + //System.err.println("null..."); + } + + t = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 1]; + c = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 2]; + + if (c < 16) + { + b = SupportClass.URShift(b, (t)); k -= (t); + blens[index++] = c; + } + else + { + // c == 16..18 + i = c == 18?7:c - 14; + j = c == 18?11:3; + + while (k < (t + i)) + { + if (n != 0) + { + r = Z_OK; + } + else + { + bitb = b; bitk = k; + z.avail_in = n; + z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + ; + n--; + b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + b = SupportClass.URShift(b, (t)); k -= (t); + + j += (b & inflate_mask[i]); + + b = SupportClass.URShift(b, (i)); k -= (i); + + i = index; + t = table; + if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) + { + blens = null; + mode = BAD; + z.msg = "invalid bit length repeat"; + r = Z_DATA_ERROR; + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + + c = c == 16?blens[i - 1]:0; + do + { + blens[i++] = c; + } + while (--j != 0); + index = i; + } + } + + tb[0] = - 1; + { + int[] bl = new int[1]; + int[] bd = new int[1]; + int[] tl = new int[1]; + int[] td = new int[1]; + + + bl[0] = 9; // must be <= 9 for lookahead assumptions + bd[0] = 6; // must be <= 9 for lookahead assumptions + t = table; + t = InfTree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl, bd, tl, td, hufts, z); + if (t != Z_OK) + { + if (t == Z_DATA_ERROR) + { + blens = null; + mode = BAD; + } + r = t; + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + + codes = new InfCodes(bl[0], bd[0], hufts, tl[0], hufts, td[0], z); + } + blens = null; + mode = CODES; + goto case CODES; + + case CODES: + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + + if ((r = codes.proc(this, z, r)) != Z_STREAM_END) + { + return inflate_flush(z, r); + } + r = Z_OK; + codes.free(z); + + p = z.next_in_index; n = z.avail_in; b = bitb; k = bitk; + q = write; m = (int) (q < read?read - q - 1:end - q); + + if (last == 0) + { + mode = TYPE; + break; + } + mode = DRY; + goto case DRY; + + case DRY: + write = q; + r = inflate_flush(z, r); + q = write; m = (int) (q < read?read - q - 1:end - q); + if (read != write) + { + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + } + mode = DONE; + goto case DONE; + + case DONE: + r = Z_STREAM_END; + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + + case BAD: + r = Z_DATA_ERROR; + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + + + default: + r = Z_STREAM_ERROR; + + bitb = b; bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + write = q; + return inflate_flush(z, r); + + } + } + } + + internal void free(ZStream z) + { + reset(z, null); + window = null; + hufts = null; + //ZFREE(z, s); + } + + internal void set_dictionary(byte[] d, int start, int n) + { + Array.Copy(d, start, window, 0, n); + read = write = n; + } + + // Returns true if inflate is currently at the end of a block generated + // by Z_SYNC_FLUSH or Z_FULL_FLUSH. + internal int sync_point() + { + return mode == LENS?1:0; + } + + // copy as much as possible from the sliding window to the output area + internal int inflate_flush(ZStream z, int r) + { + int n; + int p; + int q; + + // local copies of source and destination pointers + p = z.next_out_index; + q = read; + + // compute number of bytes to copy as far as end of window + n = (int) ((q <= write?write:end) - q); + if (n > z.avail_out) + n = z.avail_out; + if (n != 0 && r == Z_BUF_ERROR) + r = Z_OK; + + // update counters + z.avail_out -= n; + z.total_out += n; + + // update check information + if (checkfn != null) + z.adler = check = z._adler.adler32(check, window, q, n); + + // copy as far as end of window + Array.Copy(window, q, z.next_out, p, n); + p += n; + q += n; + + // see if more to copy at beginning of window + if (q == end) + { + // wrap pointers + q = 0; + if (write == end) + write = 0; + + // compute bytes to copy + n = write - q; + if (n > z.avail_out) + n = z.avail_out; + if (n != 0 && r == Z_BUF_ERROR) + r = Z_OK; + + // update counters + z.avail_out -= n; + z.total_out += n; + + // update check information + if (checkfn != null) + z.adler = check = z._adler.adler32(check, window, q, n); + + // copy + Array.Copy(window, q, z.next_out, p, n); + p += n; + q += n; + } + + // update pointers + z.next_out_index = p; + read = q; + + // done + return r; + } + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + sealed class InfCodes + { + + private static readonly int[] inflate_mask = new int[]{0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff}; + + private const int Z_OK = 0; + private const int Z_STREAM_END = 1; + private const int Z_NEED_DICT = 2; + private const int Z_ERRNO = - 1; + private const int Z_STREAM_ERROR = - 2; + private const int Z_DATA_ERROR = - 3; + private const int Z_MEM_ERROR = - 4; + private const int Z_BUF_ERROR = - 5; + private const int Z_VERSION_ERROR = - 6; + + // waiting for "i:"=input, + // "o:"=output, + // "x:"=nothing + private const int START = 0; // x: set up for LEN + private const int LEN = 1; // i: get length/literal/eob next + private const int LENEXT = 2; // i: getting length extra (have base) + private const int DIST = 3; // i: get distance next + private const int DISTEXT = 4; // i: getting distance extra + private const int COPY = 5; // o: copying bytes in window, waiting for space + private const int LIT = 6; // o: got literal, waiting for output space + private const int WASH = 7; // o: got eob, possibly still output waiting + private const int END = 8; // x: got eob and all data flushed + private const int BADCODE = 9; // x: got error + + internal int mode; // current inflate_codes mode + + // mode dependent information + internal int len; + + internal int[] tree; // pointer into tree + internal int tree_index = 0; + internal int need; // bits needed + + internal int lit; + + // if EXT or COPY, where and how much + internal int get_Renamed; // bits to get for extra + internal int dist; // distance back to copy from + + internal byte lbits; // ltree bits decoded per branch + internal byte dbits; // dtree bits decoder per branch + internal int[] ltree; // literal/length/eob tree + internal int ltree_index; // literal/length/eob tree + internal int[] dtree; // distance tree + internal int dtree_index; // distance tree + + internal InfCodes(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index, ZStream z) + { + mode = START; + lbits = (byte) bl; + dbits = (byte) bd; + ltree = tl; + ltree_index = tl_index; + dtree = td; + dtree_index = td_index; + } + + internal InfCodes(int bl, int bd, int[] tl, int[] td, ZStream z) + { + mode = START; + lbits = (byte) bl; + dbits = (byte) bd; + ltree = tl; + ltree_index = 0; + dtree = td; + dtree_index = 0; + } + + internal int proc(InfBlocks s, ZStream z, int r) + { + int j; // temporary storage + //int[] t; // temporary pointer + int tindex; // temporary pointer + int e; // extra bits or operation + int b = 0; // bit buffer + int k = 0; // bits in bit buffer + int p = 0; // input data pointer + int n; // bytes available there + int q; // output window write pointer + int m; // bytes to end of window or read pointer + int f; // pointer to copy strings from + + // copy input/output information to locals (UPDATE macro restores) + p = z.next_in_index; n = z.avail_in; b = s.bitb; k = s.bitk; + q = s.write; m = q < s.read?s.read - q - 1:s.end - q; + + // process input and output based on current state + while (true) + { + switch (mode) + { + + // waiting for "i:"=input, "o:"=output, "x:"=nothing + case START: // x: set up for LEN + if (m >= 258 && n >= 10) + { + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + r = inflate_fast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, s, z); + + p = z.next_in_index; n = z.avail_in; b = s.bitb; k = s.bitk; + q = s.write; m = q < s.read?s.read - q - 1:s.end - q; + + if (r != Z_OK) + { + mode = r == Z_STREAM_END?WASH:BADCODE; + break; + } + } + need = lbits; + tree = ltree; + tree_index = ltree_index; + + mode = LEN; + goto case LEN; + + case LEN: // i: get length/literal/eob next + j = need; + + while (k < (j)) + { + if (n != 0) + r = Z_OK; + else + { + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + n--; + b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + tindex = (tree_index + (b & inflate_mask[j])) * 3; + + b = SupportClass.URShift(b, (tree[tindex + 1])); + k -= (tree[tindex + 1]); + + e = tree[tindex]; + + if (e == 0) + { + // literal + lit = tree[tindex + 2]; + mode = LIT; + break; + } + if ((e & 16) != 0) + { + // length + get_Renamed = e & 15; + len = tree[tindex + 2]; + mode = LENEXT; + break; + } + if ((e & 64) == 0) + { + // next table + need = e; + tree_index = tindex / 3 + tree[tindex + 2]; + break; + } + if ((e & 32) != 0) + { + // end of block + mode = WASH; + break; + } + mode = BADCODE; // invalid code + z.msg = "invalid literal/length code"; + r = Z_DATA_ERROR; + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + + case LENEXT: // i: getting length extra (have base) + j = get_Renamed; + + while (k < (j)) + { + if (n != 0) + r = Z_OK; + else + { + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + n--; b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + len += (b & inflate_mask[j]); + + b >>= j; + k -= j; + + need = dbits; + tree = dtree; + tree_index = dtree_index; + mode = DIST; + goto case DIST; + + case DIST: // i: get distance next + j = need; + + while (k < (j)) + { + if (n != 0) + r = Z_OK; + else + { + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + n--; b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + tindex = (tree_index + (b & inflate_mask[j])) * 3; + + b >>= tree[tindex + 1]; + k -= tree[tindex + 1]; + + e = (tree[tindex]); + if ((e & 16) != 0) + { + // distance + get_Renamed = e & 15; + dist = tree[tindex + 2]; + mode = DISTEXT; + break; + } + if ((e & 64) == 0) + { + // next table + need = e; + tree_index = tindex / 3 + tree[tindex + 2]; + break; + } + mode = BADCODE; // invalid code + z.msg = "invalid distance code"; + r = Z_DATA_ERROR; + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + + case DISTEXT: // i: getting distance extra + j = get_Renamed; + + while (k < (j)) + { + if (n != 0) + r = Z_OK; + else + { + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + n--; b |= (z.next_in[p++] & 0xff) << k; + k += 8; + } + + dist += (b & inflate_mask[j]); + + b >>= j; + k -= j; + + mode = COPY; + goto case COPY; + + case COPY: // o: copying bytes in window, waiting for space + f = q - dist; + while (f < 0) + { + // modulo window size-"while" instead + f += s.end; // of "if" handles invalid distances + } + while (len != 0) + { + + if (m == 0) + { + if (q == s.end && s.read != 0) + { + q = 0; m = q < s.read?s.read - q - 1:s.end - q; + } + if (m == 0) + { + s.write = q; r = s.inflate_flush(z, r); + q = s.write; m = q < s.read?s.read - q - 1:s.end - q; + + if (q == s.end && s.read != 0) + { + q = 0; m = q < s.read?s.read - q - 1:s.end - q; + } + + if (m == 0) + { + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + } + } + + s.window[q++] = s.window[f++]; m--; + + if (f == s.end) + f = 0; + len--; + } + mode = START; + break; + + case LIT: // o: got literal, waiting for output space + if (m == 0) + { + if (q == s.end && s.read != 0) + { + q = 0; m = q < s.read?s.read - q - 1:s.end - q; + } + if (m == 0) + { + s.write = q; r = s.inflate_flush(z, r); + q = s.write; m = q < s.read?s.read - q - 1:s.end - q; + + if (q == s.end && s.read != 0) + { + q = 0; m = q < s.read?s.read - q - 1:s.end - q; + } + if (m == 0) + { + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + } + } + r = Z_OK; + + s.window[q++] = (byte) lit; m--; + + mode = START; + break; + + case WASH: // o: got eob, possibly more output + if (k > 7) + { + // return unused byte, if any + k -= 8; + n++; + p--; // can always return one + } + + s.write = q; r = s.inflate_flush(z, r); + q = s.write; m = q < s.read?s.read - q - 1:s.end - q; + + if (s.read != s.write) + { + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + } + mode = END; + goto case END; + + case END: + r = Z_STREAM_END; + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + + case BADCODE: // x: got error + + r = Z_DATA_ERROR; + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + + default: + r = Z_STREAM_ERROR; + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + return s.inflate_flush(z, r); + + } + } + } + + internal void free(ZStream z) + { + // ZFREE(z, c); + } + + // Called with number of bytes left to write in window at least 258 + // (the maximum string length) and number of input bytes available + // at least ten. The ten bytes are six bytes for the longest length/ + // distance pair plus four bytes for overloading the bit buffer. + + internal int inflate_fast(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index, InfBlocks s, ZStream z) + { + int t; // temporary pointer + int[] tp; // temporary pointer + int tp_index; // temporary pointer + int e; // extra bits or operation + int b; // bit buffer + int k; // bits in bit buffer + int p; // input data pointer + int n; // bytes available there + int q; // output window write pointer + int m; // bytes to end of window or read pointer + int ml; // mask for literal/length tree + int md; // mask for distance tree + int c; // bytes to copy + int d; // distance back to copy from + int r; // copy source pointer + + // load input, output, bit values + p = z.next_in_index; n = z.avail_in; b = s.bitb; k = s.bitk; + q = s.write; m = q < s.read?s.read - q - 1:s.end - q; + + // initialize masks + ml = inflate_mask[bl]; + md = inflate_mask[bd]; + + // do until not enough input or output space for fast loop + do + { + // assume called with m >= 258 && n >= 10 + // get literal/length code + while (k < (20)) + { + // max bits for literal/length code + n--; + b |= (z.next_in[p++] & 0xff) << k; k += 8; + } + + t = b & ml; + tp = tl; + tp_index = tl_index; + if ((e = tp[(tp_index + t) * 3]) == 0) + { + b >>= (tp[(tp_index + t) * 3 + 1]); k -= (tp[(tp_index + t) * 3 + 1]); + + s.window[q++] = (byte) tp[(tp_index + t) * 3 + 2]; + m--; + continue; + } + do + { + + b >>= (tp[(tp_index + t) * 3 + 1]); k -= (tp[(tp_index + t) * 3 + 1]); + + if ((e & 16) != 0) + { + e &= 15; + c = tp[(tp_index + t) * 3 + 2] + ((int) b & inflate_mask[e]); + + b >>= e; k -= e; + + // decode distance base of block to copy + while (k < (15)) + { + // max bits for distance code + n--; + b |= (z.next_in[p++] & 0xff) << k; k += 8; + } + + t = b & md; + tp = td; + tp_index = td_index; + e = tp[(tp_index + t) * 3]; + + do + { + + b >>= (tp[(tp_index + t) * 3 + 1]); k -= (tp[(tp_index + t) * 3 + 1]); + + if ((e & 16) != 0) + { + // get extra bits to add to distance base + e &= 15; + while (k < (e)) + { + // get extra bits (up to 13) + n--; + b |= (z.next_in[p++] & 0xff) << k; k += 8; + } + + d = tp[(tp_index + t) * 3 + 2] + (b & inflate_mask[e]); + + b >>= (e); k -= (e); + + // do the copy + m -= c; + if (q >= d) + { + // offset before dest + // just copy + r = q - d; + if (q - r > 0 && 2 > (q - r)) + { + s.window[q++] = s.window[r++]; c--; // minimum count is three, + s.window[q++] = s.window[r++]; c--; // so unroll loop a little + } + else + { + Array.Copy(s.window, r, s.window, q, 2); + q += 2; r += 2; c -= 2; + } + } + else + { + // else offset after destination + r = q - d; + do + { + r += s.end; // force pointer in window + } + while (r < 0); // covers invalid distances + e = s.end - r; + if (c > e) + { + // if source crosses, + c -= e; // wrapped copy + if (q - r > 0 && e > (q - r)) + { + do + { + s.window[q++] = s.window[r++]; + } + while (--e != 0); + } + else + { + Array.Copy(s.window, r, s.window, q, e); + q += e; r += e; e = 0; + } + r = 0; // copy rest from start of window + } + } + + // copy all or what's left + if (q - r > 0 && c > (q - r)) + { + do + { + s.window[q++] = s.window[r++]; + } + while (--c != 0); + } + else + { + Array.Copy(s.window, r, s.window, q, c); + q += c; r += c; c = 0; + } + break; + } + else if ((e & 64) == 0) + { + t += tp[(tp_index + t) * 3 + 2]; + t += (b & inflate_mask[e]); + e = tp[(tp_index + t) * 3]; + } + else + { + z.msg = "invalid distance code"; + + c = z.avail_in - n; c = (k >> 3) < c?k >> 3:c; n += c; p -= c; k -= (c << 3); + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + + return Z_DATA_ERROR; + } + } + while (true); + break; + } + + if ((e & 64) == 0) + { + t += tp[(tp_index + t) * 3 + 2]; + t += (b & inflate_mask[e]); + if ((e = tp[(tp_index + t) * 3]) == 0) + { + + b >>= (tp[(tp_index + t) * 3 + 1]); k -= (tp[(tp_index + t) * 3 + 1]); + + s.window[q++] = (byte) tp[(tp_index + t) * 3 + 2]; + m--; + break; + } + } + else if ((e & 32) != 0) + { + + c = z.avail_in - n; c = (k >> 3) < c?k >> 3:c; n += c; p -= c; k -= (c << 3); + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + + return Z_STREAM_END; + } + else + { + z.msg = "invalid literal/length code"; + + c = z.avail_in - n; c = (k >> 3) < c?k >> 3:c; n += c; p -= c; k -= (c << 3); + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + + return Z_DATA_ERROR; + } + } + while (true); + } + while (m >= 258 && n >= 10); + + // not enough input or output--restore pointers and return + c = z.avail_in - n; c = (k >> 3) < c?k >> 3:c; n += c; p -= c; k -= (c << 3); + + s.bitb = b; s.bitk = k; + z.avail_in = n; z.total_in += p - z.next_in_index; z.next_in_index = p; + s.write = q; + + return Z_OK; + } + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + sealed class Inflate + { + + private const int MAX_WBITS = 15; // 32K LZ77 window + + // preset dictionary flag in zlib header + private const int PRESET_DICT = 0x20; + + internal const int Z_NO_FLUSH = 0; + internal const int Z_PARTIAL_FLUSH = 1; + internal const int Z_SYNC_FLUSH = 2; + internal const int Z_FULL_FLUSH = 3; + internal const int Z_FINISH = 4; + + private const int Z_DEFLATED = 8; + + private const int Z_OK = 0; + private const int Z_STREAM_END = 1; + private const int Z_NEED_DICT = 2; + private const int Z_ERRNO = - 1; + private const int Z_STREAM_ERROR = - 2; + private const int Z_DATA_ERROR = - 3; + private const int Z_MEM_ERROR = - 4; + private const int Z_BUF_ERROR = - 5; + private const int Z_VERSION_ERROR = - 6; + + private const int METHOD = 0; // waiting for method byte + private const int FLAG = 1; // waiting for flag byte + private const int DICT4 = 2; // four dictionary check bytes to go + private const int DICT3 = 3; // three dictionary check bytes to go + private const int DICT2 = 4; // two dictionary check bytes to go + private const int DICT1 = 5; // one dictionary check byte to go + private const int DICT0 = 6; // waiting for inflateSetDictionary + private const int BLOCKS = 7; // decompressing blocks + private const int CHECK4 = 8; // four check bytes to go + private const int CHECK3 = 9; // three check bytes to go + private const int CHECK2 = 10; // two check bytes to go + private const int CHECK1 = 11; // one check byte to go + private const int DONE = 12; // finished check, done + private const int BAD = 13; // got an error--stay here + + internal int mode; // current inflate mode + + // mode dependent information + internal int method; // if FLAGS, method byte + + // if CHECK, check values to compare + internal long[] was = new long[1]; // computed check value + internal long need; // stream check value + + // if BAD, inflateSync's marker bytes count + internal int marker; + + // mode independent information + internal int nowrap; // flag for no wrapper + internal int wbits; // log2(window size) (8..15, defaults to 15) + + internal InfBlocks blocks; // current inflate_blocks state + + internal int inflateReset(ZStream z) + { + if (z == null || z.istate == null) + return Z_STREAM_ERROR; + + z.total_in = z.total_out = 0; + z.msg = null; + z.istate.mode = z.istate.nowrap != 0?BLOCKS:METHOD; + z.istate.blocks.reset(z, null); + return Z_OK; + } + + internal int inflateEnd(ZStream z) + { + if (blocks != null) + blocks.free(z); + blocks = null; + // ZFREE(z, z->state); + return Z_OK; + } + + internal int inflateInit(ZStream z, int w) + { + z.msg = null; + blocks = null; + + // handle undocumented nowrap option (no zlib header or check) + nowrap = 0; + if (w < 0) + { + w = - w; + nowrap = 1; + } + + // set window size + if (w < 8 || w > 15) + { + inflateEnd(z); + return Z_STREAM_ERROR; + } + wbits = w; + + z.istate.blocks = new InfBlocks(z, z.istate.nowrap != 0?null:this, 1 << w); + + // reset state + inflateReset(z); + return Z_OK; + } + + internal int inflate(ZStream z, int f) + { + int r; + int b; + + if (z == null || z.istate == null || z.next_in == null) + return Z_STREAM_ERROR; + f = f == Z_FINISH?Z_BUF_ERROR:Z_OK; + r = Z_BUF_ERROR; + while (true) + { + //System.out.println("mode: "+z.istate.mode); + switch (z.istate.mode) + { + + case METHOD: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + if (((z.istate.method = z.next_in[z.next_in_index++]) & 0xf) != Z_DEFLATED) + { + z.istate.mode = BAD; + z.msg = "unknown compression method"; + z.istate.marker = 5; // can't try inflateSync + break; + } + if ((z.istate.method >> 4) + 8 > z.istate.wbits) + { + z.istate.mode = BAD; + z.msg = "invalid window size"; + z.istate.marker = 5; // can't try inflateSync + break; + } + z.istate.mode = FLAG; + goto case FLAG; + + case FLAG: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + b = (z.next_in[z.next_in_index++]) & 0xff; + + if ((((z.istate.method << 8) + b) % 31) != 0) + { + z.istate.mode = BAD; + z.msg = "incorrect header check"; + z.istate.marker = 5; // can't try inflateSync + break; + } + + if ((b & PRESET_DICT) == 0) + { + z.istate.mode = BLOCKS; + break; + } + z.istate.mode = DICT4; + goto case DICT4; + + case DICT4: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + z.istate.need = ((z.next_in[z.next_in_index++] & 0xff) << 24) & unchecked((int) 0xff000000L); + z.istate.mode = DICT3; + goto case DICT3; + + case DICT3: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + z.istate.need += (((z.next_in[z.next_in_index++] & 0xff) << 16) & 0xff0000L); + z.istate.mode = DICT2; + goto case DICT2; + + case DICT2: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + z.istate.need += (((z.next_in[z.next_in_index++] & 0xff) << 8) & 0xff00L); + z.istate.mode = DICT1; + goto case DICT1; + + case DICT1: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + z.istate.need += (z.next_in[z.next_in_index++] & 0xffL); + z.adler = z.istate.need; + z.istate.mode = DICT0; + return Z_NEED_DICT; + + case DICT0: + z.istate.mode = BAD; + z.msg = "need dictionary"; + z.istate.marker = 0; // can try inflateSync + return Z_STREAM_ERROR; + + case BLOCKS: + + r = z.istate.blocks.proc(z, r); + if (r == Z_DATA_ERROR) + { + z.istate.mode = BAD; + z.istate.marker = 0; // can try inflateSync + break; + } + if (r == Z_OK) + { + r = f; + } + if (r != Z_STREAM_END) + { + return r; + } + r = f; + z.istate.blocks.reset(z, z.istate.was); + if (z.istate.nowrap != 0) + { + z.istate.mode = DONE; + break; + } + z.istate.mode = CHECK4; + goto case CHECK4; + + case CHECK4: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + z.istate.need = ((z.next_in[z.next_in_index++] & 0xff) << 24) & unchecked((int) 0xff000000L); + z.istate.mode = CHECK3; + goto case CHECK3; + + case CHECK3: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + z.istate.need += (((z.next_in[z.next_in_index++] & 0xff) << 16) & 0xff0000L); + z.istate.mode = CHECK2; + goto case CHECK2; + + case CHECK2: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + z.istate.need += (((z.next_in[z.next_in_index++] & 0xff) << 8) & 0xff00L); + z.istate.mode = CHECK1; + goto case CHECK1; + + case CHECK1: + + if (z.avail_in == 0) + return r; r = f; + + z.avail_in--; z.total_in++; + z.istate.need += (z.next_in[z.next_in_index++] & 0xffL); + + if (((int) (z.istate.was[0])) != ((int) (z.istate.need))) + { + z.istate.mode = BAD; + z.msg = "incorrect data check"; + z.istate.marker = 5; // can't try inflateSync + break; + } + + z.istate.mode = DONE; + goto case DONE; + + case DONE: + return Z_STREAM_END; + + case BAD: + return Z_DATA_ERROR; + + default: + return Z_STREAM_ERROR; + + } + } + } + + + internal int inflateSetDictionary(ZStream z, byte[] dictionary, int dictLength) + { + int index = 0; + int length = dictLength; + if (z == null || z.istate == null || z.istate.mode != DICT0) + return Z_STREAM_ERROR; + + if (z._adler.adler32(1L, dictionary, 0, dictLength) != z.adler) + { + return Z_DATA_ERROR; + } + + z.adler = z._adler.adler32(0, null, 0, 0); + + if (length >= (1 << z.istate.wbits)) + { + length = (1 << z.istate.wbits) - 1; + index = dictLength - length; + } + z.istate.blocks.set_dictionary(dictionary, index, length); + z.istate.mode = BLOCKS; + return Z_OK; + } + + private static byte[] mark = new byte[]{(byte) 0, (byte) 0, (byte) SupportClass.Identity(0xff), (byte) SupportClass.Identity(0xff)}; + + internal int inflateSync(ZStream z) + { + int n; // number of bytes to look at + int p; // pointer to bytes + int m; // number of marker bytes found in a row + long r, w; // temporaries to save total_in and total_out + + // set up + if (z == null || z.istate == null) + return Z_STREAM_ERROR; + if (z.istate.mode != BAD) + { + z.istate.mode = BAD; + z.istate.marker = 0; + } + if ((n = z.avail_in) == 0) + return Z_BUF_ERROR; + p = z.next_in_index; + m = z.istate.marker; + + // search + while (n != 0 && m < 4) + { + if (z.next_in[p] == mark[m]) + { + m++; + } + else if (z.next_in[p] != 0) + { + m = 0; + } + else + { + m = 4 - m; + } + p++; n--; + } + + // restore + z.total_in += p - z.next_in_index; + z.next_in_index = p; + z.avail_in = n; + z.istate.marker = m; + + // return no joy or set up to restart on a new block + if (m != 4) + { + return Z_DATA_ERROR; + } + r = z.total_in; w = z.total_out; + inflateReset(z); + z.total_in = r; z.total_out = w; + z.istate.mode = BLOCKS; + return Z_OK; + } + + // Returns true if inflate is currently at the end of a block generated + // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + // implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH + // but removes the length bytes of the resulting empty stored block. When + // decompressing, PPP checks that at the end of input packet, inflate is + // waiting for these length bytes. + internal int inflateSyncPoint(ZStream z) + { + if (z == null || z.istate == null || z.istate.blocks == null) + return Z_STREAM_ERROR; + return z.istate.blocks.sync_point(); + } + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + sealed class InfTree + { + + private const int MANY = 1440; + + private const int Z_OK = 0; + private const int Z_STREAM_END = 1; + private const int Z_NEED_DICT = 2; + private const int Z_ERRNO = - 1; + private const int Z_STREAM_ERROR = - 2; + private const int Z_DATA_ERROR = - 3; + private const int Z_MEM_ERROR = - 4; + private const int Z_BUF_ERROR = - 5; + private const int Z_VERSION_ERROR = - 6; + + internal const int fixed_bl = 9; + internal const int fixed_bd = 5; + + + internal static readonly int[] fixed_tl = new int[]{96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, + 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, + 14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255}; + + internal static readonly int[] fixed_td = new int[]{80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577}; + + // Tables for deflate from PKZIP's appnote.txt. + internal static readonly int[] cplens = new int[]{3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + + internal static readonly int[] cplext = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; + + internal static readonly int[] cpdist = new int[]{1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; + + internal static readonly int[] cpdext = new int[]{0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + + // If BMAX needs to be larger than 16, then h and x[] should be uLong. + internal const int BMAX = 15; // maximum bit length of any code + + internal static int huft_build(int[] b, int bindex, int n, int s, int[] d, int[] e, int[] t, int[] m, int[] hp, int[] hn, int[] v) + { + // Given a list of code lengths and a maximum table size, make a set of + // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR + // if the given code set is incomplete (the tables are still built in this + // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of + // lengths), or Z_MEM_ERROR if not enough memory. + + int a; // counter for codes of length k + int[] c = new int[BMAX + 1]; // bit length count table + int f; // i repeats in table every f entries + int g; // maximum code length + int h; // table level + int i; // counter, current code + int j; // counter + int k; // number of bits in current code + int l; // bits per table (returned in m) + int mask; // (1 << w) - 1, to avoid cc -O bug on HP + int p; // pointer into c[], b[], or v[] + int q; // points to current table + int[] r = new int[3]; // table entry for structure assignment + int[] u = new int[BMAX]; // table stack + int w; // bits before this table == (l * h) + int[] x = new int[BMAX + 1]; // bit offsets, then code stack + int xp; // pointer into x + int y; // number of dummy codes added + int z; // number of entries in current table + + // Generate counts for each bit length + + p = 0; i = n; + do + { + c[b[bindex + p]]++; p++; i--; // assume all entries <= BMAX + } + while (i != 0); + + if (c[0] == n) + { + // null input--all zero length codes + t[0] = - 1; + m[0] = 0; + return Z_OK; + } + + // Find minimum and maximum length, bound *m by those + l = m[0]; + for (j = 1; j <= BMAX; j++) + if (c[j] != 0) + break; + k = j; // minimum code length + if (l < j) + { + l = j; + } + for (i = BMAX; i != 0; i--) + { + if (c[i] != 0) + break; + } + g = i; // maximum code length + if (l > i) + { + l = i; + } + m[0] = l; + + // Adjust last length count to fill out codes, if needed + for (y = 1 << j; j < i; j++, y <<= 1) + { + if ((y -= c[j]) < 0) + { + return Z_DATA_ERROR; + } + } + if ((y -= c[i]) < 0) + { + return Z_DATA_ERROR; + } + c[i] += y; + + // Generate starting offsets into the value table for each length + x[1] = j = 0; + p = 1; xp = 2; + while (--i != 0) + { + // note that i == g from above + x[xp] = (j += c[p]); + xp++; + p++; + } + + // Make a table of values in order of bit lengths + i = 0; p = 0; + do + { + if ((j = b[bindex + p]) != 0) + { + v[x[j]++] = i; + } + p++; + } + while (++i < n); + n = x[g]; // set n to length of v + + // Generate the Huffman codes and for each, make the table entries + x[0] = i = 0; // first Huffman code is zero + p = 0; // grab values in bit order + h = - 1; // no tables yet--level -1 + w = - l; // bits decoded == (l * h) + u[0] = 0; // just to keep compilers happy + q = 0; // ditto + z = 0; // ditto + + // go through the bit lengths (k already is bits in shortest code) + for (; k <= g; k++) + { + a = c[k]; + while (a-- != 0) + { + // here i is the Huffman code of length k bits for value *p + // make tables up to required level + while (k > w + l) + { + h++; + w += l; // previous table always l bits + // compute minimum size table less than or equal to l bits + z = g - w; + z = (z > l)?l:z; // table size upper limit + if ((f = 1 << (j = k - w)) > a + 1) + { + // try a k-w bit table + // too few codes for k-w bit table + f -= (a + 1); // deduct codes from patterns left + xp = k; + if (j < z) + { + while (++j < z) + { + // try smaller tables up to z bits + if ((f <<= 1) <= c[++xp]) + break; // enough codes to use up j bits + f -= c[xp]; // else deduct codes from patterns + } + } + } + z = 1 << j; // table entries for j-bit table + + // allocate new table + if (hn[0] + z > MANY) + // (note: doesn't matter for fixed) + return Z_DATA_ERROR; // overflow of MANY + u[h] = q = hn[0]; // DEBUG + hn[0] += z; + + // connect to last table, if there is one + if (h != 0) + { + x[h] = i; // save pattern for backing up + r[0] = (byte) j; // bits in this table + r[1] = (byte) l; // bits to dump before this table + j = SupportClass.URShift(i, (w - l)); + r[2] = (int) (q - u[h - 1] - j); // offset to this table + Array.Copy(r, 0, hp, (u[h - 1] + j) * 3, 3); // connect to last table + } + else + { + t[0] = q; // first table is returned result + } + } + + // set up table entry in r + r[1] = (byte) (k - w); + if (p >= n) + { + r[0] = 128 + 64; // out of values--invalid code + } + else if (v[p] < s) + { + r[0] = (byte) (v[p] < 256?0:32 + 64); // 256 is end-of-block + r[2] = v[p++]; // simple code is just the value + } + else + { + r[0] = (byte) (e[v[p] - s] + 16 + 64); // non-simple--look up in lists + r[2] = d[v[p++] - s]; + } + + // fill code-like entries with r + f = 1 << (k - w); + for (j = SupportClass.URShift(i, w); j < z; j += f) + { + Array.Copy(r, 0, hp, (q + j) * 3, 3); + } + + // backwards increment the k-bit code i + for (j = 1 << (k - 1); (i & j) != 0; j = SupportClass.URShift(j, 1)) + { + i ^= j; + } + i ^= j; + + // backup over finished tables + mask = (1 << w) - 1; // needed on HP, cc -O bug + while ((i & mask) != x[h]) + { + h--; // don't need to update q + w -= l; + mask = (1 << w) - 1; + } + } + } + // Return Z_BUF_ERROR if we were given an incomplete table + return y != 0 && g != 1?Z_BUF_ERROR:Z_OK; + } + + internal static int inflate_trees_bits(int[] c, int[] bb, int[] tb, int[] hp, ZStream z) + { + int r; + int[] hn = new int[1]; // hufts used in space + int[] v = new int[19]; // work area for huft_build + + r = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v); + + if (r == Z_DATA_ERROR) + { + z.msg = "oversubscribed dynamic bit lengths tree"; + } + else if (r == Z_BUF_ERROR || bb[0] == 0) + { + z.msg = "incomplete dynamic bit lengths tree"; + r = Z_DATA_ERROR; + } + return r; + } + + internal static int inflate_trees_dynamic(int nl, int nd, int[] c, int[] bl, int[] bd, int[] tl, int[] td, int[] hp, ZStream z) + { + int r; + int[] hn = new int[1]; // hufts used in space + int[] v = new int[288]; // work area for huft_build + + // build literal/length tree + r = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v); + if (r != Z_OK || bl[0] == 0) + { + if (r == Z_DATA_ERROR) + { + z.msg = "oversubscribed literal/length tree"; + } + else if (r != Z_MEM_ERROR) + { + z.msg = "incomplete literal/length tree"; + r = Z_DATA_ERROR; + } + return r; + } + + // build distance tree + r = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v); + + if (r != Z_OK || (bd[0] == 0 && nl > 257)) + { + if (r == Z_DATA_ERROR) + { + z.msg = "oversubscribed distance tree"; + } + else if (r == Z_BUF_ERROR) + { + z.msg = "incomplete distance tree"; + r = Z_DATA_ERROR; + } + else if (r != Z_MEM_ERROR) + { + z.msg = "empty distance tree with lengths"; + r = Z_DATA_ERROR; + } + return r; + } + + return Z_OK; + } + + internal static int inflate_trees_fixed(int[] bl, int[] bd, int[][] tl, int[][] td, ZStream z) + { + bl[0] = fixed_bl; + bd[0] = fixed_bd; + tl[0] = fixed_tl; + td[0] = fixed_td; + return Z_OK; + } + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + sealed class StaticTree + { + private const int MAX_BITS = 15; + + private const int BL_CODES = 19; + private const int D_CODES = 30; + private const int LITERALS = 256; + private const int LENGTH_CODES = 29; + private static readonly int L_CODES = (LITERALS + 1 + LENGTH_CODES); + + // Bit length codes must not exceed MAX_BL_BITS bits + internal const int MAX_BL_BITS = 7; + + internal static readonly short[] static_ltree = new short[]{12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8, 28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8, 2, 8, 130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8, 18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8, 10, 8, 138, 8, 74, 8, 202, 8, 42, 8, 170, 8, 106, 8, 234, 8, 26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8, 6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8, 22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8, 14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8, 30, 8, 158, 8, 94, 8, 222, 8, 62, 8, 190, 8, 126, 8, 254, 8, 1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8, 17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113, 8, 241, 8, 9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8, 25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8, 5, 8, 133, 8, 69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8, 21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8, 13, 8, 141, 8, 77, 8, 205, 8, 45, 8, 173, 8, 109, 8, 237, 8, 29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8, 19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9, 51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9, 11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9, 43, 9, 299, 9, 171, 9, 427, 9, 107, 9, 363, 9, 235, 9, 491, 9, 27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9, 59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379, 9, 251, 9, 507, 9, 7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9, 39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9, 23, 9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9, 55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9, 15, 9, 271, 9, 143, 9, 399, 9, 79, 9, 335, 9, 207, 9, 463, 9, 47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9, 31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9, 223, 9, 479, 9, 63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9, 0, 7, 64, 7 + , 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7, 8, 7, 72, 7, 40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7, 4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7, 3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8, 99, 8, 227, 8}; + + internal static readonly short[] static_dtree = new short[]{0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5, 2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5, 1, 5, 17, 5, 9, 5, 25, 5, 5, 5, 21, 5, 13, 5, 29, 5, 3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5}; + + internal static StaticTree static_l_desc; + + internal static StaticTree static_d_desc; + + internal static StaticTree static_bl_desc; + + internal short[] static_tree; // static tree or null + internal int[] extra_bits; // extra bits for each code or null + internal int extra_base; // base index for extra_bits + internal int elems; // max number of elements in the tree + internal int max_length; // max bit length for the codes + + internal StaticTree(short[] static_tree, int[] extra_bits, int extra_base, int elems, int max_length) + { + this.static_tree = static_tree; + this.extra_bits = extra_bits; + this.extra_base = extra_base; + this.elems = elems; + this.max_length = max_length; + } + static StaticTree() + { + static_l_desc = new StaticTree(static_ltree, Tree.extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTree(static_dtree, Tree.extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTree(null, Tree.extra_blbits, 0, BL_CODES, MAX_BL_BITS); + } + } +} + + + +namespace CoreUtil.Internal +{ + internal class SupportClass + { + /// + /// This method returns the literal value received + /// + /// The literal to return + /// The received value + public static long Identity(long literal) + { + return literal; + } + + /// + /// This method returns the literal value received + /// + /// The literal to return + /// The received value + public static ulong Identity(ulong literal) + { + return literal; + } + + /// + /// This method returns the literal value received + /// + /// The literal to return + /// The received value + public static float Identity(float literal) + { + return literal; + } + + /// + /// This method returns the literal value received + /// + /// The literal to return + /// The received value + public static double Identity(double literal) + { + return literal; + } + + /*******************************/ + /// + /// Performs an unsigned bitwise right shift with the specified number + /// + /// Number to operate on + /// Ammount of bits to shift + /// The resulting number from the shift operation + public static int URShift(int number, int bits) + { + if ( number >= 0) + return number >> bits; + else + return (number >> bits) + (2 << ~bits); + } + + /// + /// Performs an unsigned bitwise right shift with the specified number + /// + /// Number to operate on + /// Ammount of bits to shift + /// The resulting number from the shift operation + public static int URShift(int number, long bits) + { + return URShift(number, (int)bits); + } + + /// + /// Performs an unsigned bitwise right shift with the specified number + /// + /// Number to operate on + /// Ammount of bits to shift + /// The resulting number from the shift operation + public static long URShift(long number, int bits) + { + if ( number >= 0) + return number >> bits; + else + return (number >> bits) + (2L << ~bits); + } + + /// + /// Performs an unsigned bitwise right shift with the specified number + /// + /// Number to operate on + /// Ammount of bits to shift + /// The resulting number from the shift operation + public static long URShift(long number, long bits) + { + return URShift(number, (int)bits); + } + + /*******************************/ + /// Reads a number of characters from the current source Stream and writes the data to the target array at the specified index. + /// The source Stream to read from. + /// Contains the array of characteres read from the source Stream. + /// The starting index of the target array. + /// The maximum number of characters to read from the source Stream. + /// The number of characters read. The number will be less than or equal to count depending on the data available in the source Stream. Returns -1 if the end of the stream is reached. + public static System.Int32 ReadInput(System.IO.Stream sourceStream, byte[] target, int start, int count) + { + // Returns 0 bytes if not enough space in target + if (target.Length == 0) + return 0; + + byte[] receiver = new byte[target.Length]; + int bytesRead = sourceStream.Read(receiver, start, count); + + // Returns -1 if EOF + if (bytesRead == 0) + return -1; + + for(int i = start; i < start + bytesRead; i++) + target[i] = (byte)receiver[i]; + + return bytesRead; + } + + /// Reads a number of characters from the current source TextReader and writes the data to the target array at the specified index. + /// The source TextReader to read from + /// Contains the array of characteres read from the source TextReader. + /// The starting index of the target array. + /// The maximum number of characters to read from the source TextReader. + /// The number of characters read. The number will be less than or equal to count depending on the data available in the source TextReader. Returns -1 if the end of the stream is reached. + public static System.Int32 ReadInput(System.IO.TextReader sourceTextReader, byte[] target, int start, int count) + { + // Returns 0 bytes if not enough space in target + if (target.Length == 0) return 0; + + char[] charArray = new char[target.Length]; + int bytesRead = sourceTextReader.Read(charArray, start, count); + + // Returns -1 if EOF + if (bytesRead == 0) return -1; + + for(int index=start; index + /// Converts a string to an array of bytes + /// + /// The string to be converted + /// The new array of bytes + public static byte[] ToByteArray(System.String sourceString) + { + return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString); + } + + /// + /// Converts an array of bytes to an array of chars + /// + /// The array of bytes to convert + /// The new array of chars + public static char[] ToCharArray(byte[] byteArray) + { + return System.Text.UTF8Encoding.UTF8.GetChars(byteArray); + } + + + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + sealed class Tree + { + private const int MAX_BITS = 15; + private const int BL_CODES = 19; + private const int D_CODES = 30; + private const int LITERALS = 256; + private const int LENGTH_CODES = 29; + private static readonly int L_CODES = (LITERALS + 1 + LENGTH_CODES); + private static readonly int HEAP_SIZE = (2 * L_CODES + 1); + + // Bit length codes must not exceed MAX_BL_BITS bits + internal const int MAX_BL_BITS = 7; + + // end of block literal code + internal const int END_BLOCK = 256; + + // repeat previous bit length 3-6 times (2 bits of repeat count) + internal const int REP_3_6 = 16; + + // repeat a zero length 3-10 times (3 bits of repeat count) + internal const int REPZ_3_10 = 17; + + // repeat a zero length 11-138 times (7 bits of repeat count) + internal const int REPZ_11_138 = 18; + + // extra bits for each length code + internal static readonly int[] extra_lbits = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0}; + + // extra bits for each distance code + internal static readonly int[] extra_dbits = new int[]{0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + + // extra bits for each bit length code + internal static readonly int[] extra_blbits = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7}; + + internal static readonly byte[] bl_order = new byte[]{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + + // The lengths of the bit length codes are sent in order of decreasing + // probability, to avoid transmitting the lengths for unused bit + // length codes. + + internal const int Buf_size = 8 * 2; + + // see definition of array dist_code below + internal const int DIST_CODE_LEN = 512; + + internal static readonly byte[] _dist_code = new byte[]{0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29}; + + internal static readonly byte[] _length_code = new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28}; + + internal static readonly int[] base_length = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0}; + + internal static readonly int[] base_dist = new int[]{0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576}; + + // Mapping from a distance to a distance code. dist is the distance - 1 and + // must not have side effects. _dist_code[256] and _dist_code[257] are never + // used. + internal static int d_code(int dist) + { + return ((dist) < 256?_dist_code[dist]:_dist_code[256 + (SupportClass.URShift((dist), 7))]); + } + + internal short[] dyn_tree; // the dynamic tree + internal int max_code; // largest code with non zero frequency + internal StaticTree stat_desc; // the corresponding static tree + + // Compute the optimal bit lengths for a tree and update the total bit length + // for the current block. + // IN assertion: the fields freq and dad are set, heap[heap_max] and + // above are the tree nodes sorted by increasing frequency. + // OUT assertions: the field len is set to the optimal bit length, the + // array bl_count contains the frequencies for each bit length. + // The length opt_len is updated; static_len is also updated if stree is + // not null. + internal void gen_bitlen(Deflate s) + { + short[] tree = dyn_tree; + short[] stree = stat_desc.static_tree; + int[] extra = stat_desc.extra_bits; + int base_Renamed = stat_desc.extra_base; + int max_length = stat_desc.max_length; + int h; // heap index + int n, m; // iterate over the tree elements + int bits; // bit length + int xbits; // extra bits + short f; // frequency + int overflow = 0; // number of elements with bit length too large + + for (bits = 0; bits <= MAX_BITS; bits++) + s.bl_count[bits] = 0; + + // In a first pass, compute the optimal bit lengths (which may + // overflow in the case of the bit length tree). + tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) + { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; + if (bits > max_length) + { + bits = max_length; overflow++; + } + tree[n * 2 + 1] = (short) bits; + // We overwrite tree[n*2+1] which is no longer needed + + if (n > max_code) + continue; // not a leaf node + + s.bl_count[bits]++; + xbits = 0; + if (n >= base_Renamed) + xbits = extra[n - base_Renamed]; + f = tree[n * 2]; + s.opt_len += f * (bits + xbits); + if (stree != null) + s.static_len += f * (stree[n * 2 + 1] + xbits); + } + if (overflow == 0) + return ; + + // This happens for example on obj2 and pic of the Calgary corpus + // Find the first bit length which could increase: + do + { + bits = max_length - 1; + while (s.bl_count[bits] == 0) + bits--; + s.bl_count[bits]--; // move one leaf down the tree + s.bl_count[bits + 1] = (short) (s.bl_count[bits + 1] + 2); // move one overflow item as its brother + s.bl_count[max_length]--; + // The brother of the overflow item also moves one step up, + // but this does not affect bl_count[max_length] + overflow -= 2; + } + while (overflow > 0); + + for (bits = max_length; bits != 0; bits--) + { + n = s.bl_count[bits]; + while (n != 0) + { + m = s.heap[--h]; + if (m > max_code) + continue; + if (tree[m * 2 + 1] != bits) + { + s.opt_len = (int) (s.opt_len + ((long) bits - (long) tree[m * 2 + 1]) * (long) tree[m * 2]); + tree[m * 2 + 1] = (short) bits; + } + n--; + } + } + } + + // Construct one Huffman tree and assigns the code bit strings and lengths. + // Update the total bit length for the current block. + // IN assertion: the field freq is set for all tree elements. + // OUT assertions: the fields len and code are set to the optimal bit length + // and corresponding code. The length opt_len is updated; static_len is + // also updated if stree is not null. The field max_code is set. + internal void build_tree(Deflate s) + { + short[] tree = dyn_tree; + short[] stree = stat_desc.static_tree; + int elems = stat_desc.elems; + int n, m; // iterate over heap elements + int max_code = - 1; // largest code with non zero frequency + int node; // new node being created + + // Construct the initial heap, with least frequent element in + // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + // heap[0] is not used. + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) + { + if (tree[n * 2] != 0) + { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + } + else + { + tree[n * 2 + 1] = 0; + } + } + + // The pkzip format requires that at least one distance code exists, + // and that at least one bit should be sent even if there is only one + // possible code. So to avoid special checks later on we force at least + // two codes of non zero frequency. + while (s.heap_len < 2) + { + node = s.heap[++s.heap_len] = (max_code < 2?++max_code:0); + tree[node * 2] = 1; + s.depth[node] = 0; + s.opt_len--; + if (stree != null) + s.static_len -= stree[node * 2 + 1]; + // node is 0 or 1 so it does not have extra bits + } + this.max_code = max_code; + + // The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + // establish sub-heaps of increasing lengths: + + for (n = s.heap_len / 2; n >= 1; n--) + s.pqdownheap(tree, n); + + // Construct the Huffman tree by repeatedly combining the least two + // frequent nodes. + + node = elems; // next internal node of the tree + do + { + // n = node of least frequency + n = s.heap[1]; + s.heap[1] = s.heap[s.heap_len--]; + s.pqdownheap(tree, 1); + m = s.heap[1]; // m = node of next least frequency + + s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency + s.heap[--s.heap_max] = m; + + // Create a new node father of n and m + tree[node * 2] = (short) (tree[n * 2] + tree[m * 2]); + s.depth[node] = (byte) (System.Math.Max((byte) s.depth[n], (byte) s.depth[m]) + 1); + tree[n * 2 + 1] = tree[m * 2 + 1] = (short) node; + + // and insert the new node in the heap + s.heap[1] = node++; + s.pqdownheap(tree, 1); + } + while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1]; + + // At this point, the fields freq and dad are set. We can now + // generate the bit lengths. + + gen_bitlen(s); + + // The field len is now set, we can generate the bit codes + gen_codes(tree, max_code, s.bl_count); + } + + // Generate the codes for a given tree and bit counts (which need not be + // optimal). + // IN assertion: the array bl_count contains the bit length statistics for + // the given tree and the field len is set for all tree elements. + // OUT assertion: the field code is set for all tree elements of non + // zero code length. + internal static void gen_codes(short[] tree, int max_code, short[] bl_count) + { + short[] next_code = new short[MAX_BITS + 1]; // next code value for each bit length + short code = 0; // running code value + int bits; // bit index + int n; // code index + + // The distribution counts are first used to generate the code values + // without bit reversal. + for (bits = 1; bits <= MAX_BITS; bits++) + { + next_code[bits] = code = (short) ((code + bl_count[bits - 1]) << 1); + } + + // Check that the bit counts in bl_count are consistent. The last code + // must be all ones. + //Assert (code + bl_count[MAX_BITS]-1 == (1< 0); + return SupportClass.URShift(res, 1); + } + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2001 Lapo Luchini. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS +OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + internal class ZInputStream:System.IO.BinaryReader + { + internal void InitBlock() + { + flush = zlibConst.Z_NO_FLUSH; + buf = new byte[bufsize]; + } + virtual public int FlushMode + { + get + { + return (flush); + } + + set + { + this.flush = value; + } + + } + /// Returns the total number of bytes input so far. + virtual public long TotalIn + { + get + { + return z.total_in; + } + + } + /// Returns the total number of bytes output so far. + virtual public long TotalOut + { + get + { + return z.total_out; + } + + } + + protected ZStream z = new ZStream(); + protected int bufsize = 512; + protected int flush; + protected byte[] buf, buf1 = new byte[1]; + protected bool compress; + + internal System.IO.Stream in_Renamed = null; + + public ZInputStream(System.IO.Stream in_Renamed):base(in_Renamed) + { + InitBlock(); + this.in_Renamed = in_Renamed; + z.inflateInit(); + compress = false; + z.next_in = buf; + z.next_in_index = 0; + z.avail_in = 0; + } + + public ZInputStream(System.IO.Stream in_Renamed, int level):base(in_Renamed) + { + InitBlock(); + this.in_Renamed = in_Renamed; + z.deflateInit(level); + compress = true; + z.next_in = buf; + z.next_in_index = 0; + z.avail_in = 0; + } + + /*public int available() throws IOException { + return inf.finished() ? 0 : 1; + }*/ + + public override int Read() + { + if (read(buf1, 0, 1) == - 1) + return (- 1); + return (buf1[0] & 0xFF); + } + + internal bool nomoreinput = false; + + public int read(byte[] b, int off, int len) + { + if (len == 0) + return (0); + int err; + z.next_out = b; + z.next_out_index = off; + z.avail_out = len; + do + { + if ((z.avail_in == 0) && (!nomoreinput)) + { + // if buffer is empty and more input is avaiable, refill it + z.next_in_index = 0; + z.avail_in = SupportClass.ReadInput(in_Renamed, buf, 0, bufsize); //(bufsize Returns the total number of bytes input so far. + virtual public long TotalIn + { + get + { + return z.total_in; + } + + } + /// Returns the total number of bytes output so far. + virtual public long TotalOut + { + get + { + return z.total_out; + } + + } + + protected internal ZStream z = new ZStream(); + protected internal int bufsize = 4096; + protected internal int flush_Renamed_Field; + protected internal byte[] buf, buf1 = new byte[1]; + protected internal bool compress; + + private System.IO.Stream out_Renamed; + + public ZOutputStream(System.IO.Stream out_Renamed):base() + { + InitBlock(); + this.out_Renamed = out_Renamed; + z.inflateInit(); + compress = false; + } + + public ZOutputStream(System.IO.Stream out_Renamed, int level):base() + { + InitBlock(); + this.out_Renamed = out_Renamed; + z.deflateInit(level); + compress = true; + } + + public void WriteByte(int b) + { + buf1[0] = (byte) b; + Write(buf1, 0, 1); + } + //UPGRADE_TODO: The differences in the Expected value of parameters for method 'WriteByte' may cause compilation errors. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1092_3"' + public override void WriteByte(byte b) + { + WriteByte((int) b); + } + + public override void Write(System.Byte[] b1, int off, int len) + { + if (len == 0) + return ; + int err; + byte[] b = new byte[b1.Length]; + System.Array.Copy(b1, 0, b, 0, b1.Length); + z.next_in = b; + z.next_in_index = off; + z.avail_in = len; + do + { + z.next_out = buf; + z.next_out_index = 0; + z.avail_out = bufsize; + if (compress) + err = z.deflate(flush_Renamed_Field); + else + err = z.inflate(flush_Renamed_Field); + if (err != zlibConst.Z_OK && err != zlibConst.Z_STREAM_END) + throw new ZStreamException((compress?"de":"in") + "flating: " + z.msg); + out_Renamed.Write(buf, 0, bufsize - z.avail_out); + } + while (z.avail_in > 0 || z.avail_out == 0); + } + + public virtual void finish() + { + int err; + do + { + z.next_out = buf; + z.next_out_index = 0; + z.avail_out = bufsize; + if (compress) + { + err = z.deflate(zlibConst.Z_FINISH); + } + else + { + err = z.inflate(zlibConst.Z_FINISH); + } + if (err != zlibConst.Z_STREAM_END && err != zlibConst.Z_OK) + throw new ZStreamException((compress?"de":"in") + "flating: " + z.msg); + if (bufsize - z.avail_out > 0) + { + out_Renamed.Write(buf, 0, bufsize - z.avail_out); + } + } + while (z.avail_in > 0 || z.avail_out == 0); + try + { + Flush(); + } + catch + { + } + } + public virtual void end() + { + if (compress) + { + z.deflateEnd(); + } + else + { + z.inflateEnd(); + } + z.free(); + z = null; + } + public override void Close() + { + try + { + try + { + finish(); + } + catch + { + } + } + finally + { + end(); + out_Renamed.Close(); + out_Renamed = null; + } + } + + public override void Flush() + { + out_Renamed.Flush(); + } + //UPGRADE_TODO: The following method was automatically generated and it must be implemented in order to preserve the class logic. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1232_3"' + public override System.Int32 Read(System.Byte[] buffer, System.Int32 offset, System.Int32 count) + { + return 0; + } + //UPGRADE_TODO: The following method was automatically generated and it must be implemented in order to preserve the class logic. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1232_3"' + public override void SetLength(System.Int64 value) + { + } + //UPGRADE_TODO: The following method was automatically generated and it must be implemented in order to preserve the class logic. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1232_3"' + public override System.Int64 Seek(System.Int64 offset, System.IO.SeekOrigin origin) + { + return 0; + } + //UPGRADE_TODO: The following property was automatically generated and it must be implemented in order to preserve the class logic. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1232_3"' + public override System.Boolean CanRead + { + get + { + return false; + } + + } + //UPGRADE_TODO: The following property was automatically generated and it must be implemented in order to preserve the class logic. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1232_3"' + public override System.Boolean CanSeek + { + get + { + return false; + } + + } + //UPGRADE_TODO: The following property was automatically generated and it must be implemented in order to preserve the class logic. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1232_3"' + public override System.Boolean CanWrite + { + get + { + return false; + } + + } + //UPGRADE_TODO: The following property was automatically generated and it must be implemented in order to preserve the class logic. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1232_3"' + public override System.Int64 Length + { + get + { + return 0; + } + + } + //UPGRADE_TODO: The following property was automatically generated and it must be implemented in order to preserve the class logic. 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="jlca1232_3"' + public override System.Int64 Position + { + get + { + return 0; + } + + set + { + } + + } + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + sealed internal class ZStream + { + + private const int MAX_WBITS = 15; // 32K LZ77 window + private static readonly int DEF_WBITS = MAX_WBITS; + + private const int Z_NO_FLUSH = 0; + private const int Z_PARTIAL_FLUSH = 1; + private const int Z_SYNC_FLUSH = 2; + private const int Z_FULL_FLUSH = 3; + private const int Z_FINISH = 4; + + private const int MAX_MEM_LEVEL = 9; + + private const int Z_OK = 0; + private const int Z_STREAM_END = 1; + private const int Z_NEED_DICT = 2; + private const int Z_ERRNO = - 1; + private const int Z_STREAM_ERROR = - 2; + private const int Z_DATA_ERROR = - 3; + private const int Z_MEM_ERROR = - 4; + private const int Z_BUF_ERROR = - 5; + private const int Z_VERSION_ERROR = - 6; + + public byte[] next_in; // next input byte + public int next_in_index; + public int avail_in; // number of bytes available at next_in + public long total_in; // total nb of input bytes read so far + + public byte[] next_out; // next output byte should be put there + public int next_out_index; + public int avail_out; // remaining free space at next_out + public long total_out; // total nb of bytes output so far + + public System.String msg; + + internal Deflate dstate; + internal Inflate istate; + + internal int data_type; // best guess about the data type: ascii or binary + + public long adler; + internal Adler32 _adler = new Adler32(); + + public int inflateInit() + { + return inflateInit(DEF_WBITS); + } + public int inflateInit(int w) + { + istate = new Inflate(); + return istate.inflateInit(this, w); + } + + public int inflate(int f) + { + if (istate == null) + return Z_STREAM_ERROR; + return istate.inflate(this, f); + } + public int inflateEnd() + { + if (istate == null) + return Z_STREAM_ERROR; + int ret = istate.inflateEnd(this); + istate = null; + return ret; + } + public int inflateSync() + { + if (istate == null) + return Z_STREAM_ERROR; + return istate.inflateSync(this); + } + public int inflateSetDictionary(byte[] dictionary, int dictLength) + { + if (istate == null) + return Z_STREAM_ERROR; + return istate.inflateSetDictionary(this, dictionary, dictLength); + } + + public int deflateInit(int level) + { + return deflateInit(level, MAX_WBITS); + } + public int deflateInit(int level, int bits) + { + dstate = new Deflate(); + return dstate.deflateInit(this, level, bits); + } + public int deflate(int flush) + { + if (dstate == null) + { + return Z_STREAM_ERROR; + } + return dstate.deflate(this, flush); + } + public int deflateEnd() + { + if (dstate == null) + return Z_STREAM_ERROR; + int ret = dstate.deflateEnd(); + dstate = null; + return ret; + } + public int deflateParams(int level, int strategy) + { + if (dstate == null) + return Z_STREAM_ERROR; + return dstate.deflateParams(this, level, strategy); + } + public int deflateSetDictionary(byte[] dictionary, int dictLength) + { + if (dstate == null) + return Z_STREAM_ERROR; + return dstate.deflateSetDictionary(this, dictionary, dictLength); + } + + // Flush as much pending output as possible. All deflate() output goes + // through this function so some applications may wish to modify it + // to avoid allocating a large strm->next_out buffer and copying into it. + // (See also read_buf()). + internal void flush_pending() + { + int len = dstate.pending; + + if (len > avail_out) + len = avail_out; + if (len == 0) + return ; + + if (dstate.pending_buf.Length <= dstate.pending_out || next_out.Length <= next_out_index || dstate.pending_buf.Length < (dstate.pending_out + len) || next_out.Length < (next_out_index + len)) + { + //System.Console.Out.WriteLine(dstate.pending_buf.Length + ", " + dstate.pending_out + ", " + next_out.Length + ", " + next_out_index + ", " + len); + //System.Console.Out.WriteLine("avail_out=" + avail_out); + } + + Array.Copy(dstate.pending_buf, dstate.pending_out, next_out, next_out_index, len); + + next_out_index += len; + dstate.pending_out += len; + total_out += len; + avail_out -= len; + dstate.pending -= len; + if (dstate.pending == 0) + { + dstate.pending_out = 0; + } + } + + // Read a new buffer from the current input stream, update the adler32 + // and total number of bytes read. All deflate() input goes through + // this function so some applications may wish to modify it to avoid + // allocating a large strm->next_in buffer and copying from it. + // (See also flush_pending()). + internal int read_buf(byte[] buf, int start, int size) + { + int len = avail_in; + + if (len > size) + len = size; + if (len == 0) + return 0; + + avail_in -= len; + + if (dstate.noheader == 0) + { + adler = _adler.adler32(adler, next_in, next_in_index, len); + } + Array.Copy(next_in, next_in_index, buf, start, len); + next_in_index += len; + total_in += len; + return len; + } + + public void free() + { + next_in = null; + next_out = null; + msg = null; + _adler = null; + } + } +}// Copyright (c) 2006, ComponentAce +// http://www.componentace.com +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +// Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +// Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +// Neither the name of ComponentAce nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the distribution. + +3. The names of the authors may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* +* This program is based on zlib-1.1.3, so all credit should go authors +* Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) +* and contributors of zlib. +*/ + +namespace CoreUtil.Internal +{ + + + internal class ZStreamException:System.IO.IOException + { + public ZStreamException():base() + { + } + public ZStreamException(System.String s):base(s) + { + } + } +} \ No newline at end of file diff --git a/src/BuildUtil/CoreUtil/Zip.cs b/src/BuildUtil/CoreUtil/Zip.cs new file mode 100644 index 00000000..47a22669 --- /dev/null +++ b/src/BuildUtil/CoreUtil/Zip.cs @@ -0,0 +1,482 @@ +// CoreUtil +// +// Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. +// Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +using System; +using System.Threading; +using System.Data; +using System.Data.Sql; +using System.Data.SqlClient; +using System.Data.SqlTypes; +using System.Text; +using System.Configuration; +using System.Collections; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Runtime.InteropServices; + +namespace CoreUtil +{ + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZipDataHeader + { + public uint Signature; + public ushort NeedVer; + public ushort Option; + public ushort CompType; + public ushort FileTime; + public ushort FileDate; + public uint Crc32; + public uint CompSize; + public uint UncompSize; + public ushort FileNameLen; + public ushort ExtraLen; + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZipDataFooter + { + public uint Signature; + public uint Crc32; + public uint CompSize; + public uint UncompSize; + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZipDirHeader + { + public uint Signature; + public ushort MadeVer; + public ushort NeedVer; + public ushort Option; + public ushort CompType; + public ushort FileTime; + public ushort FileDate; + public uint Crc32; + public uint CompSize; + public uint UncompSize; + public ushort FileNameLen; + public ushort ExtraLen; + public ushort CommentLen; + public ushort DiskNum; + public ushort InAttr; + public uint OutAttr; + public uint HeaderPos; + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ZipEndHeader + { + public uint Signature; + public ushort DiskNum; + public ushort StartDiskNum; + public ushort DiskDirEntry; + public ushort DirEntry; + public uint DirSize; + public uint StartPos; + public ushort CommentLen; + } + + public static class ZipUtil + { + static ZipUtil() + { + initCrc32(); + } + + static uint[] table; + const int crcTableSize = 256; + + static void initCrc32() + { + table = new uint[crcTableSize]; + + uint poly = 0xEDB88320; + uint u, i, j; + + for (i = 0; i < 256; i++) + { + u = i; + + for (j = 0; j < 8; j++) + { + if ((u & 0x1) != 0) + { + u = (u >> 1) ^ poly; + } + else + { + u >>= 1; + } + } + + table[i] = u; + } + } + + public static uint Crc32(byte[] buf) + { + return Crc32(buf, 0, buf.Length); + } + public static uint Crc32(byte[] buf, int pos, int len) + { + return Crc32Finish(Crc32First(buf, pos, len)); + } + public static uint Crc32First(byte[] buf, int pos, int len) + { + return Crc32Next(buf, pos, len, 0xffffffff); + } + public static uint Crc32Next(byte[] buf, int pos, int len, uint lastCrc32) + { + uint ret = lastCrc32; + for (uint i = 0; i < len; i++) + { + ret = (ret >> 8) ^ table[buf[pos + i] ^ (ret & 0xff)]; + } + return ret; + } + public static uint Crc32Finish(uint lastCrc32) + { + return ~lastCrc32; + } + } + + public class ZipPacker + { + public const uint Signature = 0x04034B50; + public const uint SignatureEnd = 0x06054B50; + public const ushort Version = 10; + public const ushort VersionWithCompress = 20; + public Encoding Encoding = Str.ShiftJisEncoding; + + class File + { + public string Name; + public long Size; + public DateTime DateTime; + public FileAttributes Attributes; + public long CurrentSize; + public long CompressSize; + public uint Crc32; + public uint HeaderPos; + public Encoding Encoding; + public bool Compress; + public CoreUtil.Internal.ZStream ZStream; + + public void WriteZipDataHeader(ref ZipDataHeader h, bool writeSizes) + { + h.Signature = Signature; + h.NeedVer = Version; + h.CompType = 0; + h.FileTime = Util.DateTimeToDosTime(this.DateTime); + h.FileDate = Util.DateTimeToDosDate(this.DateTime); + h.Option = 8; + + if (writeSizes == false) + { + h.CompSize = h.UncompSize = 0; + h.Crc32 = 0; + + if (this.Compress) + { + h.NeedVer = VersionWithCompress; + h.CompType = 8; + } + } + else + { + h.CompSize = h.UncompSize = (uint)this.Size; + if (this.Compress) + { + h.CompSize = (uint)this.CompressSize; + h.CompType = 8; + } + h.Crc32 = this.Crc32; + } + + h.FileNameLen = (ushort)this.Encoding.GetByteCount(this.Name); + h.ExtraLen = 0; + } + + public void WriteZipDataFooter(ref ZipDataFooter h) + { + h.Signature = 0x08074B50; + + if (this.Compress == false) + { + h.CompSize = h.UncompSize = (uint)this.Size; + } + else + { + h.CompSize = (uint)this.CompressSize; + h.UncompSize = (uint)this.Size; + } + h.Crc32 = this.Crc32; + } + } + + Fifo fifo; + List fileList; + + public Fifo GeneratedData + { + get + { + return this.fifo; + } + } + + public ZipPacker() + { + fifo = new Fifo(); + fileList = new List(); + } + + File currentFile = null; + + public void AddFileSimple(string name, DateTime dt, FileAttributes attribute, byte[] data) + { + AddFileSimple(name, dt, attribute, data, false); + } + public void AddFileSimple(string name, DateTime dt, FileAttributes attribute, byte[] data, bool compress) + { + AddFileStart(name, data.Length, dt, attribute, compress); + AddFileData(data, 0, data.Length); + } + + public void AddFileStart(string name, long size, DateTime dt, FileAttributes attribute) + { + AddFileStart(name, size, dt, attribute, false); + } + public void AddFileStart(string name, long size, DateTime dt, FileAttributes attribute, bool compress) + { + if (currentFile != null) + { + throw new ApplicationException("currentFile != null"); + } + + name = name.Replace("/", "\\"); + + File f = new File(); + + f.Encoding = this.Encoding; + f.Name = name; + f.Size = size; + f.DateTime = dt; + f.Attributes = attribute; + f.Compress = compress; + + this.fileList.Add(f); + + ZipDataHeader h = new ZipDataHeader(); + f.HeaderPos = (uint)fifo.TotalWriteSize; + f.WriteZipDataHeader(ref h, false); + fifo.Write(Util.StructToByte(h)); + fifo.Write(this.Encoding.GetBytes(f.Name)); + f.Crc32 = 0xffffffff; + + if (compress) + { + f.ZStream = new CoreUtil.Internal.ZStream(); + f.ZStream.deflateInit(-1, -15); + } + + currentFile = f; + } + + public long AddFileData(byte[] data, int pos, int len) + { + long totalSize = currentFile.CurrentSize + len; + + if (totalSize > currentFile.Size) + { + throw new ApplicationException("totalSize > currentFile.Size"); + } + + if (currentFile.Compress == false) + { + fifo.Write(data, pos, len); + } + else + { + CoreUtil.Internal.ZStream zs = currentFile.ZStream; + + byte[] srcData = Util.ExtractByteArray(data, pos, len); + byte[] dstData = new byte[srcData.Length * 2 + 100]; + + zs.next_in = srcData; + zs.avail_in = srcData.Length; + zs.next_in_index = 0; + + zs.next_out = dstData; + zs.avail_out = dstData.Length; + zs.next_out_index = 0; + + if (currentFile.Size == (currentFile.CurrentSize + len)) + { + zs.deflate(CoreUtil.Internal.zlibConst.Z_FINISH); + } + else + { + zs.deflate(CoreUtil.Internal.zlibConst.Z_SYNC_FLUSH); + } + + fifo.Write(dstData, 0, dstData.Length - zs.avail_out); + + currentFile.CompressSize += dstData.Length - zs.avail_out; + + Util.NoOP(); + } + + currentFile.CurrentSize += len; + + currentFile.Crc32 = ZipUtil.Crc32Next(data, pos, len, currentFile.Crc32); + + long ret = currentFile.Size - currentFile.CurrentSize; + + if (ret == 0) + { + currentFile.Crc32 = ~currentFile.Crc32; + addFileFooter(); + + currentFile = null; + } + + return ret; + } + + void addFileFooter() + { + ZipDataFooter f = new ZipDataFooter(); + currentFile.WriteZipDataFooter(ref f); + fifo.Write(Util.StructToByte(f)); + } + + public void Finish() + { + long posStart = fifo.TotalWriteSize; + foreach (File f in this.fileList) + { + ZipDirHeader d = new ZipDirHeader(); + d.Signature = 0x02014B50;// ZipPacker.Signature; + d.MadeVer = Version; + ZipDataHeader dh = new ZipDataHeader(); + f.WriteZipDataHeader(ref dh, true); + if (f.Compress) + { + dh.CompType = 8; + dh.CompSize = (uint)f.CompressSize; + dh.NeedVer = ZipPacker.VersionWithCompress; + } + d.NeedVer = dh.NeedVer; + d.Option = dh.Option; + d.CompType = dh.CompType; + d.FileTime = dh.FileTime; + d.FileDate = dh.FileDate; + d.Crc32 = dh.Crc32; + d.CompSize = dh.CompSize; + d.UncompSize = dh.UncompSize; + d.FileNameLen = dh.FileNameLen; + d.ExtraLen = dh.ExtraLen; + d.CommentLen = 0; + d.DiskNum = 0; + d.InAttr = 0; + d.OutAttr = (ushort)f.Attributes; + d.HeaderPos = f.HeaderPos; + + fifo.Write(Util.StructToByte(d)); + fifo.Write(this.Encoding.GetBytes(f.Name)); + } + long posEnd = fifo.TotalWriteSize; + + ZipEndHeader e = new ZipEndHeader(); + e.Signature = ZipPacker.SignatureEnd; + e.DiskNum = e.StartDiskNum = 0; + e.DiskDirEntry = e.DirEntry = (ushort)this.fileList.Count; + e.DirSize = (uint)(posEnd - posStart); + e.StartPos = (uint)posStart; + e.CommentLen = 0; + fifo.Write(Util.StructToByte(e)); + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/Properties/Resources.Designer.cs b/src/BuildUtil/Properties/Resources.Designer.cs new file mode 100644 index 00000000..55036d32 --- /dev/null +++ b/src/BuildUtil/Properties/Resources.Designer.cs @@ -0,0 +1,1049 @@ +//------------------------------------------------------------------------------ +// +// ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ãƒ„ールã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚Œã¾ã—ãŸã€‚ +// ランタイム ãƒãƒ¼ã‚¸ãƒ§ãƒ³:2.0.50727.5472 +// +// ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¸ã®å¤‰æ›´ã¯ã€ä»¥ä¸‹ã®çŠ¶æ³ä¸‹ã§ä¸æ­£ãªå‹•ä½œã®åŽŸå› ã«ãªã£ãŸã‚Šã€ +// コードãŒå†ç”Ÿæˆã•ã‚Œã‚‹ã¨ãã«æ失ã—ãŸã‚Šã—ã¾ã™ã€‚ +// +//------------------------------------------------------------------------------ +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +namespace BuildUtil.Properties { + using System; + + + /// + /// ローカライズã•ã‚ŒãŸæ–‡å­—列ãªã©ã‚’検索ã™ã‚‹ãŸã‚ã®ã€åŽ³å¯†ã«åž‹æŒ‡å®šã•ã‚ŒãŸãƒªã‚½ãƒ¼ã‚¹ クラスã§ã™ã€‚ + /// + // ã“ã®ã‚¯ãƒ©ã‚¹ã¯ StronglyTypedResourceBuilder クラス㌠ResGen + // ã¾ãŸã¯ Visual Studio ã®ã‚ˆã†ãªãƒ„ールを使用ã—ã¦è‡ªå‹•ç”Ÿæˆã•ã‚Œã¾ã—ãŸã€‚ + // メンãƒã‚’追加ã¾ãŸã¯å‰Šé™¤ã™ã‚‹ã«ã¯ã€.ResX ファイルを編集ã—ã¦ã€/str オプションã¨å…±ã« + // ResGen を実行ã—ç›´ã™ã‹ã€ã¾ãŸã¯ VS プロジェクトをビルドã—ç›´ã—ã¾ã™ã€‚ + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// ã“ã®ã‚¯ãƒ©ã‚¹ã§ä½¿ç”¨ã•ã‚Œã¦ã„るキャッシュã•ã‚ŒãŸ ResourceManager インスタンスを返ã—ã¾ã™ã€‚ + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BuildUtil.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 厳密ã«åž‹æŒ‡å®šã•ã‚ŒãŸã“ã®ãƒªã‚½ãƒ¼ã‚¹ クラスを使用ã—ã¦ã€ã™ã¹ã¦ã®æ¤œç´¢ãƒªã‚½ãƒ¼ã‚¹ã«å¯¾ã—〠+ /// ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã® CurrentUICulture プロパティをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚ + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// [j]追加[e]Add[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_BUTTON_ADD { + get { + return ResourceManager.GetString("CDF_BUTTON_ADD", resourceCulture); + } + } + + /// + /// [j]キャンセル[e]Cancel[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_BUTTON_CANCEL { + get { + return ResourceManager.GetString("CDF_BUTTON_CANCEL", resourceCulture); + } + } + + /// + /// [j]完 了[e]Complete[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_BUTTON_COMPLETE { + get { + return ResourceManager.GetString("CDF_BUTTON_COMPLETE", resourceCulture); + } + } + + /// + /// [j]削除[e]Delete[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_BUTTON_DELETE { + get { + return ResourceManager.GetString("CDF_BUTTON_DELETE", resourceCulture); + } + } + + /// + /// [j]編集[e]Edit[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_BUTTON_EDIT { + get { + return ResourceManager.GetString("CDF_BUTTON_EDIT", resourceCulture); + } + } + + /// + /// [j]修正ã™ã‚‹[e]Modify[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_BUTTON_MODIFY { + get { + return ResourceManager.GetString("CDF_BUTTON_MODIFY", resourceCulture); + } + } + + /// + /// O K ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_BUTTON_OK { + get { + return ResourceManager.GetString("CDF_BUTTON_OK", resourceCulture); + } + } + + /// + /// [j]処ç†ä¸­[e]Wait[/]... ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_BUTTON_SENDING { + get { + return ResourceManager.GetString("CDF_BUTTON_SENDING", resourceCulture); + } + } + + /// + ///  [j]最近ã®å€™è£œ[e]Recent Candidates[/]: ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_CANDIDATES { + get { + return ResourceManager.GetString("CDF_CANDIDATES", resourceCulture); + } + } + + /// + /// [j]日付ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]Date field is empty.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DATE_EMPTY { + get { + return ResourceManager.GetString("CDF_DATE_EMPTY", resourceCulture); + } + } + + /// + /// [j]{0} 以å‰ã®æ—¥ä»˜ã‚’指定ã—ã¦ãã ã•ã„。[e]Please specify a date before {0}.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DATE_MAX { + get { + return ResourceManager.GetString("CDF_DATE_MAX", resourceCulture); + } + } + + /// + /// [j]{0} 以é™ã®æ—¥ä»˜ã‚’指定ã—ã¦ãã ã•ã„。[e]Please specift a date since {0}.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DATE_MIN { + get { + return ResourceManager.GetString("CDF_DATE_MIN", resourceCulture); + } + } + + /// + /// [j]日付ã¨ã—ã¦èªè­˜ã§ããªã„文字列ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚[e]Can't recognize as a valid date.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DATE_NOTDATE { + get { + return ResourceManager.GetString("CDF_DATE_NOTDATE", resourceCulture); + } + } + + /// + /// [j]全件表示 ({0} 件)[e]Total ({0} entities)[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DL_ALL { + get { + return ResourceManager.GetString("CDF_DL_ALL", resourceCulture); + } + } + + /// + /// [j]ダウンロード[e]Download[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DOWNLOAD { + get { + return ResourceManager.GetString("CDF_DOWNLOAD", resourceCulture); + } + } + + /// + /// [j]日時ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]Date and Time are empty.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DT_EMPTY { + get { + return ResourceManager.GetString("CDF_DT_EMPTY", resourceCulture); + } + } + + /// + /// [j]{0} 以å‰ã®æ—¥æ™‚を指定ã—ã¦ãã ã•ã„。[e]Please specify a date and a time before {0}.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DT_MAX { + get { + return ResourceManager.GetString("CDF_DT_MAX", resourceCulture); + } + } + + /// + /// [j]{0} 以é™ã®æ—¥æ™‚を指定ã—ã¦ãã ã•ã„。[e]Please specify a date and a time since {0}.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DT_MIN { + get { + return ResourceManager.GetString("CDF_DT_MIN", resourceCulture); + } + } + + /// + /// [j]日時ã¨ã—ã¦èªè­˜ã§ããªã„文字列ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚[e]Can't recognize as a valid date and a time.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_DT_NOTDT { + get { + return ResourceManager.GetString("CDF_DT_NOTDT", resourceCulture); + } + } + + /// + /// [j]記入例[e]Example[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_EXAMPLE { + get { + return ResourceManager.GetString("CDF_EXAMPLE", resourceCulture); + } + } + + /// + /// [j]ï¼­ï¼³ ゴシック[e]MS Gothic[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_GOTHIC { + get { + return ResourceManager.GetString("CDF_GOTHIC", resourceCulture); + } + } + + /// + /// [j]データ構造ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰æ•°ãŒ 1 ã§ã‚ã‚Šã¾ã›ã‚“。[e]The number of fields of data structures is not one.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_GRID_ERROR_1 { + get { + return ResourceManager.GetString("CDF_GRID_ERROR_1", resourceCulture); + } + } + + /// + /// [j]データ構造ãŒãƒªã‚¹ãƒˆã§ã‚ã‚Šã¾ã›ã‚“。[e]The data structure is not a list.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_GRID_ERROR_2 { + get { + return ResourceManager.GetString("CDF_GRID_ERROR_2", resourceCulture); + } + } + + /// + /// [j]数値㯠{0} 以下を指定ã—ã¦ãã ã•ã„。[e]The value must be {0} or less.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_INT_MAX { + get { + return ResourceManager.GetString("CDF_INT_MAX", resourceCulture); + } + } + + /// + /// [j]数値㯠{0} 以上を指定ã—ã¦ãã ã•ã„。[e]The value must be {0} or more.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_INT_MIN { + get { + return ResourceManager.GetString("CDF_INT_MIN", resourceCulture); + } + } + + /// + /// [j]整数以外ã®æ–‡å­—ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚[e]The value can't be recognized as an integer.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_INT_NOT_NUMBER_CHAR { + get { + return ResourceManager.GetString("CDF_INT_NOT_NUMBER_CHAR", resourceCulture); + } + } + + /// + /// [j]数値ãŒæ­£ã—ã入力ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]The value can't be recognized as a formal figure.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_INT_NOTINTEGER { + get { + return ResourceManager.GetString("CDF_INT_NOTINTEGER", resourceCulture); + } + } + + /// + /// [j]データ "{0}" ã¯ã“ã®ãƒªã‚¹ãƒˆã§ã¯ä¸æ­£ã§ã™ã€‚[e]The data "{0}" is invalid at this list.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_INVALID { + get { + return ResourceManager.GetString("CDF_INVALID", resourceCulture); + } + } + + /// + /// [j]メールアドレスãŒä¸æ­£ã§ã™ã€‚[e]The mail address is invalid.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_INVALID_EMAIL { + get { + return ResourceManager.GetString("CDF_INVALID_EMAIL", resourceCulture); + } + } + + /// + /// [j]〠{0} 個目ã®é …ç›® (åˆè¨ˆ {1} 個中) - {2} 】[e]Item of piece {0} (Total: {1} entities) - {2}[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_LIST_FORMAT { + get { + return ResourceManager.GetString("CDF_LIST_FORMAT", resourceCulture); + } + } + + /// + /// CdfClass 属性ãŒæ­£ã—ã指定ã•ã‚Œã¦ã„ãªã„クラス %s ãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸã€‚ ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_NO_CDFCLASS { + get { + return ResourceManager.GetString("CDF_NO_CDFCLASS", resourceCulture); + } + } + + /// + /// %s 項目㫠%s 属性㌠1 ã¤æŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。 ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_NO_SINGLE_ATT { + get { + return ResourceManager.GetString("CDF_NO_SINGLE_ATT", resourceCulture); + } + } + + /// + /// %s é …ç›®ã®ã‚¸ã‚§ãƒãƒªãƒƒã‚¯åž‹ãŒ 1 ã¤æŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。 ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_NO_SINGLE_GENERIC_TYPE { + get { + return ResourceManager.GetString("CDF_NO_SINGLE_GENERIC_TYPE", resourceCulture); + } + } + + /// + /// [j]é …ç›®ãªã—[e]No Entities[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_NOITEM { + get { + return ResourceManager.GetString("CDF_NOITEM", resourceCulture); + } + } + + /// + /// [j]é …ç›®ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]You have to select an entity.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_NOT_SELECTED { + get { + return ResourceManager.GetString("CDF_NOT_SELECTED", resourceCulture); + } + } + + /// + /// [j]æ­£ã—ãé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]You have to select correctly.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_NOT_SELECTED_2 { + get { + return ResourceManager.GetString("CDF_NOT_SELECTED_2", resourceCulture); + } + } + + /// + /// [j]ページ {0}[e]Page {0}[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_PAGING_FORMAT_1 { + get { + return ResourceManager.GetString("CDF_PAGING_FORMAT_1", resourceCulture); + } + } + + /// + /// [j]最新 {0} 件[e]Latest: {0} entities[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_PAGING_FORMAT_2 { + get { + return ResourceManager.GetString("CDF_PAGING_FORMAT_2", resourceCulture); + } + } + + /// + /// [j] ({2}: {0} ~ {1})[e] ({2}: {0} - {1})[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_PAGING_HELPSTR_FORMAT { + get { + return ResourceManager.GetString("CDF_PAGING_HELPSTR_FORMAT", resourceCulture); + } + } + + /// + /// [j]â–¼é¸æŠžã—ã¦ãã ã•ã„â–¼[e]- Please Select Here -[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_PLEASE_SELECT { + get { + return ResourceManager.GetString("CDF_PLEASE_SELECT", resourceCulture); + } + } + + /// + /// [j]削除[e]Delete[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_REMOVE { + get { + return ResourceManager.GetString("CDF_REMOVE", resourceCulture); + } + } + + /// + /// [j]ã“ã®é …目を削除ã—ã¾ã™ã€‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ[e]Do you want to delete this entity?[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_REMOVEMSG { + get { + return ResourceManager.GetString("CDF_REMOVEMSG", resourceCulture); + } + } + + /// + /// [j]項目㌠1 件も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚[e]No entity is found.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_ROW_EMPTY { + get { + return ResourceManager.GetString("CDF_ROW_EMPTY", resourceCulture); + } + } + + /// + /// [j]â–½é¸æŠžå¯èƒ½[e]- Selectable -[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_SELECTABLE { + get { + return ResourceManager.GetString("CDF_SELECTABLE", resourceCulture); + } + } + + /// + /// [j]▲「{0}ã€ã§ã‚½ãƒ¼ãƒˆ[e]Sort by "{0}" Ascending[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_SORT_1 { + get { + return ResourceManager.GetString("CDF_SORT_1", resourceCulture); + } + } + + /// + /// [j]▼「{0}ã€ã§é€†ã‚½ãƒ¼ãƒˆ[e]Sort by "{0}" Descending[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_SORT_2 { + get { + return ResourceManager.GetString("CDF_SORT_2", resourceCulture); + } + } + + /// + /// [j]▲標準ã®ã‚½ãƒ¼ãƒˆ[e]Standard Ascending Sort[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_SORT_DEF1 { + get { + return ResourceManager.GetString("CDF_SORT_DEF1", resourceCulture); + } + } + + /// + /// [j]▼標準ã®é€†ã‚½ãƒ¼ãƒˆ[e]Standard Descending Sort[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_SORT_DEF2 { + get { + return ResourceManager.GetString("CDF_SORT_DEF2", resourceCulture); + } + } + + /// + /// [j]使用ã§ããªã„文字ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚[e]There are some invalid characters which can't be used.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_STRING_INVALIDCHAR { + get { + return ResourceManager.GetString("CDF_STRING_INVALIDCHAR", resourceCulture); + } + } + + /// + /// [j]文字数㯠{0} 以下ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚[e]The number of characters must be {0} or less.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_STRING_MAX { + get { + return ResourceManager.GetString("CDF_STRING_MAX", resourceCulture); + } + } + + /// + /// [j]文字を {0} 文字以上入力ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚[e]The number of characters must be {0} or more.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_STRING_MIN { + get { + return ResourceManager.GetString("CDF_STRING_MIN", resourceCulture); + } + } + + /// + /// [j]改行文字をå«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。[e]There must not be any New-Line characters in the string.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_STRING_NOLINE { + get { + return ResourceManager.GetString("CDF_STRING_NOLINE", resourceCulture); + } + } + + /// + /// [j]表示ä¸å¯èƒ½ãªæ–‡å­—コードãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚[e]There must not be any Non-Printable characters in the string.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_STRING_NONPRINTABLE { + get { + return ResourceManager.GetString("CDF_STRING_NONPRINTABLE", resourceCulture); + } + } + + /// + /// [j]入力ã„ãŸã ã„ãŸå†…容を確èªã®ãŸã‚表示ã—ã¦ã„ã¾ã™ã€‚内容をよãã”確èªãã ã•ã„。<BR>ã“ã®å†…容ã§ç¢ºå®šã™ã‚‹å ´åˆã¯ [OK] ボタンをã€ä¿®æ­£ã™ã‚‹å ´åˆã¯ [修正ã™ã‚‹] ボタンをクリックã—ã¦ãã ã•ã„。[e]Please confirm the printed data which you input. Please read it carefully.<BR>If you want to commit with this data, click the "OK" button. Otherwise, click the "Modify" button.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_TEXT_CONFIRM { + get { + return ResourceManager.GetString("CDF_TEXT_CONFIRM", resourceCulture); + } + } + + /// + /// [j]エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚内容を見直ã—ã¦ãã ã•ã„。修正ã™ã‚‹å ´åˆã¯ [修正ã™ã‚‹] ボタンをクリックã—ã¦ãã ã•ã„。[e]An error has been occurred. Please confirm the fields. To modify it, click the "Modify" button.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_TEXT_CONFIRM_ERROR { + get { + return ResourceManager.GetString("CDF_TEXT_CONFIRM_ERROR", resourceCulture); + } + } + + /// + /// [j]入力ãŒå®Œäº†ã—ãŸã‚‰ [OK] ボタンをã€å…¥åŠ›ã‚’キャンセルã™ã‚‹ã«ã¯ [キャンセル] ボタンをクリックã—ã¦ãã ã•ã„。[e]Please click the "OK" button after you complete filling all nessesary fields. To cancel inputting, click the "Cancel" button.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_TEXT_OK { + get { + return ResourceManager.GetString("CDF_TEXT_OK", resourceCulture); + } + } + + /// + /// [j]時刻ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]Time is empty.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_TIME_EMPTY { + get { + return ResourceManager.GetString("CDF_TIME_EMPTY", resourceCulture); + } + } + + /// + /// [j]{0} 以å‰ã®æ™‚刻を指定ã—ã¦ãã ã•ã„。[e]Please specify a time before {0}.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_TIME_MAX { + get { + return ResourceManager.GetString("CDF_TIME_MAX", resourceCulture); + } + } + + /// + /// [j]{0} 以é™ã®æ™‚刻を指定ã—ã¦ãã ã•ã„。[e]Please specify a time after {0}.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_TIME_MIN { + get { + return ResourceManager.GetString("CDF_TIME_MIN", resourceCulture); + } + } + + /// + /// [j]時刻ã¨ã—ã¦èªè­˜ã§ããªã„文字列ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚[e]Can't recognize as a valid time.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_TIME_NOTTIME { + get { + return ResourceManager.GetString("CDF_TIME_NOTTIME", resourceCulture); + } + } + + /// + /// [j]フィールド %s ã®åž‹ %s ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]In the field "%s", the type "%s" is not supported.[/] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CDF_UNSUPPORTED { + get { + return ResourceManager.GetString("CDF_UNSUPPORTED", resourceCulture); + } + } + + /// + /// Item ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_CT_STD_COLUMN_1 { + get { + return ResourceManager.GetString("CMD_CT_STD_COLUMN_1", resourceCulture); + } + } + + /// + /// Value ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_CT_STD_COLUMN_2 { + get { + return ResourceManager.GetString("CMD_CT_STD_COLUMN_2", resourceCulture); + } + } + + /// + /// The date and time specification is invalid. \nThe date and time must be in the same format as "2005/10/08 19:30:00" where 6 integers are specified, representing year/month/day hour:minute:second separated by forward slashes, a space and then colons. Specify 4 digits for the year. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_EVAL_DATE_TIME_FAILED { + get { + return ResourceManager.GetString("CMD_EVAL_DATE_TIME_FAILED", resourceCulture); + } + } + + /// + /// You must specify an integer that is not less than 1. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_EVAL_INT { + get { + return ResourceManager.GetString("CMD_EVAL_INT", resourceCulture); + } + } + + /// + /// You must specify an integer in the range from %u to %u for the value. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_EVAL_MIN_MAX { + get { + return ResourceManager.GetString("CMD_EVAL_MIN_MAX", resourceCulture); + } + } + + /// + /// You cannot make a blank specification. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_EVAL_NOT_EMPTY { + get { + return ResourceManager.GetString("CMD_EVAL_NOT_EMPTY", resourceCulture); + } + } + + /// + /// Port number is invalid. Specify a port number that is within the range of 1 to 65535. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_EVAL_PORT { + get { + return ResourceManager.GetString("CMD_EVAL_PORT", resourceCulture); + } + } + + /// + /// The string contains unusable characters. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_EVAL_SAFE { + get { + return ResourceManager.GetString("CMD_EVAL_SAFE", resourceCulture); + } + } + + /// + /// %S command - %s ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_EXEC_MSG_NAME { + get { + return ResourceManager.GetString("CMD_EXEC_MSG_NAME", resourceCulture); + } + } + + /// + /// The file name is not specified. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_FILE_NAME_EMPTY { + get { + return ResourceManager.GetString("CMD_FILE_NAME_EMPTY", resourceCulture); + } + } + + /// + /// Cannot find specified file "%s". ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_FILE_NOT_FOUND { + get { + return ResourceManager.GetString("CMD_FILE_NOT_FOUND", resourceCulture); + } + } + + /// + /// You can use the following %u commands: ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_HELP_1 { + get { + return ResourceManager.GetString("CMD_HELP_1", resourceCulture); + } + } + + /// + /// To reference the usage for each command, input "command name /?" to view a help. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_HELP_2 { + get { + return ResourceManager.GetString("CMD_HELP_2", resourceCulture); + } + } + + /// + /// Parameters: ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_HELP_ARGS { + get { + return ResourceManager.GetString("CMD_HELP_ARGS", resourceCulture); + } + } + + /// + /// Purpose: ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_HELP_DESCRIPTION { + get { + return ResourceManager.GetString("CMD_HELP_DESCRIPTION", resourceCulture); + } + } + + /// + /// Description: ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_HELP_HELP { + get { + return ResourceManager.GetString("CMD_HELP_HELP", resourceCulture); + } + } + + /// + /// Help for command "%S" ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_HELP_TITLE { + get { + return ResourceManager.GetString("CMD_HELP_TITLE", resourceCulture); + } + } + + /// + /// Usage: ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_HELP_USAGE { + get { + return ResourceManager.GetString("CMD_HELP_USAGE", resourceCulture); + } + } + + /// + /// "IP アドレス/サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯" ã®å½¢å¼ã§æŒ‡å®šã—ã¦ãã ã•ã„。 + ///IP アドレス㯠192.168.0.1 ã®ã‚ˆã†ã« 10 進数をドットã§åŒºåˆ‡ã£ã¦æŒ‡å®šã—ã¾ã™ã€‚サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ 255.255.255.0 ã®ã‚ˆã†ã« 10 進数をドットã§åŒºåˆ‡ã£ã¦æŒ‡å®šã™ã‚‹ã‹ã€24 ã®ã‚ˆã†ã«å…ˆé ­ã‹ã‚‰ã®ãƒ“ット長を 10 進数ã§æŒ‡å®šã§ãã¾ã™ã€‚ + ///å˜ä¸€ã®ãƒ›ã‚¹ãƒˆã‚’指定ã™ã‚‹ã«ã¯ã€ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’ 255.255.255.255 ã¾ãŸã¯ 32 ã¨ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚ + ///(例) + /// 192.168.0.1/24 + /// 192.168.0.1/255.255.255.0 + ///192.168.0.5/255.255.255.255 + /// + /// ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_PARSE_IP_SUBNET_ERROR_1 { + get { + return ResourceManager.GetString("CMD_PARSE_IP_SUBNET_ERROR_1", resourceCulture); + } + } + + /// + /// 指定ã•ã‚ŒãŸ IP アドレスã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_PARSE_IP_SUBNET_ERROR_2 { + get { + return ResourceManager.GetString("CMD_PARSE_IP_SUBNET_ERROR_2", resourceCulture); + } + } + + /// + /// Enter a value: ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_PROMPT { + get { + return ResourceManager.GetString("CMD_PROMPT", resourceCulture); + } + } + + /// + /// Input the port number: ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_PROPMT_PORT { + get { + return ResourceManager.GetString("CMD_PROPMT_PORT", resourceCulture); + } + } + + /// + /// There is no description for this command. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_UNKNOWM { + get { + return ResourceManager.GetString("CMD_UNKNOWM", resourceCulture); + } + } + + /// + /// There is no command execution example. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_UNKNOWN_ARGS { + get { + return ResourceManager.GetString("CMD_UNKNOWN_ARGS", resourceCulture); + } + } + + /// + /// There is no detailed description for this command. If you would like to know more detail about this command, please refer to the manual or online documentation. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_UNKNOWN_HELP { + get { + return ResourceManager.GetString("CMD_UNKNOWN_HELP", resourceCulture); + } + } + + /// + /// There is no description for this parameter. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CMD_UNKNOWN_PARAM { + get { + return ResourceManager.GetString("CMD_UNKNOWN_PARAM", resourceCulture); + } + } + + /// + /// "%S": The command-name is ambiguous. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_AMBIGIOUS_CMD { + get { + return ResourceManager.GetString("CON_AMBIGIOUS_CMD", resourceCulture); + } + } + + /// + /// The specified command name matches the following multiple commands. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_AMBIGIOUS_CMD_1 { + get { + return ResourceManager.GetString("CON_AMBIGIOUS_CMD_1", resourceCulture); + } + } + + /// + /// Please re-specify the command name more strictly. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_AMBIGIOUS_CMD_2 { + get { + return ResourceManager.GetString("CON_AMBIGIOUS_CMD_2", resourceCulture); + } + } + + /// + /// "%S": The parameter name is ambiguous. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_AMBIGIOUS_PARAM { + get { + return ResourceManager.GetString("CON_AMBIGIOUS_PARAM", resourceCulture); + } + } + + /// + /// The specified parameter name matches with the following parameters that can be specified as a parameter of command "%S". ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_AMBIGIOUS_PARAM_1 { + get { + return ResourceManager.GetString("CON_AMBIGIOUS_PARAM_1", resourceCulture); + } + } + + /// + /// Please re-specify the parameter name more strictly. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_AMBIGIOUS_PARAM_2 { + get { + return ResourceManager.GetString("CON_AMBIGIOUS_PARAM_2", resourceCulture); + } + } + + /// + /// Error: Unable to open the specified input file "%s". ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_INFILE_ERROR { + get { + return ResourceManager.GetString("CON_INFILE_ERROR", resourceCulture); + } + } + + /// + /// The commands written in the file "%s" will be used instead of input from keyboard. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_INFILE_START { + get { + return ResourceManager.GetString("CON_INFILE_START", resourceCulture); + } + } + + /// + /// The parameter "/%S" has been specified. It is not possible to specify this parameter when using the command "%S". Input "%S /HELP" to see the list of what parameters can be used. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_INVALID_PARAM { + get { + return ResourceManager.GetString("CON_INVALID_PARAM", resourceCulture); + } + } + + /// + /// Error: Unable to create the specified output file "%s". ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_OUTFILE_ERROR { + get { + return ResourceManager.GetString("CON_OUTFILE_ERROR", resourceCulture); + } + } + + /// + /// The message output to the console will be saved in the file "%s". ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_OUTFILE_START { + get { + return ResourceManager.GetString("CON_OUTFILE_START", resourceCulture); + } + } + + /// + /// "%S": Command not found. You can use the HELP command to view a list of the available commands. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_UNKNOWN_CMD { + get { + return ResourceManager.GetString("CON_UNKNOWN_CMD", resourceCulture); + } + } + + /// + /// [EOF] ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_USER_CANCEL { + get { + return ResourceManager.GetString("CON_USER_CANCEL", resourceCulture); + } + } + + /// + /// The command was canceled. ã«é¡žä¼¼ã—ã¦ã„るローカライズã•ã‚ŒãŸæ–‡å­—列を検索ã—ã¾ã™ã€‚ + /// + internal static string CON_USER_CANCELED { + get { + return ResourceManager.GetString("CON_USER_CANCELED", resourceCulture); + } + } + } +} + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/BuildUtil/Properties/Resources.resx b/src/BuildUtil/Properties/Resources.resx new file mode 100644 index 00000000..9d8a9056 --- /dev/null +++ b/src/BuildUtil/Properties/Resources.resx @@ -0,0 +1,431 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + [j]追加[e]Add[/] + + + [j]キャンセル[e]Cancel[/] + + + [j]完 了[e]Complete[/] + + + [j]削除[e]Delete[/] + + + [j]編集[e]Edit[/] + + + [j]修正ã™ã‚‹[e]Modify[/] + + + O K + + + [j]処ç†ä¸­[e]Wait[/]... + + +  [j]最近ã®å€™è£œ[e]Recent Candidates[/]: + + + [j]日付ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]Date field is empty.[/] + + + [j]{0} 以å‰ã®æ—¥ä»˜ã‚’指定ã—ã¦ãã ã•ã„。[e]Please specify a date before {0}.[/] + + + [j]{0} 以é™ã®æ—¥ä»˜ã‚’指定ã—ã¦ãã ã•ã„。[e]Please specift a date since {0}.[/] + + + [j]日付ã¨ã—ã¦èªè­˜ã§ããªã„文字列ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚[e]Can't recognize as a valid date.[/] + + + [j]全件表示 ({0} 件)[e]Total ({0} entities)[/] + + + [j]ダウンロード[e]Download[/] + + + [j]日時ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]Date and Time are empty.[/] + + + [j]{0} 以å‰ã®æ—¥æ™‚を指定ã—ã¦ãã ã•ã„。[e]Please specify a date and a time before {0}.[/] + + + [j]{0} 以é™ã®æ—¥æ™‚を指定ã—ã¦ãã ã•ã„。[e]Please specify a date and a time since {0}.[/] + + + [j]日時ã¨ã—ã¦èªè­˜ã§ããªã„文字列ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚[e]Can't recognize as a valid date and a time.[/] + + + [j]記入例[e]Example[/] + + + [j]ï¼­ï¼³ ゴシック[e]MS Gothic[/] + + + [j]データ構造ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰æ•°ãŒ 1 ã§ã‚ã‚Šã¾ã›ã‚“。[e]The number of fields of data structures is not one.[/] + + + [j]データ構造ãŒãƒªã‚¹ãƒˆã§ã‚ã‚Šã¾ã›ã‚“。[e]The data structure is not a list.[/] + + + [j]数値㯠{0} 以下を指定ã—ã¦ãã ã•ã„。[e]The value must be {0} or less.[/] + + + [j]数値㯠{0} 以上を指定ã—ã¦ãã ã•ã„。[e]The value must be {0} or more.[/] + + + [j]数値ãŒæ­£ã—ã入力ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]The value can't be recognized as a formal figure.[/] + + + [j]整数以外ã®æ–‡å­—ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚[e]The value can't be recognized as an integer.[/] + + + [j]データ "{0}" ã¯ã“ã®ãƒªã‚¹ãƒˆã§ã¯ä¸æ­£ã§ã™ã€‚[e]The data "{0}" is invalid at this list.[/] + + + [j]メールアドレスãŒä¸æ­£ã§ã™ã€‚[e]The mail address is invalid.[/] + + + [j]〠{0} 個目ã®é …ç›® (åˆè¨ˆ {1} 個中) - {2} 】[e]Item of piece {0} (Total: {1} entities) - {2}[/] + + + [j]é …ç›®ãªã—[e]No Entities[/] + + + [j]é …ç›®ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]You have to select an entity.[/] + + + [j]æ­£ã—ãé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]You have to select correctly.[/] + + + CdfClass 属性ãŒæ­£ã—ã指定ã•ã‚Œã¦ã„ãªã„クラス %s ãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸã€‚ + + + %s 項目㫠%s 属性㌠1 ã¤æŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。 + + + %s é …ç›®ã®ã‚¸ã‚§ãƒãƒªãƒƒã‚¯åž‹ãŒ 1 ã¤æŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。 + + + [j]ページ {0}[e]Page {0}[/] + + + [j]最新 {0} 件[e]Latest: {0} entities[/] + + + [j] ({2}: {0} ~ {1})[e] ({2}: {0} - {1})[/] + + + [j]â–¼é¸æŠžã—ã¦ãã ã•ã„â–¼[e]- Please Select Here -[/] + + + [j]削除[e]Delete[/] + + + [j]ã“ã®é …目を削除ã—ã¾ã™ã€‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ[e]Do you want to delete this entity?[/] + + + [j]項目㌠1 件も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚[e]No entity is found.[/] + + + [j]â–½é¸æŠžå¯èƒ½[e]- Selectable -[/] + + + [j]▲「{0}ã€ã§ã‚½ãƒ¼ãƒˆ[e]Sort by "{0}" Ascending[/] + + + [j]▼「{0}ã€ã§é€†ã‚½ãƒ¼ãƒˆ[e]Sort by "{0}" Descending[/] + + + [j]▲標準ã®ã‚½ãƒ¼ãƒˆ[e]Standard Ascending Sort[/] + + + [j]▼標準ã®é€†ã‚½ãƒ¼ãƒˆ[e]Standard Descending Sort[/] + + + [j]使用ã§ããªã„文字ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚[e]There are some invalid characters which can't be used.[/] + + + [j]文字数㯠{0} 以下ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚[e]The number of characters must be {0} or less.[/] + + + [j]文字を {0} 文字以上入力ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚[e]The number of characters must be {0} or more.[/] + + + [j]改行文字をå«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。[e]There must not be any New-Line characters in the string.[/] + + + [j]表示ä¸å¯èƒ½ãªæ–‡å­—コードãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚[e]There must not be any Non-Printable characters in the string.[/] + + + [j]入力ã„ãŸã ã„ãŸå†…容を確èªã®ãŸã‚表示ã—ã¦ã„ã¾ã™ã€‚内容をよãã”確èªãã ã•ã„。<BR>ã“ã®å†…容ã§ç¢ºå®šã™ã‚‹å ´åˆã¯ [OK] ボタンをã€ä¿®æ­£ã™ã‚‹å ´åˆã¯ [修正ã™ã‚‹] ボタンをクリックã—ã¦ãã ã•ã„。[e]Please confirm the printed data which you input. Please read it carefully.<BR>If you want to commit with this data, click the "OK" button. Otherwise, click the "Modify" button.[/] + + + [j]エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚内容を見直ã—ã¦ãã ã•ã„。修正ã™ã‚‹å ´åˆã¯ [修正ã™ã‚‹] ボタンをクリックã—ã¦ãã ã•ã„。[e]An error has been occurred. Please confirm the fields. To modify it, click the "Modify" button.[/] + + + [j]入力ãŒå®Œäº†ã—ãŸã‚‰ [OK] ボタンをã€å…¥åŠ›ã‚’キャンセルã™ã‚‹ã«ã¯ [キャンセル] ボタンをクリックã—ã¦ãã ã•ã„。[e]Please click the "OK" button after you complete filling all nessesary fields. To cancel inputting, click the "Cancel" button.[/] + + + [j]時刻ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]Time is empty.[/] + + + [j]{0} 以å‰ã®æ™‚刻を指定ã—ã¦ãã ã•ã„。[e]Please specify a time before {0}.[/] + + + [j]{0} 以é™ã®æ™‚刻を指定ã—ã¦ãã ã•ã„。[e]Please specify a time after {0}.[/] + + + [j]時刻ã¨ã—ã¦èªè­˜ã§ããªã„文字列ãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã™ã€‚[e]Can't recognize as a valid time.[/] + + + [j]フィールド %s ã®åž‹ %s ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。[e]In the field "%s", the type "%s" is not supported.[/] + + + Item + + + Value + + + The date and time specification is invalid. \nThe date and time must be in the same format as "2005/10/08 19:30:00" where 6 integers are specified, representing year/month/day hour:minute:second separated by forward slashes, a space and then colons. Specify 4 digits for the year. + + + You must specify an integer that is not less than 1. + + + You must specify an integer in the range from %u to %u for the value. + + + You cannot make a blank specification. + + + Port number is invalid. Specify a port number that is within the range of 1 to 65535. + + + The string contains unusable characters. + + + %S command - %s + + + The file name is not specified. + + + Cannot find specified file "%s". + + + You can use the following %u commands: + + + To reference the usage for each command, input "command name /?" to view a help. + + + Parameters: + + + Purpose: + + + Description: + + + Help for command "%S" + + + Usage: + + + "IP アドレス/サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯" ã®å½¢å¼ã§æŒ‡å®šã—ã¦ãã ã•ã„。 +IP アドレス㯠192.168.0.1 ã®ã‚ˆã†ã« 10 進数をドットã§åŒºåˆ‡ã£ã¦æŒ‡å®šã—ã¾ã™ã€‚サブãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã¯ 255.255.255.0 ã®ã‚ˆã†ã« 10 進数をドットã§åŒºåˆ‡ã£ã¦æŒ‡å®šã™ã‚‹ã‹ã€24 ã®ã‚ˆã†ã«å…ˆé ­ã‹ã‚‰ã®ãƒ“ット長を 10 進数ã§æŒ‡å®šã§ãã¾ã™ã€‚ +å˜ä¸€ã®ãƒ›ã‚¹ãƒˆã‚’指定ã™ã‚‹ã«ã¯ã€ã‚µãƒ–ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã‚’ 255.255.255.255 ã¾ãŸã¯ 32 ã¨ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚ +(例) + 192.168.0.1/24 + 192.168.0.1/255.255.255.0 +192.168.0.5/255.255.255.255 + + + + + 指定ã•ã‚ŒãŸ IP アドレスã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 + + + Enter a value: + + + Input the port number: + + + There is no description for this command. + + + There is no command execution example. + + + There is no detailed description for this command. If you would like to know more detail about this command, please refer to the manual or online documentation. + + + There is no description for this parameter. + + + "%S": The command-name is ambiguous. + + + The specified command name matches the following multiple commands. + + + Please re-specify the command name more strictly. + + + "%S": The parameter name is ambiguous. + + + The specified parameter name matches with the following parameters that can be specified as a parameter of command "%S". + + + Please re-specify the parameter name more strictly. + + + Error: Unable to open the specified input file "%s". + + + The commands written in the file "%s" will be used instead of input from keyboard. + + + The parameter "/%S" has been specified. It is not possible to specify this parameter when using the command "%S". Input "%S /HELP" to see the list of what parameters can be used. + + + Error: Unable to create the specified output file "%s". + + + The message output to the console will be saved in the file "%s". + + + "%S": Command not found. You can use the HELP command to view a list of the available commands. + + + [EOF] + + + The command was canceled. + + \ No newline at end of file diff --git a/src/BuildUtil/VpnBuilder.cs b/src/BuildUtil/VpnBuilder.cs index c6489c77..d465086a 100644 --- a/src/BuildUtil/VpnBuilder.cs +++ b/src/BuildUtil/VpnBuilder.cs @@ -484,6 +484,7 @@ namespace BuildUtil ".sys", ".inf", ".wav", + ".cat", }; foreach (string ext in filesOnlyWin32) diff --git a/src/Cedar/Cedar.h b/src/Cedar/Cedar.h index bdb725bf..b857a7d6 100644 --- a/src/Cedar/Cedar.h +++ b/src/Cedar/Cedar.h @@ -108,7 +108,7 @@ #define CEDAR_VER 403 // Build Number -#define CEDAR_BUILD 9408 +#define CEDAR_BUILD 9411 // Beta number //#define BETA_NUMBER 3 @@ -129,10 +129,10 @@ // Specifies the build date #define BUILD_DATE_Y 2014 #define BUILD_DATE_M 1 -#define BUILD_DATE_D 4 -#define BUILD_DATE_HO 19 -#define BUILD_DATE_MI 10 -#define BUILD_DATE_SE 55 +#define BUILD_DATE_D 7 +#define BUILD_DATE_HO 4 +#define BUILD_DATE_MI 51 +#define BUILD_DATE_SE 30 // Tolerable time difference #define ALLOW_TIMESTAMP_DIFF (UINT64)(3 * 24 * 60 * 60 * 1000) diff --git a/src/Cedar/Protocol.c b/src/Cedar/Protocol.c index beb2f3b4..9143f3ba 100644 --- a/src/Cedar/Protocol.c +++ b/src/Cedar/Protocol.c @@ -5449,47 +5449,6 @@ bool ServerDownloadSignature(CONNECTION *c, char **error_detail_str) *error_detail_str = "HTTP_ROOT"; - if (s != NULL && s->UseWebTimePage) - { - // Generate a page that shows the current time as the top page automatically - BUF *b = ReadDump("|time.htm"); - - if (b != NULL) - { - char *src = ZeroMalloc(b->Size + 1); - UINT dst_size = b->Size * 2 + 64; - char *dst = ZeroMalloc(dst_size); - char host[MAX_PATH]; - char portstr[64]; - char now_str[MAX_PATH]; - - GetDateTimeStr64(now_str, sizeof(now_str), LocalTime64()); - - GetMachineName(host, sizeof(host)); - ToStr(portstr, c->FirstSock->LocalPort); - - Copy(src, b->Buf, b->Size); - ReplaceStrEx(dst, dst_size, src, - "$HOST$", host, false); - ReplaceStrEx(dst, dst_size, dst, - "$PORT$", portstr, false); - ReplaceStrEx(dst, dst_size, dst, - "$NOW$", now_str, false); - - FreeHttpHeader(h); - h = NewHttpHeader("HTTP/1.1", "202", "OK"); - AddHttpValue(h, NewHttpValue("Content-Type", HTTP_CONTENT_TYPE4)); - AddHttpValue(h, NewHttpValue("Connection", "Keep-Alive")); - AddHttpValue(h, NewHttpValue("Keep-Alive", HTTP_KEEP_ALIVE)); - PostHttp(c->FirstSock, h, dst, StrLen(dst)); - - Free(src); - Free(dst); - - FreeBuf(b); - } - } - else { if (is_free == false) { diff --git a/src/Cedar/WinUi.c b/src/Cedar/WinUi.c index 0cdf6ff8..9ecda170 100644 --- a/src/Cedar/WinUi.c +++ b/src/Cedar/WinUi.c @@ -2125,10 +2125,6 @@ bool ExecuteHamcoreExe(char *name) // Show the Easter Egg void ShowEasterEgg(HWND hWnd) { - ExecuteHamcoreExe("|egg1.exe"); - ExecuteHamcoreExe("|egg2.exe"); - ExecuteHamcoreExe("|egg3.exe"); - ShellExecute(hWnd, "open", "http://www.softether.co.jp/jp/special/vpn3egg/", NULL, NULL, SW_SHOW); } void KakushiThread(THREAD *thread, void *param) diff --git a/src/ChangeLog.txt b/src/ChangeLog.txt new file mode 100644 index 00000000..910cf2f2 --- /dev/null +++ b/src/ChangeLog.txt @@ -0,0 +1,10 @@ +ChangeLog of SoftEther VPN +-------------------------- + +The ChangeLog of SoftEther VPN is on our web site: +http://www.softether.org/5-download/history + +(In Japanese: http://ja.softether.org/5-download/history) + +Enjoy it! + diff --git a/src/CurrentBuild.txt b/src/CurrentBuild.txt index 07224bce..606df81c 100644 --- a/src/CurrentBuild.txt +++ b/src/CurrentBuild.txt @@ -1,4 +1,4 @@ -BUILD_NUMBER 9408 +BUILD_NUMBER 9411 VERSION 403 BUILD_NAME rtm -BUILD_DATE 20140104_191055 +BUILD_DATE 20140107_045130 diff --git a/src/LICENSE b/src/LICENSE deleted file mode 100644 index 52c728da..00000000 --- a/src/LICENSE +++ /dev/null @@ -1,2350 +0,0 @@ -SoftEther VPN Server, Client and Bridge are free software, and released as -open-source. You can redistribute them and/or modify them under the terms of -the GNU General Public License version 2 as published by the Free Software -Foundation. - -Copyright (c) 2012-2014 Daiyuu Nobori. -Copyright (c) 2012-2014 SoftEther Project at University of Tsukuba, Japan. -Copyright (c) 2012-2014 SoftEther Corporation. -All Rights Reserved. -http://www.softether.org/ - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License version 2 as published by the Free -Software Foundation. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License version 2 -along with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -Neither the name of SoftEther nor the names of its contributors may be used to -endorse or promote products derived from this software without specific prior -written permission. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, UNDER -JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, MERGE, PUBLISH, -DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS SOFTWARE, THAT ANY -JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS SOFTWARE OR ITS CONTENTS, -AGAINST US (SOFTETHER PROJECT, SOFTETHER CORPORATION, DAIYUU NOBORI OR OTHER -SUPPLIERS), OR ANY JURIDICAL DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND -OF USING, COPYING, MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, -AND/OR SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND -CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO EXCLUSIVE -JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, JAPAN. YOU MUST WAIVE -ALL DEFENSES OF LACK OF PERSONAL JURISDICTION AND FORUM NON CONVENIENS. -PROCESS MAY BE SERVED ON EITHER PARTY IN THE MANNER AUTHORIZED BY APPLICABLE -LAW OR COURT RULE. - -USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS SOFTWARE -INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES PROHIBIT ENCRYPTED -COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. - -THE FOLLOWING GPLV2 CONDITIONS APPLY ON ALL SOFTETHER VPN PROGRAMS WHICH ARE -DEVELOPED BY SOFTETHER VPN PROJECT. - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public License is intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. This General Public License applies to -most of the Free Software Foundation's software and to any other program whose -authors commit to using it. (Some other Free Software Foundation software is -covered by the GNU Lesser General Public License instead.) You can apply it -to your programs, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for this service if you wish), -that you receive source code or can get it if you want it, that you can change -the software or use pieces of it in new free programs; and that you know you -can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether gratis or -for a fee, you must give the recipients all the rights that you have. You -must make sure that they, too, receive or can get the source code. And you -must show them these terms so they know their rights. - - We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, distribute -and/or modify the software. - - Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If the -software is modified by someone else and passed on, we want its recipients to -know that what they have is not the original, so that any problems introduced -by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program proprietary. -To prevent this, we have made it clear that any patent must be licensed for -everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and modification -follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms of -this General Public License. The "Program", below, refers to any such program -or work, and a "work based on the Program" means either the Program or any -derivative work under copyright law: that is to say, a work containing the -Program or a portion of it, either verbatim or with modifications and/or -translated into another language. (Hereinafter, translation is included -without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running the Program -is not restricted, and the output from the Program is covered only if its -contents constitute a work based on the Program (independent of having been -made by running the Program). Whether that is true depends on what the Program -does. - - 1. You may copy and distribute verbatim copies of the Program's source code -as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and give any other recipients of the -Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may -at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion of it, -thus forming a work based on the Program, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices stating -that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in whole -or in part contains or is derived from the Program or any part thereof, to be -licensed as a whole at no charge to all third parties under the terms of this -License. - - c) If the modified program normally reads commands interactively when run, -you must cause it, when started running for such interactive use in the most -ordinary way, to print or display an announcement including an appropriate -copyright notice and a notice that there is no warranty (or else, saying that -you provide a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this License. -(Exception: if the Program itself is interactive but does not normally print -such an announcement, your work based on the Program is not required to print -an announcement.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Program, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Program. - -In addition, mere aggregation of another work not based on the Program with -the Program (or with a work based on the Program) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may copy and distribute the Program (or a work based on it, under -Section 2) in object code or executable form under the terms of Sections 1 and -2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable source -code, which must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three years, to -give any third party, for a charge no more than your cost of physically -performing source distribution, a complete machine-readable copy of the -corresponding source code, to be distributed under the terms of Sections 1 and -2 above on a medium customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer to -distribute corresponding source code. (This alternative is allowed only for -noncommercial distribution and only if you received the program in object code -or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, complete source code means all -the source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and -installation of the executable. However, as a special exception, the source -code distributed need not include anything that is normally distributed (in -either source or binary form) with the major components (compiler, kernel, and -so on) of the operating system on which the executable runs, unless that -component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to -copy from a designated place, then offering equivalent access to copy the -source code from the same place counts as distribution of the source code, -even though third parties are not compelled to copy the source along with the -object code. - - 4. You may not copy, modify, sublicense, or distribute the Program except as -expressly provided under this License. Any attempt otherwise to copy, modify, -sublicense or distribute the Program is void, and will automatically terminate -your rights under this License. However, parties who have received copies, or -rights, from you under this License will not have their licenses terminated so -long as such parties remain in full compliance. - - 5. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Program or its derivative works. These actions are prohibited by law if you -do not accept this License. Therefore, by modifying or distributing the -Program (or any work based on the Program), you indicate your acceptance of -this License to do so, and all its terms and conditions for copying, -distributing or modifying the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these terms and -conditions. You may not impose any further restrictions on the recipients' -exercise of the rights granted herein. You are not responsible for enforcing -compliance by third parties to this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Program at all. -For example, if a patent license would not permit royalty-free redistribution -of the Program by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system, which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Program under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 9. The Free Software Foundation may publish revised and/or new versions of -the General Public License from time to time. Such new versions will be -similar in spirit to the present version, but may differ in detail to address -new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of this License, -you may choose any version ever published by the Free Software Foundation. - - 10. If you wish to incorporate parts of the Program into other free programs -whose distribution conditions are different, write to the author to ask for -permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -Note that the above copyright notices and use conditions do not apply on the -software components listed in below which are included in this Software. When -you use or distribute Software with including these libraries, you have to -follow the conditions of these libraries. - -These library's copyright notices and conditions are following; - -------------------- - -BitVisor(R) VPN Client Module (IPsec Driver): -Copyright (c) 2007, 2008 University of Tsukuba. -Copyright (C) 2007, 2008 National Institute of Information and Communications -Technology. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University of Tsukuba nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -Microsoft(R) C Runtime Library: -(c) 2007 Microsoft Corporation. All Rights Reserved. - -------------------- - -RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): - -License to copy and use this software is granted provided that it is -identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface -(Cryptoki)" in all material mentioning or referencing this software. - -License is also granted to make and use derivative works provided that such -works are identified as "derived from the RSA Security Inc. PKCS #11 -Cryptographic Token Interface (Cryptoki)" in all material mentioning or -referencing the derived work. - -RSA Security Inc. makes no representations concerning either the -merchantability of this software or the suitability of this software for any -particular purpose. It is provided "as is" without express or implied warranty -of any kind. - -------------------- - -WinPcap: -Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the Politecnico di Torino nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libedit: -Copyright (c) 1992, 1993 The Regents of the University of California. All -rights reserved. - -This code is derived from software contributed to Berkeley by Christos Zoulas -of Cornell University. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libiconv: - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - - This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide complete object -files to the recipients so that they can relink them with the library, after -making changes to the library and recompiling it. And you must show them these -terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated -libraries. This license is quite different from the ordinary one; be sure to -read it in full, and don't assume that anything in it is the same as in the -ordinary license. - - The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to -running a utility program or application program. However, in a textual and -legal sense, the linked executable is a combined work, a derivative of the -original library, and the ordinary General Public License treats it as such. - - Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker conditions -might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while preserving -your freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards changes -in header files, but we have achieved it as regards changes in the actual -functions of the Library.) The hope is that this will lead to faster -development of free libraries. - - The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - - Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it may -be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with -modifications and/or translated straightforwardly into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) - - "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - - Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License -along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table -of data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make a -good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a -purpose that is entirely well-defined independent of the application. -Therefore, Subsection 2d requires that any application-supplied function or -table used by this function must be optional: if the application does not -supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do this, -you must alter all the notices that refer to this License, so that they refer -to the ordinary GNU General Public License, version 2, instead of to this -License. (If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you wish.) -Do not make any other change in these notices. - - Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software -interchange. - - If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the -object code. - - 5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of this -License. - - However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. -Whether this is true is especially significant if the work can be linked -without the Library, or if the work is itself a library. The threshold for -this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten lines -or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables containing -this object code plus portions of the Library will still fall under Section -6.) - - Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your choice, -provided that the terms permit modification of the work for the customer's own -use and reverse engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above) ; and, if the work is -an executable linked with the Library, with the complete machine-readable -"work that uses the Library", as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified executable -containing the modified Library. (It is understood that the user who changes -the contents of definitions files in the Library will not necessarily be able -to recompile the application to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at least three -years, to give the same user the materials specified in Subsection 6a, above, -for a charge no more than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. - - d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - - It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - - 7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on -the Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not have -their licenses terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you do -not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this -License to do so, and all its terms and conditions for copying, distributing -or modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible for -enforcing compliance by third parties to this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution -of the Library by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Library does not specify a license version number, you may -choose any version ever published by the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -------------------- - -ncurses: -Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, distribute with -modifications, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright holders -shall not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization. - -------------------- - -OpenSSL: -OpenSSL License -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must -display the following acknowledgment: "This product includes software -developed by the OpenSSL Project for use in the OpenSSL Toolkit. -(http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to -endorse or promote products derived from this software without prior written -permission. For written permission, please contact openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" nor may -"OpenSSL" appear in their names without prior written permission of the -OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following -acknowledgment: "This product includes software developed by the OpenSSL -Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim Hudson -(tjh@cryptsoft.com). - -Original SSLeay License -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. - -This package is an SSL implementation written by Eric Young -(eay@cryptsoft.com). The implementation was written so as to conform with -Netscapes SSL. - -This library is free for commercial and non-commercial use as long as the -following conditions are aheared to. The following conditions apply to all -code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; -not just the SSL code. The SSL documentation included with this distribution -is covered by the same copyright terms except that the holder is Tim Hudson -(tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in the code -are not to be removed. If this package is used in a product, Eric Young should -be given attribution as the author of the parts of the library used. This can -be in the form of a textual message at program startup or in documentation -(online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the copyright notice, this list -of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must -display the following acknowledgement: "This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' -can be left out if the rouines from the library being used are not -cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from the -apps directory (application code) you must include an acknowledgement: "This -product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence [including the GNU Public -Licence.] - -------------------- - -zlib: -Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate and -zlib specifications were written by L. Peter Deutsch. Thanks to all the people -who reported problems and suggested various improvements in zlib; they are too -numerous to cite here. - -Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the -use of this software. - - Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software in a -product, an acknowledgment in the product documentation would be appreciated -but is not required. - 2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. - -------------------- - -Intel AESNI Sample Library: - -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -* Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Issue Date: Aug 6, 2010 - -------------------- - -NOTES - -SoftEther provides source codes of some GPL/LGPL/other libraries listed above -on its web server. Anyone can download, use and re-distribute them under -individual licenses which are contained on each archive file, available from -the following URL: -http://uploader.softether.co.jp/src/ - - - -BitVisor(R) VPN Client Module (IPsec Driver): -Copyright (c) 2007, 2008 University of Tsukuba. -Copyright (C) 2007, 2008 National Institute of Information and Communications -Technology. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University of Tsukuba nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -Microsoft(R) C Runtime Library: -(c) 2007 Microsoft Corporation. All Rights Reserved. - -------------------- - -RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): - -License to copy and use this software is granted provided that it is -identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface -(Cryptoki)" in all material mentioning or referencing this software. - -License is also granted to make and use derivative works provided that such -works are identified as "derived from the RSA Security Inc. PKCS #11 -Cryptographic Token Interface (Cryptoki)" in all material mentioning or -referencing the derived work. - -RSA Security Inc. makes no representations concerning either the -merchantability of this software or the suitability of this software for any -particular purpose. It is provided "as is" without express or implied warranty -of any kind. - -------------------- - -WinPcap: -Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the Politecnico di Torino nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libedit: -Copyright (c) 1992, 1993 The Regents of the University of California. All -rights reserved. - -This code is derived from software contributed to Berkeley by Christos Zoulas -of Cornell University. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libiconv: - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - - This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide complete object -files to the recipients so that they can relink them with the library, after -making changes to the library and recompiling it. And you must show them these -terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated -libraries. This license is quite different from the ordinary one; be sure to -read it in full, and don't assume that anything in it is the same as in the -ordinary license. - - The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to -running a utility program or application program. However, in a textual and -legal sense, the linked executable is a combined work, a derivative of the -original library, and the ordinary General Public License treats it as such. - - Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker conditions -might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while preserving -your freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards changes -in header files, but we have achieved it as regards changes in the actual -functions of the Library.) The hope is that this will lead to faster -development of free libraries. - - The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - - Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it may -be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with -modifications and/or translated straightforwardly into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) - - "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - - Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License -along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table -of data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make a -good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a -purpose that is entirely well-defined independent of the application. -Therefore, Subsection 2d requires that any application-supplied function or -table used by this function must be optional: if the application does not -supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do this, -you must alter all the notices that refer to this License, so that they refer -to the ordinary GNU General Public License, version 2, instead of to this -License. (If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you wish.) -Do not make any other change in these notices. - - Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software -interchange. - - If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the -object code. - - 5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of this -License. - - However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. -Whether this is true is especially significant if the work can be linked -without the Library, or if the work is itself a library. The threshold for -this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten lines -or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables containing -this object code plus portions of the Library will still fall under Section -6.) - - Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your choice, -provided that the terms permit modification of the work for the customer's own -use and reverse engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above) ; and, if the work is -an executable linked with the Library, with the complete machine-readable -"work that uses the Library", as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified executable -containing the modified Library. (It is understood that the user who changes -the contents of definitions files in the Library will not necessarily be able -to recompile the application to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at least three -years, to give the same user the materials specified in Subsection 6a, above, -for a charge no more than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. - - d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - - It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - - 7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on -the Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not have -their licenses terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you do -not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this -License to do so, and all its terms and conditions for copying, distributing -or modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible for -enforcing compliance by third parties to this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution -of the Library by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Library does not specify a license version number, you may -choose any version ever published by the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -------------------- - -ncurses: -Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, distribute with -modifications, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright holders -shall not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization. - -------------------- - -OpenSSL: -OpenSSL License -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must -display the following acknowledgment: "This product includes software -developed by the OpenSSL Project for use in the OpenSSL Toolkit. -(http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to -endorse or promote products derived from this software without prior written -permission. For written permission, please contact openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" nor may -"OpenSSL" appear in their names without prior written permission of the -OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following -acknowledgment: "This product includes software developed by the OpenSSL -Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim Hudson -(tjh@cryptsoft.com). - -Original SSLeay License -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. - -This package is an SSL implementation written by Eric Young -(eay@cryptsoft.com). The implementation was written so as to conform with -Netscapes SSL. - -This library is free for commercial and non-commercial use as long as the -following conditions are aheared to. The following conditions apply to all -code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; -not just the SSL code. The SSL documentation included with this distribution -is covered by the same copyright terms except that the holder is Tim Hudson -(tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in the code -are not to be removed. If this package is used in a product, Eric Young should -be given attribution as the author of the parts of the library used. This can -be in the form of a textual message at program startup or in documentation -(online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the copyright notice, this list -of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must -display the following acknowledgement: "This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' -can be left out if the rouines from the library being used are not -cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from the -apps directory (application code) you must include an acknowledgement: "This -product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence [including the GNU Public -Licence.] - -------------------- - -zlib: -Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate and -zlib specifications were written by L. Peter Deutsch. Thanks to all the people -who reported problems and suggested various improvements in zlib; they are too -numerous to cite here. - -Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the -use of this software. - - Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software in a -product, an acknowledgment in the product documentation would be appreciated -but is not required. - 2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. - -------------------- - -Intel AESNI Sample Library: - -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -* Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Issue Date: Aug 6, 2010 - -------------------- - -NOTES WRITTEN BY SOFTETHER CORPORATION - -Note for users of non-Windows version of PacketiX VPN: The enumerated bundle -of License Agreements above are copies of original License Agreements of each -library programs which PacketiX VPN uses. PacketiX VPN is not a delivered work -from these libraries. PacketiX VPN is a separated work from the libraries, but -it may call functions of the libraries (whether or not PacketiX VPN calls such -functions are depended on the user's intention to link them or not on user's -side computer). While some libraries indicate GPL or LGPL as a condition to -re-distribute, PacketiX VPN is not license under GPL nor LGPL. Therefore, we -took special care not to make PacketiX VPN become delivered works of any GPL -or LGPL libraries. In order to achieve that, both PacketiX VPN and GPL/LGPL -libraries are distributed with isolated forms (means that any program files of -PacketiX VPN are not bound nor linked to any GPL/LGPL libraries). If a user of -PacketiX VPN wants to link GPL/LGPL libraries by their own decisions, -operations and responsibilities, he may do that on his computer. However, if a -delivered work under copyright law is created as a result of such an -operation, such a delivered work must not re-distributed to other people, -because it may violate GPL/LGPL libraries' conditions. - -Note for users of Windows version of PacketiX VPN: For technical reason, the -above texts are exactly same as a file which is also contained on the -non-Windows version of PacketiX VPN. Actually, the Windows version of PacketiX -VPN has no relations to any GPL/LGPL libraries enumerated above. - -SoftEther Corporation provides source codes of some GPL/LGPL/other libraries -listed above on its web server. Anyone can download, use and re-distribute -them under individual licenses which are contained on each archive file, -available from the following URL: -http://uploader.softether.co.jp/src/ - - - -THE IMPORTANT NOTICES ABOUT SOFTETHER VPN - -FUNCTIONS OF VPN COMMUNICATIONS EMBEDDED ON THIS SOFTWARE ARE VERY POWERFUL -THAN EVER. THIS STRONG VPN ABILITY WILL BRING YOU HUGE BENEFITS. HOWEVER, IF -YOU MISUSE THIS SOFTWARE, IT MIGHT DAMAGES YOURSELF. IN ORDER TO AVOID SUCH -RISKS, THIS DOCUMENT ACCOUNTS IMPORTANT NOTICES FOR CUSTOMERS WHO ARE WILLING -TO USE THIS SOFTWARE. THE FOLLOWING INSTRUCTIONS ARE VERY IMPORTANT. READ AND -UNDERSTAND IT CAREFULLY. ADDITIONALLY, IF YOU ARE PLANNING TO USE THE DYNAMIC -DNS, THE NAT TRAVERSAL OR THE VPN AZURE FUNCTIONS, READ THE SECTION 3.5 -CAREFULLY. THESE FUNCTIONS ARE FREE SERVICES PROVIDED VIA THE INTERNET, ARE -NOT GUARANTEED, AND ARE NOT INTENDED TO BE USED FOR BUSINESS OR COMMERCIAL -USE. DO NOT USE THESE SERVICES FOR YOUR BUSINESS OR COMMERCIAL USE. - - -1. VPN Communication Protocols -1.1. SoftEther VPN Protocol -SoftEther VPN can perform VPN communication. Unlike traditional VPN protocols, -SoftEther VPN has an implementation of the newly-designed "SoftEther VPN -Protocol (SE-VPN Protocol)" . SE-VPN protocol encapsulates any Ethernet -packets into a HTTPS (HTTP over SSL) connection. Therefore SE-VPN protocol can -communicate beyond firewalls even if the firewall is configured to block -traditional VPN packets by network administrator. SE-VPN protocol is designed -and implemented to comply TLS 1.0 (RFC 5246) and HTTPS (RFC 2818). However, it -sometimes have different behavior to RFCs. If you are a network administrator -and want to block SE-VPN protocols on the firewall, you can adopt a -"white-list" policy on the firewall to filter any TCP or UDP packets on the -border except explicitly allowed packets towards specific web sites and -servers. - -1.2. NAT Traversal Function -Generally, if you use traditional VPN systems you have to request a network -administrator to make the NAT or firewall to "open" or "relay" specific TCP or -UDP ports. However, there are demands somehow to eliminate such working costs -on network administrators. In order to satisfy such demands, SoftEther VPN has -the newly-implemented "NAT Traversal" function. NAT Traversal is enabled by -default. A SoftEther VPN Server running on the computer behind NAT or firewall -can accept VPN connections from the Internet, without any special -configurations on firewalls or NATs. If you want to disable the NAT Traversal -function, modify the "DisableNatTraversal" to "true" on the configuration file -of SoftEther VPN Server. In order to disable it on the client-side, append -"/tcp" suffix on the destination hostname. - -1.3. Dynamic DNS Function -Traditional legacy VPN system requires a static global IP address on the VPN -server. In consideration of shortage of global IP addresses, SoftEther -Corporation implements the "Dynamic DNS Function" on SoftEther VPN Server. -Dynamic DNS is enabled by default. Dynamic DNS function notify the current -global IP address of the PC to the Dynamic DNS Servers which are operated by -SoftEther Corporation. A globally-unique hostname (FQDN) such as -"abc.softether.net" ( "abc" varies as unique per a user) will be assigned on -the VPN Server. If you tell this unique hostname to a VPN user, the user can -specify it as the destination VPN Sever hostname on the VPN Client and will be -able to connect the VPN Server. No IP addresses are required to know -beforehand. If the IP address of the VPN Server varies, the registered IP -address related to the hostname of Dynamic DNS service will be changed -automatically. By this mechanism, no longer need a static global IP address -which costs monthly to ISPs. You can use consumer-level inexpensive Internet -connection with dynamic IP address in order to operate an enterprise-level VPN -system. If you want to disable Dynamic DNS, specify "true" on the "Disabled" -items of the "DDnsClient" directive on the SoftEther VPN Server configuration -file. * Note for residents in People's Republic of China: If your VPN Server -is running on the People's Republic of China, the DNS suffix will be replaced -to "sedns.cn" domain. The "sedns.cn" domain is the service possessed and -operated by "Beijing Daiyuu SoftEther Technology Co., Ltd" which is a -Chinese-local enterprise. - -1.4. VPN over ICMP / VPN over DNS functions -If you want to make a VPN connection between SoftEther VPN Client / Bridge and -SoftEther VPN Server, but if TCP and UDP packets are prohibited by the -firewall, then you can encapsulates payloads into "ICMP" (as known as Ping) or -"DNS" packets. This function can realize a VPN connection by using ICMP or DNS -even if the firewall or router blocks every TCP or UDP connections. VPN over -ICMP / VPN over DNS functions are designed to comply standard ICMP and DNS -specifications as possible, however it sometimes has a behavior not to fully -comply them. Therefore, few poor-quality routers may be caused a -memory-overflow or something troubles when a lot of ICMP or DNS packets are -passed, and such routers sometimes freezes or reboots. It might affects other -users on the same network. To avoid such risks, append the suffix "/tcp" on -the destination hostname which is specified on the VPN-client side to disable -VPN over ICMP / DNS functions. - -1.5. VPN Azure Cloud Service -If your SoftEther VPN Server is placed behind the NAT or firwall, and by some -reason you cannot use NAT Traversal function, Dynamic DNS function or VPN over -ICMP/DNS function, you can use VPN Azure Clouse Service. SoftEther Corporation -operates VPN Azure Cloud on Internet. After the VPN Server makes a connection -to the VPN Azure Cloud, the hostname "abc.vpnazure.net" ( "abc" is a unique -hostname) can be specified to connect to the VPN Server via the VPN Azure -Cloud. Practically, such a hostname is pointing a global IP address of one of -cloud servers which are operated by SoftEther Corporation. If A VPN Client -connects to such a VPN Azure host, then the VPN Azure host will relay all -traffics between the VPN Client and the VPN Server. VPN Azure is disabled by -default. You can activate it easily by using VPN Server Configuration Tool. - -1.6. UDP Acceleration -SoftEther VPN has the UDP Acceleration Function. If a VPN consists of two -sites detects that UDP channel can be established, UDP will be automatically -used. By this function, throughput of UDP increases. If direct UDP channel can -be established, direct UDP packets will be used. However, if there is -something obstacles such as firewalls or NATs, the "UDP Hole Punching" -technology will be used, instead. The "UDP Hole Punching" uses the cloud -servers which SoftEther Corporation operates on Internet. UDP Acceleration can -be disabled anytime by setting up so on the VPN-client side. - - -2. VPN Software -2.1. SoftEther VPN Client -If you use SoftEther VPN Client on Windows, the Virtual Network Adapter device -driver will be installed on Windows. The Virtual Network Adapter is -implemented as a kernel-mode driver for Windows. The driver is -digitally-signed by a certificate issued by VeriSign, Inc. and also sub-signed -by Symantec Corporation. A message to ask you want to sure install the driver -might be popped up on the screen. SoftEther VPN Client may response the -message if possible. SoftEther VPN Client also optimizes the configuration of -MMCSS (Multimedia Class Scheduler Service) on Windows. You can undo the -optimizations of MMCSS afterwards. - -2.2. SoftEther VPN Server / Bridge -If you use SoftEther VPN Server / Bridge on Windows with "Local Bridge" -functions, you have to install the low-level Ethernet packet processing driver -on the computer. The driver is digitally-signed by a certificate issued by -VeriSign, Inc. and also sub-signed by Symantec Corporation. SoftEther VPN -Server / Bridge may disable the TCP/IP offloading features on the physical -network adapter for Local Bridge function. In Windows Vista / 2008 or greater -version, VPN Server may inject a packet-filter driver which complies Windows -Filter Platform (WPF) specification into the kernel in order to provide IPsec -function. The packet-filter driver will be loaded available only if IPsec -function is enabled. Once you enables IPsec function of SoftEther VPN Server, -the built-in IPsec function of Windows will be disabled. After you disabled -IPsec function of SoftEther VPN Server, then the built-in IPsec function of -Windows will revive. In order to provide the Local Bridge function, SoftEther -VPN Server / Bridge disables the TCP/IP offloading function on the operating -system. - -2.3. User-mode Installation -You can install SoftEther VPN Server and SoftEther VPN Bridge as "User-mode" -on Windows. In other words, even if you don't have Windows system -administrator's privileges, you can install SoftEther VPN as a normal user. -User-mode install will disable a few functions, however other most functions -work well. Therefore, for example, an employee can install SoftEther VPN -Server on the computer in the office network, and he will be able to connect -to the server from his home. In order to realize such a system by user-self, -no system administrative privileges are required in the view-point of -technical. However, breaking rules of the company to install software on the -computer without authority might be regarded as an unfavorable behavior. If -you are an employee and belong to the company, and the company-policy -prohibits installing software or making communications towards Internet -without permission, you have to obtain a permission from the network -administrator or the executive officer of your company in advance to install -SoftEther VPN. If you install VPN Server / Bridge as User-mode, an icon will -be appeared on the Windows task-tray. If you feel that the icon disturbs you, -you can hide it by your operation. However, you must not exploit this hiding -function to install VPN Server on other person's computer as a spyware. Such -behavior might be an offence against the criminal law. - -2.4. Keep Alive Function -SoftEther VPN Server and SoftEther VPN Bridge has Keep Alive Function by -default. The purpose of this function is to sustain the Internet line active. -The function transmits UDP packets with a random-byte-array-payload -periodically. This function is useful to avoid automatic disconnection on -mobile or dial-up connections. You can disable Keep Alive Function anytime. - -2.5. Uninstallation -The uninstallation process of SoftEther VPN software will delete all program -files. However, non-program files (such as files and data which are generated -by running of programs) ) will not be deleted. For technical reason, the exe -and resource files of uninstaller might remain. Such remaining files never -affects to use the computer, however you can delete it manually. Kernel-mode -drivers might not be deleted, however such drivers will not be loaded after -the next boot of Windows. You can use "sc" command of Windows to delete -kernel-mode drivers manually. - -2.6. Security -You should set the administrator's password on SoftEther VPN Server / Bridge -after installation. If you neglect to do it, another person can access to -SoftEther VPN Server / Bridge and can set the password without your -permission. This caution might be also applied on SoftEther VPN Client for -Linux. - -2.7. Automatic Update Notification -SoftEther VPN software for Windows has an automatic update notification -function. It accesses to the SoftEther Update server periodically to check -whether or not the latest version of software is released. If the latest -version is released, the notification message will be popped up on the screen. -In order to achieve this purpose, the version, language settings, the unique -identifier, the IP address of your computer and the hostname of VPN Server -which is connected to will be sent to the SoftEther Update server. No personal -information will be sent. Automatic Update Notification is enabled by default, -however you can disable it on the configuration screen. The setting whether -turned on or turned off will be saved individually corresponding to each -destination VPN server, by VPN Server Manager. - -2.8. Virtual NAT Function -A Virtual Hub on SoftEther VPN Server / Bridge has "Virtual NAT Function" . -Virtual NAT Function can share a single IP address on the physical network by -multiple private IP address of VPN Clients. There are two operation mode of -Virtual NAT: User-mode and Kernel-mode. In the user-mode operation, Virtual -NAT shares an IP address which is assigned on the host operating system. -Unlike user-mode, the kernel-mode operation attempts to find DHCP servers on -the physical network. If there are two or more physical networks, a DHCP -server will be sought automatically for each segments serially. If a DHCP -server found, and an IP address is acquired, the IP address will be used by -the Virtual NAT. In this case, an IP entry as a DHCP client will be registered -on the IP pool of the physical DHCP Server. The physical default gateway and -the DNS server will be used by the Virtual NAT in order to communicate with -hosts in Internet. In kernel-mode operation, a Virtual Hub has a virtual MAC -address which is operating on the physical Ethernet segment. In order to check -the connectivity to Internet, SoftEther VPN periodically sends DNS query -packet to resolve the IP address of host "www.yahoo.com" or "www.baidu.com" , -and attempts to connect to the TCP port 80 of such a resulted IP address for -connectivity check. - -2.9. Unattended Installation of Kernel-mode Components -When SoftEther VPN will detect a necessity to install the kernel-mode -components on Windows, a confirmation message will be appeared by Windows -system. In this occasion, SoftEther VPN software will switch to the Unattended -Installation mode in order to respond "Yes" to Windows. This is a solution to -prevent dead-locks when a remote-administration is performed from remote -place. - -2.10. Windows Firewall -SoftEther VPN software will register itself as a safe-program. Such an entry -will be remain after the uninstallation. You can remove it manually from the -Control Panel of Windows. - - -3. Internet Services -3.1. Internet Services which are provided by SoftEther Corporation -SoftEther Corporation provides Dynamic DNS, NAT Traversal and VPN Azure server -services on the Internet. These services are free of charge. Customers can -access to the services by using SoftEther VPN software, via Internet. These -service will be planned to be available from Open-Source version of "SoftEther -VPN" which will be released in the future. - -3.2. Sent Information and Privacy Protection -SoftEther VPN software may send an IP address, hostname, the version of VPN -software on the customer's computer to the cloud service operated by SoftEther -Corporation, in order to use the above services. These sending of information -are minimal necessary to use the services. No personal information will be -sent. SoftEther Corporation records log files of the cloud service servers for -90 days at least with the received information. Such logs will be used for -troubleshooting and other legitimate activities. SoftEther Corporation may -provide logs to a public servant of Japanese government who are belonging to -courts, police stations and the prosecutor's office, in order to comply such -authorities' order. (Every Japanese public servants are liable by law to keep -the information close.) Moreover, the IP addresses or other information will -be processed statistically and provided to the public, not to expose the each -concrete IP address, in order to release the release of research activities. - -3.3. Communication Data via VPN Azure Service -Regardless of the above 3.2 rule, if the customer sends or receives VPN -packets using VPN Azure Cloud Service, the actual payloads will stored and -forwarded via the volatile memory of the servers for very short period. Such a -behavior is naturally needed to provide the "VPN relay service" . No payloads -will be recorded on "fixed" storages such as hard-drives. However, the -"Wiretapping for Criminals Procedures Act" (The 137th legislation ruled on -August 18, 1999 in Japan) requires telecommunication companies to allow the -Japanese government authority to conduct a wire-tapping on the line. VPN Azure -Servers which are physically placed on Japan are subjects of this law. - -3.4. Comply to Japanese Telecommunication Laws -SoftEther Corporation complies with Japanese Telecommunication Laws as -necessary to provide online services via Internet. - -3.5. Free and Academic Experiment Services -SoftEther provides Dynamic DNS, NAT Traversal and VPN Azure as academic -experiment services. Therefore, there services can be used for free of charge. -These services are not parts of "SoftEther VPN Software Products" . These -services are provided without any warranty. The services may be suspended or -discontinued by technical or operational matters. In such occasions, users -will not be able to use the services. A user have to understand such risks, -and to acknowledge that such risks are borne by a user-self. SoftEther will -never be liable to results or damages of use or unable-to-use of the service. -Even if the user has already paid the license-fee of the commercial version of -SoftEther VPN, such paid fees don't include any fees of these services. -Therefore, if the online services will stop or be discontinued, no refunds or -recoveries of damages will be provided by SoftEther Corporation. - -3.6. DNS Proxy Cloud Servers -In some regions, when a user uses Internet, a DNS query sometimes broken or -lost when it is passing through the ISP line. If SoftEther VPN Server, Client -or Bridge detects a possibility that the accessing to the actual VPN server -might be unstable, then DNS queries will be also transferred to the DNS proxy -cloud servers which are operated by SoftEther Corporation. A DNS proxy cloud -server will respond DNS queries with answering correct a IP address. - - -4. General Cautions -4.1. Needs an Approval from Network Administrator -SoftEther VPN has powerful functions which don't require special settings by -network administrators. For example, you need not to ask the administrator to -configure the existing firewall in order to "open" a TCP/UDP port. Such -characteristic features are for the purpose to eliminate working times and -costs of network administrators, and avoid misconfiguration-risks around the -tasks to open specific exception ports on the firewall. However, any employees -belong to the company have to obtain an approval from the network -administrator before installs SoftEther VPN. If your network administrator -neglects to provide such an approval, you can consider to take an approval -from an upper authority. (For example, executive officer of the company.) If -you use SoftEther VPN without any approvals from the authority of your -company, you might have disadvantage. SoftEther Corporation will be never -liable for results or damages of using SoftEther VPN. - -4.2. Observe Laws of Your Country -If your country's law prohibits the use of encryption, you have to disable the -encryption function of SoftEther VPN by yourself. Similarly, in some countries -or regions, some functions of SoftEther VPN might be prohibited to use by -laws. Other countries' laws are none of SoftEther Corporation's concern -because SoftEther Corporation is an enterprise which is located and registered -in Japan physically. For example, there might be a risk that a part of -SoftEther VPN conflicts an existing patent which is valid only on the specific -region. SoftEther Corporation has no interests in such specific region outside -Japan's territory. Therefore, if you want to use SoftEther VPN in regions -outside Japan, you have to be careful not to violate third-person's rights. -You have to verify the legitimacy of the use of SoftEther VPN in the specific -region before you actually use it in such region. By nature, there are almost -200 countries in the World, and each country's law is different each other. It -is practically impossible to verify every countries' laws and regulations and -make the software comply with all countries' laws in advance to release the -software. Therefore SoftEther Corporation has verified the legitimacy of -SoftEther VPN against the laws and regulations of only Japan. If a user uses -SoftEther VPN in a specific country, and damaged by public servants of the -government authority, SoftEther Corporation will never be liable to recover or -compensate such damages or criminal responsibilities. - - -5. VPN Gate Academic Experiment Project -(This chapter applies only on SoftEther VPN software package which contains -the extension plug-in for VPN Gate Academic Experiment Project.) -5.1. About VPN Gate Academic Experiment Project -VPN Gate Academic Experiment Project is an online service operated for just -the academic research purpose at the graduate school of University of Tsukuba, -Japan. The purpose of this research is to expend our knowledge about the -"Global Distributed Public VPN Relay Server" (GDPVRS) technology. For details, -please visit http://www.vpngate.net/. - -5.2. About VPN Gate Service -SoftEther VPN Server and SoftEther VPN Client may contain "VPN Gate Service" -program. However, VPN Gate Service is disabled by default. -VPN Gate Service should be activated and enabled by the voluntary intention of -the owner of the computer which SoftEther VPN Server or SoftEther VPN Client -is installed on. After you activate VPN Gate Service, the computer will be -start to serve as a part of the Global Distributed Public VPN Relay Servers. -The IP address, hostname and related information of the computer will be sent -and registered to the directory server of VPN Gate Academic Experiment -Project, and they will be published and disclosed to the public. This -mechanism will allow any VPN Gate Client software's user to connect to the VPN -Gate Service running on your computer. While the VPN session between a VPN -Gate Client and your VPN Gate Service is established, the VPN Gate Client's -user can send/receive any IP packets towards the Internet via the VPN Gate -Service. The global IP address of the VPN Gate Service's hosing computer will -be used as the source IP address of such communications which a VPN Gate -Client initiates. -VPN Gate Service will send some information to the VPN Gate Academic -Experiment Service Directory Server. The information includes the operator's -information which described in section 5.5, logging settings, uptime, -operating system version, type of protocol, port numbers, quality information, -statistical information, VPN Gate clients' log history data (includes dates, -IP addresses, version numbers and IDs) and the version of the software. These -information will be exposed on the directory. VPN Gate Service also receives a -key for encoding which is described on the chapter 5.9 from the directory -server. - -5.3. Details of VPN Gate Service's Behavior -If you enable VPN Gate Service manually, which is disabled by default, the -"VPNGATE" Virtual Hub will be created on the SoftEther VPN Server. If you are -using SoftEther VPN Client and attempt to active VPN Gate Service on it, an -equivalent program to SoftEther VPN Server will be invoked on the same process -of SoftEther VPN Client, and the "VPNGATE" Virtual Hub will be created. The -"VPNGATE" Virtual Hub contains a user named "VPN" by default which permits -anyone on the Internet to make a VPN connection to the Virtual Hub. Once a VPN -Client connects to the "VPNGATE" Virtual Hub, any communication between the -user and the Internet will pass through the Virtual Hub, and -transmitted/received using the physical network interface on the computer -which SoftEther VPN Server (or SoftEther VPN Client) is running on. This will -cause the result that a destination host specified by the VPN Client will -identify that the source of the communication has initiated from the VPN Gate -Service's hosting computer's IP address. However, for safety, any packets -which destinations are within 192.168.0.0/255.255.0.0, 172.16.0.0/255.240.0.0 -or 10.0.0.0/255.0.0.0 will be blocked by the "VPNGATE" Virtual Hub in order to -protect your local network. Therefore, if you run VPN Gate Service on your -corporate network or private network, it is safe because anonymous VPN Client -users will not be permitted to access such private networks. VPN Gate Service -also serves as relay for accessing to the VPN Gate Directory Server. -In order to make VPN Gate Service familiar with firewalls and NATs, it opens -an UDP port by using the NAT Traversal function which is described on the -section 1.2. It also opens and listens on some TCP ports, and some TCP and UDP -ports will be specified as the target port of Universal Plug and Play (UPnP) -Port Transfer entries which are requested to your local routers. UPnP request -packets will be sent periodically. Some routers keep such an opened TCP/UDP -port permanently on the device. If you wish to close them, do it manually. -VPN Gate Service also provides the mirror-site function for www.vpngate.net. -This is a mechanism that a copy of the latest contents from www.vpngate.net -will be hosted by the mirror-site tiny HTTP server which is running on the VPN -Gate Service program. It will register itself on the mirror-sites list in -www.vpngate.net. However, it never relays any other communications which are -not towards www.vpngate.net. - -5.4. Communication between Internet via VPN Gate Service -VPN Gate Service provides a routing between users and the Internet, by using -the Virtual NAT Function which is described on the section 2.8. VPN Gate -Service sends polling Ping packets to the server which is located on -University of Tsukuba, and the Google Public DNS Server which is identified as -8.8.8.8, in order to check the latest quality of your Internet line. VPN Gate -Service also sends and receives a lot of random packets to/from the Speed Test -Server on University of Tsukuba. These quality data will be reported to VPN -Gate Directory Server, automatically and periodically. The result will be -saved and disclosed to the public. These periodical polling communication are -adjusted not to occupy the Internet line, however in some circumstances they -might occupy the line. - -5.5. Operator's Information of VPN Gate Service -If you activate VPN Gate Service on your computer, the computer will be a part -of the Global Distributed Public VPN Relay Servers. Therefore, the Operator's -administrative information of your VPN Gate Service should be reported and -registered on the VPN Gate Service Directory. Operator's information contains -the name of the operator and the abuse-reporting contact e-mail address. These -information can be inputted on the screen if the VPN Gate configuration. -Inputted information will be transmitted to the VPN Gate Directory Server, -stored and disclosed to the public. So you have to be careful to input -information. By the way, until you specify something as the operator's -information, the computer's hostname will be used automatically as the field -of the name of the operator, by appending the "'s owner" string after the -hostname. - -5.6. Observe Laws to Operate VPN Gate Service -In some countries or regions, a user who is planning to activate and operate -VPN Gate Service, he are mandated to obtain a license or register a service -from/to the government. If your region has such a regulation, you must fulfill -mandated process before activating VPN Gate Service in advance. Neither the -developers nor operators of the VPN Gate Academic Experiment Project will be -liable for legal/criminal responsibilities or damages which are occurred from -failure to comply your local laws. - -5.7. Protect Privacy of Communication -Most of countries have a law which requires communication service's operators, -including VPN Gate Service operators, to protect the privacy of communication -of third-persons. When you operate VPN Gate Service, you must always protect -user's privacy. - -5.8. Packet Logs -The packet logging function is implemented on VPN Gate Service. It records -essential headers of major TCP/IP packets which are transmitted via the -Virtual Hub. This function will be helpful to investigate the "original IP -address" of the initiator of communication who was a connected user of your -VPN Gate Service, by checking the packet logs and the connection logs. The -packet logs are recorded only for such legitimate investigates purpose. Do not -peek nor leak packet logs except the rightful purpose. Such act will be -violate the section 5.7. - -5.9. Packet Logs Automatic Archiving and Encoding Function -The VPN Gate Academic Experiment Service is operated and running under the -Japanese constitution and laws. The Japanese constitution laws demand strictly -protection over the privacy of communication. Because this service is under -Japanese rules, the program of VPN Gate Service implements this "Automatic Log -File Encoding" protection mechanism, and enabled by default. -The VPN Gate Service is currently configured to encode packet log files which -has passed two or more weeks automatically, by default. In order to protect -privacy of communication, if a packet log file is once encoded, even the -administrator of the local computer cannot censor the packet log file. This -mechanism protects privacy of end-users of VPN Gate Service. -You can change the VPN Gate Service setting to disable this automatic encoding -function. Then packet log files will never be encoded even after two weeks -passed. In such a configuration, all packet logs will remain as plain-text on -the disk. Therefore you have to take care not to violate user's privacy. -If you are liable to decode an encoded packet log files (for example: a VPN -Gate Service's user illegally abused your VPN Gate Service and you have to -decode the packet logs in order to comply the laws), contact the administrator -of the VPN Gate Academic Experiment Service at Graduate School of University -of Tsukuba, Japan. You can find the contact address at -http://www.vpngate.net/. The administrator of VPN Gate Service will respond to -decode the packet logs if there is an appropriate and legal request from court -or other judicial authorities, according to laws. - -5.10. Caution if You Operate VPN Gate Service in the Japan's Territories -When a user operates VPN Gate Service in the Japan's territories, such an act -may be regulated under the Japanese Telecommunication Laws if the operation is -a subject to the law. However, in such a circumstance, according to the -"Japanese Telecommunication Business Compete Manual [supplemental version]" , -non- profitable operations of communications are not identified as a -"telecommunication business" . So usual operators of VPN Gate Service are not -subjects to "telecommunication business operators" , and not be mandated to -register to the government. Even so, legalities to protect the privacy of -communication still imposed. As a conclusion, if you operate VPN Gate Service -in the Japan's Territories, you must not leak the secrets of communications -which are transmitted via your operating VPN Gate Service. - -5.11. VPN Gate Client -If SoftEther VPN Client contains the VPN Gate Client plug-in, you can use it -to obtain the list of current operating VPN Gate Service servers in the -Internet, and make a VPN connection to a specific server on the list. -VPN Gate Client always keeps the latest list of the VPN Gate Services -periodically. Be careful if you are using a pay-per-use Internet line. -When you start the VPN Gate Client software, the screen which asks you -activate or not VPN Gate Service will be appeared. For details of VPN Gate -Service, read the above sections. - -5.12. Caution before Joining or Exploiting VPN Gate Academic Experiment -Project -The VPN Gate Academic Experiment Service is operated as a research project at -the graduate school on University of Tsukuba, Japan. The service is governed -under the Japanese laws. Other countries' laws are none of our concerns nor -responsibilities. -By nature, there are almost 200 countries in the World, with different laws. -It is impossible to verify every countries' laws and regulations and make the -software comply with all countries' laws in advance to release the software. -If a user uses VPN Gate service in a specific country, and damaged by public -servants of the authority, the developer of either the service or software -will never be liable to recover or compensate such damages or criminal -responsibilities. -By using this software and service, the user must observe all concerned laws -and rules with user's own responsibility. The user will be completely liable -to any damages and responsibilities which are results of using this software -and service, regardless of either inside or outside of Japan's territory. -If you don't agree nor understand the above warnings, do not use any of VPN -Gate Academic Experiment Service functions. -VPN Gate is a research project for just academic purpose only. VPN Gate was -developed as a plug-in for SoftEther VPN and UT-VPN. However, all parts of VPN -Gate were developed on this research project at University of Tsukuba. Any -parts of VPN Gate are not developed by SoftEther Corporation. The VPN Gate -Research Project is not a subject to be led, operated, promoted nor guaranteed -by SoftEther Corporation. - - diff --git a/src/LICENSE.TXT b/src/LICENSE.TXT index 52c728da..92c3170b 100644 --- a/src/LICENSE.TXT +++ b/src/LICENSE.TXT @@ -56,13 +56,17 @@ COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. THE FOLLOWING GPLV2 CONDITIONS APPLY ON ALL SOFTETHER VPN PROGRAMS WHICH ARE DEVELOPED BY SOFTETHER VPN PROJECT. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH +LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. + GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. Preamble @@ -320,2031 +324,8 @@ DAMAGES. END OF TERMS AND CONDITIONS -Note that the above copyright notices and use conditions do not apply on the -software components listed in below which are included in this Software. When -you use or distribute Software with including these libraries, you have to -follow the conditions of these libraries. - -These library's copyright notices and conditions are following; - -------------------- - -BitVisor(R) VPN Client Module (IPsec Driver): -Copyright (c) 2007, 2008 University of Tsukuba. -Copyright (C) 2007, 2008 National Institute of Information and Communications -Technology. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University of Tsukuba nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -Microsoft(R) C Runtime Library: -(c) 2007 Microsoft Corporation. All Rights Reserved. - -------------------- - -RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): - -License to copy and use this software is granted provided that it is -identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface -(Cryptoki)" in all material mentioning or referencing this software. - -License is also granted to make and use derivative works provided that such -works are identified as "derived from the RSA Security Inc. PKCS #11 -Cryptographic Token Interface (Cryptoki)" in all material mentioning or -referencing the derived work. - -RSA Security Inc. makes no representations concerning either the -merchantability of this software or the suitability of this software for any -particular purpose. It is provided "as is" without express or implied warranty -of any kind. - -------------------- - -WinPcap: -Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the Politecnico di Torino nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libedit: -Copyright (c) 1992, 1993 The Regents of the University of California. All -rights reserved. - -This code is derived from software contributed to Berkeley by Christos Zoulas -of Cornell University. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libiconv: - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - - This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide complete object -files to the recipients so that they can relink them with the library, after -making changes to the library and recompiling it. And you must show them these -terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated -libraries. This license is quite different from the ordinary one; be sure to -read it in full, and don't assume that anything in it is the same as in the -ordinary license. - - The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to -running a utility program or application program. However, in a textual and -legal sense, the linked executable is a combined work, a derivative of the -original library, and the ordinary General Public License treats it as such. - - Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker conditions -might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while preserving -your freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards changes -in header files, but we have achieved it as regards changes in the actual -functions of the Library.) The hope is that this will lead to faster -development of free libraries. - - The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - - Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it may -be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with -modifications and/or translated straightforwardly into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) - - "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - - Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License -along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table -of data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make a -good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a -purpose that is entirely well-defined independent of the application. -Therefore, Subsection 2d requires that any application-supplied function or -table used by this function must be optional: if the application does not -supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do this, -you must alter all the notices that refer to this License, so that they refer -to the ordinary GNU General Public License, version 2, instead of to this -License. (If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you wish.) -Do not make any other change in these notices. - - Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software -interchange. - - If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the -object code. - - 5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of this -License. - - However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. -Whether this is true is especially significant if the work can be linked -without the Library, or if the work is itself a library. The threshold for -this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten lines -or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables containing -this object code plus portions of the Library will still fall under Section -6.) - - Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your choice, -provided that the terms permit modification of the work for the customer's own -use and reverse engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above) ; and, if the work is -an executable linked with the Library, with the complete machine-readable -"work that uses the Library", as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified executable -containing the modified Library. (It is understood that the user who changes -the contents of definitions files in the Library will not necessarily be able -to recompile the application to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at least three -years, to give the same user the materials specified in Subsection 6a, above, -for a charge no more than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. - - d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - - It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - - 7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on -the Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not have -their licenses terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you do -not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this -License to do so, and all its terms and conditions for copying, distributing -or modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible for -enforcing compliance by third parties to this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution -of the Library by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Library does not specify a license version number, you may -choose any version ever published by the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -------------------- - -ncurses: -Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, distribute with -modifications, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright holders -shall not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization. - -------------------- - -OpenSSL: -OpenSSL License -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must -display the following acknowledgment: "This product includes software -developed by the OpenSSL Project for use in the OpenSSL Toolkit. -(http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to -endorse or promote products derived from this software without prior written -permission. For written permission, please contact openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" nor may -"OpenSSL" appear in their names without prior written permission of the -OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following -acknowledgment: "This product includes software developed by the OpenSSL -Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim Hudson -(tjh@cryptsoft.com). - -Original SSLeay License -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. - -This package is an SSL implementation written by Eric Young -(eay@cryptsoft.com). The implementation was written so as to conform with -Netscapes SSL. - -This library is free for commercial and non-commercial use as long as the -following conditions are aheared to. The following conditions apply to all -code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; -not just the SSL code. The SSL documentation included with this distribution -is covered by the same copyright terms except that the holder is Tim Hudson -(tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in the code -are not to be removed. If this package is used in a product, Eric Young should -be given attribution as the author of the parts of the library used. This can -be in the form of a textual message at program startup or in documentation -(online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the copyright notice, this list -of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must -display the following acknowledgement: "This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' -can be left out if the rouines from the library being used are not -cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from the -apps directory (application code) you must include an acknowledgement: "This -product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence [including the GNU Public -Licence.] - -------------------- - -zlib: -Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate and -zlib specifications were written by L. Peter Deutsch. Thanks to all the people -who reported problems and suggested various improvements in zlib; they are too -numerous to cite here. - -Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the -use of this software. - - Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software in a -product, an acknowledgment in the product documentation would be appreciated -but is not required. - 2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. - -------------------- - -Intel AESNI Sample Library: - -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -* Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Issue Date: Aug 6, 2010 - -------------------- - -NOTES - -SoftEther provides source codes of some GPL/LGPL/other libraries listed above -on its web server. Anyone can download, use and re-distribute them under -individual licenses which are contained on each archive file, available from -the following URL: -http://uploader.softether.co.jp/src/ - - - -BitVisor(R) VPN Client Module (IPsec Driver): -Copyright (c) 2007, 2008 University of Tsukuba. -Copyright (C) 2007, 2008 National Institute of Information and Communications -Technology. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University of Tsukuba nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -Microsoft(R) C Runtime Library: -(c) 2007 Microsoft Corporation. All Rights Reserved. - -------------------- - -RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): - -License to copy and use this software is granted provided that it is -identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface -(Cryptoki)" in all material mentioning or referencing this software. - -License is also granted to make and use derivative works provided that such -works are identified as "derived from the RSA Security Inc. PKCS #11 -Cryptographic Token Interface (Cryptoki)" in all material mentioning or -referencing the derived work. - -RSA Security Inc. makes no representations concerning either the -merchantability of this software or the suitability of this software for any -particular purpose. It is provided "as is" without express or implied warranty -of any kind. - -------------------- - -WinPcap: -Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the Politecnico di Torino nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libedit: -Copyright (c) 1992, 1993 The Regents of the University of California. All -rights reserved. - -This code is derived from software contributed to Berkeley by Christos Zoulas -of Cornell University. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------- - -libiconv: - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public Licenses are intended -to guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - - This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - - When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide complete object -files to the recipients so that they can relink them with the library, after -making changes to the library and recompiling it. And you must show them these -terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright the -library, and (2) offer you this license which gives you legal permission to -copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain that -everyone understands that there is no warranty for this free library. If the -library is modified by someone else and passed on, we want its recipients to -know that what they have is not the original version, so that any problems -introduced by others will not reflect on the original authors' reputations. - - Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will -individually obtain patent licenses, thus in effect transforming the program -into proprietary software. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated -libraries. This license is quite different from the ordinary one; be sure to -read it in full, and don't assume that anything in it is the same as in the -ordinary license. - - The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to -running a utility program or application program. However, in a textual and -legal sense, the linked executable is a combined work, a derivative of the -original library, and the ordinary General Public License treats it as such. - - Because of this blurred distinction, using the ordinary General Public -License for libraries did not effectively promote software sharing, because -most developers did not use the libraries. We concluded that weaker conditions -might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries -themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while preserving -your freedom as a user of such programs to change the free libraries that are -incorporated in them. (We have not seen how to achieve this as regards changes -in header files, but we have achieved it as regards changes in the actual -functions of the Library.) The hope is that this will lead to faster -development of free libraries. - - The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - - Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it may -be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data prepared so -as to be conveniently linked with application programs (which use some of -those functions and data) to form executables. - - The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a work -containing the Library or a portion of it, either verbatim or with -modifications and/or translated straightforwardly into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) - - "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, complete source code means all the source -code for all modules it contains, plus any associated interface definition -files, plus the scripts used to control compilation and installation of the -library. - - Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's complete -source code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and distribute a copy of this License -along with the Library. - - You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that you -also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a table -of data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make a -good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - - (For example, a function in a library to compute square roots has a -purpose that is entirely well-defined independent of the application. -Therefore, Subsection 2d requires that any application-supplied function or -table used by this function must be optional: if the application does not -supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be on -the terms of this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do this, -you must alter all the notices that refer to this License, so that they refer -to the ordinary GNU General Public License, version 2, instead of to this -License. (If a newer version than version 2 of the ordinary GNU General Public -License has appeared, then you can specify that version instead if you wish.) -Do not make any other change in these notices. - - Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete -corresponding machine-readable source code, which must be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software -interchange. - - If distribution of object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from -the same place satisfies the requirement to distribute the source code, even -though third parties are not compelled to copy the source along with the -object code. - - 5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, is -called a "work that uses the Library". Such a work, in isolation, is not a -derivative work of the Library, and therefore falls outside the scope of this -License. - - However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable is -therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file that is -part of the Library, the object code for the work may be a derivative work of -the Library even though the source code is not. -Whether this is true is especially significant if the work can be linked -without the Library, or if the work is itself a library. The threshold for -this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions (ten lines -or less in length), then the use of the object file is unrestricted, -regardless of whether it is legally a derivative work. (Executables containing -this object code plus portions of the Library will still fall under Section -6.) - - Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or link a -"work that uses the Library" with the Library to produce a work containing -portions of the Library, and distribute that work under terms of your choice, -provided that the terms permit modification of the work for the customer's own -use and reverse engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - - a) Accompany the work with the complete corresponding machine-readable -source code for the Library including whatever changes were used in the work -(which must be distributed under Sections 1 and 2 above) ; and, if the work is -an executable linked with the Library, with the complete machine-readable -"work that uses the Library", as object code and/or source code, so that the -user can modify the Library and then relink to produce a modified executable -containing the modified Library. (It is understood that the user who changes -the contents of definitions files in the Library will not necessarily be able -to recompile the application to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at least three -years, to give the same user the materials specified in Subsection 6a, above, -for a charge no more than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. - - d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the -executable from it. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - - It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating -system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. - - 7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities not -covered by this License, and distribute such a combined library, provided that -the separate distribution of the work based on the Library and of the other -library facilities is otherwise permitted, and provided that you do these two -things: - - a) Accompany the combined library with a copy of the same work based on -the Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. - - b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute the -Library except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not have -their licenses terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you do -not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this -License to do so, and all its terms and conditions for copying, distributing -or modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the original -licensor to copy, distribute, link with or modify the Library subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible for -enforcing compliance by third parties to this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Library at all. -For example, if a patent license would not permit royalty-free redistribution -of the Library by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - - 13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software -Foundation. If the Library does not specify a license version number, you may -choose any version ever published by the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - -------------------- - -ncurses: -Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, distribute with -modifications, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright holders -shall not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization. - -------------------- - -OpenSSL: -OpenSSL License -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must -display the following acknowledgment: "This product includes software -developed by the OpenSSL Project for use in the OpenSSL Toolkit. -(http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to -endorse or promote products derived from this software without prior written -permission. For written permission, please contact openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" nor may -"OpenSSL" appear in their names without prior written permission of the -OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following -acknowledgment: "This product includes software developed by the OpenSSL -Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim Hudson -(tjh@cryptsoft.com). - -Original SSLeay License -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. - -This package is an SSL implementation written by Eric Young -(eay@cryptsoft.com). The implementation was written so as to conform with -Netscapes SSL. - -This library is free for commercial and non-commercial use as long as the -following conditions are aheared to. The following conditions apply to all -code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; -not just the SSL code. The SSL documentation included with this distribution -is covered by the same copyright terms except that the holder is Tim Hudson -(tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in the code -are not to be removed. If this package is used in a product, Eric Young should -be given attribution as the author of the parts of the library used. This can -be in the form of a textual message at program startup or in documentation -(online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the copyright notice, this list -of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must -display the following acknowledgement: "This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' -can be left out if the rouines from the library being used are not -cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from the -apps directory (application code) you must include an acknowledgement: "This -product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence [including the GNU Public -Licence.] - -------------------- - -zlib: -Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate and -zlib specifications were written by L. Peter Deutsch. Thanks to all the people -who reported problems and suggested various improvements in zlib; they are too -numerous to cite here. - -Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the -use of this software. - - Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software in a -product, an acknowledgment in the product documentation would be appreciated -but is not required. - 2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* receiving -lengthy legal documents to sign. The sources are provided for free but without -warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. - -If you redistribute modified sources, we would appreciate that you include in -the file ChangeLog history information documenting your changes. Please read -the FAQ for more information on the distribution of modified source versions. - -------------------- - -Intel AESNI Sample Library: - -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. -* Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Issue Date: Aug 6, 2010 - -------------------- - -NOTES WRITTEN BY SOFTETHER CORPORATION - -Note for users of non-Windows version of PacketiX VPN: The enumerated bundle -of License Agreements above are copies of original License Agreements of each -library programs which PacketiX VPN uses. PacketiX VPN is not a delivered work -from these libraries. PacketiX VPN is a separated work from the libraries, but -it may call functions of the libraries (whether or not PacketiX VPN calls such -functions are depended on the user's intention to link them or not on user's -side computer). While some libraries indicate GPL or LGPL as a condition to -re-distribute, PacketiX VPN is not license under GPL nor LGPL. Therefore, we -took special care not to make PacketiX VPN become delivered works of any GPL -or LGPL libraries. In order to achieve that, both PacketiX VPN and GPL/LGPL -libraries are distributed with isolated forms (means that any program files of -PacketiX VPN are not bound nor linked to any GPL/LGPL libraries). If a user of -PacketiX VPN wants to link GPL/LGPL libraries by their own decisions, -operations and responsibilities, he may do that on his computer. However, if a -delivered work under copyright law is created as a result of such an -operation, such a delivered work must not re-distributed to other people, -because it may violate GPL/LGPL libraries' conditions. - -Note for users of Windows version of PacketiX VPN: For technical reason, the -above texts are exactly same as a file which is also contained on the -non-Windows version of PacketiX VPN. Actually, the Windows version of PacketiX -VPN has no relations to any GPL/LGPL libraries enumerated above. - -SoftEther Corporation provides source codes of some GPL/LGPL/other libraries -listed above on its web server. Anyone can download, use and re-distribute -them under individual licenses which are contained on each archive file, -available from the following URL: -http://uploader.softether.co.jp/src/ - - - -THE IMPORTANT NOTICES ABOUT SOFTETHER VPN - -FUNCTIONS OF VPN COMMUNICATIONS EMBEDDED ON THIS SOFTWARE ARE VERY POWERFUL -THAN EVER. THIS STRONG VPN ABILITY WILL BRING YOU HUGE BENEFITS. HOWEVER, IF -YOU MISUSE THIS SOFTWARE, IT MIGHT DAMAGES YOURSELF. IN ORDER TO AVOID SUCH -RISKS, THIS DOCUMENT ACCOUNTS IMPORTANT NOTICES FOR CUSTOMERS WHO ARE WILLING -TO USE THIS SOFTWARE. THE FOLLOWING INSTRUCTIONS ARE VERY IMPORTANT. READ AND -UNDERSTAND IT CAREFULLY. ADDITIONALLY, IF YOU ARE PLANNING TO USE THE DYNAMIC -DNS, THE NAT TRAVERSAL OR THE VPN AZURE FUNCTIONS, READ THE SECTION 3.5 -CAREFULLY. THESE FUNCTIONS ARE FREE SERVICES PROVIDED VIA THE INTERNET, ARE -NOT GUARANTEED, AND ARE NOT INTENDED TO BE USED FOR BUSINESS OR COMMERCIAL -USE. DO NOT USE THESE SERVICES FOR YOUR BUSINESS OR COMMERCIAL USE. - - -1. VPN Communication Protocols -1.1. SoftEther VPN Protocol -SoftEther VPN can perform VPN communication. Unlike traditional VPN protocols, -SoftEther VPN has an implementation of the newly-designed "SoftEther VPN -Protocol (SE-VPN Protocol)" . SE-VPN protocol encapsulates any Ethernet -packets into a HTTPS (HTTP over SSL) connection. Therefore SE-VPN protocol can -communicate beyond firewalls even if the firewall is configured to block -traditional VPN packets by network administrator. SE-VPN protocol is designed -and implemented to comply TLS 1.0 (RFC 5246) and HTTPS (RFC 2818). However, it -sometimes have different behavior to RFCs. If you are a network administrator -and want to block SE-VPN protocols on the firewall, you can adopt a -"white-list" policy on the firewall to filter any TCP or UDP packets on the -border except explicitly allowed packets towards specific web sites and -servers. - -1.2. NAT Traversal Function -Generally, if you use traditional VPN systems you have to request a network -administrator to make the NAT or firewall to "open" or "relay" specific TCP or -UDP ports. However, there are demands somehow to eliminate such working costs -on network administrators. In order to satisfy such demands, SoftEther VPN has -the newly-implemented "NAT Traversal" function. NAT Traversal is enabled by -default. A SoftEther VPN Server running on the computer behind NAT or firewall -can accept VPN connections from the Internet, without any special -configurations on firewalls or NATs. If you want to disable the NAT Traversal -function, modify the "DisableNatTraversal" to "true" on the configuration file -of SoftEther VPN Server. In order to disable it on the client-side, append -"/tcp" suffix on the destination hostname. - -1.3. Dynamic DNS Function -Traditional legacy VPN system requires a static global IP address on the VPN -server. In consideration of shortage of global IP addresses, SoftEther -Corporation implements the "Dynamic DNS Function" on SoftEther VPN Server. -Dynamic DNS is enabled by default. Dynamic DNS function notify the current -global IP address of the PC to the Dynamic DNS Servers which are operated by -SoftEther Corporation. A globally-unique hostname (FQDN) such as -"abc.softether.net" ( "abc" varies as unique per a user) will be assigned on -the VPN Server. If you tell this unique hostname to a VPN user, the user can -specify it as the destination VPN Sever hostname on the VPN Client and will be -able to connect the VPN Server. No IP addresses are required to know -beforehand. If the IP address of the VPN Server varies, the registered IP -address related to the hostname of Dynamic DNS service will be changed -automatically. By this mechanism, no longer need a static global IP address -which costs monthly to ISPs. You can use consumer-level inexpensive Internet -connection with dynamic IP address in order to operate an enterprise-level VPN -system. If you want to disable Dynamic DNS, specify "true" on the "Disabled" -items of the "DDnsClient" directive on the SoftEther VPN Server configuration -file. * Note for residents in People's Republic of China: If your VPN Server -is running on the People's Republic of China, the DNS suffix will be replaced -to "sedns.cn" domain. The "sedns.cn" domain is the service possessed and -operated by "Beijing Daiyuu SoftEther Technology Co., Ltd" which is a -Chinese-local enterprise. - -1.4. VPN over ICMP / VPN over DNS functions -If you want to make a VPN connection between SoftEther VPN Client / Bridge and -SoftEther VPN Server, but if TCP and UDP packets are prohibited by the -firewall, then you can encapsulates payloads into "ICMP" (as known as Ping) or -"DNS" packets. This function can realize a VPN connection by using ICMP or DNS -even if the firewall or router blocks every TCP or UDP connections. VPN over -ICMP / VPN over DNS functions are designed to comply standard ICMP and DNS -specifications as possible, however it sometimes has a behavior not to fully -comply them. Therefore, few poor-quality routers may be caused a -memory-overflow or something troubles when a lot of ICMP or DNS packets are -passed, and such routers sometimes freezes or reboots. It might affects other -users on the same network. To avoid such risks, append the suffix "/tcp" on -the destination hostname which is specified on the VPN-client side to disable -VPN over ICMP / DNS functions. - -1.5. VPN Azure Cloud Service -If your SoftEther VPN Server is placed behind the NAT or firwall, and by some -reason you cannot use NAT Traversal function, Dynamic DNS function or VPN over -ICMP/DNS function, you can use VPN Azure Clouse Service. SoftEther Corporation -operates VPN Azure Cloud on Internet. After the VPN Server makes a connection -to the VPN Azure Cloud, the hostname "abc.vpnazure.net" ( "abc" is a unique -hostname) can be specified to connect to the VPN Server via the VPN Azure -Cloud. Practically, such a hostname is pointing a global IP address of one of -cloud servers which are operated by SoftEther Corporation. If A VPN Client -connects to such a VPN Azure host, then the VPN Azure host will relay all -traffics between the VPN Client and the VPN Server. VPN Azure is disabled by -default. You can activate it easily by using VPN Server Configuration Tool. - -1.6. UDP Acceleration -SoftEther VPN has the UDP Acceleration Function. If a VPN consists of two -sites detects that UDP channel can be established, UDP will be automatically -used. By this function, throughput of UDP increases. If direct UDP channel can -be established, direct UDP packets will be used. However, if there is -something obstacles such as firewalls or NATs, the "UDP Hole Punching" -technology will be used, instead. The "UDP Hole Punching" uses the cloud -servers which SoftEther Corporation operates on Internet. UDP Acceleration can -be disabled anytime by setting up so on the VPN-client side. - - -2. VPN Software -2.1. SoftEther VPN Client -If you use SoftEther VPN Client on Windows, the Virtual Network Adapter device -driver will be installed on Windows. The Virtual Network Adapter is -implemented as a kernel-mode driver for Windows. The driver is -digitally-signed by a certificate issued by VeriSign, Inc. and also sub-signed -by Symantec Corporation. A message to ask you want to sure install the driver -might be popped up on the screen. SoftEther VPN Client may response the -message if possible. SoftEther VPN Client also optimizes the configuration of -MMCSS (Multimedia Class Scheduler Service) on Windows. You can undo the -optimizations of MMCSS afterwards. - -2.2. SoftEther VPN Server / Bridge -If you use SoftEther VPN Server / Bridge on Windows with "Local Bridge" -functions, you have to install the low-level Ethernet packet processing driver -on the computer. The driver is digitally-signed by a certificate issued by -VeriSign, Inc. and also sub-signed by Symantec Corporation. SoftEther VPN -Server / Bridge may disable the TCP/IP offloading features on the physical -network adapter for Local Bridge function. In Windows Vista / 2008 or greater -version, VPN Server may inject a packet-filter driver which complies Windows -Filter Platform (WPF) specification into the kernel in order to provide IPsec -function. The packet-filter driver will be loaded available only if IPsec -function is enabled. Once you enables IPsec function of SoftEther VPN Server, -the built-in IPsec function of Windows will be disabled. After you disabled -IPsec function of SoftEther VPN Server, then the built-in IPsec function of -Windows will revive. In order to provide the Local Bridge function, SoftEther -VPN Server / Bridge disables the TCP/IP offloading function on the operating -system. - -2.3. User-mode Installation -You can install SoftEther VPN Server and SoftEther VPN Bridge as "User-mode" -on Windows. In other words, even if you don't have Windows system -administrator's privileges, you can install SoftEther VPN as a normal user. -User-mode install will disable a few functions, however other most functions -work well. Therefore, for example, an employee can install SoftEther VPN -Server on the computer in the office network, and he will be able to connect -to the server from his home. In order to realize such a system by user-self, -no system administrative privileges are required in the view-point of -technical. However, breaking rules of the company to install software on the -computer without authority might be regarded as an unfavorable behavior. If -you are an employee and belong to the company, and the company-policy -prohibits installing software or making communications towards Internet -without permission, you have to obtain a permission from the network -administrator or the executive officer of your company in advance to install -SoftEther VPN. If you install VPN Server / Bridge as User-mode, an icon will -be appeared on the Windows task-tray. If you feel that the icon disturbs you, -you can hide it by your operation. However, you must not exploit this hiding -function to install VPN Server on other person's computer as a spyware. Such -behavior might be an offence against the criminal law. - -2.4. Keep Alive Function -SoftEther VPN Server and SoftEther VPN Bridge has Keep Alive Function by -default. The purpose of this function is to sustain the Internet line active. -The function transmits UDP packets with a random-byte-array-payload -periodically. This function is useful to avoid automatic disconnection on -mobile or dial-up connections. You can disable Keep Alive Function anytime. - -2.5. Uninstallation -The uninstallation process of SoftEther VPN software will delete all program -files. However, non-program files (such as files and data which are generated -by running of programs) ) will not be deleted. For technical reason, the exe -and resource files of uninstaller might remain. Such remaining files never -affects to use the computer, however you can delete it manually. Kernel-mode -drivers might not be deleted, however such drivers will not be loaded after -the next boot of Windows. You can use "sc" command of Windows to delete -kernel-mode drivers manually. - -2.6. Security -You should set the administrator's password on SoftEther VPN Server / Bridge -after installation. If you neglect to do it, another person can access to -SoftEther VPN Server / Bridge and can set the password without your -permission. This caution might be also applied on SoftEther VPN Client for -Linux. - -2.7. Automatic Update Notification -SoftEther VPN software for Windows has an automatic update notification -function. It accesses to the SoftEther Update server periodically to check -whether or not the latest version of software is released. If the latest -version is released, the notification message will be popped up on the screen. -In order to achieve this purpose, the version, language settings, the unique -identifier, the IP address of your computer and the hostname of VPN Server -which is connected to will be sent to the SoftEther Update server. No personal -information will be sent. Automatic Update Notification is enabled by default, -however you can disable it on the configuration screen. The setting whether -turned on or turned off will be saved individually corresponding to each -destination VPN server, by VPN Server Manager. - -2.8. Virtual NAT Function -A Virtual Hub on SoftEther VPN Server / Bridge has "Virtual NAT Function" . -Virtual NAT Function can share a single IP address on the physical network by -multiple private IP address of VPN Clients. There are two operation mode of -Virtual NAT: User-mode and Kernel-mode. In the user-mode operation, Virtual -NAT shares an IP address which is assigned on the host operating system. -Unlike user-mode, the kernel-mode operation attempts to find DHCP servers on -the physical network. If there are two or more physical networks, a DHCP -server will be sought automatically for each segments serially. If a DHCP -server found, and an IP address is acquired, the IP address will be used by -the Virtual NAT. In this case, an IP entry as a DHCP client will be registered -on the IP pool of the physical DHCP Server. The physical default gateway and -the DNS server will be used by the Virtual NAT in order to communicate with -hosts in Internet. In kernel-mode operation, a Virtual Hub has a virtual MAC -address which is operating on the physical Ethernet segment. In order to check -the connectivity to Internet, SoftEther VPN periodically sends DNS query -packet to resolve the IP address of host "www.yahoo.com" or "www.baidu.com" , -and attempts to connect to the TCP port 80 of such a resulted IP address for -connectivity check. - -2.9. Unattended Installation of Kernel-mode Components -When SoftEther VPN will detect a necessity to install the kernel-mode -components on Windows, a confirmation message will be appeared by Windows -system. In this occasion, SoftEther VPN software will switch to the Unattended -Installation mode in order to respond "Yes" to Windows. This is a solution to -prevent dead-locks when a remote-administration is performed from remote -place. - -2.10. Windows Firewall -SoftEther VPN software will register itself as a safe-program. Such an entry -will be remain after the uninstallation. You can remove it manually from the -Control Panel of Windows. - - -3. Internet Services -3.1. Internet Services which are provided by SoftEther Corporation -SoftEther Corporation provides Dynamic DNS, NAT Traversal and VPN Azure server -services on the Internet. These services are free of charge. Customers can -access to the services by using SoftEther VPN software, via Internet. These -service will be planned to be available from Open-Source version of "SoftEther -VPN" which will be released in the future. - -3.2. Sent Information and Privacy Protection -SoftEther VPN software may send an IP address, hostname, the version of VPN -software on the customer's computer to the cloud service operated by SoftEther -Corporation, in order to use the above services. These sending of information -are minimal necessary to use the services. No personal information will be -sent. SoftEther Corporation records log files of the cloud service servers for -90 days at least with the received information. Such logs will be used for -troubleshooting and other legitimate activities. SoftEther Corporation may -provide logs to a public servant of Japanese government who are belonging to -courts, police stations and the prosecutor's office, in order to comply such -authorities' order. (Every Japanese public servants are liable by law to keep -the information close.) Moreover, the IP addresses or other information will -be processed statistically and provided to the public, not to expose the each -concrete IP address, in order to release the release of research activities. - -3.3. Communication Data via VPN Azure Service -Regardless of the above 3.2 rule, if the customer sends or receives VPN -packets using VPN Azure Cloud Service, the actual payloads will stored and -forwarded via the volatile memory of the servers for very short period. Such a -behavior is naturally needed to provide the "VPN relay service" . No payloads -will be recorded on "fixed" storages such as hard-drives. However, the -"Wiretapping for Criminals Procedures Act" (The 137th legislation ruled on -August 18, 1999 in Japan) requires telecommunication companies to allow the -Japanese government authority to conduct a wire-tapping on the line. VPN Azure -Servers which are physically placed on Japan are subjects of this law. - -3.4. Comply to Japanese Telecommunication Laws -SoftEther Corporation complies with Japanese Telecommunication Laws as -necessary to provide online services via Internet. - -3.5. Free and Academic Experiment Services -SoftEther provides Dynamic DNS, NAT Traversal and VPN Azure as academic -experiment services. Therefore, there services can be used for free of charge. -These services are not parts of "SoftEther VPN Software Products" . These -services are provided without any warranty. The services may be suspended or -discontinued by technical or operational matters. In such occasions, users -will not be able to use the services. A user have to understand such risks, -and to acknowledge that such risks are borne by a user-self. SoftEther will -never be liable to results or damages of use or unable-to-use of the service. -Even if the user has already paid the license-fee of the commercial version of -SoftEther VPN, such paid fees don't include any fees of these services. -Therefore, if the online services will stop or be discontinued, no refunds or -recoveries of damages will be provided by SoftEther Corporation. - -3.6. DNS Proxy Cloud Servers -In some regions, when a user uses Internet, a DNS query sometimes broken or -lost when it is passing through the ISP line. If SoftEther VPN Server, Client -or Bridge detects a possibility that the accessing to the actual VPN server -might be unstable, then DNS queries will be also transferred to the DNS proxy -cloud servers which are operated by SoftEther Corporation. A DNS proxy cloud -server will respond DNS queries with answering correct a IP address. - - -4. General Cautions -4.1. Needs an Approval from Network Administrator -SoftEther VPN has powerful functions which don't require special settings by -network administrators. For example, you need not to ask the administrator to -configure the existing firewall in order to "open" a TCP/UDP port. Such -characteristic features are for the purpose to eliminate working times and -costs of network administrators, and avoid misconfiguration-risks around the -tasks to open specific exception ports on the firewall. However, any employees -belong to the company have to obtain an approval from the network -administrator before installs SoftEther VPN. If your network administrator -neglects to provide such an approval, you can consider to take an approval -from an upper authority. (For example, executive officer of the company.) If -you use SoftEther VPN without any approvals from the authority of your -company, you might have disadvantage. SoftEther Corporation will be never -liable for results or damages of using SoftEther VPN. - -4.2. Observe Laws of Your Country -If your country's law prohibits the use of encryption, you have to disable the -encryption function of SoftEther VPN by yourself. Similarly, in some countries -or regions, some functions of SoftEther VPN might be prohibited to use by -laws. Other countries' laws are none of SoftEther Corporation's concern -because SoftEther Corporation is an enterprise which is located and registered -in Japan physically. For example, there might be a risk that a part of -SoftEther VPN conflicts an existing patent which is valid only on the specific -region. SoftEther Corporation has no interests in such specific region outside -Japan's territory. Therefore, if you want to use SoftEther VPN in regions -outside Japan, you have to be careful not to violate third-person's rights. -You have to verify the legitimacy of the use of SoftEther VPN in the specific -region before you actually use it in such region. By nature, there are almost -200 countries in the World, and each country's law is different each other. It -is practically impossible to verify every countries' laws and regulations and -make the software comply with all countries' laws in advance to release the -software. Therefore SoftEther Corporation has verified the legitimacy of -SoftEther VPN against the laws and regulations of only Japan. If a user uses -SoftEther VPN in a specific country, and damaged by public servants of the -government authority, SoftEther Corporation will never be liable to recover or -compensate such damages or criminal responsibilities. - - -5. VPN Gate Academic Experiment Project -(This chapter applies only on SoftEther VPN software package which contains -the extension plug-in for VPN Gate Academic Experiment Project.) -5.1. About VPN Gate Academic Experiment Project -VPN Gate Academic Experiment Project is an online service operated for just -the academic research purpose at the graduate school of University of Tsukuba, -Japan. The purpose of this research is to expend our knowledge about the -"Global Distributed Public VPN Relay Server" (GDPVRS) technology. For details, -please visit http://www.vpngate.net/. - -5.2. About VPN Gate Service -SoftEther VPN Server and SoftEther VPN Client may contain "VPN Gate Service" -program. However, VPN Gate Service is disabled by default. -VPN Gate Service should be activated and enabled by the voluntary intention of -the owner of the computer which SoftEther VPN Server or SoftEther VPN Client -is installed on. After you activate VPN Gate Service, the computer will be -start to serve as a part of the Global Distributed Public VPN Relay Servers. -The IP address, hostname and related information of the computer will be sent -and registered to the directory server of VPN Gate Academic Experiment -Project, and they will be published and disclosed to the public. This -mechanism will allow any VPN Gate Client software's user to connect to the VPN -Gate Service running on your computer. While the VPN session between a VPN -Gate Client and your VPN Gate Service is established, the VPN Gate Client's -user can send/receive any IP packets towards the Internet via the VPN Gate -Service. The global IP address of the VPN Gate Service's hosing computer will -be used as the source IP address of such communications which a VPN Gate -Client initiates. -VPN Gate Service will send some information to the VPN Gate Academic -Experiment Service Directory Server. The information includes the operator's -information which described in section 5.5, logging settings, uptime, -operating system version, type of protocol, port numbers, quality information, -statistical information, VPN Gate clients' log history data (includes dates, -IP addresses, version numbers and IDs) and the version of the software. These -information will be exposed on the directory. VPN Gate Service also receives a -key for encoding which is described on the chapter 5.9 from the directory -server. - -5.3. Details of VPN Gate Service's Behavior -If you enable VPN Gate Service manually, which is disabled by default, the -"VPNGATE" Virtual Hub will be created on the SoftEther VPN Server. If you are -using SoftEther VPN Client and attempt to active VPN Gate Service on it, an -equivalent program to SoftEther VPN Server will be invoked on the same process -of SoftEther VPN Client, and the "VPNGATE" Virtual Hub will be created. The -"VPNGATE" Virtual Hub contains a user named "VPN" by default which permits -anyone on the Internet to make a VPN connection to the Virtual Hub. Once a VPN -Client connects to the "VPNGATE" Virtual Hub, any communication between the -user and the Internet will pass through the Virtual Hub, and -transmitted/received using the physical network interface on the computer -which SoftEther VPN Server (or SoftEther VPN Client) is running on. This will -cause the result that a destination host specified by the VPN Client will -identify that the source of the communication has initiated from the VPN Gate -Service's hosting computer's IP address. However, for safety, any packets -which destinations are within 192.168.0.0/255.255.0.0, 172.16.0.0/255.240.0.0 -or 10.0.0.0/255.0.0.0 will be blocked by the "VPNGATE" Virtual Hub in order to -protect your local network. Therefore, if you run VPN Gate Service on your -corporate network or private network, it is safe because anonymous VPN Client -users will not be permitted to access such private networks. VPN Gate Service -also serves as relay for accessing to the VPN Gate Directory Server. -In order to make VPN Gate Service familiar with firewalls and NATs, it opens -an UDP port by using the NAT Traversal function which is described on the -section 1.2. It also opens and listens on some TCP ports, and some TCP and UDP -ports will be specified as the target port of Universal Plug and Play (UPnP) -Port Transfer entries which are requested to your local routers. UPnP request -packets will be sent periodically. Some routers keep such an opened TCP/UDP -port permanently on the device. If you wish to close them, do it manually. -VPN Gate Service also provides the mirror-site function for www.vpngate.net. -This is a mechanism that a copy of the latest contents from www.vpngate.net -will be hosted by the mirror-site tiny HTTP server which is running on the VPN -Gate Service program. It will register itself on the mirror-sites list in -www.vpngate.net. However, it never relays any other communications which are -not towards www.vpngate.net. - -5.4. Communication between Internet via VPN Gate Service -VPN Gate Service provides a routing between users and the Internet, by using -the Virtual NAT Function which is described on the section 2.8. VPN Gate -Service sends polling Ping packets to the server which is located on -University of Tsukuba, and the Google Public DNS Server which is identified as -8.8.8.8, in order to check the latest quality of your Internet line. VPN Gate -Service also sends and receives a lot of random packets to/from the Speed Test -Server on University of Tsukuba. These quality data will be reported to VPN -Gate Directory Server, automatically and periodically. The result will be -saved and disclosed to the public. These periodical polling communication are -adjusted not to occupy the Internet line, however in some circumstances they -might occupy the line. - -5.5. Operator's Information of VPN Gate Service -If you activate VPN Gate Service on your computer, the computer will be a part -of the Global Distributed Public VPN Relay Servers. Therefore, the Operator's -administrative information of your VPN Gate Service should be reported and -registered on the VPN Gate Service Directory. Operator's information contains -the name of the operator and the abuse-reporting contact e-mail address. These -information can be inputted on the screen if the VPN Gate configuration. -Inputted information will be transmitted to the VPN Gate Directory Server, -stored and disclosed to the public. So you have to be careful to input -information. By the way, until you specify something as the operator's -information, the computer's hostname will be used automatically as the field -of the name of the operator, by appending the "'s owner" string after the -hostname. - -5.6. Observe Laws to Operate VPN Gate Service -In some countries or regions, a user who is planning to activate and operate -VPN Gate Service, he are mandated to obtain a license or register a service -from/to the government. If your region has such a regulation, you must fulfill -mandated process before activating VPN Gate Service in advance. Neither the -developers nor operators of the VPN Gate Academic Experiment Project will be -liable for legal/criminal responsibilities or damages which are occurred from -failure to comply your local laws. - -5.7. Protect Privacy of Communication -Most of countries have a law which requires communication service's operators, -including VPN Gate Service operators, to protect the privacy of communication -of third-persons. When you operate VPN Gate Service, you must always protect -user's privacy. - -5.8. Packet Logs -The packet logging function is implemented on VPN Gate Service. It records -essential headers of major TCP/IP packets which are transmitted via the -Virtual Hub. This function will be helpful to investigate the "original IP -address" of the initiator of communication who was a connected user of your -VPN Gate Service, by checking the packet logs and the connection logs. The -packet logs are recorded only for such legitimate investigates purpose. Do not -peek nor leak packet logs except the rightful purpose. Such act will be -violate the section 5.7. - -5.9. Packet Logs Automatic Archiving and Encoding Function -The VPN Gate Academic Experiment Service is operated and running under the -Japanese constitution and laws. The Japanese constitution laws demand strictly -protection over the privacy of communication. Because this service is under -Japanese rules, the program of VPN Gate Service implements this "Automatic Log -File Encoding" protection mechanism, and enabled by default. -The VPN Gate Service is currently configured to encode packet log files which -has passed two or more weeks automatically, by default. In order to protect -privacy of communication, if a packet log file is once encoded, even the -administrator of the local computer cannot censor the packet log file. This -mechanism protects privacy of end-users of VPN Gate Service. -You can change the VPN Gate Service setting to disable this automatic encoding -function. Then packet log files will never be encoded even after two weeks -passed. In such a configuration, all packet logs will remain as plain-text on -the disk. Therefore you have to take care not to violate user's privacy. -If you are liable to decode an encoded packet log files (for example: a VPN -Gate Service's user illegally abused your VPN Gate Service and you have to -decode the packet logs in order to comply the laws), contact the administrator -of the VPN Gate Academic Experiment Service at Graduate School of University -of Tsukuba, Japan. You can find the contact address at -http://www.vpngate.net/. The administrator of VPN Gate Service will respond to -decode the packet logs if there is an appropriate and legal request from court -or other judicial authorities, according to laws. - -5.10. Caution if You Operate VPN Gate Service in the Japan's Territories -When a user operates VPN Gate Service in the Japan's territories, such an act -may be regulated under the Japanese Telecommunication Laws if the operation is -a subject to the law. However, in such a circumstance, according to the -"Japanese Telecommunication Business Compete Manual [supplemental version]" , -non- profitable operations of communications are not identified as a -"telecommunication business" . So usual operators of VPN Gate Service are not -subjects to "telecommunication business operators" , and not be mandated to -register to the government. Even so, legalities to protect the privacy of -communication still imposed. As a conclusion, if you operate VPN Gate Service -in the Japan's Territories, you must not leak the secrets of communications -which are transmitted via your operating VPN Gate Service. - -5.11. VPN Gate Client -If SoftEther VPN Client contains the VPN Gate Client plug-in, you can use it -to obtain the list of current operating VPN Gate Service servers in the -Internet, and make a VPN connection to a specific server on the list. -VPN Gate Client always keeps the latest list of the VPN Gate Services -periodically. Be careful if you are using a pay-per-use Internet line. -When you start the VPN Gate Client software, the screen which asks you -activate or not VPN Gate Service will be appeared. For details of VPN Gate -Service, read the above sections. - -5.12. Caution before Joining or Exploiting VPN Gate Academic Experiment -Project -The VPN Gate Academic Experiment Service is operated as a research project at -the graduate school on University of Tsukuba, Japan. The service is governed -under the Japanese laws. Other countries' laws are none of our concerns nor -responsibilities. -By nature, there are almost 200 countries in the World, with different laws. -It is impossible to verify every countries' laws and regulations and make the -software comply with all countries' laws in advance to release the software. -If a user uses VPN Gate service in a specific country, and damaged by public -servants of the authority, the developer of either the service or software -will never be liable to recover or compensate such damages or criminal -responsibilities. -By using this software and service, the user must observe all concerned laws -and rules with user's own responsibility. The user will be completely liable -to any damages and responsibilities which are results of using this software -and service, regardless of either inside or outside of Japan's territory. -If you don't agree nor understand the above warnings, do not use any of VPN -Gate Academic Experiment Service functions. -VPN Gate is a research project for just academic purpose only. VPN Gate was -developed as a plug-in for SoftEther VPN and UT-VPN. However, all parts of VPN -Gate were developed on this research project at University of Tsukuba. Any -parts of VPN Gate are not developed by SoftEther Corporation. The VPN Gate -Research Project is not a subject to be led, operated, promoted nor guaranteed -by SoftEther Corporation. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH +LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. diff --git a/src/Mayaqua/FileIO.c b/src/Mayaqua/FileIO.c index 8cf0178e..9be5c0ce 100644 --- a/src/Mayaqua/FileIO.c +++ b/src/Mayaqua/FileIO.c @@ -747,6 +747,110 @@ bool GetDiskFreeW(wchar_t *path, UINT64 *free_size, UINT64 *used_size, UINT64 *t return ret; } +// Enumeration of direction with all sub directories +TOKEN_LIST *EnumDirWithSubDirs(char *dirname) +{ + TOKEN_LIST *ret; + UNI_TOKEN_LIST *ret2; + wchar_t tmp[MAX_SIZE]; + // Validate arguments + if (dirname == NULL) + { + dirname = "./"; + } + + StrToUni(tmp, sizeof(tmp), dirname); + + ret2 = EnumDirWithSubDirsW(tmp); + + ret = UniTokenListToTokenList(ret2); + + UniFreeToken(ret2); + + return ret; +} +UNI_TOKEN_LIST *EnumDirWithSubDirsW(wchar_t *dirname) +{ + ENUM_DIR_WITH_SUB_DATA d; + UNI_TOKEN_LIST *ret; + UINT i; + // Validate arguments + if (dirname == NULL) + { + dirname = L"./"; + } + + Zero(&d, sizeof(d)); + + d.FileList = NewListFast(NULL); + + EnumDirWithSubDirsMain(&d, dirname); + + ret = ZeroMalloc(sizeof(UNI_TOKEN_LIST)); + + ret->NumTokens = LIST_NUM(d.FileList); + ret->Token = ZeroMalloc(sizeof(wchar_t *) * ret->NumTokens); + + for (i = 0;i < ret->NumTokens;i++) + { + wchar_t *s = LIST_DATA(d.FileList, i); + + ret->Token[i] = UniCopyStr(s); + } + + FreeStrList(d.FileList); + + return ret; +} +void EnumDirWithSubDirsMain(ENUM_DIR_WITH_SUB_DATA *d, wchar_t *dirname) +{ + DIRLIST *dir; + UINT i; + // Validate arguments + if (d == NULL || dirname == NULL) + { + return; + } + + dir = EnumDirExW(dirname, NULL); + if (dir == NULL) + { + return; + } + + // Files + for (i = 0;i < dir->NumFiles;i++) + { + DIRENT *e = dir->File[i]; + + if (e->Folder == false) + { + wchar_t tmp[MAX_SIZE]; + + ConbinePathW(tmp, sizeof(tmp), dirname, e->FileNameW); + + Add(d->FileList, CopyUniStr(tmp)); + } + } + + // Sub directories + for (i = 0;i < dir->NumFiles;i++) + { + DIRENT *e = dir->File[i]; + + if (e->Folder) + { + wchar_t tmp[MAX_SIZE]; + + ConbinePathW(tmp, sizeof(tmp), dirname, e->FileNameW); + + EnumDirWithSubDirsMain(d, tmp); + } + } + + FreeDir(dir); +} + // Enumeration of directory DIRLIST *EnumDirEx(char *dirname, COMPARE *compare) { @@ -1117,59 +1221,78 @@ void FreeHamcore() } // Build a Hamcore file -void BuildHamcore() +void BuildHamcore(char *dst_filename, char *src_dir, bool unix_only) { - BUF *b; - char tmp[MAX_SIZE]; char exe_dir[MAX_SIZE]; - char *s; bool ok = true; LIST *o; UINT i; + TOKEN_LIST *src_file_list; GetExeDir(exe_dir, sizeof(exe_dir)); - Format(tmp, sizeof(tmp), "%s/%s", exe_dir, HAMCORE_TEXT_NAME); - b = ReadDump(tmp); - if (b == NULL) - { - Print("Failed to open %s.\n", tmp); - return; - } + src_file_list = EnumDirWithSubDirs(src_dir); o = NewListFast(CompareHamcore); - while ((s = CfgReadNextLine(b)) != NULL) + for (i = 0;i < src_file_list->NumTokens;i++) { - char tmp[MAX_SIZE]; + char rpath[MAX_SIZE]; BUF *b; + char s[MAX_SIZE]; + + StrCpy(s, sizeof(s), src_file_list->Token[i]); Trim(s); - Format(tmp, sizeof(tmp), "%s/%s/%s", exe_dir, HAMCORE_DIR_NAME, s); - - b = ReadDump(tmp); - if (b == NULL) + if (GetRelativePath(rpath, sizeof(rpath), s, src_dir) == false) { - Print("Failed to open %s.\n", s); - ok = false; + // Unknown error ! } else { - HC *c = ZeroMalloc(sizeof(HC)); - UINT tmp_size; - void *tmp; - c->FileName = CopyStr(s); - c->Size = b->Size; - tmp_size = CalcCompress(c->Size); - tmp = Malloc(tmp_size); - c->SizeCompressed = Compress(tmp, tmp_size, b->Buf, b->Size); - c->Buffer = tmp; - Insert(o, c); - Print("%s: %u -> %u\n", s, c->Size, c->SizeCompressed); - FreeBuf(b); - } + bool ok = true; - Free(s); + ReplaceStr(rpath, sizeof(rpath), rpath, "/", "\\"); + + if (unix_only) + { + // Exclude non-UNIX files + if (EndWith(s, ".exe") || + EndWith(s, ".dll") || + EndWith(s, ".sys") || + EndWith(s, ".inf") || + EndWith(s, ".cat") || + EndWith(s, ".wav")) + { + ok = false; + } + } + + if (ok) + { + b = ReadDump(s); + if (b == NULL) + { + Print("Failed to open '%s'.\n", s); + ok = false; + } + else + { + HC *c = ZeroMalloc(sizeof(HC)); + UINT tmp_size; + void *tmp; + c->FileName = CopyStr(rpath); + c->Size = b->Size; + tmp_size = CalcCompress(c->Size); + tmp = Malloc(tmp_size); + c->SizeCompressed = Compress(tmp, tmp_size, b->Buf, b->Size); + c->Buffer = tmp; + Insert(o, c); + Print("%s: %u -> %u\n", s, c->Size, c->SizeCompressed); + FreeBuf(b); + } + } + } } if (ok) @@ -1226,7 +1349,7 @@ void BuildHamcore() WriteBuf(b, c->Buffer, c->SizeCompressed); } // Writing - Format(tmp, sizeof(tmp), "%s/%s", exe_dir, HAMCORE_FILE_NAME "__"); + StrCpy(tmp, sizeof(tmp), dst_filename); Print("Writing %s...\n", tmp); FileDelete(tmp); DumpBuf(b, tmp); @@ -1243,7 +1366,7 @@ void BuildHamcore() ReleaseList(o); - FreeBuf(b); + FreeToken(src_file_list); } // Comparison of the HCs @@ -1842,6 +1965,67 @@ void GetCurrentDir(char *name, UINT size) UniToStr(name, size, name_w); } +// Get the relative path +bool GetRelativePathW(wchar_t *dst, UINT size, wchar_t *fullpath, wchar_t *basepath) +{ + wchar_t fullpath2[MAX_SIZE]; + wchar_t basepath2[MAX_SIZE]; + // Validate arguments + if (dst == NULL || fullpath == NULL || basepath == NULL) + { + return false; + } + ClearUniStr(dst, size); + + NormalizePathW(fullpath2, sizeof(fullpath2), fullpath); + NormalizePathW(basepath2, sizeof(basepath2), basepath); + +#ifdef OS_WIN32 + UniStrCat(basepath2, sizeof(basepath2), L"\\"); +#else // OS_WIN32 + UniStrCat(basepath2, sizeof(basepath2), L"/"); +#endif // OS_WIN32 + + if (UniStrLen(fullpath2) <= UniStrLen(basepath2)) + { + return false; + } + + if (UniStartWith(fullpath2, basepath2) == false) + { + return false; + } + + UniStrCpy(dst, size, fullpath2 + UniStrLen(basepath2)); + + return true; +} +bool GetRelativePath(char *dst, UINT size, char *fullpath, char *basepath) +{ + wchar_t dst_w[MAX_SIZE]; + wchar_t fullpath_w[MAX_SIZE]; + wchar_t basepath_w[MAX_SIZE]; + bool ret; + // Validate arguments + if (dst == NULL || fullpath == NULL || basepath == NULL) + { + return false; + } + + StrToUni(fullpath_w, sizeof(fullpath_w), fullpath); + StrToUni(basepath_w, sizeof(basepath_w), basepath); + + ret = GetRelativePathW(dst_w, sizeof(dst_w), fullpath_w, basepath_w); + if (ret == false) + { + return false; + } + + UniToStr(dst, size, dst_w); + + return true; +} + // Normalize the file path void NormalizePathW(wchar_t *dst, UINT size, wchar_t *src) { diff --git a/src/Mayaqua/FileIO.h b/src/Mayaqua/FileIO.h index 91fae2ac..712a9567 100644 --- a/src/Mayaqua/FileIO.h +++ b/src/Mayaqua/FileIO.h @@ -224,6 +224,11 @@ struct ZIP_PACKER ZIP_FILE *CurrentFile; }; +struct ENUM_DIR_WITH_SUB_DATA +{ + LIST *FileList; +}; + void InitCrc32(); UINT Crc32(void *buf, UINT pos, UINT len); UINT Crc32First(void *buf, UINT pos, UINT len); @@ -287,6 +292,8 @@ bool FileRename(char *old_name, char *new_name); bool FileRenameW(wchar_t *old_name, wchar_t *new_name); void NormalizePath(char *dst, UINT size, char *src); void NormalizePathW(wchar_t *dst, UINT size, wchar_t *src); +bool GetRelativePathW(wchar_t *dst, UINT size, wchar_t *fullpath, wchar_t *basepath); +bool GetRelativePath(char *dst, UINT size, char *fullpath, char *basepath); TOKEN_LIST *ParseSplitedPath(char *path); UNI_TOKEN_LIST *ParseSplitedPathW(wchar_t *path); char *GetCurrentPathEnvStr(); @@ -312,7 +319,7 @@ void GetExeName(char *name, UINT size); void GetExeNameW(wchar_t *name, UINT size); void GetExeDir(char *name, UINT size); void GetExeDirW(wchar_t *name, UINT size); -void BuildHamcore(); +void BuildHamcore(char *dst_filename, char *src_dir, bool unix_only); int CompareHamcore(void *p1, void *p2); void InitHamcore(); void FreeHamcore(); @@ -325,6 +332,9 @@ DIRLIST *EnumDir(char *dirname); DIRLIST *EnumDirW(wchar_t *dirname); DIRLIST *EnumDirEx(char *dirname, COMPARE *compare); DIRLIST *EnumDirExW(wchar_t *dirname, COMPARE *compare); +UNI_TOKEN_LIST *EnumDirWithSubDirsW(wchar_t *dirname); +TOKEN_LIST *EnumDirWithSubDirs(char *dirname); +void EnumDirWithSubDirsMain(ENUM_DIR_WITH_SUB_DATA *d, wchar_t *dirname); void FreeDir(DIRLIST *d); int CompareDirListByName(void *p1, void *p2); bool GetDiskFree(char *path, UINT64 *free_size, UINT64 *used_size, UINT64 *total_size); diff --git a/src/Mayaqua/MayaType.h b/src/Mayaqua/MayaType.h index c3949872..dd81d5d2 100644 --- a/src/Mayaqua/MayaType.h +++ b/src/Mayaqua/MayaType.h @@ -502,6 +502,7 @@ typedef struct ZIP_DIR_HEADER ZIP_DIR_HEADER; typedef struct ZIP_END_HEADER ZIP_END_HEADER; typedef struct ZIP_FILE ZIP_FILE; typedef struct ZIP_PACKER ZIP_PACKER; +typedef struct ENUM_DIR_WITH_SUB_DATA ENUM_DIR_WITH_SUB_DATA; // TcpIp.h typedef struct MAC_HEADER MAC_HEADER; diff --git a/src/PenCore/Thumbs.db b/src/PenCore/Thumbs.db deleted file mode 100644 index a9137666ed5bda1e8fa8aaf75e3f204ac8106e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66048 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
    vU(F@|)7pM*zm9^y*&m_(O7u7FS9IL$KS{qQ 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 vcS=nd-d^}4h29{(#=`fKcecL)9pJ3BI@ diff --git a/src/README b/src/README deleted file mode 100644 index df623ce6..00000000 --- a/src/README +++ /dev/null @@ -1,189 +0,0 @@ -SoftEther VPN - An Open-Source Cross-platform Multi-protocol VPN Program -http://www.softether.org/ - -We use GitHub as the primary official SoftEther VPN repository: -https://github.com/SoftEtherVPN/SoftEtherVPN/ - -Source code packages (.zip and .tar.gz) and binary files are also available: -http://www.softether-download.com/ - -Copyright (c) 2012-2014 SoftEther Project at University of Tsukuba, Japan. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -SoftEther VPN ("SoftEther" means "Software Ethernet") is one of the -world's most powerful and easy-to-use multi-protocol VPN software. - -SoftEther VPN runs on Windows, Linux, Mac, FreeBSD and Solaris. - -SoftEther VPN supports most of widely-used VPN protocols -including SSL-VPN, OpenVPN, IPsec, L2TP, MS-SSTP, L2TPv3 and EtherIP -by the single SoftEther VPN Server program. - -More details on http://www.softether.org/. - - -SOFTETHER VPN ADVANTAGES ------------------------- - -- Supporting all popular VPN protocols by the single VPN server: - SSL-VPN (HTTPS) - OpenVPN - IPsec - L2TP - MS-SSTP - L2TPv3 - EtherIP -- Free and open-source software. -- Easy to establish both remote-access and site-to-site VPN. -- SSL-VPN Tunneling on HTTPS to pass through NATs and firewalls. -- Revolutionary VPN over ICMP and VPN over DNS features. -- Resistance to highly-restricted firewall. -- Ethernet-bridging (L2) and IP-routing (L3) over VPN. -- Embedded dynamic-DNS and NAT-traversal so that no static nor - fixed IP address is required. -- AES 256-bit and RSA 4096-bit encryptions. -- Sufficient security features such as logging and firewall inner - VPN tunnel. -- 1Gbps-class high-speed throughput performance with low memory and - CPU usage. -- Windows, Linux, Mac, Android, iPhone, iPad and Windows Phone are - supported. -- The OpenVPN clone function supports legacy OpenVPN clients. -- IPv4 / IPv6 dual-stack. -- The VPN server runs on Windows, Linux, FreeBSD, Solaris and Mac OS X. -- Configure All settings on GUI. -- Multi-languages (English, Japanese and Simplified-Chinese). -- More details at http://www.softether.org/. - - -GETTING STARTED ---------------- - -Visit the SoftEther VPN Project official web site at first: - http://www.softether.org/ - -If you are not a developer, it is recommended to download the binary -installers from: - http://www.softether-download.com/ - -To build from the source, -see "BUILD_UNIX.TXT" or "BUILD_WINDOWS.TXT" files. - - -HOW TO DOWNLOAD THE LATEST SOURCE CODE PACKAGE ----------------------------------------------- - -Go to http://www.softether-download.com/ and you can find the latest -source-code package file in both .ZIP and .TAR.GZ format. - -This is the easiest way to obtain the source code of SoftEther VPN. - - -HOW TO GET THE LATEST SOURCE CODE TREE FOR DEVELOPERS ------------------------------------------------------ - -If you are an open-source developer, visit our GitHub repository: -https://github.com/SoftEtherVPN/SoftEtherVPN/ - -You can download the up-to-date source-code tree of SoftEther VPN -from GitHub. You may make your own fork project from our project. - -The download and build instruction is following: - -$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git -$ cd SoftEtherVPN -$ make -$ make install - - -TO CIRCUMVENT YOUR GOVERNMENT'S FIREWALL RESTRICTION ----------------------------------------------------- - -Because SoftEther VPN is overly strong tool to build a VPN tunnel, -some censorship governments want to block your access to the source code -of SoftEther VPN, by abusing their censorship firewalls. - -To circumvent your censor's unjust restriction, -SoftEther VPN Project distributes the up-to-date source-code -on all the following open-source repositories: - - - GitHub - https://github.com/SoftEtherVPN/SoftEtherVPN/ - - - SourceForge - https://sourceforge.net/projects/softethervpn/ - - - Google Code - https://code.google.com/p/softether/ - - -To fetch the source code from GitHub: -$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git - -To fetch the source code from SourceForge: -$ git clone http://git.code.sf.net/p/softethervpn/code - - or - -$ git clone git://git.code.sf.net/p/softethervpn/code - -To fetch the source code from Google Code: -$ git clone https://code.google.com/p/softether/ - -We hope that you can reach one of the above URLs at least! - - -DEAR SECURITY EXPERTS ---------------------- - -If you find a bug or a security vulnerability please kindly inform us -about the problem immediately so that we can fix the security problem -to protect a lot of users around the world as soon as possible. - -Our e-mail address for security reports is: -softether-vpn-security [at] softether.org - -Please note that the above e-mail address is not a technical support -inquiry address. If you need technical assistance, please visit -http://www.softether.org/ and ask your question on the users forum. - - -DISCLAIMER ----------- - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, -UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, -MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS -SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS -SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER -CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL -DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, -MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR -SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND -CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO -EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, -JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION -AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN -THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. - -USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS -SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES -PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER -COUNTRIES MIGHT BE RESTRICTED. - - -ADVERTISEMENT -------------- - -SoftEther VPN is developed by SoftEther VPN Project at University of Tsukuba. -Department of Computer Science has dozens of overly-enthusiastic geeks. -Join us: http://www.tsukuba.ac.jp/english/admission/ - diff --git a/src/README.TXT b/src/README.TXT index df623ce6..899da01c 100644 --- a/src/README.TXT +++ b/src/README.TXT @@ -114,10 +114,10 @@ on all the following open-source repositories: https://github.com/SoftEtherVPN/SoftEtherVPN/ - SourceForge - https://sourceforge.net/projects/softethervpn/ + https://sourceforge.net/p/softethervpn/code/ci/master/tree/ - Google Code - https://code.google.com/p/softether/ + https://code.google.com/p/softether/source/browse/ To fetch the source code from GitHub: @@ -179,6 +179,9 @@ SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. +READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. +SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. + ADVERTISEMENT ------------- diff --git a/src/THIRD_PARTY.TXT b/src/THIRD_PARTY.TXT new file mode 100644 index 00000000..53a665f7 --- /dev/null +++ b/src/THIRD_PARTY.TXT @@ -0,0 +1,757 @@ +BitVisor(R) VPN Client Module (IPsec Driver): +Copyright (c) 2007, 2008 University of Tsukuba. +Copyright (C) 2007, 2008 National Institute of Information and Communications +Technology. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +3. Neither the name of the University of Tsukuba nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------- + +Microsoft(R) C Runtime Library: +(c) 2007 Microsoft Corporation. All Rights Reserved. + +------------------- + +RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki): + +License to copy and use this software is granted provided that it is +identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface +(Cryptoki)" in all material mentioning or referencing this software. + +License is also granted to make and use derivative works provided that such +works are identified as "derived from the RSA Security Inc. PKCS #11 +Cryptographic Token Interface (Cryptoki)" in all material mentioning or +referencing the derived work. + +RSA Security Inc. makes no representations concerning either the +merchantability of this software or the suitability of this software for any +particular purpose. It is provided "as is" without express or implied warranty +of any kind. + +------------------- + +WinPcap: +Copyright (c) 2001 - 2003 NetGroup, Politecnico di Torino (Italy) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +3. Neither the name of the Politecnico di Torino nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------- + +libedit: +Copyright (c) 1992, 1993 The Regents of the University of California. All +rights reserved. + +This code is derived from software contributed to Berkeley by Christos Zoulas +of Cornell University. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors may be +used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------- + +libiconv: + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public Licenses are intended +to guarantee your freedom to share and change free software--to make sure the +software is free for all its users. + + This license, the Library General Public License, applies to some specially +designated Free Software Foundation software, and to any other libraries whose +authors decide to use it. You can use it for your libraries, too. + + When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom to +distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you distribute +copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis or for +a fee, you must give the recipients all the rights that we gave you. You must +make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide complete object +files to the recipients so that they can relink them with the library, after +making changes to the library and recompiling it. And you must show them these +terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright the +library, and (2) offer you this license which gives you legal permission to +copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain that +everyone understands that there is no warranty for this free library. If the +library is modified by someone else and passed on, we want its recipients to +know that what they have is not the original version, so that any problems +introduced by others will not reflect on the original authors' reputations. + + Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that companies distributing free software will +individually obtain patent licenses, thus in effect transforming the program +into proprietary software. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License, which was designed for utility programs. This license, +the GNU Library General Public License, applies to certain designated +libraries. This license is quite different from the ordinary one; be sure to +read it in full, and don't assume that anything in it is the same as in the +ordinary license. + + The reason we have a separate public license for some libraries is that they +blur the distinction we usually make between modifying or adding to a program +and simply using it. Linking a program with a library, without changing the +library, is in some sense simply using the library, and is analogous to +running a utility program or application program. However, in a textual and +legal sense, the linked executable is a combined work, a derivative of the +original library, and the ordinary General Public License treats it as such. + + Because of this blurred distinction, using the ordinary General Public +License for libraries did not effectively promote software sharing, because +most developers did not use the libraries. We concluded that weaker conditions +might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the users +of those programs of all benefit from the free status of the libraries +themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while preserving +your freedom as a user of such programs to change the free libraries that are +incorporated in them. (We have not seen how to achieve this as regards changes +in header files, but we have achieved it as regards changes in the actual +functions of the Library.) The hope is that this will lead to faster +development of free libraries. + + The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code derived +from the library, while the latter only works together with the library. + + Note that it is possible for a library to be covered by the ordinary General +Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which contains a +notice placed by the copyright holder or other authorized party saying it may +be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data prepared so +as to be conveniently linked with application programs (which use some of +those functions and data) to form executables. + + The "Library", below, refers to any such software library or work which has +been distributed under these terms. A "work based on the Library" means either +the Library or any derivative work under copyright law: that is to say, a work +containing the Library or a portion of it, either verbatim or with +modifications and/or translated straightforwardly into another language. +(Hereinafter, translation is included without limitation in the term +"modification".) + + "Source code" for a work means the preferred form of the work for making +modifications to it. For a library, complete source code means all the source +code for all modules it contains, plus any associated interface definition +files, plus the scripts used to control compilation and installation of the +library. + + Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running a program +using the Library is not restricted, and output from such a program is covered +only if its contents constitute a work based on the Library (independent of +the use of the Library in a tool for writing it). Whether that is true depends +on what the Library does and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's complete +source code as you receive it, in any medium, provided that you conspicuously +and appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and distribute a copy of this License +along with the Library. + + You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Library or any portion of it, +thus forming a work based on the Library, and copy and distribute such +modifications or work under the terms of Section 1 above, provided that you +also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices stating +that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to all +third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a table +of data to be supplied by an application program that uses the facility, other +than as an argument passed when the facility is invoked, then you must make a +good faith effort to ensure that, in the event an application does not supply +such function or table, the facility still operates, and performs whatever +part of its purpose remains meaningful. + + (For example, a function in a library to compute square roots has a +purpose that is entirely well-defined independent of the application. +Therefore, Subsection 2d requires that any application-supplied function or +table used by this function must be optional: if the application does not +supply it, the square root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Library, and can be reasonably +considered independent and separate works in themselves, then this License, +and its terms, do not apply to those sections when you distribute them as +separate works. But when you distribute the same sections as part of a whole +which is a work based on the Library, the distribution of the whole must be on +the terms of this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based on +the Library. + +In addition, mere aggregation of another work not based on the Library with +the Library (or with a work based on the Library) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do this, +you must alter all the notices that refer to this License, so that they refer +to the ordinary GNU General Public License, version 2, instead of to this +License. (If a newer version than version 2 of the ordinary GNU General Public +License has appeared, then you can specify that version instead if you wish.) +Do not make any other change in these notices. + + Once this change is made in a given copy, it is irreversible for that copy, +so the ordinary GNU General Public License applies to all subsequent copies +and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of the Library +into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or derivative of +it, under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you accompany it with the complete +corresponding machine-readable source code, which must be distributed under +the terms of Sections 1 and 2 above on a medium customarily used for software +interchange. + + If distribution of object code is made by offering access to copy from a +designated place, then offering equivalent access to copy the source code from +the same place satisfies the requirement to distribute the source code, even +though third parties are not compelled to copy the source along with the +object code. + + 5. A program that contains no derivative of any portion of the Library, but +is designed to work with the Library by being compiled or linked with it, is +called a "work that uses the Library". Such a work, in isolation, is not a +derivative work of the Library, and therefore falls outside the scope of this +License. + + However, linking a "work that uses the Library" with the Library creates an +executable that is a derivative of the Library (because it contains portions +of the Library), rather than a "work that uses the library". The executable is +therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file that is +part of the Library, the object code for the work may be a derivative work of +the Library even though the source code is not. +Whether this is true is especially significant if the work can be linked +without the Library, or if the work is itself a library. The threshold for +this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data structure +layouts and accessors, and small macros and small inline functions (ten lines +or less in length), then the use of the object file is unrestricted, +regardless of whether it is legally a derivative work. (Executables containing +this object code plus portions of the Library will still fall under Section +6.) + + Otherwise, if the work is a derivative of the Library, you may distribute +the object code for the work under the terms of Section 6. Any executables +containing that work also fall under Section 6, whether or not they are linked +directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or link a +"work that uses the Library" with the Library to produce a work containing +portions of the Library, and distribute that work under terms of your choice, +provided that the terms permit modification of the work for the customer's own +use and reverse engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the Library +is used in it and that the Library and its use are covered by this License. +You must supply a copy of this License. If the work during execution displays +copyright notices, you must include the copyright notice for the Library among +them, as well as a reference directing the user to the copy of this License. +Also, you must do one of these things: + + a) Accompany the work with the complete corresponding machine-readable +source code for the Library including whatever changes were used in the work +(which must be distributed under Sections 1 and 2 above) ; and, if the work is +an executable linked with the Library, with the complete machine-readable +"work that uses the Library", as object code and/or source code, so that the +user can modify the Library and then relink to produce a modified executable +containing the modified Library. (It is understood that the user who changes +the contents of definitions files in the Library will not necessarily be able +to recompile the application to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at least three +years, to give the same user the materials specified in Subsection 6a, above, +for a charge no more than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy from a +designated place, offer equivalent access to copy the above specified +materials from the same place. + + d) Verify that the user has already received a copy of these materials or +that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the Library" +must include any data and utility programs needed for reproducing the +executable from it. However, as a special exception, the source code +distributed need not include anything that is normally distributed (in either +source or binary form) with the major components (compiler, kernel, and so on) +of the operating system on which the executable runs, unless that component +itself accompanies the executable. + + It may happen that this requirement contradicts the license restrictions of +other proprietary libraries that do not normally accompany the operating +system. Such a contradiction means you cannot use both them and the Library +together in an executable that you distribute. + + 7. You may place library facilities that are a work based on the Library +side-by-side in a single library together with other library facilities not +covered by this License, and distribute such a combined library, provided that +the separate distribution of the work based on the Library and of the other +library facilities is otherwise permitted, and provided that you do these two +things: + + a) Accompany the combined library with a copy of the same work based on +the Library, uncombined with any other library facilities. This must be +distributed under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that part +of it is a work based on the Library, and explaining where to find the +accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute the +Library except as expressly provided under this License. Any attempt otherwise +to copy, modify, sublicense, link with, or distribute the Library is void, and +will automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will not have +their licenses terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Library or its derivative works. These actions are prohibited by law if you do +not accept this License. Therefore, by modifying or distributing the Library +(or any work based on the Library), you indicate your acceptance of this +License to do so, and all its terms and conditions for copying, distributing +or modifying the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the original +licensor to copy, distribute, link with or modify the Library subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. You are not responsible for +enforcing compliance by third parties to this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or otherwise) +that contradict the conditions of this License, they do not excuse you from +the conditions of this License. If you cannot distribute so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not distribute the Library at all. +For example, if a patent license would not permit royalty-free redistribution +of the Library by all those who receive copies directly or indirectly through +you, then the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Library under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In +such case, this License incorporates the limitation as if written in the body +of this License. + + 13. The Free Software Foundation may publish revised and/or new versions of +the Library General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and "any later +version", you have the option of following the terms and conditions either of +that version or of any later version published by the Free Software +Foundation. If the Library does not specify a license version number, you may +choose any version ever published by the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free programs +whose distribution conditions are incompatible with these, write to the author +to ask for permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make +exceptions for this. Our decision will be guided by the two goals of +preserving the free status of all derivatives of our free software and of +promoting the sharing and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE +LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO +LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR +THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + +------------------- + +ncurses: +Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, distribute with +modifications, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright holders +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization. + +------------------- + +OpenSSL: +OpenSSL License +Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. All advertising materials mentioning features or use of this software must +display the following acknowledgment: "This product includes software +developed by the OpenSSL Project for use in the OpenSSL Toolkit. +(http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to +endorse or promote products derived from this software without prior written +permission. For written permission, please contact openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" nor may +"OpenSSL" appear in their names without prior written permission of the +OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following +acknowledgment: "This product includes software developed by the OpenSSL +Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim Hudson +(tjh@cryptsoft.com). + +Original SSLeay License +Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved. + +This package is an SSL implementation written by Eric Young +(eay@cryptsoft.com). The implementation was written so as to conform with +Netscapes SSL. + +This library is free for commercial and non-commercial use as long as the +following conditions are aheared to. The following conditions apply to all +code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; +not just the SSL code. The SSL documentation included with this distribution +is covered by the same copyright terms except that the holder is Tim Hudson +(tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in the code +are not to be removed. If this package is used in a product, Eric Young should +be given attribution as the author of the parts of the library used. This can +be in the form of a textual message at program startup or in documentation +(online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the copyright notice, this list +of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software must +display the following acknowledgement: "This product includes cryptographic +software written by Eric Young (eay@cryptsoft.com)" The word 'cryptographic' +can be left out if the rouines from the library being used are not +cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from the +apps directory (application code) you must include an acknowledgement: "This +product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence [including the GNU Public +Licence.] + +------------------- + +zlib: +Acknowledgments: + The deflate format used by zlib was defined by Phil Katz. The deflate and +zlib specifications were written by L. Peter Deutsch. Thanks to all the people +who reported problems and suggested various improvements in zlib; they are too +numerous to cite here. + +Copyright notice: + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the +use of this software. + + Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software in a +product, an acknowledgment in the product documentation would be appreciated +but is not required. + 2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. + +------------------- + +Intel AESNI Sample Library: + +Copyright (c) 2010, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +* Neither the name of Intel Corporation nor the names of its contributors may +be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Issue Date: Aug 6, 2010 + +------------------- + +NOTES WRITTEN BY SOFTETHER CORPORATION + +Note for users of non-Windows version of PacketiX VPN: The enumerated bundle +of License Agreements above are copies of original License Agreements of each +library programs which PacketiX VPN uses. PacketiX VPN is not a delivered work +from these libraries. PacketiX VPN is a separated work from the libraries, but +it may call functions of the libraries (whether or not PacketiX VPN calls such +functions are depended on the user's intention to link them or not on user's +side computer). While some libraries indicate GPL or LGPL as a condition to +re-distribute, PacketiX VPN is not license under GPL nor LGPL. Therefore, we +took special care not to make PacketiX VPN become delivered works of any GPL +or LGPL libraries. In order to achieve that, both PacketiX VPN and GPL/LGPL +libraries are distributed with isolated forms (means that any program files of +PacketiX VPN are not bound nor linked to any GPL/LGPL libraries). If a user of +PacketiX VPN wants to link GPL/LGPL libraries by their own decisions, +operations and responsibilities, he may do that on his computer. However, if a +delivered work under copyright law is created as a result of such an +operation, such a delivered work must not re-distributed to other people, +because it may violate GPL/LGPL libraries' conditions. + +Note for users of Windows version of PacketiX VPN: For technical reason, the +above texts are exactly same as a file which is also contained on the +non-Windows version of PacketiX VPN. Actually, the Windows version of PacketiX +VPN has no relations to any GPL/LGPL libraries enumerated above. + +SoftEther Corporation provides source codes of some GPL/LGPL/other libraries +listed above on its web server. Anyone can download, use and re-distribute +them under individual licenses which are contained on each archive file, +available from the following URL: +http://uploader.softether.co.jp/src/ + diff --git a/src/WARNING.TXT b/src/WARNING.TXT new file mode 100644 index 00000000..ac8ca580 --- /dev/null +++ b/src/WARNING.TXT @@ -0,0 +1,523 @@ +THE IMPORTANT NOTICES ABOUT SOFTETHER VPN + +FUNCTIONS OF VPN COMMUNICATIONS EMBEDDED ON THIS SOFTWARE ARE VERY POWERFUL +THAN EVER. THIS STRONG VPN ABILITY WILL BRING YOU HUGE BENEFITS. HOWEVER, IF +YOU MISUSE THIS SOFTWARE, IT MIGHT DAMAGES YOURSELF. IN ORDER TO AVOID SUCH +RISKS, THIS DOCUMENT ACCOUNTS IMPORTANT NOTICES FOR CUSTOMERS WHO ARE WILLING +TO USE THIS SOFTWARE. THE FOLLOWING INSTRUCTIONS ARE VERY IMPORTANT. READ AND +UNDERSTAND IT CAREFULLY. ADDITIONALLY, IF YOU ARE PLANNING TO USE THE DYNAMIC +DNS, THE NAT TRAVERSAL OR THE VPN AZURE FUNCTIONS, READ THE SECTION 3.5 +CAREFULLY. THESE FUNCTIONS ARE FREE SERVICES PROVIDED VIA THE INTERNET, ARE +NOT GUARANTEED, AND ARE NOT INTENDED TO BE USED FOR BUSINESS OR COMMERCIAL +USE. DO NOT USE THESE SERVICES FOR YOUR BUSINESS OR COMMERCIAL USE. + + +1. VPN Communication Protocols +1.1. SoftEther VPN Protocol +SoftEther VPN can perform VPN communication. Unlike traditional VPN protocols, +SoftEther VPN has an implementation of the newly-designed "SoftEther VPN +Protocol (SE-VPN Protocol)" . SE-VPN protocol encapsulates any Ethernet +packets into a HTTPS (HTTP over SSL) connection. Therefore SE-VPN protocol can +communicate beyond firewalls even if the firewall is configured to block +traditional VPN packets by network administrator. SE-VPN protocol is designed +and implemented to comply TLS 1.0 (RFC 5246) and HTTPS (RFC 2818). However, it +sometimes have different behavior to RFCs. If you are a network administrator +and want to block SE-VPN protocols on the firewall, you can adopt a +"white-list" policy on the firewall to filter any TCP or UDP packets on the +border except explicitly allowed packets towards specific web sites and +servers. + +1.2. NAT Traversal Function +Generally, if you use traditional VPN systems you have to request a network +administrator to make the NAT or firewall to "open" or "relay" specific TCP or +UDP ports. However, there are demands somehow to eliminate such working costs +on network administrators. In order to satisfy such demands, SoftEther VPN has +the newly-implemented "NAT Traversal" function. NAT Traversal is enabled by +default. A SoftEther VPN Server running on the computer behind NAT or firewall +can accept VPN connections from the Internet, without any special +configurations on firewalls or NATs. If you want to disable the NAT Traversal +function, modify the "DisableNatTraversal" to "true" on the configuration file +of SoftEther VPN Server. In order to disable it on the client-side, append +"/tcp" suffix on the destination hostname. + +1.3. Dynamic DNS Function +Traditional legacy VPN system requires a static global IP address on the VPN +server. In consideration of shortage of global IP addresses, SoftEther +Corporation implements the "Dynamic DNS Function" on SoftEther VPN Server. +Dynamic DNS is enabled by default. Dynamic DNS function notify the current +global IP address of the PC to the Dynamic DNS Servers which are operated by +SoftEther Corporation. A globally-unique hostname (FQDN) such as +"abc.softether.net" ( "abc" varies as unique per a user) will be assigned on +the VPN Server. If you tell this unique hostname to a VPN user, the user can +specify it as the destination VPN Sever hostname on the VPN Client and will be +able to connect the VPN Server. No IP addresses are required to know +beforehand. If the IP address of the VPN Server varies, the registered IP +address related to the hostname of Dynamic DNS service will be changed +automatically. By this mechanism, no longer need a static global IP address +which costs monthly to ISPs. You can use consumer-level inexpensive Internet +connection with dynamic IP address in order to operate an enterprise-level VPN +system. If you want to disable Dynamic DNS, specify "true" on the "Disabled" +items of the "DDnsClient" directive on the SoftEther VPN Server configuration +file. * Note for residents in People's Republic of China: If your VPN Server +is running on the People's Republic of China, the DNS suffix will be replaced +to "sedns.cn" domain. The "sedns.cn" domain is the service possessed and +operated by "Beijing Daiyuu SoftEther Technology Co., Ltd" which is a +Chinese-local enterprise. + +1.4. VPN over ICMP / VPN over DNS functions +If you want to make a VPN connection between SoftEther VPN Client / Bridge and +SoftEther VPN Server, but if TCP and UDP packets are prohibited by the +firewall, then you can encapsulates payloads into "ICMP" (as known as Ping) or +"DNS" packets. This function can realize a VPN connection by using ICMP or DNS +even if the firewall or router blocks every TCP or UDP connections. VPN over +ICMP / VPN over DNS functions are designed to comply standard ICMP and DNS +specifications as possible, however it sometimes has a behavior not to fully +comply them. Therefore, few poor-quality routers may be caused a +memory-overflow or something troubles when a lot of ICMP or DNS packets are +passed, and such routers sometimes freezes or reboots. It might affects other +users on the same network. To avoid such risks, append the suffix "/tcp" on +the destination hostname which is specified on the VPN-client side to disable +VPN over ICMP / DNS functions. + +1.5. VPN Azure Cloud Service +If your SoftEther VPN Server is placed behind the NAT or firwall, and by some +reason you cannot use NAT Traversal function, Dynamic DNS function or VPN over +ICMP/DNS function, you can use VPN Azure Clouse Service. SoftEther Corporation +operates VPN Azure Cloud on Internet. After the VPN Server makes a connection +to the VPN Azure Cloud, the hostname "abc.vpnazure.net" ( "abc" is a unique +hostname) can be specified to connect to the VPN Server via the VPN Azure +Cloud. Practically, such a hostname is pointing a global IP address of one of +cloud servers which are operated by SoftEther Corporation. If A VPN Client +connects to such a VPN Azure host, then the VPN Azure host will relay all +traffics between the VPN Client and the VPN Server. VPN Azure is disabled by +default. You can activate it easily by using VPN Server Configuration Tool. + +1.6. UDP Acceleration +SoftEther VPN has the UDP Acceleration Function. If a VPN consists of two +sites detects that UDP channel can be established, UDP will be automatically +used. By this function, throughput of UDP increases. If direct UDP channel can +be established, direct UDP packets will be used. However, if there is +something obstacles such as firewalls or NATs, the "UDP Hole Punching" +technology will be used, instead. The "UDP Hole Punching" uses the cloud +servers which SoftEther Corporation operates on Internet. UDP Acceleration can +be disabled anytime by setting up so on the VPN-client side. + + +2. VPN Software +2.1. SoftEther VPN Client +If you use SoftEther VPN Client on Windows, the Virtual Network Adapter device +driver will be installed on Windows. The Virtual Network Adapter is +implemented as a kernel-mode driver for Windows. The driver is +digitally-signed by a certificate issued by VeriSign, Inc. and also sub-signed +by Symantec Corporation. A message to ask you want to sure install the driver +might be popped up on the screen. SoftEther VPN Client may response the +message if possible. SoftEther VPN Client also optimizes the configuration of +MMCSS (Multimedia Class Scheduler Service) on Windows. You can undo the +optimizations of MMCSS afterwards. + +2.2. SoftEther VPN Server / Bridge +If you use SoftEther VPN Server / Bridge on Windows with "Local Bridge" +functions, you have to install the low-level Ethernet packet processing driver +on the computer. The driver is digitally-signed by a certificate issued by +VeriSign, Inc. and also sub-signed by Symantec Corporation. SoftEther VPN +Server / Bridge may disable the TCP/IP offloading features on the physical +network adapter for Local Bridge function. In Windows Vista / 2008 or greater +version, VPN Server may inject a packet-filter driver which complies Windows +Filter Platform (WPF) specification into the kernel in order to provide IPsec +function. The packet-filter driver will be loaded available only if IPsec +function is enabled. Once you enables IPsec function of SoftEther VPN Server, +the built-in IPsec function of Windows will be disabled. After you disabled +IPsec function of SoftEther VPN Server, then the built-in IPsec function of +Windows will revive. In order to provide the Local Bridge function, SoftEther +VPN Server / Bridge disables the TCP/IP offloading function on the operating +system. + +2.3. User-mode Installation +You can install SoftEther VPN Server and SoftEther VPN Bridge as "User-mode" +on Windows. In other words, even if you don't have Windows system +administrator's privileges, you can install SoftEther VPN as a normal user. +User-mode install will disable a few functions, however other most functions +work well. Therefore, for example, an employee can install SoftEther VPN +Server on the computer in the office network, and he will be able to connect +to the server from his home. In order to realize such a system by user-self, +no system administrative privileges are required in the view-point of +technical. However, breaking rules of the company to install software on the +computer without authority might be regarded as an unfavorable behavior. If +you are an employee and belong to the company, and the company-policy +prohibits installing software or making communications towards Internet +without permission, you have to obtain a permission from the network +administrator or the executive officer of your company in advance to install +SoftEther VPN. If you install VPN Server / Bridge as User-mode, an icon will +be appeared on the Windows task-tray. If you feel that the icon disturbs you, +you can hide it by your operation. However, you must not exploit this hiding +function to install VPN Server on other person's computer as a spyware. Such +behavior might be an offence against the criminal law. + +2.4. Keep Alive Function +SoftEther VPN Server and SoftEther VPN Bridge has Keep Alive Function by +default. The purpose of this function is to sustain the Internet line active. +The function transmits UDP packets with a random-byte-array-payload +periodically. This function is useful to avoid automatic disconnection on +mobile or dial-up connections. You can disable Keep Alive Function anytime. + +2.5. Uninstallation +The uninstallation process of SoftEther VPN software will delete all program +files. However, non-program files (such as files and data which are generated +by running of programs) ) will not be deleted. For technical reason, the exe +and resource files of uninstaller might remain. Such remaining files never +affects to use the computer, however you can delete it manually. Kernel-mode +drivers might not be deleted, however such drivers will not be loaded after +the next boot of Windows. You can use "sc" command of Windows to delete +kernel-mode drivers manually. + +2.6. Security +You should set the administrator's password on SoftEther VPN Server / Bridge +after installation. If you neglect to do it, another person can access to +SoftEther VPN Server / Bridge and can set the password without your +permission. This caution might be also applied on SoftEther VPN Client for +Linux. + +2.7. Automatic Update Notification +SoftEther VPN software for Windows has an automatic update notification +function. It accesses to the SoftEther Update server periodically to check +whether or not the latest version of software is released. If the latest +version is released, the notification message will be popped up on the screen. +In order to achieve this purpose, the version, language settings, the unique +identifier, the IP address of your computer and the hostname of VPN Server +which is connected to will be sent to the SoftEther Update server. No personal +information will be sent. Automatic Update Notification is enabled by default, +however you can disable it on the configuration screen. The setting whether +turned on or turned off will be saved individually corresponding to each +destination VPN server, by VPN Server Manager. + +2.8. Virtual NAT Function +A Virtual Hub on SoftEther VPN Server / Bridge has "Virtual NAT Function" . +Virtual NAT Function can share a single IP address on the physical network by +multiple private IP address of VPN Clients. There are two operation mode of +Virtual NAT: User-mode and Kernel-mode. In the user-mode operation, Virtual +NAT shares an IP address which is assigned on the host operating system. +Unlike user-mode, the kernel-mode operation attempts to find DHCP servers on +the physical network. If there are two or more physical networks, a DHCP +server will be sought automatically for each segments serially. If a DHCP +server found, and an IP address is acquired, the IP address will be used by +the Virtual NAT. In this case, an IP entry as a DHCP client will be registered +on the IP pool of the physical DHCP Server. The physical default gateway and +the DNS server will be used by the Virtual NAT in order to communicate with +hosts in Internet. In kernel-mode operation, a Virtual Hub has a virtual MAC +address which is operating on the physical Ethernet segment. In order to check +the connectivity to Internet, SoftEther VPN periodically sends DNS query +packet to resolve the IP address of host "www.yahoo.com" or "www.baidu.com" , +and attempts to connect to the TCP port 80 of such a resulted IP address for +connectivity check. + +2.9. Unattended Installation of Kernel-mode Components +When SoftEther VPN will detect a necessity to install the kernel-mode +components on Windows, a confirmation message will be appeared by Windows +system. In this occasion, SoftEther VPN software will switch to the Unattended +Installation mode in order to respond "Yes" to Windows. This is a solution to +prevent dead-locks when a remote-administration is performed from remote +place. + +2.10. Windows Firewall +SoftEther VPN software will register itself as a safe-program. Such an entry +will be remain after the uninstallation. You can remove it manually from the +Control Panel of Windows. + + +3. Internet Services +3.1. Internet Services which are provided by SoftEther Corporation +SoftEther Corporation provides Dynamic DNS, NAT Traversal and VPN Azure server +services on the Internet. These services are free of charge. Customers can +access to the services by using SoftEther VPN software, via Internet. These +service will be planned to be available from Open-Source version of "SoftEther +VPN" which will be released in the future. + +3.2. Sent Information and Privacy Protection +SoftEther VPN software may send an IP address, hostname, the version of VPN +software on the customer's computer to the cloud service operated by SoftEther +Corporation, in order to use the above services. These sending of information +are minimal necessary to use the services. No personal information will be +sent. SoftEther Corporation records log files of the cloud service servers for +90 days at least with the received information. Such logs will be used for +troubleshooting and other legitimate activities. SoftEther Corporation may +provide logs to a public servant of Japanese government who are belonging to +courts, police stations and the prosecutor's office, in order to comply such +authorities' order. (Every Japanese public servants are liable by law to keep +the information close.) Moreover, the IP addresses or other information will +be processed statistically and provided to the public, not to expose the each +concrete IP address, in order to release the release of research activities. + +3.3. Communication Data via VPN Azure Service +Regardless of the above 3.2 rule, if the customer sends or receives VPN +packets using VPN Azure Cloud Service, the actual payloads will stored and +forwarded via the volatile memory of the servers for very short period. Such a +behavior is naturally needed to provide the "VPN relay service" . No payloads +will be recorded on "fixed" storages such as hard-drives. However, the +"Wiretapping for Criminals Procedures Act" (The 137th legislation ruled on +August 18, 1999 in Japan) requires telecommunication companies to allow the +Japanese government authority to conduct a wire-tapping on the line. VPN Azure +Servers which are physically placed on Japan are subjects of this law. + +3.4. Comply to Japanese Telecommunication Laws +SoftEther Corporation complies with Japanese Telecommunication Laws as +necessary to provide online services via Internet. + +3.5. Free and Academic Experiment Services +SoftEther provides Dynamic DNS, NAT Traversal and VPN Azure as academic +experiment services. Therefore, there services can be used for free of charge. +These services are not parts of "SoftEther VPN Software Products" . These +services are provided without any warranty. The services may be suspended or +discontinued by technical or operational matters. In such occasions, users +will not be able to use the services. A user have to understand such risks, +and to acknowledge that such risks are borne by a user-self. SoftEther will +never be liable to results or damages of use or unable-to-use of the service. +Even if the user has already paid the license-fee of the commercial version of +SoftEther VPN, such paid fees don't include any fees of these services. +Therefore, if the online services will stop or be discontinued, no refunds or +recoveries of damages will be provided by SoftEther Corporation. + +3.6. DNS Proxy Cloud Servers +In some regions, when a user uses Internet, a DNS query sometimes broken or +lost when it is passing through the ISP line. If SoftEther VPN Server, Client +or Bridge detects a possibility that the accessing to the actual VPN server +might be unstable, then DNS queries will be also transferred to the DNS proxy +cloud servers which are operated by SoftEther Corporation. A DNS proxy cloud +server will respond DNS queries with answering correct a IP address. + + +4. General Cautions +4.1. Needs an Approval from Network Administrator +SoftEther VPN has powerful functions which don't require special settings by +network administrators. For example, you need not to ask the administrator to +configure the existing firewall in order to "open" a TCP/UDP port. Such +characteristic features are for the purpose to eliminate working times and +costs of network administrators, and avoid misconfiguration-risks around the +tasks to open specific exception ports on the firewall. However, any employees +belong to the company have to obtain an approval from the network +administrator before installs SoftEther VPN. If your network administrator +neglects to provide such an approval, you can consider to take an approval +from an upper authority. (For example, executive officer of the company.) If +you use SoftEther VPN without any approvals from the authority of your +company, you might have disadvantage. SoftEther Corporation will be never +liable for results or damages of using SoftEther VPN. + +4.2. Observe Laws of Your Country +If your country's law prohibits the use of encryption, you have to disable the +encryption function of SoftEther VPN by yourself. Similarly, in some countries +or regions, some functions of SoftEther VPN might be prohibited to use by +laws. Other countries' laws are none of SoftEther Corporation's concern +because SoftEther Corporation is an enterprise which is located and registered +in Japan physically. For example, there might be a risk that a part of +SoftEther VPN conflicts an existing patent which is valid only on the specific +region. SoftEther Corporation has no interests in such specific region outside +Japan's territory. Therefore, if you want to use SoftEther VPN in regions +outside Japan, you have to be careful not to violate third-person's rights. +You have to verify the legitimacy of the use of SoftEther VPN in the specific +region before you actually use it in such region. By nature, there are almost +200 countries in the World, and each country's law is different each other. It +is practically impossible to verify every countries' laws and regulations and +make the software comply with all countries' laws in advance to release the +software. Therefore SoftEther Corporation has verified the legitimacy of +SoftEther VPN against the laws and regulations of only Japan. If a user uses +SoftEther VPN in a specific country, and damaged by public servants of the +government authority, SoftEther Corporation will never be liable to recover or +compensate such damages or criminal responsibilities. + + +5. VPN Gate Academic Experiment Project +(This chapter applies only on SoftEther VPN software package which contains +the extension plug-in for VPN Gate Academic Experiment Project.) +5.1. About VPN Gate Academic Experiment Project +VPN Gate Academic Experiment Project is an online service operated for just +the academic research purpose at the graduate school of University of Tsukuba, +Japan. The purpose of this research is to expend our knowledge about the +"Global Distributed Public VPN Relay Server" (GDPVRS) technology. For details, +please visit http://www.vpngate.net/. + +5.2. About VPN Gate Service +SoftEther VPN Server and SoftEther VPN Client may contain "VPN Gate Service" +program. However, VPN Gate Service is disabled by default. +VPN Gate Service should be activated and enabled by the voluntary intention of +the owner of the computer which SoftEther VPN Server or SoftEther VPN Client +is installed on. After you activate VPN Gate Service, the computer will be +start to serve as a part of the Global Distributed Public VPN Relay Servers. +The IP address, hostname and related information of the computer will be sent +and registered to the directory server of VPN Gate Academic Experiment +Project, and they will be published and disclosed to the public. This +mechanism will allow any VPN Gate Client software's user to connect to the VPN +Gate Service running on your computer. While the VPN session between a VPN +Gate Client and your VPN Gate Service is established, the VPN Gate Client's +user can send/receive any IP packets towards the Internet via the VPN Gate +Service. The global IP address of the VPN Gate Service's hosing computer will +be used as the source IP address of such communications which a VPN Gate +Client initiates. +VPN Gate Service will send some information to the VPN Gate Academic +Experiment Service Directory Server. The information includes the operator's +information which described in section 5.5, logging settings, uptime, +operating system version, type of protocol, port numbers, quality information, +statistical information, VPN Gate clients' log history data (includes dates, +IP addresses, version numbers and IDs) and the version of the software. These +information will be exposed on the directory. VPN Gate Service also receives a +key for encoding which is described on the chapter 5.9 from the directory +server. + +5.3. Details of VPN Gate Service's Behavior +If you enable VPN Gate Service manually, which is disabled by default, the +"VPNGATE" Virtual Hub will be created on the SoftEther VPN Server. If you are +using SoftEther VPN Client and attempt to active VPN Gate Service on it, an +equivalent program to SoftEther VPN Server will be invoked on the same process +of SoftEther VPN Client, and the "VPNGATE" Virtual Hub will be created. The +"VPNGATE" Virtual Hub contains a user named "VPN" by default which permits +anyone on the Internet to make a VPN connection to the Virtual Hub. Once a VPN +Client connects to the "VPNGATE" Virtual Hub, any communication between the +user and the Internet will pass through the Virtual Hub, and +transmitted/received using the physical network interface on the computer +which SoftEther VPN Server (or SoftEther VPN Client) is running on. This will +cause the result that a destination host specified by the VPN Client will +identify that the source of the communication has initiated from the VPN Gate +Service's hosting computer's IP address. However, for safety, any packets +which destinations are within 192.168.0.0/255.255.0.0, 172.16.0.0/255.240.0.0 +or 10.0.0.0/255.0.0.0 will be blocked by the "VPNGATE" Virtual Hub in order to +protect your local network. Therefore, if you run VPN Gate Service on your +corporate network or private network, it is safe because anonymous VPN Client +users will not be permitted to access such private networks. VPN Gate Service +also serves as relay for accessing to the VPN Gate Directory Server. +In order to make VPN Gate Service familiar with firewalls and NATs, it opens +an UDP port by using the NAT Traversal function which is described on the +section 1.2. It also opens and listens on some TCP ports, and some TCP and UDP +ports will be specified as the target port of Universal Plug and Play (UPnP) +Port Transfer entries which are requested to your local routers. UPnP request +packets will be sent periodically. Some routers keep such an opened TCP/UDP +port permanently on the device. If you wish to close them, do it manually. +VPN Gate Service also provides the mirror-site function for www.vpngate.net. +This is a mechanism that a copy of the latest contents from www.vpngate.net +will be hosted by the mirror-site tiny HTTP server which is running on the VPN +Gate Service program. It will register itself on the mirror-sites list in +www.vpngate.net. However, it never relays any other communications which are +not towards www.vpngate.net. + +5.4. Communication between Internet via VPN Gate Service +VPN Gate Service provides a routing between users and the Internet, by using +the Virtual NAT Function which is described on the section 2.8. VPN Gate +Service sends polling Ping packets to the server which is located on +University of Tsukuba, and the Google Public DNS Server which is identified as +8.8.8.8, in order to check the latest quality of your Internet line. VPN Gate +Service also sends and receives a lot of random packets to/from the Speed Test +Server on University of Tsukuba. These quality data will be reported to VPN +Gate Directory Server, automatically and periodically. The result will be +saved and disclosed to the public. These periodical polling communication are +adjusted not to occupy the Internet line, however in some circumstances they +might occupy the line. + +5.5. Operator's Information of VPN Gate Service +If you activate VPN Gate Service on your computer, the computer will be a part +of the Global Distributed Public VPN Relay Servers. Therefore, the Operator's +administrative information of your VPN Gate Service should be reported and +registered on the VPN Gate Service Directory. Operator's information contains +the name of the operator and the abuse-reporting contact e-mail address. These +information can be inputted on the screen if the VPN Gate configuration. +Inputted information will be transmitted to the VPN Gate Directory Server, +stored and disclosed to the public. So you have to be careful to input +information. By the way, until you specify something as the operator's +information, the computer's hostname will be used automatically as the field +of the name of the operator, by appending the "'s owner" string after the +hostname. + +5.6. Observe Laws to Operate VPN Gate Service +In some countries or regions, a user who is planning to activate and operate +VPN Gate Service, he are mandated to obtain a license or register a service +from/to the government. If your region has such a regulation, you must fulfill +mandated process before activating VPN Gate Service in advance. Neither the +developers nor operators of the VPN Gate Academic Experiment Project will be +liable for legal/criminal responsibilities or damages which are occurred from +failure to comply your local laws. + +5.7. Protect Privacy of Communication +Most of countries have a law which requires communication service's operators, +including VPN Gate Service operators, to protect the privacy of communication +of third-persons. When you operate VPN Gate Service, you must always protect +user's privacy. + +5.8. Packet Logs +The packet logging function is implemented on VPN Gate Service. It records +essential headers of major TCP/IP packets which are transmitted via the +Virtual Hub. This function will be helpful to investigate the "original IP +address" of the initiator of communication who was a connected user of your +VPN Gate Service, by checking the packet logs and the connection logs. The +packet logs are recorded only for such legitimate investigates purpose. Do not +peek nor leak packet logs except the rightful purpose. Such act will be +violate the section 5.7. + +5.9. Packet Logs Automatic Archiving and Encoding Function +The VPN Gate Academic Experiment Service is operated and running under the +Japanese constitution and laws. The Japanese constitution laws demand strictly +protection over the privacy of communication. Because this service is under +Japanese rules, the program of VPN Gate Service implements this "Automatic Log +File Encoding" protection mechanism, and enabled by default. +The VPN Gate Service is currently configured to encode packet log files which +has passed two or more weeks automatically, by default. In order to protect +privacy of communication, if a packet log file is once encoded, even the +administrator of the local computer cannot censor the packet log file. This +mechanism protects privacy of end-users of VPN Gate Service. +You can change the VPN Gate Service setting to disable this automatic encoding +function. Then packet log files will never be encoded even after two weeks +passed. In such a configuration, all packet logs will remain as plain-text on +the disk. Therefore you have to take care not to violate user's privacy. +If you are liable to decode an encoded packet log files (for example: a VPN +Gate Service's user illegally abused your VPN Gate Service and you have to +decode the packet logs in order to comply the laws), contact the administrator +of the VPN Gate Academic Experiment Service at Graduate School of University +of Tsukuba, Japan. You can find the contact address at +http://www.vpngate.net/. The administrator of VPN Gate Service will respond to +decode the packet logs if there is an appropriate and legal request from court +or other judicial authorities, according to laws. + +5.10. Caution if You Operate VPN Gate Service in the Japan's Territories +When a user operates VPN Gate Service in the Japan's territories, such an act +may be regulated under the Japanese Telecommunication Laws if the operation is +a subject to the law. However, in such a circumstance, according to the +"Japanese Telecommunication Business Compete Manual [supplemental version]" , +non- profitable operations of communications are not identified as a +"telecommunication business" . So usual operators of VPN Gate Service are not +subjects to "telecommunication business operators" , and not be mandated to +register to the government. Even so, legalities to protect the privacy of +communication still imposed. As a conclusion, if you operate VPN Gate Service +in the Japan's Territories, you must not leak the secrets of communications +which are transmitted via your operating VPN Gate Service. + +5.11. VPN Gate Client +If SoftEther VPN Client contains the VPN Gate Client plug-in, you can use it +to obtain the list of current operating VPN Gate Service servers in the +Internet, and make a VPN connection to a specific server on the list. +VPN Gate Client always keeps the latest list of the VPN Gate Services +periodically. Be careful if you are using a pay-per-use Internet line. +When you start the VPN Gate Client software, the screen which asks you +activate or not VPN Gate Service will be appeared. For details of VPN Gate +Service, read the above sections. + +5.12. Caution before Joining or Exploiting VPN Gate Academic Experiment +Project +The VPN Gate Academic Experiment Service is operated as a research project at +the graduate school on University of Tsukuba, Japan. The service is governed +under the Japanese laws. Other countries' laws are none of our concerns nor +responsibilities. +By nature, there are almost 200 countries in the World, with different laws. +It is impossible to verify every countries' laws and regulations and make the +software comply with all countries' laws in advance to release the software. +If a user uses VPN Gate service in a specific country, and damaged by public +servants of the authority, the developer of either the service or software +will never be liable to recover or compensate such damages or criminal +responsibilities. +By using this software and service, the user must observe all concerned laws +and rules with user's own responsibility. The user will be completely liable +to any damages and responsibilities which are results of using this software +and service, regardless of either inside or outside of Japan's territory. +If you don't agree nor understand the above warnings, do not use any of VPN +Gate Academic Experiment Service functions. +VPN Gate is a research project for just academic purpose only. VPN Gate was +developed as a plug-in for SoftEther VPN and UT-VPN. However, all parts of VPN +Gate were developed on this research project at University of Tsukuba. Any +parts of VPN Gate are not developed by SoftEther Corporation. The VPN Gate +Research Project is not a subject to be led, operated, promoted nor guaranteed +by SoftEther Corporation. + diff --git a/src/bin/BuiltHamcoreFiles/unix/hamcore.se2 b/src/bin/BuiltHamcoreFiles/unix/hamcore.se2 deleted file mode 100644 index b3231a54c37676cc0193292ec413db169b68a87f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034007 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%0DR8ist6N{MwrhgrWM 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ǜ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 z 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

      @T-{5QO?hz9iFbyAp`Hm2rS@ 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
      -%iI?#^UbJ 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

      kM^+*{T2>%ZVm2%lX;stYzn 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

      D9wIEu0v=D)7Prv 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�n88q$FO2Bq`CmMYO~aQp7~B9uzeNyM7g1WODa~pS)!rg7U;u7|P9WilY9m2##(KfK4eU zUh3OE?sPivl75qI;%GK9iuvmP;m7A|LFhN0-1Z8YJKPV&YPJ)@_l zJ~OG=NZ&!6mJ{=-(Od_3%z=K;8NjB$hfqZ%b0G(i$Vu|iwq+WV}{&~j}79-jGS)6M>?oKD5s#ON@pn}%G%k2Mjy zqv2$R6|8}Rf5Ae$cOauK3cPP*cM!NM4%mXD98|^-bFrmdXYCDq;2@jG}}Mym1D1w|HSB( z#|JwHFMHF$_{(fK{!$Ju#vh;4Ut3?w@t10L!LSYwj*g)q#bo-VsD=VBetNuf*gxJr z-s|a$xG%Fx{dyO!qQ7b)6d5HDBauCTH|K1mh^(7&Os3EXq_{LxH?%d85%Yb~h`Jtu z7Sox-XfmeCWjzdM?$?f(!YRSNchnV$wlS>&KCHP~OvqY70D>#2Ykh;hn?TQ;RS=z{ zhLW&-0{MpLp-=D2- zZvDKzvA($?WfvgeqWRDj9x0a202=p2%+?3`?5CgB<-d&;46+evqD`qgSIZRWNlC3*1jzjvw!H?v#$%|hQGzN z+kD7z#zga>xP<6_vkithu4Jp6_DvvyRdIc5t(&bFzG+^+*^OUs{s+7#o@$!x@4SL_ z_M6xiThe07Z}HR5RFI~GUSNOaZG*2j)*Lx)04amJfu(v>rLYVke5uBlq-J2|ov2c$ zT|0@J_FkHO)2;U*o*FxbRsG?0q$SS||6vkEfd+svon+Gg`klu_Xz zr(a3sAUAC_9?7KYZil*{_@M6MvUGq*K<`UJ;+4%On;Xwy2hoEH{tdhK>__v&oK`Ng zXFskb>FuWLsYaxg-{3bUC*txApQSgnw@!3u6VcT4&VQa&3neVtrN9vyMC!Rp9C ziEt=77NJ}bOB|@tw9kc=nq5zoxe-LGa|kodUf1g|OZOYFYSrijPmSPz zO2VD~+Im`!+aZg5<(aDlav9xY3QS}%^XH6!^sKK9O>=D?nXCGY>IMZqRPIW4?#L`K zJ-TZ{6ow{411go>1y%%_=XFMjKz9R9a#O&LNd!K=ePj-+iXA-lc!6@&O;}EX-u6DT zeQ)pc)SS4BRzqLUFojWm+0FhFtt^zakPfadYt#M(S!0Zz6Pg6~KF85&w`CI)$%=lX zS1}1m;F~*p!*LzGFv>hO20q#zA8n6+aoeLIQ?x$n89$mImoY!$$1k`4)k9=>e_>8X zWm62``G4*oAMYLY2s_@Jtr-|*M)@!L{T^V5eHd@YU%-sX>bb2ox0o+O=gc$9Q|2i$ z38d3_oltMRzG>7zc<{ziGe%Z)AFZPg-#Th`>)W%BA{jhdNbk);N+kVgBfT{nDO26| zWF;jW`iAYKyl3CIrIfbeFJ>#{t@-NKQZtUbx0m8%jSA1%F>N$XeAFW?Sa8tU4SYQd z+h#@qFKav-%b5TYRA})*ibPclaMd4e7eAML{+k=-e;zc5nZGbfNMc5G_?R~(QNx#- z6CNgDFHc9afjNIl9ESx$A#fW%5XUxuPsm?6FN+^2C=SY@F znfJg7xD+Hb^V4)?zCP{(x>C){#B$-+Jh`^nDR4^wn>(deP=WPytHpS_HP<(CD>Q^| zJvv7|8Yu73K)Ll7w@_|{?vY!M2FmOBM{fNUEQ`^cZt5Yq_3*8LTl0J*x2|Lb+`5?+ zP#;7*OQ1OkBR{rQwT+Fpfl8 z9=Ns895{FLzKS_;>(Lr`pVq*wM`Pfv8Uwe!J6qt^H*N~t`YTuhx4ub3prr2sTVP7H zdJuNNt$Q#7Ze7W5a_d@-lUrBxoZPx~*U7ELzLTijEOK((TGns!YS3=qXL9SdoF=z! z*K2a?Hr*z-Zr^Wm>n<_=FM`>lUp}&p4@u$p8R^o$w%Adqiu3Y z@5!ymee%&f`BnWV{}N`-`*5J#y157CH()%4LALu)euvi6m8ALf4qPj@p5MrN3LE$B z*-wck9xbT%=ui1*L%nT>%J0vL%2@Ob+filLzHv(`Z^U2BmMWX`)vc*8ko$0}-1_VJ zRc?Lrj+I;AzGvmuZM#-(-H~tQ*6lf0Zr#kga_d&zE4OaTzcMb0;huLom?k~6s?xv0 z#tH9ANJp-!)L26!=wE@U(a(?iJvm@L+BlcAaefP?NLBO0J@5%GRZw2P=|~xQBsDzh zD*}w$$M+MBJMKm#mqRbu0EAUMWyiu+>AyyuJ&fa%D7oU&>59p3$|$@X_00ZCyT zJa6y%#hqdX1)Z@e;}d1ireY^jW1delC$p(juZs(F=*cIg`8O48gi&_`Bl#}BQT;r8 zWYhKQJ=}U*`c9`(r`|lax+aq=uRF7pH&yxHGkV}`fo_Gp-fiW@-A*JR2%?1+Uh8qO z!vqP?n~s!23<1YYzYg|OMN`Cn5IbDpl)8{pGFHGkx%5YYY8w&^gSZERdH9ITTd5G4 z_di5rZs;MhV6cy{w7h|?6HvKFBJ>KYfGtElZu6BmuVrFh<<82H6!Kq zi8v`YT>=Ani7g6(`$w#7%TrdhrS=>=Zu}Mt^=qp2)}m3P^+Kw88N91!)fDSTg9dm7 z9sA+#rClddzvQQ0{+&sYhpLx*Znl6Mpr=mwIrYc<LJy1KlmXN`i_rKK+>)97IzS0{RWln+Y}1gd4`#p~mjuY!@P8d5M&!}slO z0$RMTr)+g*+@Kmu&LVA%(Sk8>$N4|t&M5=b0bv6OP&OZ+t4TgEKi2rF#j9+8QUutN zXGhz+`)~Ro78Az8oh%r(8!lcyr4sg&f*B&2pUprRb*S>;Cx_+TXev|?*|Z-|>W|=d zAk7C%d4x)IIL&oYlwn;o>TFwlE*r!l3%lu}VS;h;#G_2H`}1rYTm9$tu>pLMmq_o^ zNj(~w=cZ{1SCxuIaK$S0Nf0bcP(S-KG+b#kS&Ef!d*~vIc^Y*k<_GN1tSf620s4e2 zh6m_hTQH_{J~w4iLX#E1O5 z7Pe7ea@9#gOA1-57I|_|i^sjs@E+M@Smh6*buT~b4=~RUVkd!K&d?a zlF~a@r&}nfIw?;KiZ#}d0hRzbx|tIxE=Xi0`Hslqg(sWCdfn3Es-kv&d2S7Pryk8N zs`r2rPL)nJIWj5%HnaGYhGZ0lj?%S~jSvqz4jYq=5J8Kk6Ci4`Eubl2X~*JgvYD88 zI!6wPm>&$wkL3_{7T%NJS<5=0*=KuH<}frgF^vLKn;0yDrwi7%uBXuV`<>UFm*qu? zXs-s7?Yz!@2WO`FU-$Qp_P1ZAA(&y6X0Q~->4PDfHyGwK0jSCB;v+~SaI7|EM{{8H zTlB}W55k2xWy4vP*gXv;aVInnEZd|UFM@vVTu<57W@KxU39VYnKq>(S9zk0N)hX$$ zGR45!6qu=fz+jxKXNIj-!(wt)TT@v81EY7isdIaw`>)oHPiK{lyeWqT+7_Ex$rBvU zP7L;V%+bk-VrrGj0)pG-BSeRLsgL8JYEg*=FLj%># zfig>N^>U5N3KW562N(W43{3m?~Da$%Cj6ua{y~YI^6E}|2R0> z?aA`JOGCL$rj&v&wPaN`lH>Tc&xPOylZh>+oJ!=yGGT3>9>Tf3E+u@pp-U9H@^TI9D~g+fjep@V+x} zQ9i%O=r!W1p-ezwW@YxORL{-@d3$%dx(N?=D$a;}#d=>L?tw?mmHcOF#E&lEn?~-g>s6yU^jDuub2x7# zI(uDD-=jrr&$+B8P^)yP<;epdwTO(!FbIxL5GGs%-WX^`T8KVjZ+6 zK&NIOw*6*uIgn7puBF#-W))u=beB?X_Bs7cQ)lD4X-d9flX1qqSu-i_c>+AKExJS!nIf#}_Q%$Y$1~Ni2JoqyHtM^GW@& zxBxV$VW)7Ptq&^&!kWig%Y=zyJneTTFdPH1BE#`6D>Qaq_XZV84>ZB|Xd~aHz}$t} z=b-Pr?zAN3Fo3#@0i|*kq^$>X2W*SfM0rS78KHNVAHh;OdiF3GhwKKUFk{;fl7=Fc zPc-m?zJ>XVZG+F69{L`zXP$SRMtJnv;t^h`X|KNM^YA{+yF+u|JFO;i3wOZn zE7EG%75NI9j0KR^WYPe?ZS5uLovw6U>y_=44>ZeZ>oF#;VY7_y|82e6<+<7J-}jCP z!1?DulvL_GkVuXOQMUl~c}QL@*m};y{W+kbX76adp-7Sf zSWH&8yeJlo?KsC+bsf+mXa?XzkMZwE>N{eyQs2?GmHOK+_qY4K9NYok2Ul_qz+K3D zH9Q!?TvLAE!6{6Hy28k!&%Lk^A&*M>EsbH-F!&v~b9WpT#JT;@c@zdY- zULJB3BFAgOT-_l*xl1fhXtU6LgyayQZosiu572ccAFcVKMFNZd&;R}Z{h$B+|Nfu< zZT|d!Tvz;-uN7V&XS)>Eas~OqAkxyM72>xoVBEBBO~(9DR>S&J1E8N~&mecrQ@M#W zzkc+7{T%!{dZr(2K9j-ixZor}m;r>fWxM6XOuL?3$`?+aG3nmFAUmcU$@7<0-OY-O zax5D8v0B6D>lPR6)xsNjTx-wRICZV(9QE^d!OawOQw>r2X^mtBx5eq|=5vL`O}kqVn!8 zIiLsrIV?`|*=Q;jh1G3zGo%a?y^NBa7^(M)61K@f-ptIer(xRu_^g{9mlwqo@Qggf zyo@~~ATmz6x8~N4(wu!~tlT3K=OUy@F?3S&KDi?&#V~j$?A@AQmSF*{%5aKGtl3@r zy50}@`Mv)8L;7hf)m=1WyaWO8Rda~66O*eGCmUkNB9LIP$MM$Zvwy@y(at8A47A9FU~ zX@vXGQN)dRIqn9H>!!ja0WldK-%YXR!Vl5i)0S(%CN4zMy>UrfFDdJMRU^XuQrAX9 zsqkQ{YQcOg3(DLu6<0h?H0#g6x2wg=0K|QQ&zD zG5m1Dkvo(ZlC)YsvPJ>%sbWJJ_;7LUke{AzZag)o_|3ofe%$D7Y^<=Nxg`YM_)&>n zgA!viM6g7_Y>IsH^uh@2^QS|@n$GLlq-Rd$W;c7J-udN4Oy8fNuuU_{n{&uBVU{rJ3xfNS1 z#odjGab;9PR3)zAYBM#XgHhv8m)Z8h^iH@&uJdxk3Ue7j+FT-Da1F?2({jWWY78|% zDE*pcZ?d!)o2|SCEgHhXvumSOC!`bN6a!Q+`!b!BgTQvGkcy3`f?KG%1-vg?H5^+3 zE>A%R!q5Z1t{yR53_grg#@WX~&NzJD1Z@^(jl*NfcbqoPtrW$$+TY$Tq%y~;7cO-i zK8)VS0?tbvM`z1h%N^IAoEqhf%1^;I5N;N}wekpO@}D*4pZX>Ql3se;R=tT<6fKoX zM1xuo@y|8~+1$iflBqiIGe1`cu+HLheldpJoTY{yxW8kPaa^{BeI?MyYsA77c_Vr8 zdr3WSo()9L2s47rO$fq>cHNvxx-*?rDNd1;Xld7*T1QEeQou3A3AInANy1l=0xVDY zYKy*)QaDJf1Xl))SNOm^bIKd2-)K4w! zxeVghZ;C;W3iQ+7yi= zVeBH~u9>tE?Ugk8{%Bh#?$OwwZM(YRvT{5~-Gd;a@F981+IYnI@%$w^y3Ozh$AiWP z(4wlth@xbgcZ-xdk4~6hI*p3oAI`n- zwwoWVU(vTosknuTR1q1h?iUyJ4nIvui#7r_yGZsbO}7qLqEXo*k&7*zAw)JfQ@>vQ zrxo~iCF+aMH@3^y+=E~~E((ttPE%wbo&9BS<(D1X55b7vG;mWh7CQ%9t0)Rc@IQt?d~YgN;q}%oGA3 zBI?*xFj7R)?%or<_D&+{+x_U9Tk`O^YjS#HB{P?JJBKjwq_d14({KK9(G;VPbg${T z%)q}cLrLGIvk!v5XO9|HFc3!l{n2UcR1;G`M6!$AYHnaaiKsAboC{oQmZQE~bFR53 zD}r?Nt+?0xl_b7?r+;qK zL|?RIpYe*%ajp3%h`@Kkc7%LVz;u`&S)W>gDA34dfGWvQUU6sN5cgC@44pi{g>3X> zR-6`Ee)UVpihvp#zo=)EL6QAdn*q=hU%Z>&le}t9%?H0+O1fwJh)dL}R5os=Zb4L7 z2%0FE9b~F9kIiu~_r#B1W1i`Oe%|#`XJfJ8(UVbGeJF-cru7*ml#nF`3vt_~1^Fmy zgk*W;)qs^BqRWl9;z!G}-YW;fuypWTNUpKp2q));(vk z5Cnj8JlW*_x6d(1{&8lt1Olc51JIo)@xuJuY|xN%Sy+E(Aq|u)5?^<2|W7z1LA#)5R5?RT5X_vZr_LI6o9dY0!z$J*#v@dD5p$O=wVp zK{8rV_7hGXg2bbjV}ZipR^Ray5i|*IxgKpcohcRmX#G^ROUPN7y_U4{Y*~A)>Oo&& z_Z4V&oaCpwWh1_YDP(uAJE|qWY-u^KUg@o%yjh1q0d5RfYT3F*lI4=%lLRCH6U>5B zj*QH0{1S7Y$X!iiq#3Y-NrtXQN|lKYO+>=D)|5jR5$RW$n-ns(dMv;TIU|O#Q#R2B zfkpmh0o*O>s;$#JQEhkvkJU$4L}yaaWM+boukyihTs2poGRFllueNux?cs0&C2i@8 zT|UG3pUk=E0uVWam?8*!43eYMc`>pXM3yQ|F$X4!V0vb^S>v=#;R*S|iwTf9Vbefv z;+jt-=MLTjJ_o75PbXHF4dFqiUSaM{J>eiHs1PWH`Dh~yU{ry8m>G=O9vIuFMbbsT z*AqUOm7}RFphv(SiBS4s(N?2uO&)1Z&y8Asc0Qg>xpJv@dmrGO)^5`CFda?!_Q)P9 z^QNf>Wj=K|TO3bW573L4y+zx%+)PJm+P417&VsSykV)Y#%fJ-CqDk{UMh7R zUk|jctTpZ?Zp4xpOr6ggtFY;i0j`IuVi8W<4s6kA*9Hqlw^WR7#TMm(;6o!VqGLc< z)3j3{_Qwf+%?~?@U+*8zW!L=09Byp@+%~gr2O09}vI#iWSy2_%8NQu;`K+s{)0}^R z2QMu0`=P2o@vWZK*c;Yk=&>3!rs%`Lor3V7`OX@b^s1=Nz3+BKMJ zw2ar}se%K9;euExjw&thh@sA#(Eah#{iK`Oe&k~oQI=w+`{OI|(sqKlF)M9Z)9Z55 z_K^xB4H(mUupokD5f`;B<}uMW42itB(Bxmd&Zl%M6rQfUmz@qb(j@wN``p5_EhRE0*i(bY54Y9WF+Qlfp2f45EM7Iv<1==!X5^ss`}XC>+oE zNMkfhCiIu%c#Uog2D4RzU>A8~c={wC7Hd|&PtE`@3K(E!6!=f|?r76SW)Gscx8J`-@iduDwWsLLzs_k z$UTV}dnwD7I)>fPzPfesch)|S_BK!f0(kru_w_Y1XROY53h~Q*mmJ6ry>2*JZYXZk zklXi9qpcG_FS$L^}NH119-v<(`RygsW26$qlo1!9ICKw???4(LDr4+UwCYs*tuE?hBXO z*-hHpDJU5sRp4Bdlo=JiEk467mm?cqlt+#2FQu_PDr^bXEDX1;atweBa?{t(Y zd4A*l!;UkQEP~trN2fnKfxD1bdGld@>z4;FI(^u8kC`6GF*kczpCzSB<>gXt=?cQe2BkcTnnzLdC~6)>&BGNn{iLWt$JwWbmU|cZ032oa4}0bK z9X{*-!#r$0ylVjlLP*<)z3a7_S%r-;5JI&))OmmUyhPG;LmD9Sk5T!d$W}Hso^079*`B(`=uA?Xbpca<^XZr|A`*&8cRTO>P3TXRowS=2aGUEDpbZ^9-h^h|DPwWPL2 z2c>GXsTKrfAzKPSWR%oH31ilum6%bzXq~+CiJCj=vPLUyIw%g+T4i^&0wHRux!fv zB&Wk0aP5AYYpdw2-xG{`xd^f2#NB-gnz*3%GT>_*Bm*4Gx`{F`f&~X26+XZFZR&fR zoK?l+H@%DL3^YVD*yH_Idk1fhd(*-AJ&y~6{det~+0c9Q^58|!i@@S;fWK3~AgYpP zMOGz{8-lVVlg~rSJ)(vOV!#tpNARYF2QDK@X!+IlWidc)Dn*y0AvoccD6eK+%|`W^ zJNT>^N?5S~%PB>2tW-5V#Qa?J!XKV!yjmsdWvM0_rRM2I>95sZ&ef69Ut8JwuK}{O&Z!6iTZ&L6-aj>KZ=`?Lo%!%=H)?sDgfwr47ds1e^~%!G#mu zfbMvsZW2s=T}i-%cd0y`e{SJz!q4Z+!9|{@Q-J|163C&(i@vbLYX}fbNg;Kt!XF53 z4OYe01F52xS~GoMx2kru2fK2d}pGUw62S7UfrS^p`rLyXWyCJxPZP=dls^YbBgcD$rE)TWyzRm6I*u+k3Mc4rt?c(*_7NNbgXSo2ildc`F)Gm+ zh0QkivekW0%9356f4qHk+(TyYo-UB~UhnqI8Th@rPNK=-rIIaC0!239*NZ=TXP>C8 zkp;bB)$l)`!M~rqGyg`;-=jL4Nn?Tx4hQ2a=ftMQby?Xo9D3nl2`LtZHb#YGU3>l$hiEtw|rjthnW1cXFd>IFAd;;C$57HXFB$YlCbI zRl${b-5luhjT182X{Hw=SWQsH7A@y^QeNbf%SBbr6S^Xi=XnT2!Kg$7Q|B zvXXA^EiAEnF4#SH^@2fOgOFTT!N9I;5!5=tEm#Ia+cn&K+}ZH&^}(q0!1sj&~#{F&ap$0?rJTF zj$=XID;-pu7!YRz4%3daj{EHz5Z$^t_1QBaZi6e^0V?@%Ub^6=pPEkdlx^n_2kSte zG)W+f($#s+pgveSiv(FXuj0Boo=wKJ%e=WnSEZ|=r&675YyUq<9Eyh~*IZ6_6ZT~i z#0fi!heE4jq{VasTS?{<$Qsi!-g*M_JE$KK(9TZYC$n*_|@TfhX>qLvu_l zhUHWToG-V4{<$?8IMqpG7|2) zN>4P%SL{55LTc6?1Obdxk%A<5gz1RwT6*%p5$j3vlG2und)jGUBo8n1O`NVBPGbHeAvR#5fz(ClH7chvJmg(6G-T z08#+WCqY|4(u;a1m_Kic%xE}*#+D2m7S(0UlZwyNm@jQ6@|O_e34F@)e1(Ank6C`~ z4~>cWD2qJIdlZpOr2gnPr2OPec~_&E)*=Og%hDtLJkrktq#vsSc$6|n0r0+DApYm# z{H`BQL~l>0lAQ7rNKVJ9p`P)xvl4Uw@;c2s<<*>{$h zqWZA4HvK#ZSLacb2TY2NV45-wpPA#lKD)|LPvwoqllmjaC7aQE@FX0~9XD(uY%Wl! zaguOI0f4NQ=WtHq{tbZ_lpK3%5{3kCUJ%6qE_T!x#YnP^elhW;4w^ zE=tTQJmGJ1h*NDiTALys_2^uom+7P&kL?{rsgrqkfjabpQz;BRNmzG-cg3iPdzsAk}UM|& zOu6VEBL?68duEbq5p}Wye}I7(`E+2I1IYae={q)eHcu{|md8gXZeAnHgQ((Y1LOer zgRX)DEaA2{034BwLUNqi@CIex!o77FYSof?WhFiI7AE&!vmxxIBWJOJkppj70*5Y6 z*zc(6;YCrly7PLin;lHf@~ZqdO?dSneDVh3YgP~5nCClCA8T@HzB4}{Uz7pSKQ{k< zY1Yedi`AF#+%O)vcOlpJ)$`(W4%ycY3pFoa?f#VQmWEMHMdGRV-E8yO&)G>iT_e|~ z{%_k)Hs?0q+Q8-%u8+Kz)@`5)HV^6hkNkb!oYTM80{)73L+}~$dba_?Vr)dbzA!2$ zgV{wh&8q=aPjKRauo|XlMni-5I>%eu@oXww7Fd`;qM~VX%9o07u@6d(fm`{|_#<#J z4gq6^`1Wak?`VJfWv{`lN8hg9pL!R=pWvTnAvSx>dA@^!G0Ct4z)jT)cWgHQ$7i5+Px1kBp4H7Q3PoE(G!=GJ zo>hjE4*i9It-aw&0EoFuK_q@pOYwZ;x=XS1dZ~q|gzZ|Hq}F1=488simg=q!So@88 zeRK70XCgmt+WF2>eGi~1lNbXoJP$}DA$r(MWb9QS^o0)ckA|#?+pP} zsu$jD4*{{%+btoWtMbNxL+mrpdYRV(rSy)OYF)V#kk>8@vfy*aMQ^74~Fh zk@pS-i#tDg??48)9@DM>8|ceTg{bBBH8>2RU*&^CdxPORwY%#q%H;x)@2B+ba^Y zSf$aU01kO*8w2uC1s#*dMyM@4q4W{jLm3T$P~_lmjnvT7855;HvJ+$%v(dDKG=Ve& z%ub2Z9#6^|EsnN?E3}YWm-)mz7*Fa!Q4AZ$>Y$196h1G{&S8JeD9Mf4!o-plxvGEW zYOq-_HUoq9LdQxKYzFBHPv%up5}y_VTvSTb&v9|dE=snR2gTwT1DVCqFNgP$c@Q6o zbr7-L?EhTsT-`tX_(* z;Jlzd6MdT)LuzT!G^sg^YaH!@yH+!Op#k=6Qsh&0&F1kHJU)T-jNH7~GShV&$^S+v zRDSvFq)Ii99GpJo3#$jlYm}{xn9EzFt}j4ZU?n>|+CMnjKmJ!wR>c9l{J7ZtpRL3ssN8F zz@rNA-Kqdvo(`~e10`VVUbTR&holB<-JTw>HAfHFnxh9qS5Be}4C)aW4xC)w*x2lu zKYAOz&0cSjLXZIKDFq?)Q}e%G@JH`1)Pt=#>cQ4L^4-x`iRTV5wd??_kKM8E%=ongkeG~3?1zFit+l_K6KAPtr?$){pXrZ)?I0>4=p z5ZBp~-k*3_SRgyU$wUGdq*Xdevk$0PUy)#TUZ;h@$&DHJAY2-{Y_34AvXR#OI|84b zBwSY;9Vn0ueH9QyX^=n$Uno&hF&w(#qJT-~5KTZeO|b1vdQoIpoo6vM?3ZoBkkHfv zm8r2xyJHy3Ev6cQqkUs|rP0gH{q|;of;FFukJQ{?DWBR@AJcsC%~~qQi$`uScMZ)b z%mr0a{*aorvWb&h{vj;BpO3 zA99T2san!lHb)&VKeE(072k>HmY4&vN5ypBnr-;4)C|9Rd{Xb4Vku7LGDmlsU1j{n zTXBf-O?Z`WmSl>d_U2^cH|+UCpr_4&!sxJze}Jm**iM#4_KFjDAblHMCm zSc!D5h&Tq{v7OOgsY+h!M4QrD6Js6SiJ6n6vaOYYhCy=pRcu2lh9aYKaD2 zF8B>4a%Br>$Jtlpu;Kb$d)m2JLrbIoa7yCc)U-sOtm_v+glI}o8!08RkNEFekD+Dn ztVk!Ztj+2Nm$sQwis4`JcfCwMMV0DKRCfmmu=FUI*;0%)f3g=I=3gy2-l|MvHW9}J z5?C1i3w0O|+jK1s{Yy~FpFAC(L4}N^Au;HD)-inVG?_F9qvkIZJuy#K>*aO6NDB(5 zKxG=;S7;Pmi@9%(jH-UP&JW@LlWAVXw)p?%!4+t<_FzT6?CcuT>t$yNWesdErmH-g zs==`{R8eGV>~LJ4L5w%`*LZIzBz}eFYwigDKw|&GmIO_kc!u;Lc>4%;Tk_iSKZott z>PvV0vODbQHfN((N6S@uSQu3}ogRXA4asx6&)erGzlj!I$@Os_P zo884^bxYC75A_mI%Z89}SPIeWj?>~jshF0WzDGEX58u{cw7HMPWBHgCa!iA~-)7ds z9AB5tNEAU#Y6hm*6}<*Ar@#fv=xR_nY${4~3+DogPYcN9mlfB|6C)p2hfkaPQU>WE zog0^3QX}RpOiWA@I5X5bLTZH@71W81{(!lDh?UJ|6alwqAdoPW*@Ue3VNlWW8~9e2&>XH&M38^;SEOdev#*3 z4VoEX!-wKne;@=9Hn0gJ!R)~M>YhM(k+y6aIR#&M%KKS$Qd7;K|I@Rg7=C5fA z2_);%bK&%%*eU#$T$odWLwGOW{9?SunZ&4^iykRPx`lH_Y9dttRNT%ovU>pwc+{Pk z(k}4vs2d_|Dk8kh1?2wFRmnawBq^ke?}}K4tq!)L&Eq@KV}uUfbr}aL1u4i^z9>Ui zx!#m?Mo#Ha_&wQ@^MY?TlEchiOG;o|c9t3w%^zGNa?u3x&)~HS{>A1A5lapj;Nim>e?bWNf3*Ox&i{JC7 zGz+-ME!g{AwF!0CRZc!N9I=0gk?A;6rTSbv`tcDkoslS_#K;%v`UbLmBv$)@_mSok zseVoh1irweMY@nTes3|DnWkoHN*kmF9jL05CD~{`8PwA!KSfju7SAc_QLKu}I5g(IL)GTZC&ayiSK*>IK{Me`6G$ClVrD(I2B%Ay_>8gVVM8Cksp zkg`mQ;s)x1Ww4iaOu3aRaF?-=gAaN#ukpQN4XzGpHuTIbGK?T$CnBMt?PSTG?!-lL9NL8>H^P{95;oNNAc9zJdQ&A5> zIUyRjH>shjr10Lq3N%kR9yojAO@HJj!hNcE zUj=X>ArH9aAfF1{g*S!-*W8D_fs3)-2dg<(!2y(N)Jf@px;_?p=L%sbxF!W^8x)JB zGliKbl!&szPp8%T3N^4H?Dg#5S6V8ekv8J7K6;ufoJ?5zRxc)eD*@xERX|C*ZsP|vZ8^{#*) zp}{LCrHzl4*I+r-Z}dQu8Rgji1giWeAxf1;HvBBqFj%IGpO=f+vy}IfeV2MCmt?FhQuZ4+*cMeH^7QxzJ_A10A^rPg{#HFF4Tj^<(Pp}Q zx6D`Tcfe+Ti$RetmP_BJVIkbw^WZG^i=3TGpks8#I4Ad#0F}sLayTAL(A=T{KRjNm zc`EVquBBwiv#wNl%_@vaN|#U!#YrakdV@H34+j`)FGUjfo;>;KyMrb;?!$kdJjVY% z-J_d;&^3&yrvw@s%mq5fB57_}N4E2gqk*KE#eA1@KiA?pV!n++WgNo{&IGq7CEPam z+17M~YcX&wuG{>0t5VwXKqVuq`yMf~j#RSh-8pL6@Cu^RGrShN0{-K30%vY@A4(0_ z=1KNTZW*G?vu>99A|W*#Q8h)-TGBX8-lrYB7e^_?{cN^%0qcSr=m^iEH9$VkW~oP` zB;qOn5tR&9nYo2PHphd2RiVbVO404Skldx_EPyXD`k}*v;WWFv%qDQs{Y(8NOvS8X z1CY6J-#X7{D0^&@cC3wpkS{m0078LlgUqQM2(U;g`0`5DUp6IN3IZZ4VK4p7!Xu(T zK833d*YZx$+uMKdoxKCvf&1`pRh|7--jyWZtRai1m@#1&B%Ll)T|`Tt>5WF%l~^j# zV21`5Bld9PQphY`NG5xcPehh`t-ocq7uZ)vheBgSq^_Lv+)CCjOlJ zP_;jImWt-So;K7BHeW;OpBqs)df@^H_cAI zG73n-8rnL6Dz;M#TrLlp1NgJy2Z;goujYRMayZ`QYVo#{UGXM}bxNB%lqKAeWOcqcodw*zzbTs2e6pEig?1NkEndU40?0-;Of8ESMu@=>%NeMpT9NS(QF7S9^xE{2 zHoH9J3Yvc6NFWO#r4q)ydL{;Qv#H_lJxKs>E>!*lmyNbKbS|^2FB$w;svLBO^WyK(r4(e$oP#=(&Fd%x9`SN&C#O`vj z7Uesg5Fovybxz@F&HnqiKZ;AR7;K-VIWK!koQ0{SkdxvdIRRf9%7)iKtY1sc9$Xd| z60xQ?kQT}`75_Ct@Wm{jyf2#L&e2Wl6GAg!$jUm@S z&(>do`50z;b!Y~dHw*H?!vp`1Jj^w;foCpCvu_{4l2r(hS^1HtpGE;fry4EQCu!lX zbsA}O6f>7y265-)9%IO}J}iiF5}SQQ;jIG)GcSQt=h=rA<0&Owxb!pWu7N(RrCKFZ zspBSAGpFsOvCqSx&%k%e4ZHf z98KfDF50sqKVS{qP{inr7s~Z>O>@Sh?R*_~h|F{*+}aw@3giwiIZWFac4LX=fiQAKdmRw?CwUE!{-P+lLnmn6Uy zyf=d=qze!Z1ax8maIs$p2a9bQ4FqD+Fks#2R_kk+xmg%+3T?=>yt_nf&Np5a(~Uf0 zd5S8of!6_f3MVtTG=Y6^&kVEzTiJ)y-py=-V{<%+VpKD>U>bU}pAK9SJhMcjB<)?m zOC4)@d*oDpnam2ZrmZ&V0jHh1028IZB}f{J%601;1IRpRfBum?HpWYk%SL{v?m?{b z`M(|a8|{Mc&l&+Qh5q-SZ)Q@qq8iZ4!Dx(br(1x@-?joAoj-rx`=x>0dvj?{^tKL= zG}s7fIR`F-@D3e+&>eqp9YZ-`#J*ihg``kTFnMQ4Sn^{{zwP!C;y(VJKM}-p;7e3w z;G>z#?_&E{DB^8n#8J8kK*a>*pF-$QA@rvZ`eznGnsEhUNVChgLd(C^0dTGSSd#Qc zp9Mov-|9$YFkjLE|MrO&p=`RenggVA$US!<&e)uU&N>%Dw0P~p_@XIuXvBrvx6MN} z1OKww{@Z4iR@^g6KR47hqkJKN&A|4SuUCNC`sm`_G0I?(xx3Hc{e&TK2HhE*{?PI@ z(s6yr&aNR3r3^Swj+v5UC z4%A4{+tztG_Kd{<o&w3O5aV_QBCgy^`DSk!v#R z0c3DYW)Ko5#Xd-?7pPWZR&_m9N{AiPuw-Lu^}#>z14Eg=(DP*JdsTCOsqVL*opg^I zZhNhqGcye>JW&vxLBHSaj17>ESAxQU>>%AUasjO4DD|N2MdqbPTP0P~4K<>J74rH~ zJ+C)ES394TQB%>GIlRkXG!33Q{$%KXGW0(g`kxHFmZ3X#;xlynJ#eBb_bd5QePcd+ zqn?oL*0-A9Eb?#EbCKacmD4#J4o=U;`e}#Ar~IIUy!U>8fN9_74|Y7o+6r?n6iVqc zL&L+0Vm>i17}UD>q!I7CMix$nCd`p6KX=*h?EJ+a%)M8oV!hPMvSQEgA4!KT$*Dgu z%*=s^Hym{rds=<)ZhtZxT55*eQSGDzdyCT^@2;yzHKy~86G~Z zZS)ACYGA~5?-+8k#z?*Yw_y>7kOma)(WZ7EB$H7(;T?y3iG}STLpaVOUWg# zav1wA%%Ds($eV}doj|J9yZ_c^HEF(mH0+)Z#@#{xqz?kDXI&JM4T=;!h%)bN|wp%MrV8d}AY#j>iwrN8% z)K{*{13Hq#kzCw*Q99u*N+t9%Gt>i6DUBTT3}8nbW8n>k`zz<44x7@JTfrJhuaJLg zWR~*r@kgm58pom6G@>ZEf}wg@cy0ut{*nugH2?U0UBqoEC+5St4JH;+rxXUzQ^Ve-~5!v2v1)|X_#PZY|R@@9*7ITpbq}KXtovA6h}#IsC1lI4s8;2&E3O_}fPI@s$l<;u zbNQo$wQR$A^&O@b+nVd`jBk3D0n0(g!E{J;hOC*SIq2A*ox>um2e4)I#Zmj`Zl^mO z9|hD69qxcomnc~}3*d^g0jec>AV&^tez8s&t{6g!)VXor16g!VCIYNx(Ck1! zD_ot5uvhGaluF$c2m}(ZDWOwrmXNl?i5+ziuBie|5q9Rwd}hnIiTUR`K_w_#HK(iW z1J$Q1)|3O?ugd6j2Q`@=tu)3&pO|Vl#7f!^@k}yhsXFo)L0#iinf>X`*o_ji}0Wb(6+>j5@Q6 zy#BBXh=bodQo5NP*PM4Xm)LY(0%nL$= zJq{T2RT!j{%`6NpS(jv@d!wKw5;g-(DbsHml#Nq-vM9B|G=;<}^lKC>%yyb3v;3-g zk$)Kz3J$zttkj9p6XXLl#rb`tM$C#fO~t1-)=T^}Wd&09+v_g8Y^e;C%pZ?`)cVGIqRD8a?S|!sm8S{6@ zS;j4@4hAQ6J;rk!_Gh}bWoR@5llLp0>{coV)Xt{Xx6}M{LxU6|lV)%|TnED-r2vz? z*es?qNqFdM9Bx0fsjSP9rHKqA!r2-z4F5IR_<>8kKZ;LfNd`X#c%PQeRGce`n?&RjwdEbteOJ^uAIX&vn8!j zHEE3$X?4gQW>@MO)lir6tobAYa}RGS{{}m~Fyo3bz@3!OLUB36b5<-VX|tw5P!JUDvaN{`0BE?gRj9}X{W*N`FPqhW-TY;MNmqBnA} zQJ|n}SJLl3etcxs_V~%s({GQy`~K*Me+9HXetg*O96o+>`1ISu@4i3$;a_8uWn~xU ztd0~+&$RF~+*oD^``P(fZqsl**Gf(4Yz|Wz?tu--_c5y>)8SAtYzZ0a(+?@){Qx0`tZujYUFI&+0V^ z31kkjQDpu@P{qWGNR1^MVM6yie>jULZ3b>nCix~-#X#Beg zD;?#mi{(*pS?WWuvY0W<`^mS5MduXh6_LjTg^glSIFa>`Y1{UV_dCE6TT`m7u3|Cu zqd;V|g;eU&<#hO!8H#E_RSiQ|*59Vkwa#n@AwQdX5feNEY~_ZF?jXh8P8MIQSp%uX z8?Y2a5i2BO55}p0g98-)npo!%UKyHP@qw?s$QQTsd}IFRHbJ`^Cq=D5hqY%|q{x#8fwV5M zc&EKcp?;9P&En4NF){D8VzjM~lxJ6i2hZ;C=kD-GoVkzS^=#KVV*OqRzb&$fV$uHC zTex%uM(p{Eu7~FA!G!s{1A^rT7MuA6NSsJ*Kj&ZWGM>>RF$GvQEh-qwZ_eQD9gPcJ zmn=Hhu%4GLM8)hQKD8*c%9>vG6&WZ8l*rgoig=&gaeUr!Z}@t4pd4(Y5IH0iZf3Te zXPhV`g;BIW&Dq>Fqq_{j2$T^Gr~@h9i!X2<$nnafi`avm_mg|G+kRWn&vublyDD{t9Tn>L zonK2_*4Y|$F;Q6u^2ID$q>>j!J>EsLo#@v&QHd9|$d+e4dTeXO@S&MxtUQJy7s#lNr*m@PxvfH0ZkP8@gtywsvrLP4%x;c;9o8ZQ485 z@-8V#!24jYgCkHz_@j!lvERTMbHr&ptPBDV9sZ$JxxJdeHNjbJpnO59g!MIa06pH8 zOT#vDaM3GwrpEZ3-t}_>J4J6Q7>ek}%V1SuGf=KqXa}$%C?Nq;y>>*5NUoTfLqubl zWc;-1VRT%`f;0g}d5~`4m{4H681pfzW`I?8kIJ#4`np4h!@l|DZ58z2aBpt@;k>O? zy-a;Pz0HV7A+O^XJBuEDR0gM(fByvPuz^f9#8HZ2-HkRXK>uC{!)8#n1)HiSjD;84 z$G!6r=A;-mk16Rv*er;F3^=0l369`Z6QdWHDzZY#f*|NAPLW}D)- z$}zr%4AJ9lt@kc=r%IOG68$lA|6Nls@8WXL*599Lxm3 zbU+gYy?8Y|sEi=rHlIP{?+@QK)5Rp8h8H(Mv-dW@bYL0P$)J6V(NHiQ`S7ay=E#io zTNK>a;7c-=%+4FlLr@8e1|nBHBl}86AS&Q3Nu0TWFhHVfU_x6Tec00Rib3ZaM&6s2~X`Q_hzz+@!s*mV$D{Q7#8Z?3LE%gg3)uG0eJZOSdD$vSCXqEAi! zfgjW56~|ETas~?8I{g?N5}$nZnf7Tqa!d5Pew}L~j~R6bi#D--VW07=c`juCWQUD& znCk=g=SjQEN%MU8;#6II)^>F4`%H(e!{xne#G2nkp(n@c zKu-)0vN=$AnB*8zU@1JYtg|`2us}13VQU%=kr$a!)Y8k#vg?dbH=eHQQ+4F91)aa{ zVXG5uK^rUEKL2_9Q^W;_t`X{9frv zk}Se%N=p%k&u~1+w1%nH*Qn4~cPq}n?;kWAX5>SS zoE)Ty(#b($-Rhwjb>=QVN>vQ{Ri2*gXtj=vMwIHpP!)8MFAj-4l{au__wS0?S=S0Y zm=)m**1=+3$~9a)wS&0xPOC}T6!edF>r|>$&ip}1;WOyR-eoE}#L@vG&Ow1>48aqf z_wJ%rhqpz|^^4F>>2PJA5Wg_4>|Q#nt+j#{|j< z>o`|R6#V(qM9OH;c{SQ1Q*fC74nn28n6E2U^!Q&ytXR6Hk>u`KAvdUzq*?ziLa?;6 zCDA}+_vK^*4g1xE0}b~%r2}F1bBPC<-)EB#<;ne_1O#F0vq^|;*!n~f5d_@;e0Ywl zu_T6#bS;j^d0;-LUwD7kL5qWB>0LJ*;rGbeIq;wCTf(g;*XiWF$}FCu&0N1#+81BW zBv}!s!olgBCD!I%!?<)I9u9an;sN|#VW(1A8E_qT917e*9clx|Q1`OxFcOK)4cBvl zHUXgAaKq@|N7o2`ICo!;PJAWAY@&y)+-R?Jl8Hq~M9 z5Sp`g`G0kiUSuPgP2=t;>;N;pWB#IqtqVl~dCrv$v{1PknII*o*reffBOvaJCAGvo4i)V##Ss{972AVIwNY?G4_QAYvGE`C*m?vqjkg z5DnJkb!ysR9nJ`Zc`_{pe+7KNk6#OTRm8|r0`PTgEpFI48*!(I!b7$O*4GLA z)+3hOW9waG$z4!V2J@a}j_ZZqgDSZhm7n||lu;wvt3z?aMiP_znc1(7-~F5%IN5?R zKlqm@zLIALqF$s<@)Tk;4uErN)kJILsxHk@3U_? z`9CKWUd>$OWKn;hTg{sF#;GIj7d^m4~FVXe=r`lJFmPi|27!;RU}Kx`Wk1!jYe3K z(GJ*Loj_^Wb$XTB+B7Q+t$zXlzkN#jl(T^w2wv8RwObcSq5nA(*b_mQCkd>qey`RuAk34qQ=~45w zHu90L-jC?Prz$ckwUB;c5@u!rrtZrGO8dYWctZYvH)NhhWH$?_MXaDmZUV^Sy;)Xm zozO7}ok`4@&HO)G?;So@A=a6;p?G%+DtSSh>~)t@g8PsrW|BS}C;+OW2u;fk%CIL4 zvuY*g#L*&D57Al)7(0U@OdxvvOC`|+RYq5m^^(^AV`YeYYLLG{0H+FskT>L`{r>WDu8#PhGkReN?}``KUR}vC7$LNMErA>R~KKO%nfj z0bMZ)VTIm%JP#>~AwK_n_bH&umi(Vu$Z<-em*j?h03{2Et4=mpyL6e)vdOJYNqsgx0Gzn+t`P?YB#qA)0ae1zHMlP#S zA#$OcHen~z|1kRPT+*3YdV~h8rj5UW>d+oXuO8OuYOx)qK>_y9dGE{|oPWzl&CAV# z4*PwE>KaM;?lk#0o-FNvTU0P>@v79qY6t7FB*(jkp^ur-gw|G0Ti{mU!^^9%+>+?5 z8i_rgcwv2Sq8(pdglkI10m7O`2iXfsueE%L2ESTr!0C@bF;l<+Wy6`b3h!N_Tq zr<=AtmVmt>pUN@*wmVEXicJ9t=dHta%AfPO^I&{b;-9Hhkg;9D>!Sh`CmLk7W9vNNi zH{v>@s&a+>cX=?`X~XUsLg`XKsx1qjPCx`}GZXPRSE4}$-M1>%=RJ^EoW|bGY?n_t zuwlm2nsmlg)hW8Y^b@7(s!AMR{Sv{dd<0@`v9hXx{P$#Ax2(#uqn1jL2}_2#Ko|sW zEv?x6^=>l$07XE$znt1tSHyz*e+{!f4;8DhP>*6V5N@?s#5u+28m-q=tO9-xV^K!# zICWPmvmv9&3L}kkQ1ZcjQzEqWWZXn5hVfWR^hs-X?qAtmSw8Aim8wYV7)wbJ2ZhCf zS8+TS;WJ<2rH+4zaUH}#neE^PRq`F|^p#%faln^ZSTwfu^Bw5L;L7xvri(jM3=H%~ zp%{LIxEIwR9?DdM+f+$4*y(Hecc}E*75*Kn#V2H$9L@3Om(=IK^+vl(j>$^!znk2W z6!%lgB`F(g>qK~de;5A&|^}qk$|N7tN zzyD8Qf1(zoG?xs~ik60CC7>Le?(_2`n{8I~26e38pNkzchR6)Qu2;CVZ}>v3CM;Kx zrG8nsNwT#?SImGSyk(ZnGc+TELSv-BZIj$O&>z~MKr62|fm1}TYSbu$(ha&p!`hse){RBJ$#j1rFI99&=BpK$iWfF+7FZ2O>%2(1P@DKAMYK|D=3>a zlQs3g9;6vt4q^=#Jwbz#4!nE z^^D^3{4fB>7a@{b_|QaIRpjw7}=iqJw`fxwc9TYI85jH zhsq1EYti6_W#ZVi_?!pst7ob!RoY1+q)`#35T(PKwMBNFu~)tE-1RG^<^71c9-`@Z z@uxL z`BfM%I_!_~zDNCqoa`!;X1CsMH^Tp6+amu=>i=qTOXF3V9!7a zeuFfkMUhW3?O*shTTCGZZC|ESsA+bh>}JxNSDtYC zsnOsjJDhN8Sw7)(e(KQZs&`;`B(B*-*G9P!MIue7K%vSe#QvADd1)HqMZGPP12?8$ zDryTbP4K#ke6yOQ(II);aLahe5w>>w6=;3j@p-#<(mggEhof%eoU@0(>7Y`_Hb%JL?=9W)u_>%_8x#Yp@Bv#Po7EAvm2h{ezu4Qn6E>oyU1TBcFN*S_kHq0^NF@?laPT)$eXr2to-3I*xVP6ON1m zQw?ZCAfNyjBh#;oGZ9Dq8gUa;AW1)hAvQ>_a&w){B3_~sU^Ee`*O1YfOII=`n0)ar`jKPx(c|`_$Y&e$8(e_Rd4_W>uCt{@PpBfm zM}0SC?i@o=$(~{b4a)q6JsWQyb^1pWjC>v(Vesb>;v-zinqeVmtHA zz46)wboxfp>T8DOfoA*Cc}!;6v+0Oc`03svU!;2>k_N#LA#eSRBc0a`WtsNp8?Y0M zr-Z@h8)P&NMsZT+^9^zmjNzo$XIuypd$1NQ8Fv{4^SwcfN#RwI|v0PJ=KzOTjE z`aTdUYcu3R;?Q}vMh{~Y*G}t$zpZcT4p3MV18$0B^Isr$pu) z)@LnGS)+1SoRyZPfyDG;GuuNo+e1)jLyb6`zWCCBER6Zlm<8}<6a=G~%);&<<~(^* z4P{Ubv>dU~<**(yk|X<7*$vFBre&|Zm3Q>w{Eu>+^DuZHGhocw#*`Kd zDV+|C;=+HT2qyZX+h@BqS&k&+sK&~}eo11H8n2Q|(~_@Co>|KKsnHm27B(n=e*(S4 ztZZy<6liRNi;5TxjhKjlDH}iCb+4w51u^mNv@to^T!*TiV_3D z>77Xe3=#<5QcA&xm)WX7Z$)dil6xTCKh58ZJFeKKGc)26jj0Rv5T-XnoE4p~C_(AC zNYAZ3Sqtb3&nqfJ7o})%g|N1Ql-~e9F1&y1BgzYjtk$M)I`y}&q9w}hWVM2m465h_ z`VczTg`Kh|QRsFun`~x@^^zhBgz`+g$mmU*a^_SJ4Rf?aF&NBW1d5t{v^VHl!qDi{ zR+veVcc6fg8HmnZtPKyD)3^o#rr^ zQX%7tGdsb=tU-n2^gr z78oMysogF24d=oIZIG;a1C;>}G{{-HxH8%)p9x2ea0&4QHu+ORk~jr?Qbo!6~6HypKT;2(%CqZ0-3N%?_pbh7oY`sb&RdDMvh^<;?|Mc_lf3HB{{93-#xs2HvHDRjGiL4X(bk&baR>s}BLiPJ_Gz*EuN$rH0e?u%CW> z`oy;z#uiAptZ?>^=N*kJa9Sh3_9}HFSEfb5>32B|FH>5Do$|L&w@(=M+P}5B9D%~c zF&i5zMo~m(g);~`GchPnOt$u=mswnK)Z7yS+dF9P5si`Y76@&x6rW&QJ2gPo#t9wQ zp6b9DLTy0K82hngoJ&%JmkI0!TtO1xYP=F~T+u-VY?h~nabQ_?i~WL4wA4FD>WR-q zNNOx_CE5+_#~(~D6=9ibDbRJ&B+$CYlY@d9;!(54Dl4Cn1=_~K7 zI%Rx*tQt)UnjL1EZ!Tt5Q=(*l6j9wG@$Tw?xh-}N6Ny!LrYZV%VYv=YK}@MlS-nPF zQKdQA?RCBe?_)RDNwQ2X$aPDkShj#4Fb&COy`&2(qA(cOMxDz-qqsA|rO^n^7NGEp zDonA7pvf;_^@&q`4c|4RU_92YX%Bt)Y?^#I7>yg+Fum`iZM?m(OE;Ip?MFr|l)aBJZ?wEnFtZtkv#O1oGM3 zzN~AkPF(5P6@3epH!9b+-PNwhkV+ zM#@&+T(2Bo3bp5-ts(##LwpN>pVdl zaeT4Kk^;&&t{I6-f174gRA#Ql`@s4}qWyWvLY$+K#^aGpc{CoJH5v^&3)moc>xIWe zG$&5ER~JH!-;D?Fy1(?sjmEEw!yW&SpX%MjCoxib{P=ZohSz<3G=)7QM+HdVm@gx| z7W(Wyw_g{uyj~wx#R*e|R|kMwAp+aOF>Ly{%ZSDqSC_Tf8^COFtQBn{*w zo&h2%t0ofERG!njpMStvnGt`$5zpL+4luq)Ow#3=K@~nMjy5u&o|6pH^b|sFHQNz_ zoo83qYr67SoPw(6^_ItF`f5-xc`u$s*~0u2g%8U-GyaO+rHWg#j5*I3Xj!&!WXNK< zWe2hSbJJn;(r%!1%P%86#U}=0dKpH$)9Ie!{_E7*4>m^_)QSHIfQeNK^8X8hsck+ zc_|4Qn+6B_O#JL;M>$ww?xiOtzQ%^@kghv z-<`O4XWi7S6vrerbrCns%(Y1LcZ+$a)Sq z3J}ERs7By^Fh<)BAsy1-r*K<2CR zs`lq+)Vgs_X2E^lQgFT^8@+1${QLx5+MaJ_GYj?qY#tsq|1TdhAk1(mpvDKSCzoOb zl%sTdD(uTBH|^QXXGUP|()M?}?d5@)P-!imWd?7BurF`~e_f0qEA|GY+H=s`uhmb| z5gkkx#D*XxP4jGq^}Qhfjp5Q}fc<02l!*Llaoa2j--54I?v)-bA`a$5(SCUK-9BJk zc%Vj+wGpF|Nl&!OWF2OvGPp|@th*`r=Z4F^>$Llw?ui`*j0RM$Hj&6rNJ4dY;GQsz zFf`_%5xEGuz*(>VB2*oiy}N7H?)Poh%tV@gdDU5YwB1d0F1x7hJ~zStusagY+(1J@ z{e1n7ox#cZY5(1mMxzH#{f_ynAB}7y7o6tLS$b3Y`CGGbnNiK?3h6f?CfR@kX6BI) z(^F^DwPYr_JC}q`&)$s9e=T?O%Ds>n{+XN{%pO_J7w~fjhq+!Y6lRE(Fvf#1IOh_N zu7u=z36F17vT^43V@K~D7j~wGKU0Wkvx}ALv<(AicKsE-YgT?1th)?AF8!1S!L#+^ zCs20jx0~w}IjL{t8dzpvnCKaM)TsU(+8iVWS1A|7mQ}Lpu=xlQaZKhMzFBNCEcK*# z(9$qSumB=G`g3EE_lQg8*nEC)Wx**R!!D?#DP5byQSI8?&t|vgO86ekP&g$YwhhoE z0}4*ZzM0H!N%I8{NxF?SL2_b(7;gf$j26tqpU2upnm`@e3CAx2#C)#&a8~%1g_e?J zl|h!A%c_~mb5<}ly;&3b`!&!Ys*n?;Vl)L|OvRhJcEhlWEgTkI*34;n5FT0&rmXF>?Up9(G1(Y>Yw zmxYV}O+K6ftRa z)*g)j31?>F@(u2&@C^(o^38Cp^OG@1yasBS0I^`Ds@3f6w%p*%d#hfEyK2rS%bfr{ zfv2GG03q`XLR%9g$FX6BC62j)nYB<{tOS~oENw~Vy@+r(H$A2 zJ^l8(?|=B$AAf4tztQ>SEf@|u?_PC>eWPJEUV+G-@nQB_oOVwK!#8lRF-q;NIwz5~ z=DuKbL$k5%{-|dbb8f^bX<4XJbCy46kn%b|@11l8HF58=B^L6$&ND#X}dTp2qbHn<6_Z;t@>-(So zWAxhbSo{+btzO2@#GacEMh~$k=BmeS5e?kG;?U>)Uf*0#Pfq;tJ!76x^~heTr}Chv8fL-; ztNuzfV+Judsk1@fTvy(iX_HONVJmjJD|;PxN1b8sY}^}w`rYGcWou^n_VJT+A@SQY zd}U?Sw<23ha(j9uQHh7vm@vmyp@JtxYb0*PmeD!s!QU#DK^LdWUUkdBTE#Ym1YfSD z2$}oLF)g-emL%-*$|lIVb@uvCT{aa{tXej)5r+DE4^6x~J%S29L5_wn(R^Dqq-v)hLi@O+#=OPqfMq|DS!(q^6ImXa;Y z+SFC;ZPiO2&LxB*GL|AHe9Okql2OaGrza)1JE(;Fjt!!=vR=j+7Z2cBfAjIc3^-{H zM$KOi3~!r(3XTw;uhR6{=s14x>UP1;+qKg!bhhk50J3Hmf}Cad*o9!Mt-C<&cgA{? z{V6sd1+%ZaCk7c^PjOiJwIvtQ|p@bW7(4vvq1}k z`1X~dw7IbA*X^MZhcCQ7l&TO!o0+NUMRPmu4SmRDJ^;1PO`-|L1k)Hau{VD6A-W+1 z^F8YhpAUwo!D<1AWMMsH3o9)S-&z8oHqZ^bVLN(_40i~CK4+Cd=>bo?cIP7ZSsHNFCIF%cE_#}~NpUNPGQVKBZ@#k7o(5B5 zKPu3S3nubscO3C`dQmZ;fmJ`AuT}N>&j;_$hbPqZdc9sAJ$h86vuyFcXyvP`N0H`d z=g&^y0eKkVZ+v$yYgQw8b~_*Qb<+H4W7?1hrK2?L{@ZzP*rk(56iy4JtICkFx)s{_ zCpYY*`fPdt&2{P*ceLhMxA-sZArIN!^5|J{=(j|s%s zhB81O^d3c1`03u*qiY!_2zn`ce?QzpRD{ zC)?d*aYuWfD8A_|AkumMc^o9fbmq(5ChhA=XSq zn2Qz%_nsZTCfm7vzR985d5@_nY`trrkSfXA0{V!JHO&f}shFU4X0O57vz)zh)Q>g- z$F4(wdvDo3sstR(wQ0!AzrEfG+GG0nQ0 zS#vSE(;0P%!uaipmt5;IN1YkHVqUyw-7&m5zA$RiaCpwnd_0XkoX0G`YE6^%o=ul| zvC7}ec|9HVlwD5z(F8y~oBCYKNVa{W7h-r>$DrcKkils0VN)?8bKR6Hpi^s|hTsf* z^vt412+6gsE!?m04yVf?&PcV z0`k9600|KvJP?tFt0WuxGO)|c#b&)`2Y&9p)*kbx?f$u$>zjkx71}yd1fnIB+3R$b zEweZB4sy(rMxMMga{9#l5>8Y*k=JUz%x}^UsGxjL?dL1H43+5@QB9B&SsLKnn{wu$-c>xqNj%fRshCK0Nfe17I^hzwjzG zchN~2HED>$SZv;eh2lEj%%);N*Sme7PDCX_wh&5kCq5V_6vc%88qgbCUu)^jxu1S9 zdh=)c$@IqH%Je27J^$V4O`_=TOK%DxUy$B>uA%5{F!Dqd2rJK-ncv^RX9IS)*euCo zyJ%VC5=!rmxlzC9>RaH9?MG5eir=5;!FzgnX^!`SNH-R-I8VK3bX_<6gO^TMo77vj(P8A~ zVdK|A+c%_yT1}PHJ>!UN%dij&lBhHBgr>}f?exKHWT{eP%&$WdTI^+P8i&yB#C)Xc zM{~c2X_hz>)shOYag2f&GP6#K_u#I3+u{d?m%Wo?d|U61M%s?!B3>k5(XiO-Y-V5R zTl^s0g-8Cey+B)4sEgf@aM9q{-2Y3_S4HlM5(rM+!E{f)spJm*D567DI+~yAriUwj@C{R*3VV(FJ8|-$>l< zFNXPy$Oy}Kx*BHy=c?BV*Q2;_R*2D*PYDC&k3h^!I(nyHcb~b9uHI?S+ASLmeeZ@E z9}EH!eFOZnJ1@IpDTC~v_VVgjp;POlM)^`awj?HX{p^99W>=Z{Cbd!^JsPq?o%7n3 z8-~j)ckuI>h7K3ja}AjK+C`xS6EH`5Q>^oO_BRaD724hh7t8cx0*vH9T{F{_JsoCZ z@yCwVLm>{G3tXVX00_22 z`wp-Uw4pTqvcprWP>MW#s0!PE<;S*@F4=+y=Y4rt03vs$H6Yl_e6yIkW99+|T?c=j zI>6eL3@(I$p5Wc2+bp~f|jFj%4wTInEze&ElWwip) z7y}W$)I1NKUDiSTo+Sj09HS6gUJ?YOI1hma^gwTTI9K*?|3z3hVbAy^U*u$1_hQOZ<#*iCS zRQ5kRIe)=#lkzwzTe6&OuFUCUf*M=KzygZ1EUPv{7(80Fw^eY3cLW~nY_bPm2r+f&r~A= zjl-grS!5_fvbPQl+0UYbe7ILs) zEH&X3P;aRRtHNItD#+jdwR&}Kw*EM>$_P*0Z3N*MZh&g8v7bp=j|G-dB@=rUlI%g% zpw(&p6wn4}c~sXCk{~>p!Zq9!z&v;X<-b64B~qo8|a5~^oi$TYU%R)?6^Iq za7#ePa_U)~#Bvln5x)90a?eDVOO2hRA_Lk@I34x$72VTiEO)ZupOM#!$fR&NU9x|m zXEsHNB#SEnRI-X8n7C#{a}87+JGB~SrIaJ38`&!K+Zey&Gw$t76|nzrsSLS&XF+@( zZt+%igRs-^rRh#R*>*!2HyR+CtVMIX03ve$_w_qRO#o57rF$}X?eXFS?^h7Tz05OL zNI->ODfE~lm2y=_>$Zu(Nu{`{R?8~-%pFDu7gf|^&yS)fMa>y20wV)Nt_(5CkIb{cur1n;_%%N{ZwwG zb#COX5{S-r5T)A15D#;Bc-Z8~eoQOCDa`S`hxD0$`ImobLXh{Z+zFfA#TEM4!!MXK zBiM^~-Tn*kRP=Y`)b0rC2-wg)dRpZ*wrabhu7-37hTpQ{VE6^30?fd$QacgBVO8*n zw5EWKXloVYA+2e4(bg(7!p_9)Wo<9#AbC0QT0+M@S0g_iR;fgt#!w2GzrJ;@5J=&M5u8Wr8 z4ce*Ow-{xXI#;ZAr@oQZs#vH*uk=DnNydh$TpDhrTVHgFR13a-rV0*`D3e7LL?v}N zNP@JTCKLzs)M1`lO1}>8_cuipS5?p=d!fU%EHUYbEfw98R2cv7LWtvG`%OJ+1j8sp zIZ`4H#w|yT4p?_Eo77mV+4ul<$BP8;XE-E1D&UpgXinv+gJx%+OK>-8!X7HRsmZn} zAReC_?5mem%6vC_ZPeZ+0E3=;(b>aQ`Zhq`8?E_}Ozl-+dF&uL@ob{WW}Sn%1METzvRE%;(&e!DA4 zO(BXUEvPcfRrstME|DEk_-Zzi3;mGI@8Z}j(yF4jUNkcO;sCQ%74**qh-+iKNHHxt*YUdh&^Fk7Dr;Z|(6zz6p)HILLcLul z5wKX+?Mv?G<_V*4Lw})3v0q4C_1S&+UsZu@VGb;2)u7xY>GiT6xdD(kZu;MU-fde>~Q|AK`zF;GQ;|utf;5!&>VaHB_jW7S@g)PCS^B3M;YjyYT?%jJ! zT%5@~HJJ$ksjsV7uU_}{MmJ_eM0 zJBL{39CY5<-M{m11G|3zJNVxpx9=aAZ@d1%!Bz^dS4OX_jE=1o9;_5*R|7C(Pm!whvRqa!PYdu-&D(Z?%= zCo7{japc97!i$yBd0YS+>V-FWesTTUy_NiAeN8*qu7Ccx%?HKL-l<%C;@%lu8U1c$ z^dUkO;P(69wZ;xcJKHkZgULiD5{a~@ozA#(sDJp2o^Jii?BV#K!>t|hNPDhl@SA?t z%=o^Ex?B6E1z1Z#A+{oJe4|whkA3%rl%}4BmKRb;d zIBVli*{`f=TQqSf0{=A7@99hm|NQr^fv!GwyTo7$zMTQMjZUqMF04Ji>W%&=&yg(sYOd~Pp)s+Y1-Mq z?$uksZ-(XUYK=Z(7hq>^-`{CL{ySG5J?-9l`upE?q>`2~G9neg?++LDLTM_QCo@Ml~9@#F0G1G(WYCw8o7xTn9* z(ovsY?bzPc*X17|;Jj`;FHbQ_mWMx)m{l&%F(h&hcAe01>H5fZW#??N z_GBX4nfNe~JepvG)UiuizWS{sJYt>fkl3CURtj?n!&k}}u~bSKAVLEG{Ss|g^2N%v zmzB#ijH0dN-{8-gm5~BYDO{}F zdAT+}fwMedkLpVP)=K`$O8%5wZ4<3F0DeI*30TkgO5vQ^ckS(En66Ot!?PLZ^z1yIHZ$xD*X9^DzbHSu0;s1!-J7C3e$l<~AZX-$ zwvkttOXbmL&f(4j4s28(*k!Nn%{j4G4a@iY_DXAnUN-#ZccY=|8Wt;)Z`h=6{$}~{ zozW~2A(^Q zjHd}ZdX&~iP9u2qUWJPSZ?Q33%ShgaK(I#T9d%5CpdtT^JGrDU$TaInV&!iMj$eB}ue-s{jQ|E)RWUWFI|Q3EodUW7Mzx{Df~F6iiX zYNar40Jh4c@2lHnw1IUCd^1At)V?YM&DKaM8~0Zo2-uU2-S{TD@$Ln7a3eZtEY%1v z{FBYSK)kv>NRf|heoj>D0pg|qq^crelSe8fR?iB|U&g!tqAFOm-X(>QFyepSy}~He zDfa@y?@6Go*2kGHI>$REEHTtxzymplLihz-&I|k#m&QJU=RlN{r`L+%QH~${r z6|f+$ln07|>^uNyBwsmo+dcmRmp?Da?^m)~YhcYK$zFZ^7A0Ym zaPjGyJ@HC1q+1;=`GjeXFaB)4qR6hTMHWz#U7@l&(y9TVB zMnQ_Aiye+uy&5QlKCv$PQwO2U=D1I6m9ilFP2SxYA~u;6#A#&Q#yuv`t}dPTA-E?i zirpGpf|LI1;9vXjLAMjB!bQ>7W2m%Qm{`PxDFh{oMfx&|Dy#!0aqpcg-*_Gd6)WZ0 z=tRL}9KaCJ#iS0f%jyge$JPLfsAC-QT5fSlKcQNAEm%AJ%ec(-+eO&q?A`Lymx8Lo zFz&7Azl!TYs7weHBhpciVlPnus8T8kH`-+0Cq7oc5u1)rnY zCrF*U`+a4&wTBPZZWsNJ`EJ3uhR;*0NWXi3O~YyXLTbMNh6xz!ltoo_?nkyk_w^;z zMGArih^cd0@TaapZSb!K9p0&nZ0yyKOJFVVioSoJ(yu2IIY-w_NVsHlWK{o)!B#4{la;zJozAnto&ue{46 zd0o!u2L$(EL7duU{?-@XI=%hfUA2?$IeIL2@4Vb)M_!Lxq?uHTw7i*{-~`(5^b)Qx9P+#vF60&i2+PBb|=}fp3<+RV9Wx^?H;T6D>n^j4M+8q zE`?O`hKQ})HX?|KwZET|85-CH!7J26OZHm%<-oOrY=1?_z|Va8EqxzN!H1?PllWB_ z3)cegZ4MbuA$e6s*&Vj1CvXX1%hOdx+2ccYwR5;Qy4QaXJ*3e!wu(MiqGtF_*&A{V z^(Ag*@O`zee6jl7MnO{O#Y>gB()#Tmprihlhz54T=6`r}HoF?~(+ze{-*?a7@Q`2G z2~t5WI1`cZJ*P$FtEQ1eR9hb#xz`)CAKdH<qJCt{8H z(gPod_leE~*!raOQNB6vmWrz{&qyvA+3*G3NGJ_xv^M11eBuW3YIg(Ivq$Gn0jEd>q|#BRv7u?V^I6X@ zJC4RZ&3pN;O%1#E@n4%8-fx0m9Z$!#yJ7!c{!z(2{fKP|RO_G#&g;(=Ut%?V5*`!euZ&5I_&hW+`R~8^I&{8;fWHF>0zW7DtSE(iz{sCR$@Y|G%s@zMiXch7iEax&r3Dl$>Di-q2k(w#v`4Svu+zwH zKLl`27AmJ_!@#-6fP$`mC{JFf+e@?dZ(qCTZw0C3JkeHqnuLv3v`S%B9ZvS`4?DrdEgp^gqyU%IKZu1VC^B?sjIN>K z+^<`+NjMAv!=eQYekVfJLQRhHE2Hq6_&f zyu~YX1u?m%yUoYlyYX=aW`&Mx6%IBujid+Fd=ED=YOxw(l+ePl5QL^^V6FkbO2SaG zNQOb8p7xzw+u$C!nH!fi&cIuF^DyW|+Aka&==D9bQXntvCu(3(t*ElUwy|nKkH!Y8 zhfuY#!(4>Kz#;~r`Ww7Hg+{(>g|#{KbkAS+8v{YBF}5sa@~SR=OrBJPl&a)bi00<$ z2^)6J187vfd~;;=^|#2?6&wR&H+wTMI&wi^oBqJ_M>D{uxj~J0u(9tJ=1aJhXilf3 z!VNO|_@k*dBwsZ)RFg7Fn)LDySfD8YmK~@ z;n6|sw@z1Xl&VBe@K_$S7~g^QRi>n`3XSUZ9OUsAlc#bN9Q~L}{uzHHz?x zC)n&3@Csb_Q>^@aO|kl;k5<)SnMQ+Rn+hDifTxpdCULuyz|NQN-E_~sv^oRH^Andz zo*%zSTMl$+Y^+Ati$v7*r<E^&Z}npUSu9-B**VudY|_y@4H0URZr|gGlcB z*$I5E=M6Kn$5?|Z%?S69MB6(c;lUIXqqfcO23U_6Y@Vqt%QqjbzP_Y*Zfmen)xxmY zXZcM&K8+%#!Myoy{`nRV&AS*?u}myPD43q1Ywa`D4Oj&hS~&y4#bnHsal()3;)WPM z#Q+w%x*(K+^X9l#rBF@xM?(+mx$poh{jz8l3*lHV=!~kdT@ZZhJl7Hank)C2GI$CF zzgxbMm<4hyM30^5>FXI99_)fxeW#4dI^scD6=Rmhe-+K?clkVYTbn&NvX&% zh?1;`hqfpLbD=tXQ$+3UL&b0usIumXmDDs5jxV@zngo5eG@jnYW-xG1-!GpVS6@5h z1{&|~2B}!6PlOs%PY-1k9+-z2h7D(bfUAwmb(~8hV4%Y^K0w@mDy{=>O%e=uoeeSz z>uhtl5TlC?7(J>+;uhD=&a>wTS>}bH+z;3igmWIA&b>j%pGFT~00Mgk_V)5Y^(+7) z0@7kaxB8@Tg;L;CS5)E{W-8}ifEM4hZ0YY?4OW+}v(zG((zZ<_CW75% zOv}@Em~2>m3x$ig)Jc*A{9#dn054pG^mCu*hKAU?($y<+5;{6I>nn_qviku%ig@unC^2Z%#%K`%(r$b!h_Ap%IDVvF09=o8ti8vgFA`AXyN;Sd_5|G>r6T2GsH|=cPyKm>$JHJMeuOtZMg7b%6f50oTd=(9c z(_SPcn!eeaw0>nEiTs@4q4N3i|bc@F~f*-FgwkSjzrznCD3cuu%f-8 zh^8+=Uw42-#-7@swh1aTkE`ub-QxM$wzyAm5D}gWRbzInVTz1Iw5R{layZ)IeA(p4 zoCFk;NSqGIG47cOP38(VF`H>L4S8Yp&G+bph}-jrmQWrZ{mFE8?`&`c^(y)Dbow$K z2&eEb2l~2C9CJ7jxL7FULq_`Gihw()vNw;72p5o)-of!PAt$)M7HUY)o0D!4GA~+q zdcsDYq9WeX-r>}B^zU5rDW5-B!ayma&GORO(S)mf>Jicjk-SM42-Q`gqhck*jzm(!Vuf8?ky zzBAb0KkWF{ZW*LrIR@fEh$?V)!Px^Y9N;2?oi+w@zh5?Jkj#)?q1g4Z3;2;rH~Kks z2jYoV*5Z`Y-qStU51GTUkDM5Uyn5RLe7X*1N8Eq|SKwZAhOtJT7$iB6>oZB0bhr<8+}7Ws-NJ$2 zpZ2aK{M<`;61N$rDg7^a8{ij($!?_R-kZXlXNs4(Xr{!P%nN*ZCbOe6=G@Rda~%$> z_m*3lS-X2W=uHh>xiD?BwH4p8_fc84$3EMG7l{>yxyWN|T+gf%bTlHK9J%C66L`pr zu!GyaOG$U}P}gwIVKQvx=WB+oc75s&m!`!yj_lw|m#_eQK!d-4`Hd#fECV8(m@;Ik zdp5OH3e3Wl*j8<39tquqP@`5ZFRy=pr{;xw!E78BDp@Y7nn-kLv%L(y+%W!yIQ9uV z_vtEfXKmdTRa}8Tf8NfNXN4A z#K9!x$+o7+?#q3Z?d|E#^+9TF(I?&6(UDALLc0Ce|K**sJ$;||zt?l@|Lz!4`e&k< z&U7~UA>+7_DEhvNebf<8#abh(3Xb$|zNYckY-{}BK`s5Y6K`c#VFFl_v(J4!T01); z5fU~1qb1Uv2M@+uAT@bJTB=1FP}5RP{y)A!AX9lP6VJqxiAX@#xyr)N4BvfS6G`?5 z`+p=NHRM6oyvnKDEX9yBnX=|6=NV2Ydyl}X zOiPDTzB#g*w# zhC*NtKV?GpTsysTj5uV*qy;`{L z_AHzQ*y@Q=QNwxEd6QwEKA+(SB=|{?_a@LMO%J-3@CH4f%w;hCZ@yhZzIZR(`u~9q zdzQ)~JgbFCdoC>5!I$EW_@_MhPUIKLW6M?G*R0SIHH4T9*>X|xEegh8bL8FrcWflD z_$Txa4te~wpW$Eo=@-Tas7%26^&8T2!nX_om|9UlQ|5l6=qH4jh-}TLUc9#Uc>7ix z$_1H_*#j?|ett}_;u#8zzznnRUQ6G_pj`1pQaV0tN!xWGf^$XnAUFL#Un8(Ic_ewnKan%7Ce6*j&)F-h$QK5fd5i=)}3JgQsHA)-1h4+I8G9 z1h;B!{xKU9MlR&7VzfHc(NsJWV+;n8Ny}h0r3*DS^Ts+;YpgBiO;yXV$jJ(zC>a}g zi7U{_{yc_uxaput)3KIl_F%j%hBaP>a@}3ofyO4@qCNT{uxKebWb=e5oJ85z8&#FK zkyVM?2q{RWA1L3=czr1L@nz9{$tIX{-#kQ;RfS1sgHjX@`w3zTzjGda^T2R`;R`^) zqPW%5UszF4&;gJx!LS~ZlTIxXW0V&Y7YuGiw5<)-laBBw>ji?gq(3fy+WDvY|6xC< zPfLt3(xOvv5)bIcn*Ja5GnIkv-MK;bNB7|H|I|9uhp~@gqD%~mUwL`5jUKEO8@D6Y z4n6;#`-c57kULTHBmn8gCOMA{@X)2Bu?c25_z`p+z&{2)|GMT`5NOF%w!@ps0G(72 z2dzK?^ZyvDk%0X_>dH2CGVf~l$;83AQkhP*pbpT65 zG65`+N(1ml5%L|u_CMnt2w1oy{|S~+qb>UkTK{*?K+QuYJ7NjMScu!OCg=%PV<{sr zI0W6>ng_@pjb{$iT70xk7}5p zmOX4?hIIT;BAP+QE4X5Y7B1kW)XL8(l`Fhx5XGz8)bIg+qy}FqV`bSl<8?bcX z>HYMHi9>I{M~A~}S~ez%atZbuP{uSV);0`D*H+o~+_nx+%w&Yd;hx%?83)K0*2u(H zSek|WPc;n3tCYZ5Ip&iC9v@;c3hP6Ye5jw7L>d7GLwwMCbDC{C@DN5=a0qe%+VR%1 z0@<4{z;=E$ETAJAPsvpT;X|$K@dl$s)jVF6g{EQ$lF1CJ*cqgDoP-Lt7?EJf(oA|I zMJ4h^y`#!Vs1K{&-P0%S+__U5gah7YRW2!G*z-t;3<(u*ez+a9lk&N79AnnECPQ!H z(I2`g-mEY%1DRAjaVXmwJIEC- zO1ss_R?dLY@E$+pD~MWN7X`Pmis%{Y0yGfA~FbDvsucC%W1>BVx=~mas5*Y8_#1MW zp%|GJUNF>1o~76zvA!#+Lgz4%n&!tRu+26`$>#kkqjlAoxJ8MM+~+C4tBIRxdqL-_E!C6+{9CKrPtFz23rirzsFy{r&?zj}a_nhwBRv~HFc zGMsKMrwXJP7-qS9in5PU%x~x1`(E}Sr_Oq(gvC+`bft7oYMNsh^%llzq4Dp{_mxvW zd(I`cizW}OTpAC9F%O%)Tz)oJJ~e6jeW|x3T+u7;N;=k(O}9rG-_;ULwMGKUN>RJc z^nq+9`C%+!QQcCDcp{!bD?uZAhmy-|$zG`n(8KmQH(ZTiafP=$1ZO0#*BPwx_-Jcs zQrF`6tO9;8!OAS$2k&aDe7uR}!F$hMR+1`}M1kBj@05>6f=(@M$#hUBMp&;}J0WM0 zX4DM~{t+)w5q4_k2dpx8toCsNm(!L!6i?6&G;@aK?XdM_9EHC##-Q;2YMoxo5Qr8B zqM4S%ILZZ{$m;9^sLT?O7F%{k8xZ3`qT&EJM@gz3q|)||Wbv`|^o$*xMYm3Ak$)9! zlD#8MY3W&YN-`QDlx+cgddUp4GpHFNn&ibPI+l=wk=`=WTY3E>F~!PzZ{L7lOs~5B zSfaB%c=cn`<>IxV)iW+Po<1A{LMZ&tf()ZL6RQ8>i6harcxyJ^>QAQQj|%p#Em-oE zzjmAi2iHYWR90$1yovB8x5kddTVfHtYkFfoy+(#s>x*Q`_Fk*gsddG%kAA~zmaM#p zoLhZ8S$^`JJM*%9^N~CG#9eykPuQ(g4 zHHFhzeaS10Q9VVT-)77#qgZl2v8=~tL;n<9QZ)Bx`^&7qIGXzXJg5T$Q~ntUAs!JE zA9(BqB+v2P8{1Q*Bsr{(KSDins(LBQjpMm^)Qln{j;}iM)Fn*m?60NcjRme?2a}zN zR>nnH4}zP?YbeNTtxw|t!d^kNDA=woLB!idliw4=$8&AhmTF<|^2Kc-ZSc?mpBr*S znsVD)w}@DPAWrj16t9k5zxC@J9qz2j&*KLj+q>K5uXvoqZ8QdO4FT|0d{qh~H9cbX zaY|TWZz3#tUzL>U=0=(VHc}HrH@q$9SJ)Tl>MZ_3{zB^Tg86AjN$`F_Nr=741PfdP zMXHk8xTf@q0zN#Su6~EA!lxzK*4dtDG^Ijz&D8JFqDIyw&^*T9XV^v%cUZ3T+RMO4_sXNe^L=oJ2cOnjOk zISmkHnjca-Mn8y^nuY{YwVhIB&|pUjWjwyUpz%}zv!?L~CPBlg@?Q9GC?6k;#@k{x zq|}X-p3Izo8%_lPdf7}enLPmJ7~iPUg%Hzv0D8Z~+^j?(^=RvWmjj%WcARwh^&rjs z&+PUKN!g+x7zy!9Ipj8N5x00&}(H3f)O{4`#7K3F0t#@m{tZox1% zH2Y6yDkhanS^(36FV3&1=X12eNaktr>(~8CF_j-R)I331L~R~N@UOYn*$uBxT@5G< z)vQ6B9FbF8qhqGFR2L8DKzsz`=aRu6NM}Mf6`a{ZMwEvg2p_{EQ5r;N$+{RcgJ;v$ zFrdawR^3>wy0{wlXVk2M=)ng_#LXIO;aRXt4yDBXNj}4nYvz&bZg$$#U;Z6HmYufH0ax1n7thH7jY@m=vRH*MyPSS4iEj zX0=J!!nG(s)K)4N)gW-gVg*$@5N%Zgz&5Ba!+{P*6Nh4g12p=VL?VN4sy0@B`W1 zE>eu*jUz|#65>#TPwtp--oBwG+K@31F#;v`+>dbmA#?qMV5^fiSo7xA&>XUcBE5B? z;|S*h&sbZ&W>&!FT5vm3bR1fTDIIX z6FMHzJz&$IQa60izf}hgOdrS#0BPGHrdFL zd?CXiCIYo*gXu4ygO0We@coeI;pX-+cZaUK>XP;l_Sj3hiej#Tz4y|FEGrH&;Zwi& zy+xZAJjN(g7VN$j)OVkHKfut5MB9>ot%lw24_ZgQB-Rm3a{={~$PxQ<52B^CdPRgE zpn~5qP$NICcNCWd9JK97wxv-<#oXomJ~)fXukoh2Blq}6=~ya`uD~c@!dC8pMd-@B zJNXN55>KZ)F}y88z*-wQEjo9i!a(4#ri4(Se;{@+iNVEse&iCFik)=)}Fcd>$t8^8J^176$G57nMTS z(g0)~vq)KH3>$=ydij>P_qKKp42$X59L9vFYiSH8S}z(?-Ny5^k6x{@Z*(P<92P*( zNJ?OtLE*$IL>-y?I>`SNsfkd=|qprxg*Cq5RQk3cNJA z@|D+7+{l6g-`hvG+3{k&2ffGwp|{H5iswKqEkFKmQcF_Sfx+`Gi<^&nlR;FtWLf2=}?lMw@Q;KAHm=(yPbNv5CmK`;@9%i1q12PVeAYrh) zOu8~buENYa#OwtXku|gB`DQAKjJ4m1ZOn>gY14>jl;<=j!O8xH#!@MeM%jOep2$!O zh&2#V7efDps-6!3E<1+Eub+2UrRR4fJoA}AVE`-xs;)kfDNjSspKwenoD_d*2`_aY zS)m|eE8GRkWVl6dZXK!Yi>t&AWcrbv_@(jJsKZ#iI^pyg=til@Q1U=*8d z$kX9y8JVSiCY8)28Dvsmoy)XzuxIbab2g>J^U~4mqTS(4rbEc^@VleRyd*B`9n#5` z57VLt{!zV48hrI57-^>RF_xyCi4POWqu`0@&RdBD|#!^E~3JewJs zJX4+q=yMgBYQr^armepE9xRJ?_W3XHkHcQX9Syrr?r3N_>EI{gYlEP%$mKh+vsQq278Vj&-q7dX~TTEf_L`^VFV3G36_lkJ0J|LCEB)u z@%$sCV(rOH%&1HmwnzDB2c%-QJvvF5h?V;iUM0HY{3WC;C^w$#QlU}z6a29re^-8X z$Gtb}K7K&>ME%&GYqu}Cr5UKzbfbh^<}70Z8EqvLRi+m2zNg0%ckipOzS;>j0CLby z+`w6gj5;;5etN=P8nwCmnqcAiQFsyoK?Kwn(r`1d)dqEMysj*a(?*%}x%%>@zV*3k z_d4LY{~V6HM?k z0RYO65yqqIJFq$}sg)_@4jD|*Gmzd->N-OudVH(*3Xq7hFf%f}FoSaW{%gdtw*mCt zlE|I!V(sBG?gE-$47;A_H{(tgDyL1?8Sl{`5~frQq9+M2uU8IF2qLUOHk!;b>fM6g z8Su~gtTFO-4>_wRNJKot35^*zU^Qb5 z8b(Pqa+{tCiuMyw^D-8w+r-Nc=s@Yz;rgCA4RuD511v8+;^f0irQkQV@=bO1_V$03 z{o>?j*)B+fobCRitM7O&+dlx6G|f#e3YXhi;TfWSTV&9$BhyJedN0@u;<%^hR>7k| zWj{Z0A9{ z0ZB>yraXSzef5*M6{+_M-xI=(@1`oSvDRk3xQ)}-0MfpG2G!oKZ?b>u86M6JW(T^u z|DGGp_Vy1A`R)>cQ&b*X(2FYDLSMCgtf;lGrDc@S*|)E;{-CF~UC*C(mw#q=2SvwG z3`JW;r-i2?sP{3s{0L8Ana6`?NJpXKA>LeK5sRUVMY)AcBkcYXQIe&HNbfD)IKNvq ze+`sWDBk*gYo-OuIzEsH{MkHd_e3bUc~CWvwrE&094gx&v;!h+iDb#jw`W1jUAT(q zX%(W!rFib%yN=EDdcpZw#woG8McwtoR?&b>!rs!giC^q;wO5=$BNU^7Vllc<1gA7#P7y9{ zaV5vRV{r%B;tAM>#G02_Y^;_O5=H&OoLs8C3fAL0KG=V9;N7D&X!p=>v5MY5lvwk6v&FwpzW=7EO% z$w=NZf%nch+P5^X!{1Q|pn0fNzztjZw&T9$OwUdK?|`0o_8vjkc)Fr(ImllHCVm~+ zZxBj`{9{K;4eyTpFqkbp{+ zVdn+H3yd_@O`d1p2W$YeXkr_S?6})M8=#UuGF*G36j_FGh&{zF~L1 z3sAG@D=FFz@Oz(fVNrjTC=qf{P6elK_070@Z%U~NobT=L?&|%be`wedPJ_}lNHd++ z`%XrA(l>u5QohxqFhQ;`5D$HEu?;@E1{kW}c&=cE8-faHa4Z8Wjk~mjLbbv*4I@M=H(fCMjZ#OFR;o=4xd><`R!KTVrHW{cP*`h&Y!SmnJ6l7A9KP}Ufm#6Pw=!l_8lUZqb=w;=Xx%C@oypCJh zxvDvPms{7=T%lXnTfU2}59PW~4(9s0hPQUJwS7Bj95fNlcvVe>_$AivSuD1+>MZ;5 zS+7|CyIDNo3k`MX&Evzpew4dCaLy|@2(mMT!b8{%FPRhlg|vo>t&x0=~|hS>W1 za^1s1EB1~aDO=tbt3pA~^hRR7h*Q|q4s*S^;as+7U>L~WJ31y`>JQ2+0OHAlmu!sk zL4seQJ?Y3C*KGs8sY8K3&|BF5iLUN<3V`-#%f=z#>-26wkn1~nLPhU)f#7CnXDE)# zY*Su2ftoh*Ung^e-~6U_V&rA?YC#zrRy^J?s+Ony5qWmDM1;xjO4V9zKYn}P1d2u* zeK&@_>KX3-B0K!eK<*#(bO_Zf8}t)vYesh=9{a}ImHe3d-CX(R%%{A{qcjO`X7^+< z&w|PP9le?XeqADK_*RgO*3KTy;lci1zK3_a1NZbOycJwiy}jG%&J7OBgLoJF7?IgX z@bU*FE#c&FWMaFwH`x1*cPGS^c`uH8`*tyy>pF(C;`1K5XtHFD0qwgqSj3- zv@zS$*WG*aSWcY&_V0fK{;zD%x3?K3lG3ePx`9QhP@nV?J)HP3s}9DjbMR9fArX~L3RQi{k=>;Js$7)a`y(2kKGl}1{ErNuX@dk3Iex9T%l%tleO|Za_W+gEy`|v!aR(0yAkDmUta(RX^ z1|l&=NxCgN(G$g>;bSW2LBU!S_fD5l6bSaK{&vAJn$ z@LAC+96aE`GUz3(&g0ZIvN!Y0|GxggX>5Ss*k_c4N`nwktn$xe?zhW|)xf?B)2$jt z5aFAY;eunX2Q4sGqk^@(bR#UplgG-QLPW+G5CI%Q&>CzLn&-CA!%ZufL!G){r9T$z z-}_s~{=J*P{=GG0f4rrgn!m#fV6Nt07eKiHdw=B%5Ff}$HOZ!*+{I9R5ahOmI%Tv_ z%BE7D9j`2&tBOX(0n`><0b(CUF07xO+{#(}$|up@)y=6vlRLS8(Zn!h2W zc~D(jWR@nuNQ08u4<7tVHkMu@W=yNA6i!s~mqaevTE?HFZ8bLR#Q*Ku_h+Z^{idCbd-1Qv zCidrk_;Vlqy_fyHcmK|&J-hkeK(~1?q!u*AJy6kUr(~OWu_}!8T2dQ4-!^a$>g?<3 z?iw2APw%@p=Ofr+ zyxVv3AO388+>`4)7X5rUH<%voAIx=N;Ods1E)09LTM?*gwSoX5HKr_d0}0zaUq-Fv z>M~vo>%a>_6L1G(JQ@B!R6Hs{sZ+V}oRYyYhO<2VfKY@@|K>DXI&V+r~2grd0KM>x(ok^AHfCIq8>yuc>~3w7W4fkG49JJV9f;pK#o ztKyq}g^B*2(Zj#``diFarH7_kDr#_KIM~z65TT=^qd&Gqep0*qIG|I<{^Rt+6&1vw z-Z752a_f2d?kURZxVC&}eI#$YINsr`-8+l0DPhJr_d?OVyMPsvJTFUCMdpPngWPeu zJoUm`ohh+^q3aA(DB!M!GC$G6>YKOj*h7E(1OYFZ?l`!eu!HfOy5vBv&q;sLKRBEl z8g@FmhQDwQ_6!bf9fHQ{rS@o>R?oF1>YWjiuuo019gE+)&5Pf=%}Y%5_i<);d)B!A z{SWkldW$4&*`EQvf2J)+ra~!@Q#_xO2BG5WtM73x$?65_=o9^b1+BTyyH55Fr}|IAP3cQTkA9KsqZ_mB zKFn1^a2B0U_~jDr-Y-WnLoYE1XT@W-fVvsphAY&C_b1njRn9$>cAxUK0%y8#`EGHl z-i*^Js<~i=BcI7#YBm&M3h?r+@mL5Wk(dmY5zyd-PH4^+)Us-{YFvext`kmxfaAe_ zK@IT;;DF?5_;d%vIQd;V9Q_PXQScJist8`j37N_GO5X9vssd9=@KJ+Deb`HlAA0WF zUYHW*C70n*4hAcc=Ak@!1H+mg2!s#2NsQ$Yu0nAip!(@0qpvd#kT+GSme!d-X^3(+^9) zs9gWH{{FuMStIO?Zz)V_af1X>1|TSDox*ilOgL7=e{R*pN!5W#>2B2FKnDKm+N*Ph z+n%%qTKu;zR!-esdoV==T#-_RNV=IJH@s6Fr}^bswBjOrFDZ0Gq$xYa*jRDL7M1#K z^P;+`J?#sqD?yEOq_?Y&qr~QMB3wCH65Heyv3&1l<@p`qa!si}fHR1 zom#-zEIQ524Nbe9y2icUFiykQ`x+Y>l=?Hj8deEi8{k=uz@(n+d2uwAZV{)TFl~uI^p$!!#tmi+!XA zdivV>yZ_EGhqluSnbfx8KV$b2QH!@2n<6a^maD=Hmpm1k!hW5X87`?Y87wLLSLMey zP<92zXNW$7T*f0rT#5JeQj2U|u%62zP;Ss<+7Yb6IFh4#E2BS9!9-cj zU2Z36{j~@ns0j1YnRz;+X;oci4s0+T>^c?{zn76?_uee%Y2lHtZnRx768vrh%KOZSio#v ziQijFEtolX?4IK0!>#b^Q*Y>b@V^L+;8uVvazVJ7Y2vs$GENp~e^=#`d8v?c>KeSu zfGO&o<|YTv@oh+!AQErdd-{4#oIH`r{nyE!!Q8O}CwqGB(VVqsX0SHktiQ-zkHy7+ zVG}jHitdw1BGmy7Zln#EP|r#aZ7+{sbT2%xzVTvrH0s8A9co#=@*H31IS;c&ihfyx z@d#LypySd3^^aIgje>*ue zoar8D9~wH+)q8TI5f}cYGD5`5M#8yCxyGy5Vmvgw&W6dwwWrfgU3=HpOvpZd0=AXz z`R`mkCEisRr}AAh+${zDI7G3A1#Sxw~uU=NS_6fdu7?PCuxlq=TpRE8vk-B}~Mx$!2=frpi6^b_^dWnOLJry=;Onl#QF zi4PAC52&`?Z8z=mA~^cpB%!i@NMiZZ z!Ykh(nwOuxG}u8ty(Te{;%Wh74ChJP&&NlFg`eB&HhSBtypoEW%MfC;DUgYQnFQF)~ zIFe_dtUdfOaGat}1&aa?)zYti4Yy=e&4NONjqcl_sQUYW z4%k@-Ph{=32R)^R(eQCyK za)AA_LF`wA6?^@Di`WIPx-E6-w(h;PZ|JwU_tr%E-S0i#ed0HH@DSPYPIm9{5pfEE zV@zMJrK|gkTwBlQx#6A@xkyd=)smJCA-~`YwJTN)vU6YGabHa;d(aCuK^285CWRQG zcA}ijw0QvHX|?vEs87()@S-*J{7IQ&K@ar78S6@$94L>F;{UMl< zdfWSt%34B#~nlwz!6vRu0^e|@gBolS+60smWnI|g2Ny;!7U(tS+ zI~?kzU3oFIW%5;2YxkAs9wNTZ`dJ;15#;(!jZX;MSke7<#=UV1C6Fta1P@*lo|g3b zO}F%H#jA)ptyQzeW2#bKqxM4xEX5(juA$tZi7DHKDryS3+E699M=hwrfV4ESHugvz z#&^1A<(ZA3O%22Qkq3NWt@vXeMavht?!UKpbtn52`FCT|eSmnYpAE|E{>Yuu`q_!K zdyFB^1Me+NMb>j-Z~zj=U11gBc(&GcNNW0;kLk=ambQBag~?kWa$GS>E@z{zQm3!Z$ZRhE8uRVYU1*b_8d z&wv~)Byg|B!G?0(kdBrQs4%`8AF8)GJMF31q2U$29{e~b6<93J;${GH1!yhnHM$swrH$#bIh<_06;7GrO&O&=2v#KWKgPUKE} z1|r7v=L66#57F| zX1%@Hf$pw>h)#`3<1r1K0{n7L1h-#6-_3b}OY)6e;NuQ=4P=K-4h%qq+ObGv_+;NM z_K{;O!l`TP={xx~X=>lrivy&7JTEO0C0*Ynv;PSIyu}=$yp=TvbXD-++cGgQsr?LS}z31_k@b( z;s$%!OX|Buk~DZ$zjKv~nu$z3b~|C)6UkWMSd(6qypO zGhkJiBmL+{2W3^<#W(KTn_ih}H2T;du5X3_)Dilx6V^pwHV`OC#GC!R=WF(AsmM*C zQ3k={k-tUv#!J7sN^oJh;jZkLOw6Df@I3YP+se5yCg%Z9@CXSk2BQL6aVK6Lr&90+ zl9 Enw**0T!cKTl5qeQ|$K|2ORDm0H%*ULv~9r?3WvhXRA8h1mO!4RKMyU{JUV) z7)Y{!$&oNWB!(vUf#wDzi4J)R**zH^{Dv`R>}(nyaBmD%u+F zOgrM8pLNentUY|NcDuMfb!q+jWlxXiqsYQMWnaOUytX(W4yg~QHLYbh%^c`wm;M_-&TMleJS&RBUm+-a4+A^RJ2B->$ml%-U+!f@v^OI2 z>)3LPh76GV8oLLgxmSK3RyB(FXDLPRvAUtNv8hOi51daG-_i2Q*{SmPw^uPrLwfL3 zhYA6u%Igvao8d1A#e$LmtdC5t=fC9}hiG^1O%^gHX4usz+>&sJ)N5sF(aMwzH|&XK zB3d&@q1>!tLnLrZdqQJ)opuLz+HLRT0hviHpq$vKL$>*Z3=I#kOPu~oI?YBfE2&$% zoIEyw3LNRRN}eSGqd@A_qL{3M^bh3v7yu%Wproc*j~xTW8!{00FvsN#>7%)ChspH@ zj*%T0?Em_kNUOcu3eU{;7*p!}qOMB#i1I>)CL9NH-925DgFDy9_(s?iCaod&3z@z| zehv!|GF{1?oF>0`9~*S62TVTMlY_lTDgqxw@=69jpH!QJ1dbr}h-$xwVQZ zo&YsUyO35P9T1%0vwGp<8NlFn{WlYtNdXguUqjgtiN5T?VjId0MdI)q`e#RDX-D;j zcIwzCe@VpaJ>Nxd_LJb3&Yrm5{;#sf274GlBkBInhw%b9Ys;_EquXX#SG38Bl0w+z z{oDKU_z-RG5Mvx9nqGngtF~x|uuZd}0MNXcc&%ePb&9r!q@a55;D*?ybFd{64NlE4 zu1l}Wgx-?yPQE7o3mcRi4_bKrJWh<1{p!mobp9R5wrnPzX^UmknH1>Els4?Opaw^x zZJo9ToBcrY9q*Ug>qw z@P5z(-&6)u%H|R0tN@TvKa4cyp6cA{ZaA`Iz7`Xj&0B&d&!o-4;Rm8;9!KQh#eLZl6fGnZ1dn*LMZ^V`!J-#e= zw&V4UW?~9LZb5xewQ9$fC5kvc8T1z#W(q*q!=a>C_YJy}d$xEdIe>T`2A_3m^H7>4 z7Z5LDlIdc$amY}{x-b_f1DW=24{+SE`!?JvS&5fqs#a{7s69u>pjsDU7wCNifZs2| z*uRM*@BgF0U?JKU`I-?OwgQuV2$N{4V`X$1C>r|@&+9KEMuPoUOoZ9DJ&+0_ylS+f z<#DHwFeAg+oOtt%&-E$^8rLAo8W=r9ii{d^M0lW66YkZNTmtGRfN00AbnpwhpVPQ$ zMI8A>*xV%tBW=R`boOtc(Au&iOL&%vYEg25shf@JKB;K-iD$shPOLFuB1ORF_<1`ynK+v57Y|0QA=QdjIbK_tkfp-9UynE$B?TCBu+rc&Wa8x_7A3y7y#Z{e+?wyf+A8C{ zwH?~3mQ>l|`%*Ur#A8}gd3R~iotbf8oc8v%Rc_jQT@Ck=ds8SlflHh5&6(5eoAT5P z_riDNd9MbF;0yCm@FNsnQIhM{-&K9n`}i|rIw)8+y;a6IaMQRo>!uML-lpNze83Ap zYsR9#KPzxsVW2*fH`Yub|T*4{=WraF%vFW`EvuAvtGQ`69R?2#WmdE}x%okfv} zLn?@GKwUGz;@bli=F9N^I>xer;iVmq->~ zqoHB1qK@CPK3=ml1Zfch5_tKtn@hhbr?I&iyr8sw)+_el#^&A1_XGgNGb)s$uOfB( zbELxFUfpGRsz#gfN!AdWr*^_RFpeZE803#GA*X ztx7ER%x(UZ`2l&mL?(TT#!{2&ZUqH@MHDL+=F6ur{VENvKWr3mD2f-D*i<|2aElhK z(4trXc^EcjJcJghwrTe!?3*gOY>$K&Kz6ppz`18b7EX04%4)6vzl%dL|c_J|KXbMru{W3 zOVmAYRHEE=Wr?riXOOZan3tl|BD|O*I#pwEHb*(ABgjNI!z;qh_R#Z;*-b|Bjb;)j zbz_>I*>db9ck&690~8seC}A}60O-}=9W;^vwXlNwMzt63Pd11OpP&?I0oG{)S<{=8=$ElT!sFRy!*3cVaH z8+~Yr`G;hIc~Ev!kRqzfJ%rq#UO;NLYQ;hBK99vs_0(oFmD!7Qp({TXmEw7jQbV<* z=~y7t{k}>wY9@Z#>6rTUbl^XOlS|bWg zli5ENdNuK9&@As#jhpxIY^&N0;rgXXl>TxvioXI-IIDmG6Nx0dn!_m9BaP(!*?d($ zh=Mp@i??ZWvw)PZfM%_b+N%5>04bm3y%k9D&2n3!rI2Oq+uf@CY1!`f)CS!uF8u@R zgyP}sQ897z)h4}@+OjnLuR@LgD%9vxU^VaE9z5k$Q3LCtdU%WzZoLevufVE^Y&SUQ zSrSKnlciNPKIS9steW@*!TXs@~>!O9_EIpvpA zp|-kw)jfYJh$pIT^^3Adlm}sk21qBBl29}1f-r7yVufeglN$g#90rt6EBm&b zj#DR^lz3eMMF{Y3A70dJ_uOxn)s5Ce9#MRQXvKOVO#}@Wg6V|WrO?cd!Hv1_pl)nY ztXJ-VOCz--8CT!c!1)DWM^WKzcvUUE04RZvZDn=o+m*s80kRND>L14Mcqke?Xh1zG z5+Qa;%Y`UKbd6u*5R0@F70pOiVF9B2lpLwlY1Eo`H(oLl2}GG^j4Y9(0=xBVPj5>j zf(mFazR^qhBOFLZ1Wy4z2qNe)6>CpsV%gT%!E8&kBNI<1A`yRQtsTZl+FEfA#Lum0 z`bB@5XTD?~-^0+OGIL*z9~G-^Nr+WMB6_4JJ)&YvtM7~)q&;Ym8l7-(h>oM#wq#4R ztv%XuIG%{f7sUq!Y@JAE36gBi9Yc;a8?#;t&)d9E+o{Q%#woFA`O*Z}T=P&zY4K1| zgU#QPOeA70ne4%6ye-zcnKkI;_T>2aS#H!FDg1TtuYG~ti)%mq0!*NmfpyYSx&^Y3 zKg9QaymIH|+WbTS@~}-Eh_+@sqUrR}WU3VnS%&(r$aqiTMR!UP2KUT_`|^QEZEG3Z z;!edI3sn>VU=f^ZF-a)YmU%KMeqSg*n?p-+(5e%ibQ~fY*W>3`mmYuM>^MnD2Ns0G z-k3ZkGdxTsTRYjwCZg@JfLq~UAxj4Wc3FpL3r@^NZ0l@KKq#x4b_fHW z{jHiJ5y~NB`?A@~wlwC;wP5YQ##6n$?Q`yyIW6=Y+q^XpbY&B@Hr02ce$(vt?e(?U z4QQsR*tC@=4<2kIV!-n}QxJ>MC_!yF%u2=8muHOq<7JH}4v9AS4p0z3Uk?R}w?;&y zxKpPlL96!~@&NHxkz-3VgrZ%Oi`1|+))r$#Ud-Q~KBVD<^M@Tne{fc;^^HI#oZ#t{ z$uTNF{%<&FIwJ=p+_a%tTJ9G2Vy1k>9?Eg4&9j+QXG{Ykq~F#0GXhds7%wl4@$8Dm z00*OOX)yw&4iX?vYljdqaavNt^{H`pc3kO|h#g91;!*LQPC$-i$hR?vD8rYfw2yXX z4x8?(WOGp(#nKsegz@xYfRW$LU)`nXl8R+gAEQ^N$cm(l7jLD<59!Q3MD_(8$mv+> zNG!$AP2IV2ZoExLGL_*e5#VW}61JiZe3{L(bVPWBg=i&ckur>BvbDRf-Aj4Plv(yu zZ)&@gYKH@z@wQf@hgNh~_Q*tG$#D;1>5R+Q3hvmlXmv2266Zo~-Ldc88$bBvAbvJl z=R`7r;K$Sq9N9WkDRsEY$T=|5xrE}tjFoOpdSB`Oow>8 zDy_sSbOOolfjX3!n^Q*>JPO|0LTiks+0Kr(WVAH`2E)R6@@Wr_%P~8*CXXg~_wfyM zZ;yUdZJA2+67|7XA>Qh#Nj$t1sXY|T>`celTho&IxP#sD^7UzURj{rN_uaKLBe093 z_qzCU#xq_gT^}?+lb3AW_dOk%f-TCrKwqQ{+LCPVNX60&XWW~!m8Ft@>8%~`P{rEh zn`$c*>dP=>^zBT;OJVP+=HMaf%-V5B8cLc3{pujcZf39xlG}CldV5H;#!_w3kAcz4 zBpDmRQ|?J+pX&W%DEPd$j9|cTggBeZ^HacX?$}Z9Yv=v>U{(R(w}w8GRRF{;60O;E{6B%Ta3vjROGzyDa{Tkhy5)#y z%hfNIw%W*@Em5K#a_|SZdV9R8LNS!yIAc(E_rloP+?a2v*!_TS^6DY8<`NG0mtY^n zw-60#9vlSVYJ`K*8y6AOJpc~a{eW-s4Z%SfLtDZI;Q&uaN3`X`SOy>T9cfLMB!SLm z$R7AO!*f_+D_$9%50!`=&Bj}RZ)Jpjid=3_85wD*pacmQhgxKFne)p%{fMzkC<8Kr zRQdUuPZES~O#Jy!@AjB+sF&Q*%=+9V=VkR z1W3q!5v3FCSQSxNUt{C;W=&=@r*6l|dQF6*d}58kkQ9{qJ5nNAIyZ^U+M064wk5`x zRW=K04AtDpLzRA{}M7z588mN6sTRaAmC?7vG{Wi~@S@+&Pf8VBReZ{<@ zFLa704gyiFTzkpn7WecRV-$u!xkMkVjhq%Ac&6KH7vM9YYJ*YiQk7CDkF>eLYx9(s z(9(T-8cQ^r)rrKE=@{eTW3|os0`-aH`0o`Cv-&qHpqi`9UUe7GtWW$@O|L58NNeKY zlp}q>#QF3e5T0T{`iLV+8|Vpn*VfpPcuOoI;)o3ea5=G9*C3=?|hVy~?Qz5qG+w|dVv zsyc)(5NVKZ&Q*O}fBkjgqPUhnmP#d4R!tg)(3%Qp6`(dF99KZo!h$u!7A3G+$-}2m zr;279ikdB4RMpP`5b_uE2)y+nmzU_E0ztjN^gBm;`i}K~ zHH2EZGZSKWVU!Byl14H68JGMZK)FJh&eq0hY5hwo*^Y_w_~hg<7+BLy?0o}gXiZlH zK)U~!%RbP38l}spsE>{GjW13k-TU%!?w4_qJkXL`lBUKm@zc%Oyr6lirH_ziM!m|Q*C!v zbD)+B$F?$o81hT*BP?zg3Pu;GV3QqI5K4Df)MrH_5Iz*rr!@>EIY1Tf+E2=l*mYaN zoq``2==gj`uayO|uIVBvsCjAEaFWuQ5JV*aL4+2btb%^GFOy;9*#dZ)$Dn7UmXRu# zm)F0)gI@OpQ}Z!FeJ?tX?_>WsbsZo51+Tc!o78))(Dirs?q;VBQaq=vZP4j;|NbVY zZaCN5mm40kwnAUgJ?tN+E*-PYhstnBUCWr@Xd8d!q$9W}7qIB;f%Lb&2#}yBfE!Iz zmL$evRZ{ioiE}Gd3F`S)Tm(eh=)Wv zZZp^Ho#2rE=r&w6n>n4x0#yals@-bw$;zd!Q=ZC|{CUR9;x4sot~?4fK6_|^@_57A zDKK3eBl`!XdO#(T%G1GVP(bh##0T0fq}H-7U7&7z@<_}(0m}gZkOB|DefmRr1WM?v z&EC}xU13XG<7wd@knUhCbYK+`ck!+J-D^FKl=W($QXi~{pwRN^{*45g@*KjlSS>nD z{@ARb=`%?tkF_%jD(`$qWfZiHcr>7KGc$9lgNEvHVeB8N$1}89At0?^DtS<9r!%QeGLw~W z&a)>TxujWz#{#<^ybe*;>PRf$`g#H?50z79%meo$tbv!L=1XjE(Xok=oF5hemfYfg z=CoUSA!(~p7vv3AWU*($AuRU@1j;(J9(68$yUI37=z{=q{K>@bx zeRjuZ0c{OLspGLA#so@CMy((WjC&6g44i-+&w3sWuu;{w9S6Ou__c|k@?fX7dV!Z~ z51(-j7Ek}MfY~9*dl(MD!w2pQKj-0EVZ0hPm+%uRX?2TgRxuL3QaI(80laU~Ki0i6 z36Nr7DommzV-+Q8L=PDz5R4=ukC{pTxxVUXG?hRHoljKdlqh`13G1hhej(wk1@b8q z_yK9kq?`-~Me79QYt!{+K6Vy0uj)OX_M$)Sny*rzk0vI?bKl&yZ^7ak%&^fbMQ>!( z3|eUL^uXhqD#DHBw!;u3jW$hVE)3d~dUF>;BFH_7)`t`3hBc)6Fc$0Zq(pdmKGExP zL0Vtp6h9?@@kNJ9rtrOrKX|%PiVv&CLUL3V1}>5K!>;t)fWt1kRvUu7T4j0K@HZAW zs@h9Yhb+r2?&KTp8y<#8MeEU-k7}^0Q+PF|Kg=XM$W1%j(Ne`lTQuhf!rEId!H%?} zHD*}C$IqlALI|6|LS75%o*+?`ayLfL;t?(4?;x$!JBs^~fAI9th*_Bv0`1P1Z!kcP zg?4R>NV*lYeZu7(LjXvN@=>Z5&Qq`=FR17XQR2xPfeff3u*g?@@riq9)O;AN;rd2c zoYdeUi!<^gV_?XLyW%Tp2X7eoT0X?J8zG;RITN*JBSj7csvZSrrTdwTOn_JScWhfv zL@2!0fQyH!YEe_J`p==Mrh_O|Sr;QYxOnYTC*Jyj(_m!EVDcZ^h2u*leNKrNBJx+n z6;Z4XmDkco2aohE*jqdfh|4229iLtgHva@79JMPlEw0zOmHhR8od!RR=0*zz-Yoe2x1-+C71^GZ#~Rc~)dII*b+pO; zOHyJ6QI%^Lt4l;2H{s7WYJ@<*AO-EI=J#E*bgYkDMnQhoG?rjA0ca3K;=>@MaD2$% z$^Js*sV-{;VM0>`($+wRA9-!A2sTAA73-I(!X<})9qe!LU^$niK8jXu%OdiqDI@$c z4Sw#$#d%gQjq2%YG^1KBw|VQ7ajT4nMr#y7i%`-BV;KR!ZEpEl0c@)n6hcfnq?;n| zlG6K7f>z0+uI)$5ImLk6%X5oWqxBX}+DF#UL!@Dt|CR+@%>mp$3aQ~N8do7uZJ{bV z{1;{VO;DyZoIaS{$pqgREGl}HaBA?KLGKhLujE4Q;)k;(FQ;mLK$<#ho5VsdX2~eM zQ02N{ege|tXqvJbxH>R(c`7^0?b0=1TR*r>aGpC(`dLrMuoFW}(z`$Ksv3k9vvT3M z8F%iZw(xN7>hA9w>hFb$&o2;`?2CNZh$2IVoxAt@{z-VN&OhGBl-$#Xy*1F@?RF!q zj!qUI92*U4`WFrQ7Y*7l4SJ_1R%i0+o6~@VI?PxsruF|KVE-Hh>~J!bY3a~zF0 zXbG&4VFaS0q5_Qo26Y3pi!OqFF34GS8+W;|IePUQr7zNN0%Ao!`dFGrKdHfgf*}4W zO1j)-;)Du8>wa4?1*&IAPD_9^Hih)ifzL~7{E`l~lSGv7RoC^n;995(uGi>X^ zm!7Vpw?NaY#a2eWHXj3v%Zib*do%tdY$uwlfOf|Cywno1B`>q$5mL=%qR27L11U!# zD@;RL4oEn0$ZpXJEz^TYlMJ12`{2VNc3Cn;!s z+||a*LGPsjf5Sj>+nt=IJZ{pwlq<``mK><+wL$U*?_IN&FF54Er+9t zLzw8rm(EH6O`023r$iAvnvP{4X-)QEye+1`zRI)b)ct8EgKqu*{AuTx1AYIa<=``# z{RtZVNuMHmL^v#fGKOj#iPIs2f6&D4g$X5}R*+AG%#_p-OUQ{x-ze#mM=JfZ=zf2p zQvjH<2cn5YEEV~qs`3pQ8*t>04*e8KM3tGjOXenAUi_exIq^kG)LD;!*(WbaFHa2E zc+8nN(3qXYuo#dXE5FRG->AWxBV?C6?5D;JT279~2m#(*FydpCNdp!J|KcH1HoI&l zNtl8tZ{oq!I39n1@li=%XN-tQZW}SQpheKQ0^K^IsdP+a;WH{9=tt@K<9Hs)^N$(# z0SQwJBel#-GLsEILfsIx1%paF9ZRI+=)i3AK{iD?xZ-SOI`tBcj70&x0OqpRfuI&k zz}+Xv{XB-5Nsadf!}2J9M`-X`_}~=QEmz|A><{yr^<1OPdx57GSnEW%)>MJdN>I@g z^8$S$QwR zsh#9V5#56fu{*%EJm?51kS^d1M6wWM_MVonOxq$U*nIQ?x3tAuJ_N2OSU*cu0vWg&gsITJJ#6rZpn0g+?iT=sB)+gxSGYR}4@~P^v?cBMOhudM^ zh4#*LhI}7{eLU2OINU2&HH-^SPKzUuHNArxo}yJp3o$)s*z1N#l`zo@=9|Irz85?& zdsObl1xoZhS$i-^FIC-piF!eYyCL>)8-|@N2aU z7Cn&c3`7hcyF=U^0MkDb*EB?UP=ZIKOQfi%d#~Nnt0kIfiM4qJIBrA2HU5x!D2<(B zAH_2=H-*T;TbtNvV7QtBq{jF|&O^xQHN6Org)wC`B_!U;s%WeaW|dCGqVzUNwhyri z5;|7P#i2&6FRZE#~CwGvAqh1AOd_9-D_y(_fQwISTy}H zF+IQ~Bt=T4$i^5qS&P=YOhxCD%9GpWtC!?wpE_!Eufj|DnK4|IpqK|bGnphfH-!;% zTaTuQLBO$*&=3eKQxyhT;WR(dVljjD+&q2{dib-deX7`eK2h~YHjLvSd#fl>jiOUx zSCA|XgYG>bq0y?ULec9D@%W!uU<`GTZX!GTEJ)yXEZuzamp4;$#3&yiRfM0=iK$cO zXGILQW$PbhvPY8f79N*h9>49r`e}XUnR}Pr^G7^Mc)r9x@zqlEw2mYB)uoa3(Yf;D zyTsMIXC^9_X9OmoBcA8rXQM9mxeFJSyKKsR2oMoKXMZK=3I+4`D%yh>suo#Oc|C)O ztKDR#cxfthOEZ*sUA%&1mOYqCvgaih@v?k7@xEcI#}oT{ptpZe7(A-n3{52n$Zf2S zq@NZfM(Ip46~hQM&;J2|%VXE?2^023U3F$AY|-1gZyuJPFY~lUiUn))J_(Fb0>n`y zKIao+XFhc_W`RNNlUlYTJJ*o43!!#2+1b|mG5e8>wz6ZQL#rh&XwiO*f-cSmohRoe z3{MkL0M7z73^o!_{YUws9}+T(2Yo$R{o;=cSMUHKxA?#TCQQ# zG}w>Xlt6OkhB~FVoenL4W99i`<>3VBHrCHh>J1uY1N8!$+ie6muIIjhk%!W}>g%r~B7!eT7d9!-!YCx3DE#c9eKN4xZzH64w`K7=g) zP0sqrQ+9G@175s^U?ggW(AS+EP`f4D9#8P9Dr0Bl(ev*PCp&q`6%{Y|m#xu{`FGRz z<#&+Xotnta5G)sE5}R2^SV)q{M$B#XtA{wbRt_m@GL{ux(I@ zd?I2l6pLY|DijovAj-{(o*(4NJU=LE|!YHMvfS5&h@(J!Ng!^*pD7KMKsNOd! zCJ7WHg>-cO;>ZJcC#T#u)BLD4Y_*Vykh@{ZXxh@yuJ@}V{Q^BVI?0ta&3$mCT)SHHH?1BQ4)f;AP& z3zEM~l`#ot(~xheeUAf3=t{owqkBMVlKC<&cHUU|Q*>WYM(h;;AJb(b?d@H6f^$bW?e=RTsH&1#46kX86mo7RaR~*|jLOwI3g`O@QZ$PF^g0O8ME9)#ZDtPcT;=kdzGh|$t;URh+?U%h4*7FaMwresF6UDKb5}G6+)b0wh&JXaI@6db8 zBo_U8vvrO$JY#cF!DGa7e#WayXBm8ra8&c)8Ao^S1!-!H16#j!mHk3VI^3~`LLEIL zruMEeW4+z+Ywo4n;wqnK06_%=V=J!nY=QJnvFT>N!=pXN6VHhpEaeLmZt0mKl__~- zU`GWJMo>^R+}<5vKqybWMnww8Do&Z$q5OEu=7h(iy=ixoSC%jST6eAc9iEk5q3r%ABsOFyR(IbeBmuhEl1h>xbh?(8 z3tYsv2+p;g8t$qWwt>W86Ue|!VnPTuxR6PafdGN;(jeJ>b-%(rd+#&sGd+@ks;=sP z*N}joGY|Xh@wbEYQ!d=b%y-R3Sk&uk!1_AE{)tT$e-M{aJRN6FVUW&6H6!VquNHcR z%f#0B<@PMA0sGTmY2LjpzS<)EpDbD^PL)x3N%MASQjI4MFRgudowk##uI+b}>&=N5 z7nft>3aHiqyAj^mqYA);PbW1`GdxW$f_e)X1Sj$-hru7ym=p5F1gH z{jGWWB&O4aSD2;$SqUkYIH-?IAjA`CI2R?Jqvw_P4?l+?A_GSj;?%L~UPX@+Q%P6d zrOaV+YW%(K8jDM1uS|_jnvr=fXh`8{a>lyt53NUf^}%txE$&UPS?|fwiFd~jjHY$L z=uLVr>MfLUj(#u0lkbfGZfauW57=G1mJR$o@HfX#c4C^}`1}jy0?Q4li;Oj&t#0l|bA%F@6-%!SE1fTp#_-Lv+Q9jF$v`F$$h0n^X3 zdjy2qxk_}CX3!)Lt*@k^zoenQ82!J5hfJd*mewYX)}TQVW+rDuO4ZILB^ZlaUrD(s z+J)m&(?fnj?1NCABO|d;eR<@UqdZ=D_3q3Ow zjlg$QGX6ZAg%Byz>F7|cP{sHL*{p7rYByx!5=%gC(p1~-sL3dbA`}z_XG_gCu%j&BWuwcH z*#ZgWeG>x5#)Xr(yd8;)i&C2x7Km1CUqw6DZY(#Cbw*5NmUc7J;b5~JHP^05MN)mi z#-KAKxv7am$^VyR4^4@G=0|}!Bj~+PS|=VTd$1oj*?jOrbMAZU?w5(nwfQ8Bl-*kB zOUgBS7~G@X@{;eQagrEPPl#a1Xi4L)`zG~jo71?G1XKk`$j@=(YRaI~)P91UfV%?! z8fL0Lac-4wXJumi;Kazg|8_Vx{@x!Z#tyzSmGtcIb}_vR5`S6Z+_^^HX9e$9^OcLLY93=@5K)?Q8c7n&18Q2-r@cD-Tf?GYC=u9Me~JPu3D_r zgN4!IJQRD$Lx!!ykULIGU0v>ZeT4~G_rweZZ-v+a@JQKZYl_yrDo%J^Vo8`=jShegw5*mBit!PY$&KI@}IwhYI@sCT{=BJ4{C{{9vDA( zP#^NbKzS$X1MrBC9vVM5`P=>WC+~Q(R_v02)6L2zu{3ot>gK^RwZ5B?E{zn8hQ9fz zLnJJ!8AR8DkG9a`OS$Y&d>Ro(z)bXi|Mk5TX! zV&2bcr(FCzbIat-wzZTh+`2YsqD#AM0xKi(<*srKLKY5Fxk*P~o2P3Gy#Q~2DGmLy;pinP(S#dOIoR1?NgQu&pd;#@+l>%a{(pE?$#m`(^ zXsiTho}nGEbF9t*D*=J|ged5Kfw+7kSMC=Kzh^JG`~5XM6Sp-8qWk@I{O-iK+eHB2 zU@)6YxEbFq^QMGyNGW1~4y51Br7sYgz*(hN5%_WKyIEcqe8(@$dS&}mS>gemQsvS> zk)Q*})~y_VOo1Icc!@K9iCR5d%4Y`F5r zOH#rrfSK?PYAT$502Zw}m<5u6^bq2I$pyq(o1vN_9Q+ci_}MU91DEjf03)kE{b$-|ltZ)jF^?tRZx{4sg;d+1%~|LNTBd3+qoWy69ne z`@TAHDOBn-;a)&fImyVu$#s~L$2LB*UA8}C+-58QHMddrRg!;Q(0QvR~N=?w~}8Zz>9JBn`!!5}_l{v1BlNE=GzTzztP9-vGhmUUUhmx7u^ z#RT0{Ky)$Ce?4-dJypiPvo6W$$RHTIc$Ja^lJ0iW!_MY~VnBm@V&O_A;+&S$7UEn? zeml0$gCnrzvFRC;w8JZDUc zEw!l49nIP;d-K>4ScAFyIF)Fo49ubFZ!RV91dbe!L!QopcZ2Mj{00FmPN5_ibp5(J z>G^`C`Zc@CKh|@VVSqr-0OHJx@7o`hG(+U($=zGdXC=#!;?euAGsj4*DGI9PH$fML zB~UEp2{-~yDo=^5XG*LKTwD+9pzs zTAEOv6e|g>q)^rcqW@ZwDrT6l6puzYL#B{yvM8cCh@?zjll+d@S6nKM>_cSqrx2SZ z%gaPQ8DD*ge@(3_QRE3CzpV)Dw@17iZx#8AavcW52#eD-(;=j35JJ_IG9gWs;MS93 zsT@~C4tC1YqDI!VlLnq*Y15k3VyaY6F&NR1Br0nuiPeK1O{pX0>Y!jPi=@fbAV!jl z$UreyDAj~4`TgAbpYO-{q0P=mwAO5}EDGOuq?t`(R?RG9}-RJW$lQGI)^FajA91bPK0#tsC0ct>jGUccEG;49H5^H;=!3dD9rLJV!dJ#>POu26n=d8Idu8EsoVUNh^vJggT z$|Vl_WtYXZ<&9c0wZd7q299rda4+$@mQJcRTVRnxw=~$)9dD~JRp6EAMR2Og$3f`? ztQ{pzi$>;>lgRjF9U7loCv}jrrW&MQ*B>dG1*?Va<+7AbgEXeKG!I%vaki!E@|=Qq zT#ieWowejD*~0#hY3f6%fl6`tP|R?eSBMzV>6OQ`)4fTG-Y)2!r+wiTZ1_;?^4qeH zEo)#Nt&0vm7;9@Kno$k_3WMn(Qlp|h{kN6Gl%rR9jxx}P^uU?@WbOM4%pXt1+QXPW zPzW--7o&oR#ii4U9OPaVj4+uG{h0tYFrT+%0{ocyOl}pQD|q2K=ksg6*Mt)GOd)Ws zK&6y-ko>aXV?mldOIkMtz`>#`0nDlYb5p;agk@@S=Yg=p0CyKqLcILKo|6pP?c(^)*YT&AkdPAlAWob`2X7q|`J3LHF>Idudgm2_-}V>IBS&e-XC)yGu-CitG}-Xsd3gM%~-0M0w0 zYOiptQ*A9!H7JgkWIzI#(OE6-5Zk{EH1BNqS{FkzAYcf7sdK|Siq)DfCE?~977ds? z-8`{qR|=_aI;e(PUQm!Ihd@ki%{)b98RjRdUZfRjPoltjH55dVF3zBI+~QVN^Gr|c z@=dBGS=wFM($0eMH|)!Z`K;eOsWPK3xJgrImLZSVhu=D2ac?{2ASLH=@-}bmmkGVe z&C?5j%PU=>gZWrvPq91Nepe90>|)eL7@iBZL8cdfXo);d%UisbIj`xu=z`9ci;9e$ zQqKV|0z%^DKZU-4gm`?q`OO!e8znC#7>4zme`=lo$oujde1ZI_t+PM2?ws+yzaI5k z;-%hb;})46s_&9I3Gr$yJQ6dZUhS`a`0QD$7%E1ow(hkqAJ+z_P%(5%{pru5uh!i; z$cmX(7+9)mHeVd7C85v2QkCinl23A@zr%`^%A{cjLi&FnuuWnvzSbT;osTbiRnW3) z$7lx~+4heK*6FuL67iX_tAgzh-nh)$!F7j=x}Xx`I$>XYc&j=;u|y21)drG)RH@B~ zGYe1d%>jmw)y!uEr)_7#Tx7MDn~enuxKX4>WlaF&><{n{OFCR@efgW_sZ||L(V7=> z)OANaRh>@F$5#c%0YQUNe6m$E;;n=}m{I<0Qii1Ux!;y{p zzdwDEKn5_uN~|7jUivd^{+Vw<&YHf~ffKqML$Op;am39ZD1bz#XF_yLHVX0!eB37W zv8D{w0=WJVz?{2GQLi6a+u^6|n?unXOpl~%D8@QWOtFZ(r<_`PWyonM;3}z03{~=2 zg0dWiN)+Cz6syQGfTw8d^5VvY)6QUr2FWcnLSJ#DnAb?D$NV9iGGfRBr0O#71Zx2- zoBRo2pN0m>fEY3#;)%zyoaAu#ni$EkEA?BIQfQ8>MjopfzgF78p}H2y^{aP9aH&Ok zRm@fOXVU)mQd1<3(k1>kU{KwrR^(&OeX?u{4-Xk)HmO*r0gz19^Fvp&XH(7kYThTx zblS72WPQ&L)I%3TU-h0%J9{x_bxk>av+SA0eBk#!B^(C6^;>Zy_BZinH;>+I9-G^^ z^1+jzP6kTYtc?9lywa3AveYwYa8rpsF;{TaQMFvhgz{V=D1@`$ZcSc+f4%Mo()*Rg`n|5?a<_D^UtBC{ z-y2EKP`<ng#?-#JSo7E3l;yp_2g<)LLvgHfBv+uQt_&2iwSp{aKMNf^VnR6G-6lwm7qJgD|DtU;1g6U*K3-~TT96$t_!=wdXi%`2 ziaU|wwIf_7J=z1W*Q-Oqww9V-e1F@ElYYY`)9xMCuH@^G(`HRe;z`sc;$kU%JH1MV z;#$=__4$fQBXU8yu*PX|pfjcB0VFlKvL9YwJNI<2q;D^OD4PU~!?I_JLbw8Cpx;qj60 zTbJij>(tasXc>>KTPXSRknK3-xYTTx!D&;`*_zEfG{sANeA@f6CCvHPY~CSm39i|U zL|EnPl@!m}`u(dL;Fc~ufV5v7EA@sc6$rp#1>ekM_5hZEfQzDRFK{{vjSOypYIrHrkE-YLD}PBC<$CC1czsbM@G3&@Mk z0ZMkz6&4G2rK0}rC1ZA|XxGwBP%eAS^W}DqtsBZDcimBdwB|#4`<^{sb%AqmK zQfyFB?~mwkGQJ6FjC>P9qm#vp6}xbJT(W{17jHi@BFfvW?~p{U;^~`% zBcp0CFuz88cvOo<7wX9$BRJ7BSBeOKz)JOJe0O`d%$AH+?HO5&eFr{DD)xfkfo)nnR8GUhaGnF6ZEa{~?7&Qe6iob8!vK6{;|D!?@bOj! zC3FIn3;N1p(V}w4CBDZv;mSB$2|>2RqTfVS^=y~R!{vcI(nQ-q%;@-Ru)BssBsB(6 zj6pH!hGA`kdEcE}o;rHV?FkY5f&Vxs-|{0mx#pvYrbNzjs8k!Oz~zQqFSyh8tQLH4 zkxsm*RaV#z=5MDRO$oPbw~h;{9i0if18?t{1{j;JFF6@|CBhopTt~W>!S!D&PmwuH zSUtOTY$>jsl1sj~BKSVVs{3m$m#(`-v(laK9XnjvKk{A@Os^YC(F1L$#4>Km>0s!3 z;)AT=uvcX6xmfq2^^P-aDVM^u=0XY2z(0_T|B+1a>1VtBB$v7cRI_qdPR}qbH1K(x z`#}72{oYEi4MS$A%_6BNWf*Ddxghn=+GqDSKEI0E5X!ufw!g5%_JXbGWVEew*SQ0$ ztHLuWI?i=?KAvsqSn@x!hLJ_PjsfFR8OFRpI=GnSa{X`rS{i5P-~|Xd$VMk1OLyJc?Qq!4>dldEfsx5!3-Aj1n*rZ~^s6oJA|L4PsOvcWJ4 zlP)mws?S>0_+9ka1TianK*4lYT`qa#CRPiz@=!Hb$XKU^r#BEM@8&I#!XG|B>Kje~ zsT(xXIn!O(-}-~_nsynqV3-34mS7uKSh=VrQ!r+hn<3oZR?8+WziGegklVE?AlurBY}|@OLfp1WGn=6XHyN=>9kI`!II=~P^l2;JoAfMT)Xrw(zb@-_Z1_K?`6Xs z0(@822p8HMbD{1{yA3r-jBvm?Jx^qP`*W*|T>1 zM@mdsJUoR7`;I2tC&ot(>>qzOS^w%Mcgi=>7j#L|uTub6j3~bpU%+X-+nY`|tupwr zjD57oz+^H4^@;(L4ho9t&vSqr2I1Lt6?)e60;(kqu{h8>MM17a;DRi4uI9C+=E)PV zUPr%N`{ANo(yO452XC=Q$j6b2ei4bW1`WK*PMV8oz9AYWz(G6^%|{%r&f0d0F*IpC zV;9q$Kn;f!Jv&O6p=GdA#YSg|*9k$E#NsyZ-VNNSh8%(5lCE7|U;e1A>>$pIpcB$o z$4Npu740O9RSk001z1~7BTFiwL5jelJ*eT1ntnr>gw}2y?_ye-_F4QASLvba3v8p_ zOeR}EIp9+kT1QVcFWn)csIxJswwO1#Eg(`1N-84)Uba7d3IR!x@DNS^caXQA{jS4- zVa8(ie)U+ZhA3g}Jk@wt{RWxqlzI`6zPcO(2P|(JL{l#9DDFfbs5}c5I|F)9FyW$F zRC9ei(|~xE9(~@tbw2b$vQ|xs@Qzy+7fiMs%?hr&C|3$4)df$n;0zT(ygrUId$KkB zS9LJsVwQEaEG{n&Q41%5+XOAUyhe69BP*!cmbVxdTNmp`p0aj!UrR9%lotq4#|i5o z1z%7`=t4e_7pNhzMn5?D6!F*Uenz9VXb<;Ri;B7983|^-Wt>h&`$!wtI&}$o6zBM5 z%iL}UaT)5;IiJB|CtXVcU%3WRfJ0(@RdH$uY6WFElK~il|9>^<`Sr-5${$!TEAaBZ(V5BOe$or1LMF)QA$1U2s4$i9PEDODkla3p6?uXc^#%Dm!Rp?5FS zPXK<7Dgk`f@Q#dv_O!p$@e3)&SUhg8TdK}VX`z#s65<#KKaDMq@j~>RR@)%hP&dUL zW(z_lbf;9mq#tLQ)bs_8XEjuOOHcKr9v0L=h7)?B-xiUBMuL*klGDrWM!u1fJSH@%frI zILHGeD2VCd$^G*nC(x+}27f^afyg@r-ZFIpb>UUc?~(ys=Rz=IRz!S8!reS|J0fDM z6i=qNmG$fM>anp@huk%SWkxf;0nUmA6o60e-xnNnWGIYzpPmWqk&%DUoK?7hQVz9(JZFAg~)Xm@bDx*GRodD=0~RCA}6b5q&{O!eCi5QGbpyAx%Fb zbq5;8*S@xiA?5w(s{?P1a)iK@Z_eG`nE6Z{gPY`e1Xtb9^d}bW)_K%-ySjQRE7+Tr z?@0^56+K#^@V0e{Xkh{%M6kSm@A@K8(3d)~F%DHPjCF~ex}iC0K_A@20uC=A$XfO* zVtlIuoEc@o(v8;jS#ctDDIOxiM9)PX{@YbR2((xjtkn0(1|2v*@;pKrI#n>f zyd63>@a&c=qz+%?GDIMBlDqs_5t-cC&kCAUv5*;xi&wwq3#EOSQx1o(LrHcN2blds zp@|t8Npm?)SwJD+k`%{Rb<1w?f@DgSwP|7OnDae1uN{bN}$z z;v^E z`GK7>n&00Etug@t%HE+AynsLl(wo)qA?f+Y&0?y(fBeVIhsF>7(Yg{&v44a@|L8QX zKx$IPo~rIKE!77rsx{C}T$r``S4vi+bxE`FnO0GcL|YhbRjQFrg`5f8=Cv{rCFJI< z(?Azt1ruk*;P<^_hYyVZZZhEy^~Tw&8`EDQ_xdrMV?#kvL&Y`4`B5F_|Fi91fn=fK~4~2r@%l9GbryMVE zr&_guG0;JOT!i|NE;m04(khNos0j%HUCbL8tF&cN<5iPVb>zUEGbEnH*zT(ChqhCu zUJCF;`4(kb9J)~`HNXCN?c1X^uv$t}V&O{#K^;^z2&yuG^X}?Oi%-0Fx(uiZJt=sp z-j2G5lXDC0=agAg+|4V`VGIq`-hvP{Hm=OIAIzTYKv69P1#l;C%fE?zIs550g6;*I z`Y+oyMmw*Y!;Qt5(uHSel){$uVN$!cL>Z^GY!C`AYTGR3DpO-Yhaht=G&>1!LY}WY z-07o>#$#Slv9>TRAxf1;lODb- z!R=@D073zu4Dr7?RaG40P;HfM!j7~hJCl5Elx~pK(D^A{t{D9FF33>tcy*PUl3UQC z6$L%D3AC8oXRSNSt)r*5B~A%oal=%}NGGAJzc(!#bcnLbG>l5~VyAbrWAbUNOy;uX zp+)c2bxcPnAxB(U1nCCO6N1|_lYf{LJXt~+4n5blb1cqX*6Pc+$f(k(_LD@mC2k8f z$E)>w)fBq1l`6}}Xy~NzEnefcPRnmrC->s|j5d80>O&Q6xXrxX`jZd}?zX`qzAu|L zq`-3rot}MLXH-gWO}+qbo7x#)HZwh=9WVol(%iJ;u2-u&SJ=3XmGfY8o4IN95uZ`A z^F_~9I@FVNQcj&`%p^raF%D?^GRz98{bz!S`IPpiHGgGo_DAuyNaP1mQ$k3dKn8hU zyg;XqQYpfZTl=XY?c=7GUsC2dbZ}joUt2vMUpVCv2lT0fmXn@Mg0Qt z2s%8Z_&2b|8Cl<5*r(Xpus5hWh011dGbp&kGrBuI>XA+s0vE!`=4r=Fga=_UYp54q zVr%Yk%L@M8iOLBWQF@;I^y$X(r)$UO^tj^w;o9T=8b0dZwXWQ3J~;K{!Ns*}4`HGA zj{YiBo}ID1vWA&G50 zv3}#u+PAk+d7An-#Qg!Ig8+O$gTL<2w3aWl?w!?6rtF$f@+*CA!6Y8w2H3~Ole=HG z&i*LX*w*77TaUFLmNzba&_03#iRTq^nDIJyn-ypN!06#W48QaKuZBk;$Y^-~J0ph= zjt-CherkC9y{WPB!---OR|4Jz_5}-hSm1P#Og-hifJ`Ml7SXrE^g{8k7kbrJLYO)O z@w3cCN}0gRpihGFkY^bAyi~tkDx?VJ#ka_C`HksQ8#5m0YQ*aDsG$V5b z=}LjA>#hn&xf%0;F&3hma9!HCZG-W0?(2=|&)^TM{-(A5c$Hpyt#50hQIwwC{~E*2EI&z8wKuUG zhdmDg$8j|3{2Ljk%iJm;Fvaf2_Pv1{{bg*DfFFMiJ)prz*KmEGrD7Y$AJ^St3+U8r zT6SHk#pz}(FMv4TIF2XHa&Q)_^myiCbP?35B1h z>BH8Sl}0k^fgOnB!;ri9?cry(b?Ym1T3-nTfWR>b(&XrdX*h+AnH!*v1f*RlJf}EI zY9oEHvjqtLfSZi}j7}>O)Sz#;mja1mN`fH?^vOM@tDUW>6BVH?Qp)3Y?(4@Y`;Fg; zV4)*E``Dy7E}xO^FmfH-^Ql-C3%k<}cJAmo>o~@;`RF{}Ak2P&7biW)#^wV0V_ZOp z{ex+Ad)fH>&BgI3g0Jt3at-&t2KRoT04aw9$0F9SvAA~Xp|cBKpjygHVQb=-WAibD zKpyHPNg#nPMBid{uolR?g1fZbn*JQ#Wzx>GD`J#lojmSKU#X>x(ec0IgIg-sccFqQ z!$SStf#`#*v;pDM!g=(^M~*($0o4w1o1IS!DgtlE))yCTn&)U-xTI#o+;zt)+$##t- z32uPE?r<*wmR3N5VA$`9GuGJglWI6bmdoY`izV{p3dJ|VNurp5`mRFNAcg@-d@Z|s zu#!~X8JQdvXF!T(PPx9IgS1nqKaBILN@eqTjBC(AF(g0~D`J=f{q@Rkw*;WRw11Xa zlW0tGu~IAKq+aqDLxmbyrUUxg)udRN9NjPb760-EqE2W-Digh7%^uaBztU7C<5tOc zxM5(DPl+LZtUN&iah}|jIvyz)#O+GPD({RR9u)^@tTJ*y{40C-z{L32fkX|ap}24K zB$xN*4g}y1j_e2A#5As(z>3ueqiNZbZ#F}OA@Jf)K zKFR!qT3HoL&c?+{j1R_Fmw2R^)wNGt5H$ZsHOwP$1mYni8?`8qJ3hmfRm8?@Otor zEAh}^G>g;yYIs91x*=~6C^;WR4cY>+f6{Dx{-d>P_hhKc*w}>o>l6Yyir9L|2ryKy`WBJR;%*+rtYE$A|-XXHC}Y z4uMjn6rj8&ye{=ptR_F_UC%SIUWUZBK3Z;my&Q^%^;0gmG1w!}W^{tlZk{?zs+%OYv#8nlC28@sfjhop zF>4`NOI=^>UZl5x!Zb)D#e8DYsiv9p%p)A}lZW%$;KMspQ}1ni<(1$4?suCHj*lNa zG`e~J_`9!6j*d+1f9HSv?|-Is{G;H{Cq}1qV~R@*4Sm61D6JBgwMYZ>)2Hh<{;c;! z>|S&315jXjPn6lanU%Gl8VDs24h^z}-aooX;>G+Qoj3T8KlEpzna}qcq6;@wXLsi?cd&?+xo`#S6|=S*Vmta z{k8tBul48Ou$b6Sr4CRrFwN6PCH4a8anKASu@j`hq@mmyR?Tw4@i>8`ZYg!ywk4^j z)h>)1_Eq!P*U@M#cMG;9wDUs+vP2)%!VXZFhD*@w8WfbN$J)pNbpQd!4iTjKlxuwutg zYH&5VW!`3CMhQ^N(V?abiLfDb){~$8@n?zHxs3}aF#uqtdHbPmR9^?AvvefT&SX#~Wfn__ zBY!>FnEo@=m|0r?av8^l((_jJMDy_@nU##GUV#<10xVkfoNL{(*BuY~`6qWj@-ury zwhm4Rw%s~<3NZGV4b|S&XIk#nwWagT)erD}mrs*=e9v|N)-2)Uxh%d~&zb-5tn%L& z`CJGQY-9g?a`z-k^DC{-1PwWhmM`C}TXHrE0?K=CQg{gv-RQvmIF7hytH~3l9k*p-TXg+^~4B1UZe1f!^yzr~>@k2>|Y;xpR zhepv}OxcnXK+fUDJY=&hj8WHG6A+|R*V4oshoJUkq~Xp&sZfQi$(V5)4wNgFv#dZS z4*C;@07Z@^nw1DZ)p!@Oc?xMmux;aUZE^nM9cZ089kYJo%F%8m=pv8;KdTY?PLVkz z#q*_&A2Ob5X{gZamk-IL8f7m{CJl}{864X`F+Mr|>#3wx6I?w$^L8#%#@1ff_Lx0m zlT#z+(euPXW+|L$tbKP>V$TY8)^rn~ZlGbdz$KWaC|n0Iu9oanqZS4ha6O8cb4>|b z!lVZlRr~?pTta0J1#g2!X%_ws2U z9Lyy&Q+q~2N?YJAKp~$7D92_+oy=afTtmB9!7i4}w%4lVNGv;yIja=c&~54+t?4ng z3lV*2aC0ESmBXhsHHVmpjb;1swqlxyVh z5ccib`1}iPq&6zUE-+-lg^45cx~35!tfChWW|){>&;UH*2!sIm7o@wX6$N(E#Hac9 zc$HycIoMM;T6wR7e$rtiuap3Z(0)nn<(AD!yLCgzU6x68sFFusa91HG)%1W8EVHD& zSmP(4$BM~Eox7M=Z%Q*VtX4Lo0@PBP*^$lF%hi3u`NEFu&_LZpuZ0gH_hGwfV$hrm z8ma39wE-T=_jApU?rVe|)F6MUW7cHy?H-@FX()6mf^c1}x%(bl$;W6bAEkkqy;DJP z2iNR~Lh7S1J43TOP?^77-kri9gvV!E2`;3SIAWE1jhQ#MvlKW6zi2fDvsJn)A^v!T zKCQG*^k7OD9}NyvwqPG987NJ=>_!6mH`uzb?wPI>syoWn!9qTxI&1LGq;guqFg(yX z48cE4M*Hejak!`QZ=!qK{a&P{&*I05{i>3kD7m10&LaZg<wP@lLLMbL4a)2&%t%_UX?r~;wky{OXWIiBi6*_n~Xk}$|?f5 zRLo&`QA(-^j>hf#DWyH4p-|KCgQcA-5hL;%vfa$ZG5|f)@qi_Bm@-a8+7#VOJ7xGm z?LIY`1;VfTnx5IRlT01cgvpQa@~dJ0c4|i>^{bra2xY5sk+3Ku%U^%d_kxe|<`JOy z>Gek+M=H6kgAtbk_~H@0ClvZGzh*U2lJ@K zcxS<|Eya%>c)DLZ``8UxNP5iKF=!urRFaSWH^qvijO{VHE zMd{i*SX+2jRKI7+YUPIQgSQfoI$1{NOnIBT7mID_iit({1! znMZ=nga7_RGBi0l@$$Rl2S%&o?~7rp7+K|7y>a&HlShIAmj;#ZNG5Y&^w8+k=mGpu zQc?Ahf0DGep53X_yAx1ot_9#X>NpG^jQ}I!g91S{gdN+1jC*e#H0qSoYef> zWlYb4dNtVeq(hiVgM{E|$&2qNJugo7V$p0aR~{;*tOQI`uXZAr`!Ru70g|^_GTE!W zYSx-!`enF#GL??QBp^bLDL#}}#l@f67cb@pReAVho6`AGO%^66xzw_hH@bQJ&*HEm zJoI&mK_#(IJzrp1A8hxT*aDJ=fi4HB$MZvC(=f|9xl*I!xcV+6sv5<#Be;>JopswH z)F|p64US;KQwOy7-P6rQysWh^PEP46t6#l`&1WtxwiPYSo-f9iLI^up_#0 zs}!YJ=cQy$Xk98_tGjK@`E5Zdr>!}^tz5N`t;@_H)=tY5;}W$~mLAB~fYBO+1R9s8 z1&1oZl4PcFHH+fEA`PI>H6cI{Ko7$Sl?BCN*LO+$IWgA*K;Zb|(hZ@@;e5f%K=;7; zf+t!0!}*!61N>8bkfY#ahtnA~$U+J1g|&iMO%kE3&x{t?e5xu?r~w9hv9=3}(3)8d z?9CSIVBph)f^`Bn2`?I*J2-auHv|XF3-UzgRAQcyD5JIw3lgZCTTr3)VG&3JpUvmR z48@9xzgV6qvJ8c1P!a3KC$R8X#N3+zV3>E6+)NSjp-NA?pq-cLwF}<%wL9W0X1AAz zjKMWSAaSnkMqT{vg?d)Q9_oOr^pvQx^Ik4mKl!Pc#sy;Y5T#@ZqpcS)(d_~O>p4D& zWY=Ta;&^pwj25R$Tup*KX`MR#|L9b>df0}a`e#H;onSd9-lb) ziZ6tpqiAt4JnFsu3K#&EV6dCoMTmAHJ*r|*{vqjU9{Wbz75XUNr%)$ zl?4SFfc>r2!PK7Nz-hoZCCYL0#AAZ~!K5a(<{{J&;8~|OHPcW{1;C=cW_Jy3$0KQ4 zv|#S|uu^6z3S+cfq?yi#lq=-3kn%G(dSGNiP$xH!LO}Vwg#@86Pog8+N=+S40>9QXs9mQ ztvGfhp7MHCu!L>;>Et-@_Bt4OCnuu-;G7tBSt=kI3gf%MoX@ouF4%!{@rL?sSRWxz zZIf}OqUb<5n^%EGeG1LTkUwlen$an0JsRdL$u)-Dd&QH_Au! z(~XOtf!S0@v};SBXvbO;V~2g~UUh}8vd|^j_ov2dBflNZjUWE?*umO+BZo1#8${|a zmEv$oIqIZ2gX0Qq*L#tP?5lDjUQqska$3%@@fGT{*^1ul$JeFw0C6NGB(ZY6NxL`6 zX|cb97F|xw9LSjKg+=8a9&6oL>})h!IvLH9{sA;wpc50!i^@E_!p?UX1s|}3Pv}f6 z;06q8&c;P`o|Yn)K@T;X%M~j1PDUDV=}&qbr+LBuyyW|!z)!L*t>?j=V9F?$E~xP_ zp{(=%L!FuT1h3dh9-I;~%!Nl&1_ro;wKBPx^W!xfB1B~oH34mI^TT`2w2i(2qvbl8 zR>H_id}0rNXwH4lUgzL37|gykRLJ>LL;Dfg?Tqh3>#~Y83H6CS-U~Fm6^!UaWql6` zb>eIC&vKQNM+ByWkP&~U&ONz*p4Nig%L(_t{f!gvbY}!5^}V+n?1-Lp^4tS6i9{je zFI|`0n-;pED^Tr^!Pf0$1Wi zePZeN?b3sIYc7p&mm<&`&qopIhqn;ufu=iq3u!=r_?yqM9;_Dp9&BKfl<5l|Z63F1 zRV_N6W2Igs;8o;3p8IR2EuVx<<&s5>d!|go!Iy>&RB8-TTC&+JOAM+FXnGTGfW1=S zd#7^UM;WBn#dBi10BDHmS{~1Si0v5_>7d%CpMr}vR8_~PQCydpgYnQ zDOsiXd_h8!k|nqzAkt2(pKXpez^WzBNoU5>$~}GoVT0nHag3_2u-vuAjgY=7E9=tQ zrEkUS<|jfEe40vMox+YTv`(E?pw)|Byq&xLw(fA1Qj+;$Q2M=qrQ1;+D&?blv@LY$ zI3H*7x}DSMLirl`&Oa+b@s1?63M5V|n!M?q4yd7-sUW>cLJ2(u(~QAhwuaeiNU|a< zI$6g@d3ot<_L0!n)6YM|mRS(m%DGaSNLk)RvbU=w8llq}N&Ov_BS`+UweTLIcW@x= zz*@R;>Aaw|?dwRpcn5X~mYw0vFVGi&@r-x!r}jO3@Lz`us(-NG1Bp zn`j}A8IlPPXBdv_Ct|6X04A5pxft-ISa+Ga?SX&xzU10~`9oy7GLM~{V81uPfUXKd z3%Z<<;L$g(xR^$NsTsYL@FZ7Konka!r0Y$&Qc^H-h)x36R4@PT#vNPc^{{42|JwCkSdXoE-1b84j|Ak3+%F$^A;FrXiCcQr>`AN3V0Bu3CLFC{ZG+&Ag8Qmz~qC6+16}!)bD#s zH+?6@+ad-JW`^gf_#_o^V`@0v!}BU3A=LL_rci;B&{l^p(k8XM<(QocAWyylP=dU)gLqt8Ne2OPq93ZCC`=Uf?F%M zQjRV@r~)x_?y}X1w0}PJBn`&SF?Ks2{Z*P+dHI8G(~HLS`Ckrf%CNCZ_xF1Vw?Ea z%m0$#AA0Q;a=WsEjt_Lz0`k*f{XYpYr(g}n7E6V_rnwB0z)WEl!{CypvZ~A7>Yz=` zF2>ssryqF|ZO>v})npWCeze%UbY&Z<*kx8PdL?>QXF6e0b+}r{?NM%xazu9OA07Cv z&E8i18ge$$8&dLgZR^8g>D^Vt}Zu9mBVX zv$cI63VP90P(}|EhK^dWt$R#&LR8P(VCw<|jb>$)Z&aTN|0K9MMP)_BGqD@Y73;3& zPR!@5tSv$vHWXpyBz=<@&6>IuZR(~z`?O6LlsRfuQD3o+l&PjDQ%%!0-9mA9L3bto z?2)z}__3Dl#g_aIwxNc&O&5S?sXHmuJU4u`5>MHU-dt)09-jWquZl(yyZse0f#3G^ zCh`V!yw^qC>k5TqJWbO8hyseYbRWOXn>XvuGEY5;n0~&9sfZ=?dlvkAu^@5Bt;W2H z-d6xPY9BBb0j$ZZT3xdgXm@v^vsUp4b>1eO>RN}R4XdG3I|58|1v7%DN6<~gIZwaM zF|PlG;69_SB30ea2>E;Nf6DVDU^li(zqm&&w{lE+p3z9yVprgebB67 zw5v^q!Cwpx@2Hkl&IZeu7SVqYmi`y-kL~}>AOy|8CZ9OJ{^jSX8)G*ePwAc7LEJ8f zeTdfcyOfC`lOOx_ug6AT-ZgsY(7WIi<{9iT5`S*3aW3UGE+X&4ww2|DNZHyL-)Ne{ z>&n`qy@klHBv!w8cx-BHWNLgO$&HWyW^8m@^6KwF4teXPq&hnJ-uU4Iqk&KPT?snT zQBdQ#ZBqSZApHD=p)x6^PF?`e`&3j7T!-XWV^fp1${K(E&9DA2H3|U`(yU?h*hTQH z7#_?POM~S+Jc5HGV}}#idi^oGb0h2M&Z0qcg z&C?%)9xJ}WwMr3J?(b;XB%!O9&7ESRs(7LO^Qr4n4XCTHy2rO*3#LV^t5$kgtk*CG zBq>ZdP|bmBlyumemAH$d91@-oT$ExxT>(+7AlWVPo(^Grz2A~6Bc*Xx1tS!-Z741R z;e8XwPzKgB(^B|2`5sz+=LX;@rec?OAf@W;CyoI?wG{TAP-|PPw`Cg1%2`X>jc@F$kF425YsXXK>{AV!{XC1#3cW?EfI) zLDoWX8|DIoFp+aW3!Y`x=_WsJaD1OY9h?zBZno#rf6M?4`bcdr^t+If?Ltc9O)Ir9_Mo+c3%3 z<)vWu`~VH61sbg7c4aGj`u{#w3bIRx!Q2r?=w%pp^4oq7`5Dm0zZ8P%b6Hl+Z}JYE zj8jju^p;s7yS*d?fb0Mrau>)t=C*0)Ob_0Vh1B~|D!gSNPlk(xz9wd!ftk16NeWq+ z`@Z?`OAHkSk4udKrNa7dIOZS$|{ukD;>8L1djZea|sYc zqTH`y3NLo8)QDd&2S|+DfZ*od898)l^zgyaWaRJxse+mu)e}he2pI@w)W7*vM7RF} z5AG^HXo}W~v#a$b`T_k*&oFp;1dmb4z&|hsf}%;^pZE_xI70HsB5F!`sIFcT)v@Lp zS#FlA=mInHdeM~;J(DeD%3 zzMU2D98#9b;d-GuSS%sjP}ocw$&YNzt1&xjh>At*rxhVnRti;f1TBUk$cgEIm*>(w z(QLCAnM?}Uzl{H-rj%!=N&e7P#|FR$?;QB=z!370{vU_(Legt+rS;7{FL4BEN>)%6 zgz(e=Id~kNyI48{;BDzN%1HkcF>f>pfK)AD&gS8IbsxyF5@U>e%cAwd9W`9?v(1O+ zxW|_L&>po{%IXYco~P+4m30WS&)CCRMi0KANPndOxAU6M{`s*C+$Ns+nksf2+!ztO zh;h+w#?z#aihIBJ)9-tWkqZ6?S;JeT$Rsra)rHxOv!8A=N_A)9K~oV~_~6-WsI?Ej zK6qDV8v4Z98couJg8!jE54ic#X-|sgwkHU~AB9+_+ZvIc(1n8y;%jvd5&}3bYy|BN z=!xQ(&Zjtt`K@B^lGf2v5vTxmEPuX z>wM+7@!pfEUFx3Zs>{K*yXl>DYTf$(^taht!Vd0iY!(0O{{9EuU$9PK!tF}7nhn~M zg5*|;)C3#<Boin7RpCm1PyWnM9qwG+9*YHqjcd5J=oNqzOJpYkcPbC(AiNdrvhR03u zY^hw@H&_Nt)8@h>(KZz}1r+WjIH?ANZB}p~TP&I4Lehmq!W@;tsQ}5M5IRXFs&T(l zWM+oEV^x@=Td11N7bT>AO^8Z>Ae$2N;Rc!`_!eJsrRbw(6Qv-m<-4Y*?twNB_QaM{`?UmCl?fiS5ZYWrtHM{DBamd83H+2z6RC#@g z`65`5914PPMdhuA4bZ9l5%I4gIo=qPhd-LV&w;1k^I<#rg1{B zT`hrN0c(XSM<(fN>9|{|4f}mU<{nNPjLWr?UzAFDP#(y42~FdmkxADR&Gxn~Pe1wT zBTVQ$%Ng=S$3&*UR6d@0q+_i;w4V#k6pDG&^ob?yathEH#L$8Fow@;0pExr&Mh$G_ zoj?}k+4-b8`oG^7Y{&s3GQ|UEeZq9^)_UQLBy_=m1{i2Fn^>^=YKohi$>CrMIIuCF zD7Ab*(`64b4P}F6Yi$Eg1EZ2XMh$*;ziHqX-SjJ;2F>n=qK6l3BZZ4>KrWokV_#$9 zoln4o?_n6&gWvjm2Oom@iHemh=* z=*)+s21PC(wLd1{P#kz}=hQGViR(?t5JDikI6me;A_3O~$NN&!yu7q_x8eMD^2C#S z3mYGv)E)@zqwkDh%!0cN3~Y2-mN?K@zj0^n+uPe@E-%qQv9u>UAQ+BXac3!8AF382 z&G@N_gH~%TGq_Gy$~^@9hh>z18y&aAGE&f&Ci8|baEI&ql%F9@d%F1Mr7zZgfcJXs z%x&xl=7KlI*eozpO**RT3W|l?#O?JMA%w&x&WR;`Y4I*~bvOSbXhDcr5I20jqPn6H@AnSs9x!m2oO zPV?cXQqHmKu3h=I_0>@cU?NRPt}_uW2|!MUK$?M2nG&8+hzc|tmjo*m{%Tm~PUb5k znENE&6kzdCG_w*%psl1wrZpgyl-hP{?%*Oejq3AHS~nJ3S8o&E_xjRTtuH7NadGXt z)2%NqD}6AgvP7>kad1WZ!R6{zhZk+2JIbKJi|upJEXmSn@p}^hVCT9{7w42o;C#xf zYP*AyB;@=WC=M3u(GeT3b@wDNG6uU0qx~?dCst8MZ9El7TBq9S!dp$ofz(9d_0O zm6KwAo5?`Zw(DX=AIi49hKbc*=1BS;iGOv<;5+^O1qeg6JOr_NY7_qdy#)#hfGXZW zeR3Pp5TFe0_H8w?Z{3oIBKl(Q7%1lA^r5TwJz&oW@K&vJSAp}BLAn8Xw8y0mQg%$Z zVq6U&baunL6S4~VT6f~7&`Zc?;;B=_S`5q#<(Uspu3!5QmfhO*E^Zacgv1SOPY{xdS}FC|0o9dLijzq9|n?4d*B`{BbsgS=ZB{~djla;XAuhzcx`8>Llu z6gezySo$vtqZM*H%lIPc`_0);b|^aBf}kE!Bb*9pDtxD&g1Zz;Ba=gSvog}cpqz_H zTv!O6>0nW|t^syic{l{TwmBa@JMTzM0a4zHak#CPMDWGi(SE z5(-RhgeCxFJcR}Y+Y7?mM@XbCF*%1$a?^b&r;Y^9*%f?JY*rIhZ73Gr0$N9hxLqoYyA;7!*HoEI_Vh7GAR=W>qF0b%tENB4<#Dr*RrL( z$kZpcTdsE>Rn*o6i#`z$&g>^rB}|&lAn*;JqRER9RypaQ_`k6kQ@hS=ZS8p^&L3}j zce646zC1rDTuyQ{1{;@&ljOq5{=fd2;U>DqAl|=W@8wkxhVnyH|18=cJAj#!svC$XC2d z&pTL&mL=Mf;d zDdsL+F$NH~i?Z%@JB~OF9VnJ|Go<AcUzni z)29m5?x@Q)y~Ujc%Vu3E^pX(wj8G%2Z2T6xL%KF|-kpP@V( zulUQ;ju+a|^MxLmmDoE$34jnu|x;9GgK@ku0NFiG&eZMS+Jp)u!ujS^iMwLI5TR;zF3Yn ze^gtZ->5q9xLyszCB%~*`2*hi7anl))HQ_GZrltvIB<)CUT0 z1z4{yHHRxVgeK?EEeVnybTJToi$M11%WYS;|Wp&I6>~W(Uiq zV!d1)Mj+P|AH+7Q*yL@b4)Z+mil!I8Od|SiwDz;3AT=cMmTdSN%O8zru!>Qqhyk>1 zGA_MZQYe28ixo6j!GwOvfQQ~r)nTjB3W8{6fvwHW$2{#=V2#ZHl2;Ph4^L+EAGOjD z=29q?hjwb8UztTFWx?Z##NA9m(+j>wj2x7n`SeMXpe$Xh&T+PnEkF4w?1yU-g9kAW zO^!ByNH?qmFqm5W$=wrzqPZH3@bpxY;+`oskwV{{rfvcoHpJe zpwDZI0BQ|SQa3KF2Ik(pdJg2tnG3OWNTe-!)cmhvApp4XO`j#_Ff^0N@*81yM0DEu^ubb6i>lSb^ znj#ie`Zp7MF1eqyT*l%3NR^nL!-hCP&oWzJAoN+9+xw(N-&!kB1fE4+W=RDL80!pO zOrTxX(4>cUDEU#!V(YC8ShoIlc2l|*5{8voT!5wfHDp2tU4Ve6<_-X zr&Q0d1OD{^(E>H#c5qT9i|Lrf5d@>G_*W)$T5NAgYE|6DN1r1l4eQ%eCaGTt&(?Yr z?b@iuQHVaqn|5YZ_2@chwTw);L73?NvT}p@k*u$w)mX5`#<*w( zun}MN;c~4OS@}rlv<{00ck`o*_=}5G(B-c2@a@n465FI~{}QS|A&!T_?t&yw@jD)< zj|~_g@!~!RKgJwkz=>DW5HwI90O}n0I_%Mp!xis;W3hGir%1TS?m`uE#(^v;_2hD@ z42=gODoFyw>~4z9OQdo;-HJ%A&doV^Vc8v@<@}WL3lCWkBHe~GCr|F5Xg*w!{wFUb zbOMwVTg(k22oqLU+4NR}Js=qU!rEuw(DB~OV`V+PpHr)M(bu_T;WCB#CKUT&<8AF#&S&NKW!vn=yy-)%#MdMwC zc0Z8D1kpMHFK~|^ei+Zyg{{kUcc%4@+l(c_6KAoM-9GSCZIX%;BM}2bE!Lj4U5fRK zv`Z0}m;_A2bomqvK#Vhsu(&=FLezKLFgj^=O4=sjw9JEWr=TM^a2_L%}Hq8adNRBQ@|Kpj6+M+lrmSI`yha+6OIJ zt}hzS(@qx=A#w5QDrz}(AwWMso=>y4NyzKqEM)Wf;anCE`J*p4t~^i)l8AwvW8g~- zsUQ{W@aU)Ji7P4R9vkeuz4&d=uV86+8y~2&QNaSqCer<=I=MWmF@1K^N7eaRrbg9a z?x5AShg-k$9jsn_531sD4|ddwpiieyHje{ISHG;JpFDz#!e$wcl6>3eIyq{pg;)dW zlvcu34PZQAtO=Ek&T2x(R7FRg$|PU_F9snRA15IzNVRI`oy&W*vT@}YxL2fgEAJBE zVIi6DR5IamED}+fccK44WKP0*jX(PkvpWxG27wrQ>u0|{L~S|$1iJZl!Tb9 z(aFoXyHJqPIo8W>YX+pEgpSwR_qSRLGaXD4-@|=1`IOl0CzF4eJT!h#VhAXOL>Eh^ zymQl?b46oo4{y+dy!a{s zb0q0|CYJ?LUK7D_mD~Qf0uE#lmhk`y)XH;Qq5ptEwO_1UbpX|09$G7U3=m*zhr&gd zZKX4R-L$3t(7G#V{3Fe6t^KgPaVe0q7aopm9&Lv^iUS4vDYe5XQ5(ugxS=CQrWH7^ zGFHS+BRMt+zF;3yb~uhIXz4JV7E9I}I!acH$|uKZG3fzs_cJ%!=mjZ9MXiw2FBc^S zkLfMqYy`};P~TOk7Au&HJCNr&&}7n6%>T2DmTz~wp0)M#RVZUdwOYNRR-*jg=wX7^ zW=SrgfON;`c7gKwQf+uwxmHJsjXc5g8HFHu;_;D1WQJDJBBdEP9@9XgTdj@ghFoH$ zkSk^fj9zx__>btcb<^l(6@ac-L%L;aC%$hTn~%%aXo6B;aM}hX?Es`{w?WBOSqk<5 zbw2V67HeZht{Up6RKS!4NBy{ke#Bo2rF^E-&X7s@N|9T2X9Il?lm$tkorkH&{S0w` zz`aRZjOE>Lx6vPL1L7Q18^8gEJ>$K`wuBp72!?Mo=RR*;UepKDW}oy}0f|uv*yW*8 zohxB^(p9Z~h;d*!Cg)Q_!RoPlms8q{wCdfcEp$HZOeWlx@%T$mN6y>AgY7leeb_|K z3Y!Qt_|(x7ZX)ya#-DGHM2_jJ!;2nCo0wBd0|H=DoFm2vO9T1wwz`Ad@K7b+StCG6 zt$1D`WGP;h!12(?7(e5kj5B`Hfhe2&G?{?PUcM)vq9J-E7vvNjyqG@pDBR7qFd+Dq7>t};kP5G~3{yS0fhLF`yHXA=87UTk;U9>LW zY~7n?As~w;eqDM+x*b23SfFS9Pt6Y?ldA2vrTvp#{!#N1N?>jv2XO?IlsdlLdUOEy z14GR=u6!W)IS@2HyeUWx;VjxG4)HhX7qc`ZPFRZq&|9}p*-NvENlOARR`Npj{i*T% z=%LZ6(cC+u`+t)koBYj=iP6#8dn5Zt2geS-kVuw$W=WmISdJ5U`3v$=v0d(JzqEUu z3c?F;= zP-5iG#&JUXr&=)tSw%b}LcbxRpkyl6bGtMx?Mz#+5M<5OqO*=7DO@Z^-#AJ~N16HN zaR^JzhsT5{gkyn(HR&vtp0;hdZa3}5a~!uMPtrF&y?=8E+Rn$eqPJB=1$QUu6Q8cJ zbR!*3l<6R!W@feu)18?Fr0DQ`20^KncjVyM{)zEPAro%ipKP4H`s9)LGFT(6K?$?- zW!hrMV2yftccD~82ceAQY2dNHV`6R7YVXMBizuGLAJRLjRM1j{3FUi~B7o?YqNd7K z9Yow-tTa$ASGH$!WG`1XE=Gq_`l}5TsYCcf`q1_gw~Gq6wI41@emA8;8I~D66;v)q z3C0sYX;`mBdD^O3Fgaugl*SLg4V8q5klQ8IroaXuSB&4R?DFnM`GvNSet&ZJ7XL(* zDEJGthBOI25a%-;veM|(@5U#7lMGFb9U7bZgFa|O_2Jr}XnbI3u!IsLJ@7(IbH0J_ z*POnleubp##d<_7jK^RaO)ZaDOQO!sAy9&4;9tC@eHCbk7T)BIOq=8aU@DjzUb>_BL5a8cyx?tF2JWy|_RJ3be$0+((of<&r%RwnX`{1CcAT_ND zb}}ferw65KrVom)um?)=K5uqtI}yC7U%pj*r;wocX7@pH&n@37C}9pgw|b`txuUCV z^z^c|&VAjwFzXiV=LHF+#VZJjfU(6us$jQRf3R4;y1aPs2gVN`9Gyr8M-Gp`ztsgU z4C;%>6pMixShQLgEY}OVMz}&mqz6tkEhCG1CjV{X-wyL~DQzzVl4XZ@PD`1rpOye@ z=drJwCoZYxECK$7Z7)bIkT{@s5aSkS^)V(zusnT18!iE8ICJgi$`%Vc2pM?|`Lxt4 zNcx;I{Y0OR&6_Xe@=hy()Lwm1e)!s5e(l1&wa*r@09Y+bg}oWB1C@6VUey`=1H)#U zX^@RVS1#lgmbX<&OGspd!s5#R4s^QJ!AO;eE=e$`^Zx@|fv7iW0HU?XJf8WibqDgB zgLk@BLX1ns5<2E4z!U^-Q0zv4SL88UItDg!#%EU9+2i3`IFzB1OvehAj`VhdXSh9h zo(fh1VLWyXgQ-^oc!SZQsroV=wkeQLAh?z)($KrzU@V}~pILD>g^lV{kQa22g8zTy;9pQOg{I|2BK zPoiW%sh~+I-J6&`-hCKb9B3%~Kdrg20#oI!3oMPD4KH+T+fQ;SvMKVBvCL%CGk}zR z=$-M&siX%KDsvx*f3DwK>D4X+&^dDqUzDai0zHU1U7?AQsLtAF_cuPjihA2+Oj(z< zoA@wU%Oe*?9Qf8bnKVy%Alaeg5WA>ExXw;Pn}tejgW`3WGLtV^WR0#H?VXjSFzr^A z%k{sRJEe|xsr(yz9|c6ySnyRFa(5!}KD;#>)t!p(Rc2xzpEB)cagwylC;tY-%X{$_UeZ--g} zdchgRp!-dmgibb!fXoP`K-U3U;p#Ur@cXsfUp7ykM;w9hGNtjy_GrVD+*Pe9MoPVu z;6vJ%NpHn6$}VCY_ey66g`-jgcyiBAwf%Juw4oK`mgi`k)8L9;n$41P*)(O08}ghb z?0c+>S7bs~;6SevVBi?@W(NpSPF^<7#=6l_W=2O9{@3crHDdrFP7ZH{O2 zNPR_Tt!n%-dC#(#radfc7rR)opj)!KOVvWHJcLQw_#v4Cg9&k<*Z%;ZbryiwXoN16=N}uh+d#gqAOUdwg^laMOtJZ8QehrQ=IG9H3`?=;v_f_@R z++Kl4ip+iX(%1tKK(Mgah4r~rl zw`{Fe*#!f&>D$`U`R3{e8z;YG9&=}ux7j_L0ILx@u{5YGqV^)%yE7zq;pKP74~!<&@%N{Y*}ba_ zhu)j+vB9`bn>WYy5L_Z17DBTI435U`$r6pJTN}H^ahx>T3N(Ez2Y}S$`yc>UK&Zb> zCDSvlTVE*?!Bvd4zOL~Wl(l$cuTHe{7~xj|#>*;IvXx6Vdn zJUyH0rsx*0VX+oHn@Xm{R_mb2wUMW+idp%xdkV~t)n7&B2YHT+2tAwfk`4@&>iP0s z++VfQ94ijf3>hy>vE<7#T?0vqmLHiV(&)n#zXqyw_?#JgjZtbxxf|GX!b|f{;kwCIRCEaGD?BA69{|cpmHyi48Yw%ysq+fQhOJ zsl2*Qj>!-Z4{4S30#FM{PpvkPIC>p|#gh4|m_s`vif&xIgzShDb;gdid|9kCb((!) zK_1}^bvNMhpVp4wu+~&?kJm1v5R%S4)`kabJ86aWDS2#zvuae*_SI*f))x zEFCJK!)kBvDFdO(dPsUU<@C_rWE3>Es*lmv2=9-K1hUDYOr=U|7jh23upzdB&AAV; z3MqpaoKh%%`LhRKx!{4qwP<>&xeDy4(;#R^eQ3>WeA zd;_fbL}c(AA#i<=pV0di+_G;zme7We@PJ+Eg|~u|9YuI6mX85e1W*5V8!$4=e9!~4 zU1jyrMcpN26p@c7`D~*_kK`%ysvS2bp2$3cVkDHf?uhaPF!D*q!Y?ik{k;6a0T{ zuS|HMWE_`+z-;_AQ!c*J5tz<_tUA1v)2Brjh;!;8pjcU~*XEb(ae;`m&1P;C0y;(N z5oR#L28U1?KpDBs<}RXjY;biav5*~<8|8oL^u6l!W0W$3q)^Ehs}QwaN3ZI&OW%t2 zF*|_RLkZp2V-FN;A}H7Z57wKIc11jq^?C)>5E=MW5}O>&j9Tv5^b4$7E9Z7oRs2(j zb%{zu z(s2e4*3RtE`Kvl$&QL#HG&i?I&!()o^?gWpl@U$f!`Erq0Q682dtW^|B$w6%@B3WO zJ}LuStL)Z+5i#o>ty=V1cRc4~{w{iUNRt(3-ypS`x@|k@x>O7G>OTKP$W-U5Kpe@Jw&BOJV5Kr7z5nwMw>R*9Fu2#m{;+?dEl{7{)I_ z^4=<}aIqwwHxF!3+Q7i@o=yLg6zFaRwu^XU z{Zvk|OtH?bV-l8*l!Gfm9>Jj0Qc)AiM_3D1WEG_bh!b+T4{%&Rg42FLX*^lopPMWE zns+X(x0Z;Nx&=4=n3gO zHawHAY}wIM>DVee;CYfBp99dWq5s17CeMeD)LUa50iMm`=2|`@%%-wvIm~9(w`c{4 zy2Y@D1lewUb2xA7@GK5@8~7YLH$-^sgA*h{u1M~MkxtJ@5>HzX&TDr-qGdZ6vJe=1 zl6XmOz?|#9dDlg7(>GvE@Y_ENucoU3`@O8`i3c1 z<`D)kUPH@#ivJ5&)B|vbU{#t6X9K2C|0O)DHHfkSkMDsMqkNmnt>Vdp&o^KtSJtn6 zC?3An zd?K9tUD<&hOv#!F&Y2$`(z$afjM;*ho0pf??lzRHU<)&XZx6)VdB)}0PZG4HG8?Oo z@6wJlYnRTg3od!~XzMev7iYm5EO^oLe|C^bST-A;)gvu>Ikn2Nd3p&!$KZ9~3oS%0 zN!P7t1NB;)w2;jo@3hW-h#^v;Y<=RGeK!-@u0knS-B+o{-@3F#r0pv>Y`Pv6?Op4{ z^!k^dI=4n{nr@tmreD|KW1vL3qj<#mC9t2ND)2P;*X7{gu*@8}PiwR_zNSUepXd5cMnU=7m?`mD*y zle_a|40Ri@HMX7TCwu%8q`5UQa+K#ZUVnziizcrm^85lL=BCF3EjQF1EDOrzDd1)s{2!- zul%cmY9rfQfXO8TwAcu=H6lyKQ3b`}1y;ugcR3nox?wldnQm%a@Bz(hXEEuwhJYmd z{8G$rhpfz=al}sk#ds~DT(o>l!a^kAwwaue9o5$u*C~1f*gt&36 zm>?{0l+inSN#`n6EVHMIQ1|i|1SH=+E(yAO7jCWpILlPiETxSV$b1uNVe~SNGvVAS1&YKEz!{Zx`h>DIQF~=xn zbduz4g;GNY;zWvr0BeH6CLVVZ=^%fK`W+Of6ac97Q_5N|k6kCuppMylI|EK7fEao} zgL=oHZ@sT*mL~jXaBK16Vl7`5JL-1s`{qLWwdsKxKa)-ow_2#l~xsmRk<{0=LX?9Sz4}y;L*ZFtTXKWaIPJQ+SgOd74%H%M z8mX1(LtW(U6m2A5M@8o}V{3$~Endg`ph=zmZM4K(fsP@WLk!CUUy-g3J988c4A;7X z^r$c&-0E<4V4%EL9VqD!5GMhF9^iyhj&5^+ta#nFbxiC?T0-FKsJ%U$9*_lP0D|0Di8Jum;ehOAkWJDFt&jJ!5 zF%#{!zhLRx9Jm1K0DjY#N@Pa5Pi{A_9??<;3O*deQ`RCCq>jpU@^)#^9U3`lRUglM zCKcVblpwJWBg*h#@628L7K%mbYe{4hvh$fN5ozrTCI{OMN=9Izh9j!dxzHK)tyIH` z8HjmA2`0N}yjn%|%tL1t*SC*|><`t=I zt4g;c%-9VcM_#cyJ`R4LxB~mV+S<@(0+?2lG z40I+0g>uv~gNw_5>pYT5q!EHIzIRXQ1c||0aK~WK;by(yk*>{wD%RK6Xw-U%a8`C@ z<+{1<%gvJ~Hl|M@l&+R?jn%+dVput4lb%@(lX*WWA_^GFl}GcqPPEJ$?RM6=DpDtOu1oOir^3MjR9fTF7k zO*(rI23tu&Zvzg*q|<)^VniuKjn`;`Mg^nsi;i=H)kkbK8!n;ehxr@o(?$Xg>a4)Ovj2$YClqLhs?uPYp&;oaz1i z(DC6z{RGkzEq&ED+#h{9G#sT4^&Rg2V&G8JeSG-n(6RpaqT_>yMYG~d(Z24EFPo!| zfkXX+$NDkd*iK7s-qFmdG95jz7K!|NJ04mTmm`HtYGWzL9~U!M-C=X7Jd^z{v5Det0i4C?@<1{3+@i zJS<-S;)~;h1BdW0$D%_2q0a}0jtqVFHBHYjP0z5Jo@l$F?QY05Mr~2<_~6LE7yV*| z{x;k<{B?`&ws}x|L@ettej+^UqFKnGkN&BtDQX-3`sm2eXTyC*KNmZqF!cBSLDB1x z{^3vi#NKJ3pZ`A4=uTBGpNg>9H_T9G@DMaA$!!9&+9d2J@qcy#LG-@iq2ov2i@Jx7 zh($jnCSxc%JRrV2JTN#EHDpHmj(pu1I~_*`{?>nZV8s1I)1Us-{2u&sXH*b7AlLsH ztTn6vYzTWT+xm_Sh*cRJ=u7&F=+@wuErIoppi+f7PnOd(!=71kHw^X z7B%$uef_`j4Wh3f`l1o0=Rd?MwcxUd8QBdpyDR#0f8XHyN5uY$_Vo=MIr23gy3W4g zzelOVM}#mDujP;S9~uznwD5V~;NOM77-}(#(9!p|A!ObA`aL5h#hE>Nd<4Xab$X+= zemEwuT8EDx8ySW+I|llMSW!n^%mkdmFZ=Q2^$j2TT)u<9i>dvz|CkU$(Z_wqjvxDc zAj*F}F!*mnFvp34REa^*>+f_M_h83r>fUh zP2DTQYscyAFrpXpMNnfWPr*(8;(K%v$+UINwON@txAy!x)3VXe#1t0Q2Z_1aI5}N@ ze4>2v1T-#{%jN2$bCn-%fFtVMbb0w9Pe-K=tp9vpXxyOM{CqQpzt1H~3=9Tnwr|`o zUw>A8RIEIntX{lbxw}-of$Ev}eD&tV>b+lO?*o&&T$zMUW5TGM#7uW8YN$@#ua>6P zZxt&SUsN7m63SOZ+7|_7DrXlqMt>GMLuGynk!Y10i|dbP0u)=PA8m}@Tw9$IeMFzj zEzPiCFRRH}Q^6A`)5EXbfunufJ{#KhZ%4PIT{dO7Y3y zlO5@OWF>47Q(1mKMaGvf1FN%l2@l<>s-bB}J{6;+XO!j{%$_0J-FAXl(Zttb6OVIR zON33Xw)m6p>0gc(<;1~Z zC8A9mBQrW3>6Id)Qen<2xF_qp2{IXT{+eOj5Hb{;0Mn9og~SW84(i3B=V@ba-a%;N zs%xfzqQ5VhiiSoTE|63&M!T*Iqr^UfgTZ!0x=B?59Bn*GmV8jEFqq@ZJ?KFOO_^io zQHCzullZ6@2y!Y}F5%6dN<|8&Y~@dKsrF1yJ~Gm(t3c%piC^O(!O8#Xqyo&T{Ech1 z*U*IGU3U2p?F>~YNTObZNqSoPo!=Lqs@+cv5JeCVZ zM=#NrL-osJQs-?CqPl^+n2%Gg_NA#DZHP~!Pl82l>tm#Y%d`t~whF3>P^dBTbhKg- z2>z@!HL?VRy75f_&v}f;^BhhH75pQjse|-$K8Q6cFcBvj`VPU5>m`{1|SQr`sltYo#=*LYBOjCbCO4V3iA=f&`%x z#TUcLpy1V1oK)RfS;1bqFG~pSawX{|5`uSGJ^N2c2$t5z&+)}t67n%rvV`a9mP#CG zR`^5=)qK>TdHH?4%;Hsv&mWda6yf~g{}$=NAO9Cf4=%h$dhmy@l^)EXc}?tWc%aEZ zPLW~A>vZx%?UnM`o4k)KFm=iA0mcq)K_q_+DO5aMV;mMe>67#J23qiV_0?5@K`2$Q z(k|Ah1WEAgNka;J+^hN^g^%?`MNuA%xXF~~RC{Np%h8mb4ycHTXjDJGCBDBZ?j(Lv zhFk(?0O8J)hm7EjkVc-Eq-LcB2ay^w8%?t(#y%J#PdvCeRAcBiq$LPYbZ=hGbQp$g zE-wQK>pcLAs4>JLI;5h$LHMP{R#4g=dhDSsrw~`F*sDZ#nEFW#TeI|ls-7yJxWt~= zi%&p@t-6Qc&(oMJ$;py~a`k>^NH0+unkomTqps%(*z0S5T-~z`IwBZ6L$Xng_0Ntq z#~&lmThyQ z<0xc>Nm~4FVgKOcneJo#hobFK$JS<{7AYKngTJ@ z;=bH0myJE@CdkK#8eLgD>Pi(*MGukKC~&q0EqZJ<<_aKk3|U{?pNX-R^0^Y~tY|aE z(opF$05`FdQXF~=ob}R5iAh0AP+QWd3fEFwEQ2+4QK)kwbIb5*(d;zr1xn8Gj}9@K z*Bpp(v8wM=N*2gV(;{hW!l?aNDD3iaPrUNSi8wr!?e*k@0)RSaLXz-^H+F`WCG-*t zAxSla?xz4X5gH{~r9;>54dDY*Z5_R~OXvhRWaQ~nRMLvj9UixqlMxAr96r8p$0Ga< z$iv6VziS+)5=1NAMU|-w<#ThjnVM8jlZRE7)Yi5+(9H1dHCt%tHOKm&kUp_Tqc^%$=Vqm#$cB2IL@fOi=|kH9T`)LnoVJ1#$3@6a5@%fPQ=Nr~B`g7i)>#1qJI;MYs zz}NQhqaGW*Hr1vX)UE5HapAxKUQc5?S0!J7WjMt7^>J(o0hl z%v;-899|+QC{ZRby_(RIntY}S?;=?ie9ew`fu(DIpFzA9QN$F1W5k>V2S~lk*%YBp zTU;127!sxmPJ1l#fte19NmdV867XY0?4#W~{=_RzE%1UyiQLn;`%&Uwt#kr(-q zrpd&S#AQYzgB#o+WZ~LAtS*-Tziz;~6a9IcY4duSHdcfyw0B$n>t*BY-Ap!4dpH}X zX5vl9+r*n!OT6*Jfk3+vh9Mc~a6llIPcE!I`!*?pMu!P{O&>Brup6iO-~A4-RKrbO zv#o(3QlNDk*tH2wM*Y~FWOLz<$G$#xWazVqR)$WR9YXU8OKg{bYvaLDGpuU2X@`z& zhtrP%9�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

      QY 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 diff --git a/src/bin/SOURCES_OF_BINARY_FILES.TXT b/src/bin/SOURCES_OF_BINARY_FILES.TXT new file mode 100644 index 00000000..93b4d459 --- /dev/null +++ b/src/bin/SOURCES_OF_BINARY_FILES.TXT @@ -0,0 +1,117 @@ +All binary files on the 'hamcore' directory are free software under +the GPLv2 license. (Except WinPcap binaries.) + +Some geeks should be interested in how to rebuild .sys (driver) files on +this directory. This text file helps such crazy geeks. + + +How to rebuild these '.sys' files? +---------------------------------- + +Windows Vista or later version of Windows requires all device drivers to be +signed by Authenticode digital certificate. Therefore, SoftEther VPN Project +publishes all necessary binary files in the 'hamcore' directory with +'already-signed' format by the certificate of SoftEther VPN Project. + +That is the reason why the all .sys files (device drivers) are already built +and digitally signed by SoftEther VPN Project on the time of release of +the source code. + +However, the entire source code of all the .sys files are contained on the +source code tree as follows: + +- pxwfp_x86.sys and pxwfp_x64.sys + You can build these files from the source code on the 'Wfp' directory. + +- see.sys and see_x64.sys + You can build these files from the source code on the 'See' directory. + +- SeLow_x86.sys and SeLow_x64.sys + You can build these files from the source code on the 'SeLow' directory. + +- vpn_driver.sys, vpn_driver_x64.sys and vpn_driver_9x.sys + You can build these files from the source code on the 'Neo' directory. + +- vpn_driver6.sys and vpn_driver6_x64.sys + You can build these files from the source code on the 'Neo6' directory. + +It is recommended to build these files on the 'SEVPN.sln' Visual Studio 2008 +solution file. + +Note that rebuilding these files require Windows Driver Kits. +Loading the re-built .sys files requires your Authenticode certificate file +if the operating system is Windows Vista or later. + + + +How to rebuild these 'vpn16.exe' files? +--------------------------------------- + +The vpn16.exe binary is the 16-bit Driver Install Utility for Windows 9x. +You can build this file from the 'vpn16' directory. However, you need +Visual C++ 16-bit edition and Windows 98 DDK to rebuild this 'vpn16.exe'. + + + +How to rebuild the 'vpnweb.cab' and 'vpnweb.ocx' files? +------------------------------------------------------- +These files are ActiveX controls. +The source code is in the 'vpnweb' directory. + + +'winpcap_installer.exe' and 'winpcap_installer_win9x.exe' +--------------------------------------------------------- +They are WinPcap binaries from http://www.winpcap.org/. +The WinPcap license is at http://www.winpcap.org/misc/copyright.htm page. + + +License +------- + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License version 2 as published by the Free +Software Foundation. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License version 2 +along with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +Neither the name of SoftEther nor the names of its contributors may be used +to endorse or promote products derived from this software without specific +prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, UNDER +JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, MERGE, PUBLISH, +DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS SOFTWARE, THAT ANY JURIDICAL +DISPUTES WHICH ARE CONCERNED TO THIS SOFTWARE OR ITS CONTENTS, AGAINST US +(SOFTETHER PROJECT, SOFTETHER CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), +OR ANY JURIDICAL DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, +COPYING, MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO EXCLUSIVE +JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, JAPAN. YOU MUST WAIVE +ALL DEFENSES OF LACK OF PERSONAL JURISDICTION AND FORUM NON CONVENIENS. +PROCESS MAY BE SERVED ON EITHER PARTY IN THE MANNER AUTHORIZED BY APPLICABLE +LAW OR COURT RULE. + +USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS SOFTWARE +INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES PROHIBIT ENCRYPTED +COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. + +THE GPLV2 CONDITIONS APPLY ON ALL SOFTETHER VPN PROGRAMS WHICH ARE DEVELOPED +BY SOFTETHER VPN PROJECT. + diff --git a/src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT b/src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT new file mode 100644 index 00000000..93b4d459 --- /dev/null +++ b/src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT @@ -0,0 +1,117 @@ +All binary files on the 'hamcore' directory are free software under +the GPLv2 license. (Except WinPcap binaries.) + +Some geeks should be interested in how to rebuild .sys (driver) files on +this directory. This text file helps such crazy geeks. + + +How to rebuild these '.sys' files? +---------------------------------- + +Windows Vista or later version of Windows requires all device drivers to be +signed by Authenticode digital certificate. Therefore, SoftEther VPN Project +publishes all necessary binary files in the 'hamcore' directory with +'already-signed' format by the certificate of SoftEther VPN Project. + +That is the reason why the all .sys files (device drivers) are already built +and digitally signed by SoftEther VPN Project on the time of release of +the source code. + +However, the entire source code of all the .sys files are contained on the +source code tree as follows: + +- pxwfp_x86.sys and pxwfp_x64.sys + You can build these files from the source code on the 'Wfp' directory. + +- see.sys and see_x64.sys + You can build these files from the source code on the 'See' directory. + +- SeLow_x86.sys and SeLow_x64.sys + You can build these files from the source code on the 'SeLow' directory. + +- vpn_driver.sys, vpn_driver_x64.sys and vpn_driver_9x.sys + You can build these files from the source code on the 'Neo' directory. + +- vpn_driver6.sys and vpn_driver6_x64.sys + You can build these files from the source code on the 'Neo6' directory. + +It is recommended to build these files on the 'SEVPN.sln' Visual Studio 2008 +solution file. + +Note that rebuilding these files require Windows Driver Kits. +Loading the re-built .sys files requires your Authenticode certificate file +if the operating system is Windows Vista or later. + + + +How to rebuild these 'vpn16.exe' files? +--------------------------------------- + +The vpn16.exe binary is the 16-bit Driver Install Utility for Windows 9x. +You can build this file from the 'vpn16' directory. However, you need +Visual C++ 16-bit edition and Windows 98 DDK to rebuild this 'vpn16.exe'. + + + +How to rebuild the 'vpnweb.cab' and 'vpnweb.ocx' files? +------------------------------------------------------- +These files are ActiveX controls. +The source code is in the 'vpnweb' directory. + + +'winpcap_installer.exe' and 'winpcap_installer_win9x.exe' +--------------------------------------------------------- +They are WinPcap binaries from http://www.winpcap.org/. +The WinPcap license is at http://www.winpcap.org/misc/copyright.htm page. + + +License +------- + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License version 2 as published by the Free +Software Foundation. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License version 2 +along with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +Neither the name of SoftEther nor the names of its contributors may be used +to endorse or promote products derived from this software without specific +prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, UNDER +JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, MERGE, PUBLISH, +DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS SOFTWARE, THAT ANY JURIDICAL +DISPUTES WHICH ARE CONCERNED TO THIS SOFTWARE OR ITS CONTENTS, AGAINST US +(SOFTETHER PROJECT, SOFTETHER CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), +OR ANY JURIDICAL DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, +COPYING, MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO EXCLUSIVE +JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, JAPAN. YOU MUST WAIVE +ALL DEFENSES OF LACK OF PERSONAL JURISDICTION AND FORUM NON CONVENIENS. +PROCESS MAY BE SERVED ON EITHER PARTY IN THE MANNER AUTHORIZED BY APPLICABLE +LAW OR COURT RULE. + +USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS SOFTWARE +INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES PROHIBIT ENCRYPTED +COMMUNICATIONS. USING THIS SOFTWARE IN OTHER COUNTRIES MIGHT BE RESTRICTED. + +THE GPLV2 CONDITIONS APPLY ON ALL SOFTETHER VPN PROGRAMS WHICH ARE DEVELOPED +BY SOFTETHER VPN PROJECT. + diff --git a/src/bin/hamcore/SeLow_x64.sys b/src/bin/hamcore/SeLow_x64.sys index fc8b0710feb7ca1b39076b4a61c200acba19c231..d21e694fb2686e9a0eadc5ac5ee6b0269abec430 100644 GIT binary patch delta 728 zcmV;}0w?|8sRH1s0*05G!!bzK7kF#s^LWq5=E6c+?;-(H&# zyD$3qNfV+!N}+?2B(wc_eHRo5d|MpeE~br%s`}U7lcdShxJp!$j*&rsB^7GTs|_sA z+L1OLjt+BHNX%^Be)*eV|Af`6g`&{8|JRIcww2rs;Ubu>*D@?9-b4>)mnEu8BWHbK z(+umIdZO4U<;AT?>Qr8AB%S>RPuEzbVpdCJlA9A(WiU>gI?(ceiELvV*!U|tdRN}a zh6SdC-qlEa7ZBQ7kTTAHHg9a^ViQqXLPKf|{3r&`bIqq7Jg<7?B2!vd+G?n8gf>ul z95id1(&xn~EuAyw_TMNV+8Ajtl-=iq8n?{#K*YRQL&*n;$BrSSuaLx*S!i3>CQ<9O z_)BeD;OarcZ+DXYzvj|(2ErTaVWj_|y^T8`?S|zr@2;!_Pk|$EGUIEX_BOf1@0Lgoso`r(`-gn-tCIGoW zDnLX?Kky$~6h^dOeyC@^0@i;w@k8DcJDyeOeQRoFKy4B*iq-8H1F4JNtXW;W`d@$k zWzT$#cPN!kdaDQTwX;vjMf(^k#9DX`pD7l)_SuIluDpO-s;D&mh_sig5eo*um9c%n zW>s7)59!~g%8iOm`sj_g!gHB5LxvH*oBj6#voXh1(%ooOX7-isM!Q5I@lwip`c)lSworvs- Ke`GQ_EC2xR>Qs0D delta 728 zcmV;}0w?|8sRH1s0)05`J*bzK7kFaS5RWq5=E6e%yj483{y zDIR)h9fO=2lpd5Kq_h2beHRpLe*1Fpy12@hhCevF-p`^QKj6H67SMu5~cc1Qm_osm;mAC`o8u@1f)o53g}I8mb@^oK?(4+}0t6HoGw}x5}M( z-xiHnF`-3F@-ds#F(KdMW<3$|foB{1pwkF=$CbZJebM)q<&RE(OHaUiQXZQqc?YMY zE4t344hKr_2gu)xn&jGlWgvTE`Km)G$m$=83*VJOAQJxGfcXPy-zu(1UTE}^?o zc*NcZ{^!W7`_~AteLR+V4aH*dp3q_19llqMLV50^qqErWDj{+L8_AQ;lFxrMFgYueP-cIH&4NNhl;TF(Lzj@1B-v(_`I}+bp)lGdZnS*5-v~2P zY+>W;+=&U@&>9h%zQARdEX6y%2Ad6M&7ZUWoqZoDtGD%6A@!j75k4qQ{u5{~Q^my< zocEZ2fR0Z6SawfRG KQ8_3IivR$iI7%%5 diff --git a/src/bin/hamcore/SeLow_x86.sys b/src/bin/hamcore/SeLow_x86.sys index e98567686e4f7f20066fe059e43f4417898744df..a10d0d2c06ad0547bad16e4aa8e8c5936e01bb12 100644 GIT binary patch delta 729 zcmV;~0w(?7@B!fP0kCKS1BL&}lWPJ^1EV1Uv%3NbF9U`D%CpBYtpgB}=`81hZ|6je zNQu}c7F9d5gf$Q!3Bn`*00RI70K&7KRAm7JF#s^L1y)@H12F(Fvt?NX1Qfpsbhkhe zT(2O+d-h)A)-rC@S<20NqjHA4 zJf%7~H|#^A-7n=tk3MS8UpX#~E_6{?!+yNA4wv!R7v%63$RP-)4-4Bbc<&d<8Qa9M z7s_6I+x8Yd@h}AM<{SgDdNi>xxR#eGJHkq>xE59sIJ+3tWae&L-hqn7^4P6a$ZtCb znTs6)a#IF>{|$`(&SYThf8ytRq6i5r$sGp2=$PV1-LRa2f?K##1C8a0S7>N&zWuA7DwGx0j5a74iZKM8x=omV8j8Gq^_?3POoV1N%G z=BIRU|~Renaz!y9bWAG;(zhL%Y| z_v6j1eo3J(v$e4vP@X8ibsiDd4kSnF9_j&V&R{|!qb!6@kZO0ropSXmw~ALgsT!nF za8=9|x>o)y^c3_2r&M8{Mo?foTmXmUA-SH6T_`x;=wAnYzrdd8U(J$Rczept{qk2}f6LUzY_ LWCS>!XdD0luPs6% delta 729 zcmV;~0w(?7@B!fP0kCKS1BcPalWPJ^12DV*v%3NbF9V0s$Fs*VtpgBwMcJMM#brjJ zsta4JfFG)}gf$Q!3BM!&00RI70Kc=HRAm7JFaS5R1y)@H126zLvt?NX1Qf#uJz*pp zf9>9@RjuCuzeiR3eN zMw}apA|87zoUesqjAPb}qe(AIA+U_#(8Ln%X_plV4Fg9Ns$y1W@k=;-YPiRV1ZSKd zI1*36|F9F>45I-PT|s%~IhS`)j8{bJURhQIfPvmi)xp;uTEL|&0+l6`Pj=6LG%z_a zHZ?X{Fe3&DDuzgg_YDCF1Thu_6r;aKpI}=t_tul6hX(8*y2dN)o-hpt2`Yw2hW8Bt z0RaU71cCtob?+iEZO)(#Zt9uyLd8n`O5>~}Yxh4!W+$BVQAGY>DK~|fKEA5H6rt{z z)+%iE!sDwBg%=XBRgeG+K#e+o8uaJ>1&EJlTS0>Yfd}zfIb}*W(o^B4jQ`mH8o!64 z|C5@DmCAIcM}`~nzn=@hjD3*L{F27#fcD^tQw#6~$_Y`ThxRlqcdKCObl;5du$I4?g z30FD@%PRWVuqrUqmfiBIPaGy@Idv)LH!24cI*T;5K)9$Vi-Qtq9T$QLe@KPsjU|gl LDVrS8VNC!4$ks+| diff --git a/src/bin/hamcore/egg1.exe b/src/bin/hamcore/egg1.exe deleted file mode 100644 index 98b8121a11fac55f7a1b8f8d852c7aa9f3804448..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66944 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 V7Y{E#=I5TC{%+Z?Oymw~{}*;>`X&GX diff --git a/src/bin/hamcore/egg3.exe b/src/bin/hamcore/egg3.exe deleted file mode 100644 index c52758b13146d9545267be8712d21d7f038a96ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313728 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ⅇXG`}V9OBE_+Wj=Zg1zZ} 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 diff --git a/src/bin/hamcore/inf/selow_x64/SeLow_x64.inf b/src/bin/hamcore/inf/selow_x64/SeLow_x64.inf index c28d6397..dafbc08a 100644 --- a/src/bin/hamcore/inf/selow_x64/SeLow_x64.inf +++ b/src/bin/hamcore/inf/selow_x64/SeLow_x64.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = NetTrans ClassGUID = {4D36E975-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 01/04/2014, 4.3.0.9407 +DriverVer = 01/07/2014, 4.3.0.9410 CatalogFile.NT = inf_selow.cat @@ -66,5 +66,5 @@ SeLow_Description = "A lightweight helper kernel-mode module for PacketiX VPN -; Auto Generated 20140104_181831.858 +; Auto Generated 20140107_041134.030 diff --git a/src/bin/hamcore/inf/selow_x64/inf.cat b/src/bin/hamcore/inf/selow_x64/inf.cat index a98da97e5bd2fdb2c3303d4ffcb0d198ca114691..f67a3c5685344c4fb5b14545781a9aa5b069aa3d 100644 GIT binary patch delta 895 zcmZoRY&M+WCwDR5b^aeO3$KYsz3$!p$EzdGYiMF%Xkcb&X=rF{GBHOYLX9QJkine6 zfWd^pjKP(`g~5%%6i8b#I58LkMV)}q2q@;p;0VMPKvkANabqCQ2uQjC`Hnzn2$V4f z$`}Em2?GOzVdMG9_Kf0_MVXe=i?ih2kDD#9TmRP&PvJ%OUJIKisTedd%CQ8QF*pPD zg6sylz!Au^0NM?))dXmg1yIZkC}IY-31SCGtr-{_1NE5!?Q{jZ#2iS1>^*Lf$i}73 z#>m3hWX{CMVi-K}jlD?Da>l9?f!t1AsmULk855J)<|!8e-IucYEK`t>NW1gI?c(iE zZmszH;DT}et#660xo;;Mi#pbqs!vs8?AsI~{`Zi~cAKj@XRn{OQQdQFb>y5IS2cU& zdZ$I}y_vb6k9)KJ$zYNLyvqmcG)2sF*kW(TYdkx zcMm?;CFi%y3_7$<-AeMRmHEatZ;6v@lsbBDwd#aw?LIW)>8hpE_il=1zj?4*@rSF- z^eNXN zOyv8IYi4@s&vd^x@#F7lUXykld?V(u^U3X>PnmqKPA(BUuM15qQ3lFvoLX%jZQpqr zIav(FSVXinSRa*#e@=QP+CG2HpWXn5sSX~K6GesVEkfghiuO`~Un|{+D3iCV7>sIx$E;~Kd(^a}lCW>>~Q|XB0SB(oJ z@)s7ZPH5cp(aQ1Tg8(Dfyo1x++4~b&KYYvkKGAE}=X!{U@InNYtCxvm_WZ^SG;cifp$$cm8e$?@6}pC%R<)Ma7wpY(m_|Fe1~Q_3#@Lu!ML*gkxFUcp~FW$>nw7+$ejha*JIXROlCD@>eQH>?Y2&mo&Xqq$7W&2puP0IV_^7e}HFi5&_&3X-}t+x#XQi#pcFSwHWTyKz_J zcM5aeE9T8hKc3U*$lb=W$b4SS&RM15K{vmi^j`07!_s?c>gu4|2P2F(`5$p@dK80Ma%F)R+t9sL8X;SZ*Q%i8Jvm7J&9@U= zN0*A;oL?nc6LYwd$wVwI>5;pcZuf=CGZ%gaZmg1Q*&{Fc+-<#P*s}B|=ZpPj=Ubg< zYdYe(_o+j+#E}E5CfPDwyz^m-?~jD$zsmk^C%kI2EeLaOe?B{ZM#aZGjy3)FkF8t9 zbTDypiP(8vNK!D0GEipY)N1o+`_9YA$zmwRB2v2Lv%x_Y)i-kP-$OUuyZ6*U=$+8y zL{Z`TfH|w9-b(&D$ZRoFC4q6~n=MnjrJg0X9BO4VXTIyG_pqdT>gm}&>-c9p3i)$+ zh0N|4?hsJiH}Ta)i{&2@?>=RSReLS<#MHOrQpfeE4JNZ?G%5q%Xoo#m*!M@x zOkdY=e%6M02aMJ~zC87@`PQoSD<8_`SBl854!)?qGW16Mg*D<{7X!{Zu8DJBop=9r z&kN3VQogg^&+A&zv+;I@Z~d-wA8t?es}@*V7I&S8``Io=p*yANhh{82;+;XRNnvq diff --git a/src/bin/hamcore/inf/selow_x86/SeLow_x86.inf b/src/bin/hamcore/inf/selow_x86/SeLow_x86.inf index 17efd5d5..0dfa3f9c 100644 --- a/src/bin/hamcore/inf/selow_x86/SeLow_x86.inf +++ b/src/bin/hamcore/inf/selow_x86/SeLow_x86.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = NetTrans ClassGUID = {4D36E975-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 01/04/2014, 4.3.0.9407 +DriverVer = 01/07/2014, 4.3.0.9410 CatalogFile.NT = inf_selow.cat @@ -66,5 +66,5 @@ SeLow_Description = "A lightweight helper kernel-mode module for PacketiX VPN -; Auto Generated 20140104_181657.418 +; Auto Generated 20140107_040959.456 diff --git a/src/bin/hamcore/inf/selow_x86/inf.cat b/src/bin/hamcore/inf/selow_x86/inf.cat index 072a6ccdd5de6275a73a91686d3fe987a9c6b854..9812e9ece1cbdaa5fc4a40345d4bb56cd4ed08ae 100644 GIT binary patch delta 895 zcmZoRY&M+WCwFb{>L~}dY5UB#`CINl(!kQxa$=4|gc?hb6N4Lr z0fQxjIfDs<6PPq$Fa$zV24@CGpqvp<))^>g4wQ9cFawIa0--U33y^ILlr;nLT!5mc zKr>u`d^$!jbB4agVPVmZ6JG(8zi!E zX|pl1FgBSpF|rs2Pkdu9a^Mq>pqG$}LyvOatj_XF_e3s)L<8NIviU4ikdR2EjAO1^TKHmUTv5 z4guTiSe4h`Si}_i{5z+_DT9K)mkpUxRKC_P&x<{?UFTEX#-EQGw|@MRBd1o;^3XHE zJ~`vz?4|BI*M#Zvf71Kn>+>w~x#x7Vl{034S?BAyjiqN^9?R{O>T~~Hbogmx=-OC+ zl=;yvkrIu(yoVA`QcTcqge991%6u=%!6Fxz$Yf19Zfj z?}<4G__nW#nCN_XLcH45-t^ViHpoQ=3(nfRm&w9>a*5b^U0`A{G%zrTGEipY)N1o+ z`_9YA$zmwRBJ$>5(;bnN-=bg-CAeg-2%fAeR>1;A*)N5yUFX>O)+59i4JpPG6*t(?I?%nqe zE>!Mb6!_%G!L^x@3luq>m;b)Lo}oUaEX~a$CYmvr+ngFz2?3S?hbngs=SY zOgWzrf9uzV-L^Ac`JG8opZ0pf(%?7$Dzp6UYBp;uE0}%n`@vcctAy5%ue%$njgz?! z-o5-!YTjAR-P~969G-sm(4KJMaurdw^YeEiIkJs>3St?S90o9;|6)&l@g Csb7`= delta 863 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 LLcM6zW|aT{pBG1k delta 729 zcmV;~0w(?7tpVVz0kCia1MtzulXC)118Xn=v%>;`Cj;=&$FoN&Q2`JnZ99M$7s^4G zjpFZ6S4B&+s4Hv=3BM!&00RI70Kc;xHe~?=FaS5Rg*ROT126zLv*kJj0TlBbE8j;% zW}rPdE2Gf6ez8jK{XMh&JAD@vJ$Xv|T02{E$e^1RIgI1_?*jf(la5nCe`7S~;MK@1 z2%m(eY73d*loqzFmV*O_(w~4leWO6Psi#CQJ-Ww2szP&v=HiDfJy0VUZ_x3(eb#vc z!>qL*gY3eaCzz@49fXtYM}!g-59CJTr=^`6<HEzfBWT*`i;TQV;&aCaD15QB7~c98X6-}_$NGPf8Eh8>s#l| zEUtc-2^VQ%#*NCzShSu?7Q!k;hrT9_MLA$v9)?lT&wFltm`YuKiaRT-B0Tvvttoj# zrB&+oBMrGAtpTp)iRoWgn(s3`IW9XYvraa~=fVwXBgD?&!X8tB0_HfA&s5KUG%z_a zI5aX^Fe3&DDuzgg_YDCF1Thu_6sZJSgq;&yV?JmvM z#j_F%MGRYnyU+|jQ!3obBix7{0uuWQv~%dIiBLPSzk7}GCTxWm5UCs(c<2HTNT74B z=bUABOg25_ycks|EDOg)e~N+dR@j#LzES7Pf27D5r_vuVO0o+cES9}QI_OSO8&BXz z?cE(HCW=N2k0xKhVHqqe;C%v4bs?IwCfJe?W)SZ_DQr{agnfOuQCj#VhN=6X`;5#B Lx`1g9KUe?&Pk%)| diff --git a/src/bin/hamcore/pxwfp_x86.sys b/src/bin/hamcore/pxwfp_x86.sys index a40ac4a0ca65ee5ddf0eed6bcdef290061014f3b..28c7526f597cd278c7616a80d2f7fa8834799d40 100644 GIT binary patch delta 728 zcmV;}0w?|8i~-<`0kCia1Cam9lXC)10(pnC!UA#`1Cam9vo{*05G$KC0zppF#s^Lyw{I#<{4=v_3~ZKOUw{51P_e3N2YVGG@90d2QjU9VnNzP&SWEAshms z9Z}QGvs<%{tJi49zye-RF&ni>?J#X(82U|h*iDHCx`jJ?kwktKz$Z1i8E6n))W1bO zhbJiS&E9CRBV}de1h?jYkx04mU01Yi8F(JTzA0;cTDL9-QZrWk2@jGv^IZ%9Osl7L zFULEry+2z}qaDqZu@(ECkxJoW^Fy^>Ki}?Q_gnliKY7CNYbin+-1MIH9z|XXqBieq zbOp-Y$Cq{_`ScL*^3b|i-!8AqjBjElkXQr-yR;Gx{rDxM>voR<3QLnuM9+UVF*z|X zFgaQiEHjd#D5cg4~)1A*BV; zFI=&VkT!u3(f@vExj0X&sx5zms_GlT9vZGM@A$lYy;cLiRKLa&4y(mqUSEWb+l*4G z5dGZQ@VR`59uKg@BP;b()rD1Wu)Nb)EZfz}JI2T7x^jN?SRX3CuOHnw@Qc=$sgXHp zj`92+GA(@%pG07f-pn3!^Ft1pC#ZN@nkv6*lbUrZ!`f&nq2UqNR#QY!79Jw=K;2|? z+43KYJQ+IpOR=oxNZ9Zs8_`DW(cDrb&zccuPC!8OHU41wy@3Z}>~rDv7zmMd_wXf) Kw@x2-SO5USUrBNR delta 728 zcmV;}0w?|8i~-<`0kCia1Cr6llXC)10w$ER!UA#`1Cr6lvo{)05`LRC0zppFaS5R|B zc4wg3AF_Yt*HE7C`Llg1eHRoWaA_)pp!c;p*}+2%q3gseh9uIH4nskIn052U`3Uk^ z+zLXitEQu~R^Ao)X0o=UrempEu^a*&5PwEKr3Gsiq2QJdzY>xa_H*d+UToGx8NQm{ z8?Wu=MMzY>bHH6q-RkQ8GyQ6c--h5QS1k+umFbxI?Duzgg_YDC7 z0R;dAf&ldi(Q$^?wg1j3X zB2qrJn!uDJIlhwK{#)hCApd7{q71*(LOF7umb>h4bR-0GWO?k`K?rm_YjFkZ5yc4U KZNVt@*8l)!SVido diff --git a/src/bin/hamcore/see.sys b/src/bin/hamcore/see.sys index 1e822e8fd9767bf9c19bb8fd294b843bd60796df..12c3500f021d39874092818aae5906d08a8850e2 100644 GIT binary patch delta 726 zcmV;{0xA9A&;sDl0+84Pg8#~q+f4#40<$Us3UUL2|H`vBb43FXy5X;U%6KhGv@045 z5Kn?zvy66#3JJm_000931OURb9f4&512F(FvxS010|PMtFtg2toCg$K2iH;amhCNN z0wbunr-?Mrv_Yq{eT{t=6xHDNrJa&4;sp(AIuat5_5~a0WRni1L4RkT`6NsSxSfeY ze~bbx#-i4Eo&7lq_}HIx6ClST5O@aT_K}9W`rVTCw073A?iNB{J+Fy)%YGJyP=&jo zd;Rb|!2b9t2$A$FikO!79fima!93ksPU;}5N|a5_9FY|HJd7Otc*f$_6taW1#U)Wl z4BTa#wPh@Ypr7^je}98{1m6v2izk?C@c(F{#(s*dw*xKHk-}dt(^|4%^Du!TDbEL3 zXj6+m7OmR&`tYrC8E0#Hgf#GrFj2c2CwLQk4Pc_4h9%qwm1MQ#iVrX$uyb6c2{%%R zaC8HmE0V&C9b&S6a(M3aX)ZF0?0~f9rub~BWfS1Un@#>Q2m-A#lTW74e>O2WFgZ0f zS}-F92`Yw2hW8Bt2?Q|~1Qg4m`ZThCmWaTk1_{^A-nu)t3dArC1_>&LNQUo0FQBAj@J&%u<8#oL`!VIM6PBHe7s;P$gAanmq_ZZP?%98AHnJ>A@ai4Wv(Vt zVY8xmnY7b5@Qk~JsIsQ;e+ap<#~JzztM$i)C5>lC__OklDeq(l`W7u9T&bBEE5e-nVJ`*`c&aedM1xJ)1SNQ8X^Hbc z>(EcEg;E@K0j3Kn3{?^dW;{l@5KldY7S&*c#*+Hn9Yj!WbG?_09tu7={_^Tr+rrOS I2I+bL0OLi_@% delta 726 zcmV;{0xA9A&;sDl0+84Pgwe;5+f4$2fU_zA3UUL4(Z{nlb43FXYhn!A`TMg)ga!bY zY@Bn}vy66#3JJd?000931OUIY9f4&5126zLvxS010|PJsH?z%!oCg%;0+{lMIs<$^ zY*h%9%$h!9^|jNpeT{t=6xKAg#wB_c9s?J*cV0WM@HM*C!IKW9L4Q{hJttVVtUdY; zboZGk$N97pRN)GnSZ@GI*}?-|K%PAQ6)bL=7vX zPfLP{k@s>f%f>qf<9~-qXR>IemSdA|2A8i}0ru#1je~+s&s*N)b(sE~^<1qnci;7+ zPmOI^xD5X+ELGaAjpVPwbHL3_X;woN;Xm5#qe&bOyW~1#!^T@qjR6TR+C*UR zw5;TF*Y?b zS}-F92`Yw2hW8Bt2?Q|~1QflC*iP)YbDa24sbHPyLDIi==MXRr1_>&LNQUo09g!3C~M8$jxzXHv<{>TDCOV!o5Y6Q;BFnghpzcQ%Fh8nYJ@zULw4=;O|_du z<5C=houTa|kETTi>)nM7e{=cTBcNs@!7JmLw(eyUD;(1ACaAgZ7M~&p9*+e_=Ki%T zl4<-%Sw|ZJskCZkC;l8BZbGqx6AebJMNzYKk{jpzVd)$b_>L^MMcWRTqkygR{7o;> zv9W8~`khofC^H-9+w$>07b5P3;pi*#{@gXJdUFmR58Y)vrUd=*SnHtvzls+EC}yKAWWsSGl?la)z(A9 IW|8Co0Qk{Wg#Z8m diff --git a/src/bin/hamcore/see_x64.sys b/src/bin/hamcore/see_x64.sys index 46ad55d2e74ee5d31d9646c03443807d31692e11..682c54e1e8774e16b3b9f6f9ed0897d81f529218 100644 GIT binary patch delta 727 zcmV;|0x139ssiAu0+8SX;Qz{z<4pqzivhDU0dZOb;Qz|Ar(1CY5cX5=$d2_(M6cug zjxv{i+p{QN>=X&YBme*d00aQSvmJD00Ru4rFtdeqRRaSt05G%Nc#HuQ_43hZQd@KK zf%Z?jaF<~?=iM~FvweDf7ZhEIx9#7kS;!%N!@-2FdXTT?#PE|2l0knyRiNFGzXN(W za;D~nla(cOK48Zc-7FVG-T+H#TS24#Ygq>bmS#GtT)rr9YqI3FeJGTs*4b3K17 zYW8<6IXB2vT(T*)lyi0t4v_O00OOa~*MXMm%IObUS|512_XjrN5H+d-=m<_#fFgfD~nL3aJ287LbIZd zR3=R8r_HXb>@U`oh8Oe{?p`em9kkn~#!|i5N0Y1KAD=V?!6_c6q^kVEN+Z^8E$7j= z%o4d~BdKmxdTU1_?K0AbCT_9N%{xfg%%iCNs~{L&wn;CIWaLZ zIa)9y1_>&LNQU#76cR_)P+gT1PzJvjhsYpgN^cHud)>|4F(A+hDe6@4FLfG z1pows0RW!RuZHQtl5CUt#`Z{Cqc&Z%LH)d=*e;?U1ak+N1bUWzd4#ggnOE>5Y{y=l zhg5Db_})cg>z_ED{c3TCy2CN1}<=?xIuDFRS9D8kdq}r@*@?%<02u7mY&J5@3KH0W?Ir` z#=n+pzuF<;25ZnHfP29vQjLB^(PKTNXbbl^wM>XV$*T<4TzwCj#zc>rF_H_J$31~H z%(v0dEqlX;?;q9h@&bGWehIY_jJaCO|p{&a)_A>=X&VBme*d00aQPvmJD00Ru1qH?xIxRRaSs05`MUc#HuQJ2xsGzvE1V z(q*Aoy-op-2M0L2vweDf7ZkMQT7k0&xLmc&LNQU#76cR{N>TFh07(=%B(Bqr?$ftR|&4MDq4)1mCD19XLF7!kYR&4=Q6)nEQ+zE>m! zj-hg)N4`)(&}Nbq;qkQ+AGr=h4tq%$R%byC(;S!`qe?WT z^c#7fKekbrJUfnUQ7Womp~9mgjt8k;oRZC9Z>jie-i!@f?VY2L6utlyeF!1fnHxP< z&3lD+1v_tIPbzA9nZOQC|KouPsRx*Uv#k#?5On1r?%u<}(4te*Jw!U4+|9M@l)$3+ ztS9Pup6GqIYJxOza>c8z#Jav2u{3@`!BrvnN*;x!@c!D_ztl*{lU{+ESpRe^c}1tD JiL2s*003lHPrm>F diff --git a/src/bin/hamcore/time.htm b/src/bin/hamcore/time.htm deleted file mode 100644 index 8b1afe35..00000000 --- a/src/bin/hamcore/time.htm +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -Œ»ÝŽž‚͉½Žž‚Å‚µ‚傤‚©H - - - - - - - - - -
      -

      Œ»ÝŽž‚͉½Žž‚Å‚µ‚傤‚©H

      -

      ‚±‚̃y[ƒW‚ÍAŒ»ÝŽž‚ðƒŠƒAƒ‹ƒ^ƒCƒ€‚Å•\Ž¦‚·‚邽‚ß‚Ì Web ƒy[ƒW‚Å‚·B

      -
        -
      • - Œ»ÝŽž‚ð’m‚邱‚Æ‚ÍAŽÐ‰ï¶Šˆ‚Ìã‚Å‚Æ‚Ä‚à–ð‚É—§‚¿‚Ü‚·B
      • -
      -

      ‚±‚̃y[ƒW‚Í HTTPS Web ƒT[ƒo[‚É‚æ‚Á‚ăzƒXƒg‚³‚ê‚Ä‚¢‚Ü‚·Bhttps ƒvƒƒgƒRƒ‹ (’Êí‚̓|[ƒg 80) - ‚Å‚±‚̃y[ƒW‚ɃAƒNƒZƒX‚·‚邱‚Æ‚ÅAŒ»ÝŽž‚ð’m‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

      Œ»ÝŽž: - $NOW$

      @

      - Œ»ÝŽž‚Ì•\Ž¦‚ðXV‚µ‚½‚¢ê‡‚ÍAƒy[ƒW‚ðÄ“Ç‚Ýž‚Ý‚µ‚Ä‚­‚¾‚³‚¢B

      ‚Æ‚Ä‚à–ð‚É—§‚‚¨Š©‚߃Šƒ“ƒNW‚Å‚·

      - -

      @

      - -


      -
      - HTTPS Server at $HOST$ Port $PORT$
      - - - - diff --git a/src/bin/hamcore/vpn_driver.sys b/src/bin/hamcore/vpn_driver.sys index 58d09d240a7cb66669f28e7e6e54e1171f3ab989..48b55ec2fd026c7c9d88f8be3eb2648f1849f0e4 100644 GIT binary patch delta 728 zcmV;}0w?|8$pPTW0kCKS1AYI>lWPJ^18$lCv%3O`CIfx{%9BSaxex))Wk4Cfi$%A# ztb)&L7@xBcDufmZ!Xy9y0{{d7!n2(~WdQ>*05G!!LS+L3F#s^LZAE+p6hczLERSbX zW}^Iku9G`qHgJ$hPCQpoZJr~zIFIV)A z?ii5(jWsKgARqVrU&(1@c#qwsCF7tCZ5SDD!54OeT~g8$ZPHl- zZ9kes-ffQ7$Tl2*SI04bImcorQJBtoB-b{R)HnbQ2Jt7FXiu;JDXkA67T!m%{|gcG z>halg`lh}q6pjAO$vt#}?g!q~E zV)HyouTr6I_QL_zH4=WBl$KBpt?+gjU@xkm$y#34AnPn%G5YHQFWmaFbxI?Duzgg_YDC7 z0R;dAf&l<_7f~Mpr)QpL@e}GecF{aS{&&u@f8KCEJM-W}HZVZo^+EpSHUcNnH;NV> zH2S-M(}8ut@i~kWIF4ZbS@(ZGQbs#H^eMh05emhI@52fG6`dh84E*Y$7dLlJ4f^;i zVrSadR22ReuY85ANXVC&!xX9q@h`%b?WI&*gS!d49jtg$kACbiIvmBh_Q-vS^ByVJ z%G~>7xIRVsI9eLHL*vibc@I#fX%PH}GAd7gDMi)vOZ)ABb)c(LW6wmUv^JBDZf&G4 zD3^3=MuF%fMbcPOoo$Dwx}6dety((|Wv`=P@vTc$&%$*oKG5l$d3t8xK=jC@FzM^? K50~y9qyPYQ)lW*upqM#DufmZza#(v0{{d7zq6e{WdQ>)05`J*LS+L3FaS5RZAE+p6d)3&OI#pv zPZXg_l#$u`p_L4=jH&`U!;?`O+trS(kdcD>Kn&?2BA(aCM?44*~ICBSo`+oLsErrlOGYyzrv0u*Iytxt_K5-7J(Y7U!`=k9Bj7?nQ zoIm$?+~-Sr0P1YYmJuxj>Y+}NLAR08z+ zg$HyBXaa@Z=%(T1zCu=KAeRSub%2TUssCJK4Gp7!&xqj(W}tZj<^q$?V$XjxFgYokL5!>nMFbxI?Duzgg_YDC7 z0R;dAf&l<)eipnP=g+Bx%H|t~w{S(9T`s0{5lI}M z^Nd(7=1TbxKNF0czPqsBh6Xu!uRLL91UDSup}P|(6WN3{%YyI|!&5{nHwmXRa$~a!Xy9y0{{d7!m}MhWdQ>*05G$KLuCU4F#s^L?M8eA6kE9TS|;Lk z6UQtVIPdE{CQlhrlCynFeHRq8#idv37IPSFkxsKZs|ns5@At2h4r4)onHhk7za(0G z659A}OKJ_c$$(r4d3*sr`Zt28z~J^@nX4WNvXt8~pSgL2Sh3Y$Rv~7+*DTzOf}Ck; z7wP2+Y=0}Qf~$yEcY=>vECFrccgA{f-p#$dFL9eUX#vx|LzR`9x8or`h$E%fn&)Yq zTP7mzWODJifJYVFa#tOHSN@H6b4+hAo7Bk@>}f%)T%uiKGH4R%WhO6n{tIN1+Np^9 zF91z$gbsmA4rMuilF&TT+d$}4)B_I^3LaRY)oTp&ZrkWt98 zVXW3URYYl%B+)AM+`gzaSl}&53#1lU5>q_cXlX(g2g0A|+kYkk_U8FjLpp393xrX@q9 z3I9Wls$79M<+<9$k#B%ko8uxWUkg4kHJ{y~we%`#tar?6VY#`dy+q(}qCF-e2(i*7 z*1`(%jsvNBP!wOhyyVZ-taLgt%8l0TaH={`{+*su0D2>Bn}i6K=ZQov4tVtGhxqOV z=h~b*B{VX7y{x&}Us3$l0v|*7deKFa0_X9C9mpHks1{j>jf70TNodJx&8eH%FF`&Q KqzL_G8UO&>l}-@= delta 728 zcmV;}0w?|8%mLuc0kCKS1DDaqlWPJ^1LHISv%3NbD+8C&$CJk`xe(UwJVGwk|3J3^ z>M9pS%6zksE`$>aza#(v0{{d7zq1`eWdQ>)05`LRLuCU4FaS5R?M8eA6e(!9IoQ~~ zjMx*rqaTI*?(~caVY7WpeHRqonzYUFq^!ECKcFxbLj&`5Se$l~4r4)ooM*b&9l>fF z0Zxdy!%~Q^RSy)m;kCuqp10r%68heLWnJd%ahUIkPp-o{!0OH=a@0VmhgT8(NGtUg z5n%GO0Z{A`dyV}U933!NOfbuNO8>&028j(6%SKnPqY~nnbA=k|XYnzXgFt)zVH>Wy zeZ}=(8CpFNP0j%DWy64fRG6U9RtovMD*Woss8BYbArQ{;I5&}edb!#bh1-7D>pYod zamtk644OOwMjvnPh%Tw#9k=2Aw*vi%8>4#~f8@2jq5&|` zTNp|^gRXMqk<$s7&U{O<&%aMV3s5Z-t@L4~OOkKP(LsPrYHh~?OKFo&WY2#zFgYVqO>l>$g?G0!(c}Q~#JQ#XQ3$*VX&Fq;ca#@DP=~41 z+*DP`m|^Pb^n`UdUqrJ6;pl(g5NLl*Ac(HA``#khY=F+=>&zDxN}f!#gi=3iAYl4- za71N?tOQc|0@wCcb(Cow&BWU5KOvbyK K*j1N8sOlUFXq5a7%CR(Av`K#(Ii zS$)2BMYAj~=pPBfBme*d00aQSvmH-m0Ru4rFtdeFbpr!205G%tQ)~ege2T?A_{SXK zd7~IGvYi4Jcv$q5vwc;47Zd{dK^kbIuw%*Z9#ut+q(rx&2-!% z$h~7v`HyRnksPF3e}u~(vvq6GL(QbICeIS!zu*iCg~&Mq)1Y^Nj6QSbq9)CfILeXe z%&-ATLz3nr>R4Rs^ufy@Aa38-4BY!Um@f>|?}@Y4($7Y$`}^T5T3 z6HQdfCtVuEF^(WzMf0tVs6P@Ev-qYH>hXe7-{4)8M~71${J&S9M%3Fx@#_2)VSyAt z=V$tV;D!*@pUkwS>Ecw@;mDat0OGv5^NdYO$^CFoU#Il=95ou&wn;CIWaLb zIa)9y1_>&LNQU#76cU8q99oS^In;hWft&}Cqst3{*neT4F(A+hDe6@4FLfG z1pows0RU(J_bKb|3S0~TeLnDi9wPD^po=X8u-ux-GHG@Fo=rSmwkC#Xq4=Z3$DLgL zS%ef}ibta@CjcO?)i+SSdw&O*$axfVARMegde^#+u9q0%`5;-FnjV13uIE!Tx~l-k zEuYw}=6;9GvXhamUhK1!7r?}EFDkd4p=?CVi&VE!a`6QKxUmewa|V~;uO z&mdN}%*Prw*7I8=ljmE=8jt_jmkA!jfIBq$pVH7(V~vG38mQCDKt#7O!#d?G(QCM# zbM%;;SJf6oXiTYaRYgJgpDWYJrPNSK$HL{_ZKlu=l6EcWKVgDh(uG+;escrH&&`sw J>aqk|002UoS>XTx delta 727 zcmV;|0x139-~r&^0kCia1NPC!lXC)10_hvG!UB>j1NPC!lUFXq5dX3tQ>mxjOPkki zc1ZS2II}D-=pPBcBme*d00aQPvmH-m0Ru1qH?xIMbpr!105`M!Q)~egwQ)^ZkT98& z!4z*&?{Y&nPtfG=vwc;47Zi0-{cmO@HJL$HBJf6|`ju#qPx_M%Z9#tyRtO=cwH>H& zcZW-opM@;aas^Jd?-Kk8Hq_XyG&y$=|>LQ*nqGv>R;Q%gL(&=?8+L_P) zhVA+UxPkVYb#7s3;(b3cfugEV6i3`#-EVoco$5zYHUFTb6&GK?6)rBcoN`jyyI87K z`vd|izC>K5jBosa!T^8Zu@0xk8Ai~^k9D+hUWF}X>~PF@(4GU)3l#QBY}_y&Io)QX zmPsj}Vo*%BLvkyW!?6$fqk-b2E_(&LNQU#76cSSAF;ITN8vGUIx@1#c_bWc;<~nmJ9AZYdW+M+E zg@9)bR7(QgoaeDMTF{fbk79eqcXBv&WB_~=&7q=e^!FScymDvA*3Q;KCRCNg!u{Mv z%isG;W7&>!|L^bbej_qZ%JmA;-@*05G$KQ*{FaF#s^L{Z?!N6n%f-F~;c6 zt-)ntojs9KZU(o2=d*oSeHRqhJRs6(6V1gXQNp}InJE$I-Fa-24sbz#A|tKJ6BZ2& zW$mjyD@Wl2^@v36Wl177-CX(2kojM&a_P9WhW)6|$v_rTeE1`b{}XljC?92WwU#k4 zBx8M#)aAL-A`!D=uVjkE?+S9cN0xj8*=bB-ra&B_tMgxZpOOPBG%srT| zeBC7uLWn}F*SH6f$)1&eL}4UI2*=v#RiU4%J?UrAg;-ixFp?|se*D*0N7I2&7_AK1 zQFpg%QpFIN$(t(ap@<%8tXh1%t9PWKjI#4dY?LG|isej+GoE7w#;r|pczv?>Dl;tq zfL`^80(EatJ##XLhG8UNYqgL6__;?i?l)L{r4dj2DPjTh4{+UzJxhWXCfE9=gJ)eS+zn3g z$gDh>%pQxh8Gx1mN<2o_m>Ju2jo-48O10(kXAUpK(4;G~7its`OsRrfyWAtCKkEL$+0z@3|ZQ984t8_pXrymMcUhDTz!IOQci< zl`(*=_{cXXN`aBeWc;;w;cM(u44}!X{zJb)zqKomG2uzCf%066M0w#jeilgGt)}>H KDL0cf&j0{v=}*`I delta 728 zcmV;}0w?|8<^ka50kC)i1K!cclY0V91J3LKv&#aBCj;Km$CFno#SrMkCX5cBu1%&a zHcpwwX)05`LRQ*{FaFaS5R{Z?!N6u56#D_O*X zZgE$3d|6}MK<$-0l(T(UeHRo*R-_BeD>3N_Dr@%Sz41jH0v+d*4sbz#1LzP-O0j&D z&Iqw$DA9h-kKvfm%!)aiHuY8sklVI3KE4FJ9A`aa3M=|U_n*-g3Q=J@9(AY*_|8c8*Kst;=GejanFA=FgYR!ma#zEv>~ zZJHzliGdnp1kQ~fYK!x@0ZD%5jaZwm;9-i->{kvZ=rpv$g)(Mim?x(I>s24$h-eN- zlVj!WY>|)UOcOEgBL86~)qU@T$y5v#n{Fk@t8+9ZfVb6Y!-Wm0xm`qIS9{K&e!&J1b{em#?(y;^n*0y2=Rj@`DB KBY#u(b^rh#a6Rt; diff --git a/src/bin/install_src.dat b/src/bin/install_src.dat index 92781ffa..553c049f 100644 --- a/src/bin/install_src.dat +++ b/src/bin/install_src.dat @@ -1 +1 @@ -“c’†I \ No newline at end of file +TanakaJiro!!! \ No newline at end of file diff --git a/src/bin/vpnweb.cab b/src/bin/vpnweb.cab index d71cec207c8105797b478ec797ae4b7ffc9408b6..8140d6abf50d52797b9fd85a1ef3e0d083a12295 100644 GIT binary patch delta 49164 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 OXzw;b24?X90000m#ZT@4 delta 784 zcmV+r1MmE}uoSqk6tEZp19{QMlN$j|0|o8{gKGhYYXJebYXJgjq62x+$G6v`0`)Tx zr;^@RWVQZ9zIjx~CDqSlx7^nPxIhDW(Z{!!7z1cE9#dg-AWC6wATTr_F*rIgHaasm zATls9Gzt>{cG1U&9Zmzc9Zm#OcL~2F000931OUIcdBp@}0Ru1qH@D%&1XTkAFaS5V zIm!euI23c5_w((LG>TE?Kd=AKhft}NyJEL}0tHhN6r_C!vTw~OxWx2$xos;W_ME4- zvX|r(1wns=xzx{y$7D4)>4fn!a={EZP4l~axF8k54&^pdk!dqA21|%LJ@u!-0(CVA zBN?9S&K_OJ#gc7;UvCzyH+gtIO*oRYZIBojSKElg8ul{=(pc!*+Wks8wif@FMRcPa z=;$Y4bJr`=GQl?(Nfh5Od}@*YnHbojj~%4>uJnHuo)ILwzlQ^Z3pr6&V2_ju(U>vE zBoTExk;^G|v;{}CLAkL`+Vz+gj80;9B^%-D z^f&@LmX{?K1Bc5 zJBO2(AQuG`e^VuzAjnedXG?W>h3J2Oe|xClf^eF zr|5z10&n^y08kWq#o}-e#_=53^6;b^xp1Jqgs`MuQL{$twJmRG91%iUJyx7#0ynRjuBUGB${lxo}nye}`MLig5F-1+_TX19L{+-=(-{ zl@`Pj$O0TpbaDNQGZaveGC6WtVrhNm?Cu)QX|aVf(}we#=+2JqSLCx`23#;OSIGi> zUw%}(T-tD`dM>-afQjcuxQjghd;u|Oefy7ZH+|+ O!j-|22HlVV0002GELwU1 diff --git a/src/hamcorebuilder/hamcorebuilder.c b/src/hamcorebuilder/hamcorebuilder.c new file mode 100644 index 00000000..f7be8b4c --- /dev/null +++ b/src/hamcorebuilder/hamcorebuilder.c @@ -0,0 +1,143 @@ +// SoftEther VPN Source Code +// Cedar Communication Module +// +// SoftEther VPN Server, Client and Bridge are free software under GPLv2. +// +// Copyright (c) 2012-2014 Daiyuu Nobori. +// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. +// Copyright (c) 2012-2014 SoftEther Corporation. +// +// All Rights Reserved. +// +// http://www.softether.org/ +// +// Author: Daiyuu Nobori +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +// hamcorebuilder.c +// hamcore.se2 Build Utility + +#include + +#ifdef WIN32 +#include +#include +#include +#include +#include +#include +#include +#endif // WIN32 +#include +#include +#include +#include +#include +#include +#include +#include + + +// main function +int main(int argc, char *argv[]) +{ + MayaquaMinimalMode(); + InitMayaqua(false, false, argc, argv); + InitCedar(); + + Print("hamcore.se2 Build Utility\n"); + Print("Copyright (c) SoftEther VPN Project. All Rights Reserved.\n\n"); + + if (argc < 3) + { + Print("Usage: hamcorebuilder \n\n"); + } + else + { + char *src_dir = argv[1]; + char *dst_filename = argv[2]; + + Print("Src Dir: '%s'\n", src_dir); + Print("Dest Filename: '%s'\n", dst_filename); + + Print("\nProcessing...\n"); + + BuildHamcore(dst_filename, src_dir, true); + + Print("\nDone.\n"); + } + + FreeCedar(); + FreeMayaqua(); + + return 0; +} + + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/makefiles/freebsd_32bit.mak b/src/makefiles/freebsd_32bit.mak index aca1db5c..86873394 100644 --- a/src/makefiles/freebsd_32bit.mak +++ b/src/makefiles/freebsd_32bit.mak @@ -51,6 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o +HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css # Build Action default: build @@ -306,6 +307,16 @@ tmp/objs/Cedar/WinUi.o: src/Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) tmp/objs/Cedar/Wpc.o: src/Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(CC) $(OPTIONS_COMPILE) -c src/Cedar/Wpc.c -o tmp/objs/Cedar/Wpc.o +# hamcore.se2 Archive File +src/bin/BuiltHamcoreFiles/unix/hamcore.se2: tmp/hamcorebuilder $(HAMCORE_FILES) + @mkdir -p src/bin/BuiltHamcoreFiles/unix/ + tmp/hamcorebuilder src/bin/hamcore/ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 + +# hamcorebuilder Utility +tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + @mkdir -p tmp/ + $(CC) $(OPTIONS_COMPILE) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder + # vpnserver bin/vpnserver/vpnserver: tmp/as/vpnserver.a bin/vpnserver/hamcore.se2 $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) $(CC) tmp/as/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver/vpnserver @@ -422,15 +433,21 @@ clean: -rm -f tmp/objs/vpnserver.o -rm -f tmp/as/vpnserver.a -rm -f bin/vpnserver/vpnserver + -rm -f bin/vpnserver/hamcore.se2 -rm -f tmp/objs/vpnclient.o -rm -f tmp/as/vpnclient.a -rm -f bin/vpnclient/vpnclient + -rm -f bin/vpnclient/hamcore.se2 -rm -f tmp/objs/vpnbridge.o -rm -f tmp/as/vpnbridge.a -rm -f bin/vpnbridge/vpnbridge + -rm -f bin/vpnbridge/hamcore.se2 -rm -f tmp/objs/vpncmd.o -rm -f tmp/as/vpncmd.a -rm -f bin/vpncmd/vpncmd + -rm -f bin/vpncmd/hamcore.se2 + -rm -f tmp/hamcorebuilder + -rm -f src/bin/BuiltHamcoreFiles/unix/hamcore.se2 # Help Strings help: diff --git a/src/makefiles/freebsd_64bit.mak b/src/makefiles/freebsd_64bit.mak index f005c431..1626db86 100644 --- a/src/makefiles/freebsd_64bit.mak +++ b/src/makefiles/freebsd_64bit.mak @@ -51,6 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o +HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css # Build Action default: build @@ -306,6 +307,16 @@ tmp/objs/Cedar/WinUi.o: src/Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) tmp/objs/Cedar/Wpc.o: src/Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(CC) $(OPTIONS_COMPILE) -c src/Cedar/Wpc.c -o tmp/objs/Cedar/Wpc.o +# hamcore.se2 Archive File +src/bin/BuiltHamcoreFiles/unix/hamcore.se2: tmp/hamcorebuilder $(HAMCORE_FILES) + @mkdir -p src/bin/BuiltHamcoreFiles/unix/ + tmp/hamcorebuilder src/bin/hamcore/ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 + +# hamcorebuilder Utility +tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + @mkdir -p tmp/ + $(CC) $(OPTIONS_COMPILE) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder + # vpnserver bin/vpnserver/vpnserver: tmp/as/vpnserver.a bin/vpnserver/hamcore.se2 $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) $(CC) tmp/as/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver/vpnserver @@ -422,15 +433,21 @@ clean: -rm -f tmp/objs/vpnserver.o -rm -f tmp/as/vpnserver.a -rm -f bin/vpnserver/vpnserver + -rm -f bin/vpnserver/hamcore.se2 -rm -f tmp/objs/vpnclient.o -rm -f tmp/as/vpnclient.a -rm -f bin/vpnclient/vpnclient + -rm -f bin/vpnclient/hamcore.se2 -rm -f tmp/objs/vpnbridge.o -rm -f tmp/as/vpnbridge.a -rm -f bin/vpnbridge/vpnbridge + -rm -f bin/vpnbridge/hamcore.se2 -rm -f tmp/objs/vpncmd.o -rm -f tmp/as/vpncmd.a -rm -f bin/vpncmd/vpncmd + -rm -f bin/vpncmd/hamcore.se2 + -rm -f tmp/hamcorebuilder + -rm -f src/bin/BuiltHamcoreFiles/unix/hamcore.se2 # Help Strings help: diff --git a/src/makefiles/linux_32bit.mak b/src/makefiles/linux_32bit.mak index f7781c27..44bd0778 100644 --- a/src/makefiles/linux_32bit.mak +++ b/src/makefiles/linux_32bit.mak @@ -51,6 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o +HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css # Build Action default: build @@ -306,6 +307,16 @@ tmp/objs/Cedar/WinUi.o: src/Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) tmp/objs/Cedar/Wpc.o: src/Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(CC) $(OPTIONS_COMPILE) -c src/Cedar/Wpc.c -o tmp/objs/Cedar/Wpc.o +# hamcore.se2 Archive File +src/bin/BuiltHamcoreFiles/unix/hamcore.se2: tmp/hamcorebuilder $(HAMCORE_FILES) + @mkdir -p src/bin/BuiltHamcoreFiles/unix/ + tmp/hamcorebuilder src/bin/hamcore/ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 + +# hamcorebuilder Utility +tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + @mkdir -p tmp/ + $(CC) $(OPTIONS_COMPILE) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder + # vpnserver bin/vpnserver/vpnserver: tmp/as/vpnserver.a bin/vpnserver/hamcore.se2 $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) $(CC) tmp/as/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver/vpnserver @@ -422,15 +433,21 @@ clean: -rm -f tmp/objs/vpnserver.o -rm -f tmp/as/vpnserver.a -rm -f bin/vpnserver/vpnserver + -rm -f bin/vpnserver/hamcore.se2 -rm -f tmp/objs/vpnclient.o -rm -f tmp/as/vpnclient.a -rm -f bin/vpnclient/vpnclient + -rm -f bin/vpnclient/hamcore.se2 -rm -f tmp/objs/vpnbridge.o -rm -f tmp/as/vpnbridge.a -rm -f bin/vpnbridge/vpnbridge + -rm -f bin/vpnbridge/hamcore.se2 -rm -f tmp/objs/vpncmd.o -rm -f tmp/as/vpncmd.a -rm -f bin/vpncmd/vpncmd + -rm -f bin/vpncmd/hamcore.se2 + -rm -f tmp/hamcorebuilder + -rm -f src/bin/BuiltHamcoreFiles/unix/hamcore.se2 # Help Strings help: diff --git a/src/makefiles/linux_64bit.mak b/src/makefiles/linux_64bit.mak index 3d7b3cc0..537651af 100644 --- a/src/makefiles/linux_64bit.mak +++ b/src/makefiles/linux_64bit.mak @@ -51,6 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o +HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css # Build Action default: build @@ -306,6 +307,16 @@ tmp/objs/Cedar/WinUi.o: src/Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) tmp/objs/Cedar/Wpc.o: src/Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(CC) $(OPTIONS_COMPILE) -c src/Cedar/Wpc.c -o tmp/objs/Cedar/Wpc.o +# hamcore.se2 Archive File +src/bin/BuiltHamcoreFiles/unix/hamcore.se2: tmp/hamcorebuilder $(HAMCORE_FILES) + @mkdir -p src/bin/BuiltHamcoreFiles/unix/ + tmp/hamcorebuilder src/bin/hamcore/ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 + +# hamcorebuilder Utility +tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + @mkdir -p tmp/ + $(CC) $(OPTIONS_COMPILE) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder + # vpnserver bin/vpnserver/vpnserver: tmp/as/vpnserver.a bin/vpnserver/hamcore.se2 $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) $(CC) tmp/as/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver/vpnserver @@ -422,15 +433,21 @@ clean: -rm -f tmp/objs/vpnserver.o -rm -f tmp/as/vpnserver.a -rm -f bin/vpnserver/vpnserver + -rm -f bin/vpnserver/hamcore.se2 -rm -f tmp/objs/vpnclient.o -rm -f tmp/as/vpnclient.a -rm -f bin/vpnclient/vpnclient + -rm -f bin/vpnclient/hamcore.se2 -rm -f tmp/objs/vpnbridge.o -rm -f tmp/as/vpnbridge.a -rm -f bin/vpnbridge/vpnbridge + -rm -f bin/vpnbridge/hamcore.se2 -rm -f tmp/objs/vpncmd.o -rm -f tmp/as/vpncmd.a -rm -f bin/vpncmd/vpncmd + -rm -f bin/vpncmd/hamcore.se2 + -rm -f tmp/hamcorebuilder + -rm -f src/bin/BuiltHamcoreFiles/unix/hamcore.se2 # Help Strings help: diff --git a/src/makefiles/macos_32bit.mak b/src/makefiles/macos_32bit.mak index d74fafef..816f4515 100644 --- a/src/makefiles/macos_32bit.mak +++ b/src/makefiles/macos_32bit.mak @@ -51,6 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o +HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css # Build Action default: build @@ -306,6 +307,16 @@ tmp/objs/Cedar/WinUi.o: src/Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) tmp/objs/Cedar/Wpc.o: src/Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(CC) $(OPTIONS_COMPILE) -c src/Cedar/Wpc.c -o tmp/objs/Cedar/Wpc.o +# hamcore.se2 Archive File +src/bin/BuiltHamcoreFiles/unix/hamcore.se2: tmp/hamcorebuilder $(HAMCORE_FILES) + @mkdir -p src/bin/BuiltHamcoreFiles/unix/ + tmp/hamcorebuilder src/bin/hamcore/ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 + +# hamcorebuilder Utility +tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + @mkdir -p tmp/ + $(CC) $(OPTIONS_COMPILE) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder + # vpnserver bin/vpnserver/vpnserver: tmp/as/vpnserver.a bin/vpnserver/hamcore.se2 $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) $(CC) tmp/as/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver/vpnserver @@ -422,15 +433,21 @@ clean: -rm -f tmp/objs/vpnserver.o -rm -f tmp/as/vpnserver.a -rm -f bin/vpnserver/vpnserver + -rm -f bin/vpnserver/hamcore.se2 -rm -f tmp/objs/vpnclient.o -rm -f tmp/as/vpnclient.a -rm -f bin/vpnclient/vpnclient + -rm -f bin/vpnclient/hamcore.se2 -rm -f tmp/objs/vpnbridge.o -rm -f tmp/as/vpnbridge.a -rm -f bin/vpnbridge/vpnbridge + -rm -f bin/vpnbridge/hamcore.se2 -rm -f tmp/objs/vpncmd.o -rm -f tmp/as/vpncmd.a -rm -f bin/vpncmd/vpncmd + -rm -f bin/vpncmd/hamcore.se2 + -rm -f tmp/hamcorebuilder + -rm -f src/bin/BuiltHamcoreFiles/unix/hamcore.se2 # Help Strings help: diff --git a/src/makefiles/macos_64bit.mak b/src/makefiles/macos_64bit.mak index c7ccc472..fb0bfbc3 100644 --- a/src/makefiles/macos_64bit.mak +++ b/src/makefiles/macos_64bit.mak @@ -51,6 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o +HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css # Build Action default: build @@ -306,6 +307,16 @@ tmp/objs/Cedar/WinUi.o: src/Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) tmp/objs/Cedar/Wpc.o: src/Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(CC) $(OPTIONS_COMPILE) -c src/Cedar/Wpc.c -o tmp/objs/Cedar/Wpc.o +# hamcore.se2 Archive File +src/bin/BuiltHamcoreFiles/unix/hamcore.se2: tmp/hamcorebuilder $(HAMCORE_FILES) + @mkdir -p src/bin/BuiltHamcoreFiles/unix/ + tmp/hamcorebuilder src/bin/hamcore/ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 + +# hamcorebuilder Utility +tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + @mkdir -p tmp/ + $(CC) $(OPTIONS_COMPILE) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder + # vpnserver bin/vpnserver/vpnserver: tmp/as/vpnserver.a bin/vpnserver/hamcore.se2 $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) $(CC) tmp/as/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver/vpnserver @@ -422,15 +433,21 @@ clean: -rm -f tmp/objs/vpnserver.o -rm -f tmp/as/vpnserver.a -rm -f bin/vpnserver/vpnserver + -rm -f bin/vpnserver/hamcore.se2 -rm -f tmp/objs/vpnclient.o -rm -f tmp/as/vpnclient.a -rm -f bin/vpnclient/vpnclient + -rm -f bin/vpnclient/hamcore.se2 -rm -f tmp/objs/vpnbridge.o -rm -f tmp/as/vpnbridge.a -rm -f bin/vpnbridge/vpnbridge + -rm -f bin/vpnbridge/hamcore.se2 -rm -f tmp/objs/vpncmd.o -rm -f tmp/as/vpncmd.a -rm -f bin/vpncmd/vpncmd + -rm -f bin/vpncmd/hamcore.se2 + -rm -f tmp/hamcorebuilder + -rm -f src/bin/BuiltHamcoreFiles/unix/hamcore.se2 # Help Strings help: diff --git a/src/makefiles/solaris_32bit.mak b/src/makefiles/solaris_32bit.mak index bf327336..09598bdf 100644 --- a/src/makefiles/solaris_32bit.mak +++ b/src/makefiles/solaris_32bit.mak @@ -51,6 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o +HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css # Build Action default: build @@ -306,6 +307,16 @@ tmp/objs/Cedar/WinUi.o: src/Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) tmp/objs/Cedar/Wpc.o: src/Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(CC) $(OPTIONS_COMPILE) -c src/Cedar/Wpc.c -o tmp/objs/Cedar/Wpc.o +# hamcore.se2 Archive File +src/bin/BuiltHamcoreFiles/unix/hamcore.se2: tmp/hamcorebuilder $(HAMCORE_FILES) + @mkdir -p src/bin/BuiltHamcoreFiles/unix/ + tmp/hamcorebuilder src/bin/hamcore/ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 + +# hamcorebuilder Utility +tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + @mkdir -p tmp/ + $(CC) $(OPTIONS_COMPILE) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder + # vpnserver bin/vpnserver/vpnserver: tmp/as/vpnserver.a bin/vpnserver/hamcore.se2 $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) $(CC) tmp/as/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver/vpnserver @@ -422,15 +433,21 @@ clean: -rm -f tmp/objs/vpnserver.o -rm -f tmp/as/vpnserver.a -rm -f bin/vpnserver/vpnserver + -rm -f bin/vpnserver/hamcore.se2 -rm -f tmp/objs/vpnclient.o -rm -f tmp/as/vpnclient.a -rm -f bin/vpnclient/vpnclient + -rm -f bin/vpnclient/hamcore.se2 -rm -f tmp/objs/vpnbridge.o -rm -f tmp/as/vpnbridge.a -rm -f bin/vpnbridge/vpnbridge + -rm -f bin/vpnbridge/hamcore.se2 -rm -f tmp/objs/vpncmd.o -rm -f tmp/as/vpncmd.a -rm -f bin/vpncmd/vpncmd + -rm -f bin/vpncmd/hamcore.se2 + -rm -f tmp/hamcorebuilder + -rm -f src/bin/BuiltHamcoreFiles/unix/hamcore.se2 # Help Strings help: diff --git a/src/makefiles/solaris_64bit.mak b/src/makefiles/solaris_64bit.mak index 1860deb0..63678e91 100644 --- a/src/makefiles/solaris_64bit.mak +++ b/src/makefiles/solaris_64bit.mak @@ -51,6 +51,7 @@ HEADERS_MAYAQUA=src/Mayaqua/Cfg.h src/Mayaqua/cryptoki.h src/Mayaqua/Encrypt.h s HEADERS_CEDAR=src/Cedar/Account.h src/Cedar/Admin.h src/Cedar/AzureClient.h src/Cedar/AzureServer.h src/Cedar/Bridge.h src/Cedar/BridgeUnix.h src/Cedar/BridgeWin32.h src/Cedar/Cedar.h src/Cedar/CedarPch.h src/Cedar/CedarType.h src/Cedar/Client.h src/Cedar/CM.h src/Cedar/CMInner.h src/Cedar/Command.h src/Cedar/Connection.h src/Cedar/Console.h src/Cedar/Database.h src/Cedar/DDNS.h src/Cedar/EM.h src/Cedar/EMInner.h src/Cedar/EtherLog.h src/Cedar/Hub.h src/Cedar/Interop_OpenVPN.h src/Cedar/Interop_SSTP.h src/Cedar/IPsec.h src/Cedar/IPsec_EtherIP.h src/Cedar/IPsec_IKE.h src/Cedar/IPsec_IkePacket.h src/Cedar/IPsec_IPC.h src/Cedar/IPsec_L2TP.h src/Cedar/IPsec_PPP.h src/Cedar/IPsec_Win7.h src/Cedar/IPsec_Win7Inner.h src/Cedar/Layer3.h src/Cedar/Link.h src/Cedar/Listener.h src/Cedar/Logging.h src/Cedar/Nat.h src/Cedar/NativeStack.h src/Cedar/netcfgn.h src/Cedar/netcfgx.h src/Cedar/NM.h src/Cedar/NMInner.h src/Cedar/NullLan.h src/Cedar/Protocol.h src/Cedar/Radius.h src/Cedar/Remote.h src/Cedar/Sam.h src/Cedar/SecureInfo.h src/Cedar/SecureNAT.h src/Cedar/SeLowUser.h src/Cedar/Server.h src/Cedar/Session.h src/Cedar/SM.h src/Cedar/SMInner.h src/Cedar/SW.h src/Cedar/SWInner.h src/Cedar/UdpAccel.h src/Cedar/UT.h src/Cedar/VG.h src/Cedar/Virtual.h src/Cedar/VLan.h src/Cedar/VLanUnix.h src/Cedar/VLanWin32.h src/Cedar/WaterMark.h src/Cedar/WebUI.h src/Cedar/Win32Com.h src/Cedar/winpcap/bittypes.h src/Cedar/winpcap/bucket_lookup.h src/Cedar/winpcap/count_packets.h src/Cedar/winpcap/Devioctl.h src/Cedar/winpcap/Gnuc.h src/Cedar/winpcap/ip6_misc.h src/Cedar/winpcap/memory_t.h src/Cedar/winpcap/normal_lookup.h src/Cedar/winpcap/Ntddndis.h src/Cedar/winpcap/Ntddpack.h src/Cedar/winpcap/Packet32.h src/Cedar/winpcap/pcap.h src/Cedar/winpcap/pcap-bpf.h src/Cedar/winpcap/pcap-int.h src/Cedar/winpcap/pcap-stdinc.h src/Cedar/winpcap/pthread.h src/Cedar/winpcap/remote-ext.h src/Cedar/winpcap/sched.h src/Cedar/winpcap/semaphore.h src/Cedar/winpcap/tcp_session.h src/Cedar/winpcap/time_calls.h src/Cedar/winpcap/tme.h src/Cedar/winpcap/Win32-Extensions.h src/Cedar/WinUi.h src/Cedar/Wpc.h OBJECTS_MAYAQUA=tmp/objs/Mayaqua/Cfg.o tmp/objs/Mayaqua/Encrypt.o tmp/objs/Mayaqua/FileIO.o tmp/objs/Mayaqua/Internat.o tmp/objs/Mayaqua/Kernel.o tmp/objs/Mayaqua/Mayaqua.o tmp/objs/Mayaqua/Memory.o tmp/objs/Mayaqua/Microsoft.o tmp/objs/Mayaqua/Network.o tmp/objs/Mayaqua/Object.o tmp/objs/Mayaqua/OS.o tmp/objs/Mayaqua/Pack.o tmp/objs/Mayaqua/Secure.o tmp/objs/Mayaqua/Str.o tmp/objs/Mayaqua/Table.o tmp/objs/Mayaqua/TcpIp.o tmp/objs/Mayaqua/Tick64.o tmp/objs/Mayaqua/Tracking.o tmp/objs/Mayaqua/Unix.o tmp/objs/Mayaqua/Win32.o OBJECTS_CEDAR=tmp/objs/Cedar/Account.o tmp/objs/Cedar/Admin.o tmp/objs/Cedar/AzureClient.o tmp/objs/Cedar/AzureServer.o tmp/objs/Cedar/Bridge.o tmp/objs/Cedar/BridgeUnix.o tmp/objs/Cedar/BridgeWin32.o tmp/objs/Cedar/Cedar.o tmp/objs/Cedar/CedarPch.o tmp/objs/Cedar/Client.o tmp/objs/Cedar/CM.o tmp/objs/Cedar/Command.o tmp/objs/Cedar/Connection.o tmp/objs/Cedar/Console.o tmp/objs/Cedar/Database.o tmp/objs/Cedar/DDNS.o tmp/objs/Cedar/EM.o tmp/objs/Cedar/EtherLog.o tmp/objs/Cedar/Hub.o tmp/objs/Cedar/Interop_OpenVPN.o tmp/objs/Cedar/Interop_SSTP.o tmp/objs/Cedar/IPsec.o tmp/objs/Cedar/IPsec_EtherIP.o tmp/objs/Cedar/IPsec_IKE.o tmp/objs/Cedar/IPsec_IkePacket.o tmp/objs/Cedar/IPsec_IPC.o tmp/objs/Cedar/IPsec_L2TP.o tmp/objs/Cedar/IPsec_PPP.o tmp/objs/Cedar/IPsec_Win7.o tmp/objs/Cedar/Layer3.o tmp/objs/Cedar/Link.o tmp/objs/Cedar/Listener.o tmp/objs/Cedar/Logging.o tmp/objs/Cedar/Nat.o tmp/objs/Cedar/NativeStack.o tmp/objs/Cedar/NM.o tmp/objs/Cedar/NullLan.o tmp/objs/Cedar/Protocol.o tmp/objs/Cedar/Radius.o tmp/objs/Cedar/Remote.o tmp/objs/Cedar/Sam.o tmp/objs/Cedar/SecureInfo.o tmp/objs/Cedar/SecureNAT.o tmp/objs/Cedar/SeLowUser.o tmp/objs/Cedar/Server.o tmp/objs/Cedar/Session.o tmp/objs/Cedar/SM.o tmp/objs/Cedar/SW.o tmp/objs/Cedar/UdpAccel.o tmp/objs/Cedar/UT.o tmp/objs/Cedar/VG.o tmp/objs/Cedar/Virtual.o tmp/objs/Cedar/VLan.o tmp/objs/Cedar/VLanUnix.o tmp/objs/Cedar/VLanWin32.o tmp/objs/Cedar/WaterMark.o tmp/objs/Cedar/WebUI.o tmp/objs/Cedar/WinUi.o tmp/objs/Cedar/Wpc.o +HAMCORE_FILES=src/bin/hamcore/backup_dir_readme.txt src/bin/hamcore/empty.config src/bin/hamcore/empty_sevpnclient.config src/bin/hamcore/eula.txt src/bin/hamcore/install_src.dat src/bin/hamcore/lang.config src/bin/hamcore/languages.txt src/bin/hamcore/legal.txt src/bin/hamcore/openvpn_readme.pdf src/bin/hamcore/openvpn_readme.txt src/bin/hamcore/openvpn_sample.ovpn src/bin/hamcore/SOURCES_OF_BINARY_FILES.TXT src/bin/hamcore/strtable_cn.stb src/bin/hamcore/strtable_en.stb src/bin/hamcore/strtable_ja.stb src/bin/hamcore/vpnweb_sample_cn.htm src/bin/hamcore/vpnweb_sample_en.htm src/bin/hamcore/vpnweb_sample_ja.htm src/bin/hamcore/warning_cn.txt src/bin/hamcore/warning_en.txt src/bin/hamcore/warning_ja.txt src/bin/hamcore/webui/cryptcom.cgi src/bin/hamcore/webui/edituser.cgi src/bin/hamcore/webui/error.cgi src/bin/hamcore/webui/hub.cgi src/bin/hamcore/webui/license.cgi src/bin/hamcore/webui/listener.cgi src/bin/hamcore/webui/localbridge.cgi src/bin/hamcore/webui/login.cgi src/bin/hamcore/webui/newhub.cgi src/bin/hamcore/webui/redirect.cgi src/bin/hamcore/webui/securenat.cgi src/bin/hamcore/webui/server.cgi src/bin/hamcore/webui/session.cgi src/bin/hamcore/webui/user.cgi src/bin/hamcore/webui/webui.css # Build Action default: build @@ -306,6 +307,16 @@ tmp/objs/Cedar/WinUi.o: src/Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) tmp/objs/Cedar/Wpc.o: src/Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(CC) $(OPTIONS_COMPILE) -c src/Cedar/Wpc.c -o tmp/objs/Cedar/Wpc.o +# hamcore.se2 Archive File +src/bin/BuiltHamcoreFiles/unix/hamcore.se2: tmp/hamcorebuilder $(HAMCORE_FILES) + @mkdir -p src/bin/BuiltHamcoreFiles/unix/ + tmp/hamcorebuilder src/bin/hamcore/ src/bin/BuiltHamcoreFiles/unix/hamcore.se2 + +# hamcorebuilder Utility +tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + @mkdir -p tmp/ + $(CC) $(OPTIONS_COMPILE) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder + # vpnserver bin/vpnserver/vpnserver: tmp/as/vpnserver.a bin/vpnserver/hamcore.se2 $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) $(CC) tmp/as/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver/vpnserver @@ -422,15 +433,21 @@ clean: -rm -f tmp/objs/vpnserver.o -rm -f tmp/as/vpnserver.a -rm -f bin/vpnserver/vpnserver + -rm -f bin/vpnserver/hamcore.se2 -rm -f tmp/objs/vpnclient.o -rm -f tmp/as/vpnclient.a -rm -f bin/vpnclient/vpnclient + -rm -f bin/vpnclient/hamcore.se2 -rm -f tmp/objs/vpnbridge.o -rm -f tmp/as/vpnbridge.a -rm -f bin/vpnbridge/vpnbridge + -rm -f bin/vpnbridge/hamcore.se2 -rm -f tmp/objs/vpncmd.o -rm -f tmp/as/vpncmd.a -rm -f bin/vpncmd/vpncmd + -rm -f bin/vpncmd/hamcore.se2 + -rm -f tmp/hamcorebuilder + -rm -f src/bin/BuiltHamcoreFiles/unix/hamcore.se2 # Help Strings help: diff --git a/src/vpn16/Net01.ico b/src/vpn16/Net01.ico new file mode 100644 index 0000000000000000000000000000000000000000..22bef5878cbdcfb96e7a6cb92f01992ca70f4b70 GIT binary patch literal 1078 zcmc&zF>b>!3_M#!ogs+*1A8j+ilk4<3letenlB0H>PL9&=q(Nhup2l1!^Un9j zdE0-Ucm8{nozxEZu~?NlbR0-I3+_TC%4MC@N5zHBKuFmc$zWvDnQk|fG5X`Rb~mSwsZRTj}gk#*o`lCsApXFfZ_{DC+>p) literal 0 HcmV?d00001 diff --git a/src/vpn16/Resource.h b/src/vpn16/Resource.h new file mode 100644 index 00000000..9714d56f --- /dev/null +++ b/src/vpn16/Resource.h @@ -0,0 +1,17 @@ +//{{NO_DEPENDENCIES}} +// App Studio generated include file. +// Used by VPN16.RC +// +#define IDI_ICON2 102 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS + +#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/src/vpn16/Vpn16.def b/src/vpn16/Vpn16.def new file mode 100644 index 00000000..b331b7a0 --- /dev/null +++ b/src/vpn16/Vpn16.def @@ -0,0 +1,8 @@ +NAME VPN16 +EXETYPE WINDOWS +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE MULTIPLE +HEAPSIZE 1024 + +EXPORTS +; ===List your explicitly exported functions here=== diff --git a/src/vpn16/Vpn16.mak b/src/vpn16/Vpn16.mak new file mode 100644 index 00000000..6ab27867 --- /dev/null +++ b/src/vpn16/Vpn16.mak @@ -0,0 +1,86 @@ +# Microsoft Visual C++ generated build script - Do not modify + +PROJ = VPN16 +DEBUG = 0 +PROGTYPE = 0 +CALLER = +ARGS = +DLLS = +D_RCDEFINES = -d_DEBUG +R_RCDEFINES = -dNDEBUG +ORIGIN = MSVC +ORIGIN_VER = 1.00 +PROJPATH = C:\dev\vpn\vpn16\ +USEMFC = 0 +CC = cl +CPP = cl +CXX = cl +CCREATEPCHFLAG = +CPPCREATEPCHFLAG = +CUSEPCHFLAG = +CPPUSEPCHFLAG = +FIRSTC = +FIRSTCPP = +RC = rc +CFLAGS_D_WEXE = /nologo /W3 /FR /G2 /Zi /D_DEBUG /Od /AM /GA /Fd"VPN16.PDB" /I "C:\98DDK\inc\win98\inc16" /I "C:\98DDK\inc\win98" +CFLAGS_R_WEXE = /nologo /W3 /FR /O1 /DNDEBUG /AM /GA /I "C:\98DDK\inc\win98\inc16" /I "C:\98DDK\inc\win98" +LFLAGS_D_WEXE = /NOLOGO /ONERROR:NOEXE /NOD /PACKC:61440 /CO /ALIGN:16 /STACK:10240 +LFLAGS_R_WEXE = /NOLOGO /ONERROR:NOEXE /NOD /PACKC:61440 /ALIGN:16 /STACK:10240 +LIBS_D_WEXE = oldnames libw commdlg shell olecli olesvr winnls mlibcew C:\98DDK\lib\win98\setupx +LIBS_R_WEXE = oldnames libw commdlg shell olecli olesvr winnls mlibcew C:\98DDK\lib\win98\setupx +RCFLAGS = /nologo +RESFLAGS = /nologo +RUNFLAGS = +DEFFILE = VPN16.DEF +OBJS_EXT = +LIBS_EXT = +!if "$(DEBUG)" == "1" +CFLAGS = $(CFLAGS_D_WEXE) +LFLAGS = $(LFLAGS_D_WEXE) +LIBS = $(LIBS_D_WEXE) +MAPFILE = nul +RCDEFINES = $(D_RCDEFINES) +!else +CFLAGS = $(CFLAGS_R_WEXE) +LFLAGS = $(LFLAGS_R_WEXE) +LIBS = $(LIBS_R_WEXE) +MAPFILE = nul +RCDEFINES = $(R_RCDEFINES) +!endif +!if [if exist MSVC.BND del MSVC.BND] +!endif +SBRS = VPN16.SBR + + +VPN16_DEP = c:\dev\vpn\vpn16\vpn16.h + + +all: $(PROJ).EXE $(PROJ).BSC + +VPN16.OBJ: VPN16.C $(VPN16_DEP) + $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c VPN16.C + + +$(PROJ).EXE:: VPN16.OBJ $(OBJS_EXT) $(DEFFILE) + echo >NUL @<<$(PROJ).CRF +VPN16.OBJ + +$(OBJS_EXT) +$(PROJ).EXE +$(MAPFILE) +c:\msvc\lib\+ +c:\msvc\mfc\lib\+ +$(LIBS) +$(DEFFILE); +<< + link $(LFLAGS) @$(PROJ).CRF + $(RC) $(RESFLAGS) vpn16.rc $(PROJ).EXE + + +run: $(PROJ).EXE + $(PROJ) $(RUNFLAGS) + + +$(PROJ).BSC: $(SBRS) + bscmake @<< +/o$@ $(SBRS) +<< diff --git a/src/vpn16/Vpn16.rc b/src/vpn16/Vpn16.rc new file mode 100644 index 00000000..1a8208e7 --- /dev/null +++ b/src/vpn16/Vpn16.rc @@ -0,0 +1,57 @@ +//Microsoft App Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// + +///////////////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + + +////////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +IDI_ICON2 ICON DISCARDABLE "NET01.ICO" +#ifdef APSTUDIO_INVOKED +////////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +///////////////////////////////////////////////////////////////////////////////////// +#endif // APSTUDIO_INVOKED + + +#ifndef APSTUDIO_INVOKED +//////////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/src/vpn16/Vpn16.vcw b/src/vpn16/Vpn16.vcw new file mode 100644 index 00000000..09695cd0 --- /dev/null +++ b/src/vpn16/Vpn16.vcw @@ -0,0 +1,6 @@ +[MSVC Status File] +Version=1.00 +ProjectType=10 +External=0 +BrkptCount=0 +WatchCount=0 diff --git a/src/vpn16/vpn16.c b/src/vpn16/vpn16.c new file mode 100644 index 00000000..9b64b9a0 --- /dev/null +++ b/src/vpn16/vpn16.c @@ -0,0 +1,461 @@ +// SoftEther VPN Source Code +// 16-bit Driver Install Utility for Windows 9x +// +// SoftEther VPN Server, Client and Bridge are free software under GPLv2. +// +// Copyright (c) 2012-2014 Daiyuu Nobori. +// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. +// Copyright (c) 2012-2014 SoftEther Corporation. +// +// All Rights Reserved. +// +// http://www.softether.org/ +// +// Author: Daiyuu Nobori +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +// vpn16.c +// 16-bit Driver Install Utility for Windows 9x + +// ---------------------------------------------------------------------------------- +// A part of this file is from Microsoft Windows 98 DDK. +// Copyright (c) 1996, Microsoft Corporation. All Rights Reserved. +// +// Windows 98 Driver Development Kit License.txt: +// * SAMPLE CODE. You may modify the sample source code ("Sample Code") +// included with the SOFTWARE PRODUCT to design, develop and test your Application. +// ---------------------------------------------------------------------------------- + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "vpn16.h" + +void GetDirFromPath(char *dst, char *src) +{ + char str[MAX_PATH]; + int i,len; + char c; + char tmp[MAX_PATH]; + int wp; + if (src) + { + strcpy(str, src); + } + else + { + strcpy(str, dst); + } + NukuEn(str, NULL); + wp = 0; + len = strlen(str); + dst[0] = 0; + for (i = 0;i < len;i++) + { + c = str[i]; + switch (c) + { + case '\\': + tmp[wp] = 0; + wp = 0; + strcat(dst, tmp); + strcat(dst, "\\"); + break; + default: + tmp[wp] = c; + wp++; + break; + } + } + NukuEn(dst, NULL); +} + +void NukuEn(char *dst, char *src) +{ + char str[MAX_PATH]; + int i; + if (src) + { + strcpy(str, src); + } + else + { + strcpy(str, dst); + } + i = strlen(str); + if (str[i - 1] == '\\') + { + str[i - 1] = 0; + } + strcpy(dst, str); +} + +void Print(char *fmt, ...) +{ + char tmp[260]; + va_list args; + if (fmt == NULL) + { + return; + } + + va_start(args, fmt); + _vsnprintf(tmp, sizeof(tmp), fmt, args); + + MessageBox(NULL, tmp, "SoftEther VPN 16-bit Utility", MB_ICONEXCLAMATION); + va_end(args); +} + +BOOL IsFile(char *name) +{ + HFILE h; + if (name == NULL) + { + return FALSE; + } + + h = _lopen(name, OF_READ); + if (h == HFILE_ERROR) + { + return FALSE; + } + _lclose(h); + + return TRUE; +} + +void InstallMain(char *name) +{ + char sysdir[MAX_PATH]; + char windir[MAX_PATH]; + char infdir[MAX_PATH]; + char otherdir[MAX_PATH]; + char infname[MAX_PATH]; + char deviceid[MAX_PATH]; + char sysname[MAX_PATH]; + if (name == NULL) + { + return; + } + if (strlen(name) == 0 || strlen(name) >= 5) + { + return; + } + + GetSystemDirectory(sysdir, sizeof(sysdir)); + + GetDirFromPath(windir, sysdir); + + sprintf(infdir, "%s\\inf", windir); + + sprintf(otherdir, "%s\\other", infdir); + + sprintf(infname, "%s\\Neo_%s.inf", infdir, name); + + sprintf(sysname, "%s\\Neo_%s.sys", sysdir, name); + + sprintf(deviceid, "NeoAdapter_%s", name); + + if (IsFile(infname) == FALSE) + { + Print("Failed to open %s.", infname); + return; + } + if (IsFile(sysname) == FALSE) + { + Print("Failed to open %s.", sysname); + return; + } + + if (DiInstallClass(infname, 0) != OK) + { + Print("Failed to register %s.\n", infname); + return; + } + + if (InstallNDIDevice("Net", deviceid, NULL, NULL) != OK) + { + return; + } +} + +void Test() +{ + char *inf = "c:\\windows\\inf\\other\\Neo_TEST.inf"; + + if (DiInstallClass(inf, 0) == OK) + { + Print("DiInstallClass Ok."); + if (InstallNDIDevice("Net", "NeoAdapter_TEST", NULL, NULL) == OK) + { + Print("InstallNDIDevice Ok.\n"); + } + else + { + Print("InstallNDIDevice Failed.\n"); + } + } + else + { + Print("DiInstallClass Failed. "); + } +} + +RETERR InstallNDIDevice(const char* szClass, + const char* szDeviceID, + const char* szDriverPath, + const char* szRegPath) +{ + char *szClassNetProtocol = "NetTrans"; + char *szClassNet = "Net"; + char *szClassNetClient = "NetClient"; + char *szClassNetService = "NetService"; + char *szNull = ""; + char *szClassNetInfFileName = "Net.inf"; + char *szClassNetTransInfFileName = "Nettrans.inf"; + char *szClassNetClientInfFileName = "Netcli.inf"; + char *szClassNetServiceInfFileName = "Netservr.inf"; + char *szRegKeyNdi = "Ndi"; + char *szRegKeyBindings = "Bindings"; + char *szRegValDeviceID = "DeviceID"; + char *szRegValDriverDesc = "DriverDesc"; + char *szRegValCompatibleIDs = REGSTR_VAL_COMPATIBLEIDS; + char *szRegPathNetwork = "Enum\\Network\\"; + char *szRegPathFilter = "Enum\\Filter\\"; + char *szRegPathTemp = "\\Temp"; + char *szVServer = "VSERVER"; + LPDEVICE_INFO lpdi = NULL; + RETERR err = OK; + + err = DiCreateDeviceInfo( &lpdi, NULL, 0, NULL, NULL, szClass, NULL ); + + if (err == OK) + { + HKEY hKeyTmp; + + lpdi->hRegKey = HKEY_LOCAL_MACHINE; + lstrcpy( lpdi->szRegSubkey, szRegPathNetwork ); + lstrcat( lpdi->szRegSubkey, lpdi->szClassName ); + lstrcat( lpdi->szRegSubkey, szRegPathTemp ); + + err = DiCreateDevRegKey( lpdi, &hKeyTmp, NULL, NULL, DIREG_DEV ); + + if (err == OK) + { + if (SURegSetValueEx(hKeyTmp, + szRegValCompatibleIDs, + 0, + REG_SZ, + (unsigned char *) szDeviceID, + lstrlen( szDeviceID ) + 1 ) == ERROR_SUCCESS ) + { + if ( szDriverPath ) + { + if ( lpdi->atDriverPath = GlobalAddAtom( szDriverPath ) ) + lpdi->Flags |= DI_ENUMSINGLEINF; + } + + err = DiBuildCompatDrvList( lpdi ); + + SURegCloseKey( hKeyTmp ); + + DiDeleteDevRegKey( lpdi, DIREG_DEV ); + lpdi->hRegKey = NULL; + lstrcpy( lpdi->szRegSubkey, szNull ); + + if ( err || !lpdi->lpCompatDrvList ) + { + err = DiSelectDevice( lpdi ); + } + else + { + lpdi->lpSelectedDriver = lpdi->lpCompatDrvList; + } + + if ( err == OK ) + { + if ( szRegPath ) + { + lpdi->hRegKey = HKEY_LOCAL_MACHINE; + lstrcpy( lpdi->szRegSubkey, szRegPath ); + + DiCreateDevRegKey( lpdi, &hKeyTmp, NULL, NULL, DIREG_DEV ); + } + + lpdi->Flags |= DI_NOVCP | DI_NOFILECOPY | DI_QUIETINSTALL; + err = DiCallClassInstaller( DIF_INSTALLDEVICE, lpdi ); + } + else + { + DiDestroyDeviceInfoList( lpdi ); + } + } + else + { + DiDeleteDevRegKey( lpdi, DIREG_DEV ); + DiDestroyDeviceInfoList( lpdi ); + } + } + else + { + DiDestroyDeviceInfoList( lpdi ); + } + } + + return err; +} + +BOOL IsSafeChar(char c) +{ + UINT i, len; + char *check_str = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + " ()-_#%&."; + + len = strlen(check_str); + for (i = 0;i < len;i++) + { + if (c == check_str[i]) + { + return TRUE; + } + } + return FALSE; +} + +BOOL IsSafeStr(char *str) +{ + UINT i, len; + if (str == NULL) + { + return FALSE; + } + + len = strlen(str); + for (i = 0;i < len;i++) + { + if (IsSafeChar(str[i]) == FALSE) + { + return FALSE; + } + } + if (str[0] == ' ') + { + return FALSE; + } + if (len != 0) + { + if (str[len - 1] == ' ') + { + return FALSE; + } + } + return TRUE; +} + +// WinMain +int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR CmdLine32, int CmdShow) +{ + char CmdLine[MAX_PATH]; + UINT wp; + wp = 0; + while (TRUE) + { + CmdLine[wp++] = *CmdLine32; + if (*CmdLine32 == 0) + { + break; + } + CmdLine32++; + + } + if (strlen(CmdLine) == 0 || strlen(CmdLine) >= 5 || IsSafeStr(CmdLine) == FALSE) + { + Print("Please execute VPN Client Connection Manager."); + } + else + { + InstallMain(CmdLine); + } + return 0; +} + + + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/vpn16/vpn16.h b/src/vpn16/vpn16.h new file mode 100644 index 00000000..940ef723 --- /dev/null +++ b/src/vpn16/vpn16.h @@ -0,0 +1,106 @@ +// SoftEther VPN Source Code +// 16-bit Driver Install Utility for Windows 9x +// +// SoftEther VPN Server, Client and Bridge are free software under GPLv2. +// +// Copyright (c) 2012-2014 Daiyuu Nobori. +// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan. +// Copyright (c) 2012-2014 SoftEther Corporation. +// +// All Rights Reserved. +// +// http://www.softether.org/ +// +// Author: Daiyuu Nobori +// Comments: Tetsuo Sugiyama, Ph.D. +// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// version 2 as published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License version 2 +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE +// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE. +// +// +// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, +// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, +// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS +// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS +// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER +// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL +// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, +// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR +// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND +// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO +// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, +// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION +// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN +// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE. +// +// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS +// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES +// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER +// COUNTRIES MIGHT BE RESTRICTED. +// +// +// DEAR SECURITY EXPERTS +// --------------------- +// +// If you find a bug or a security vulnerability please kindly inform us +// about the problem immediately so that we can fix the security problem +// to protect a lot of users around the world as soon as possible. +// +// Our e-mail address for security reports is: +// softether-vpn-security [at] softether.org +// +// Please note that the above e-mail address is not a technical support +// inquiry address. If you need technical assistance, please visit +// http://www.softether.org/ and ask your question on the users forum. +// +// Thank you for your cooperation. + + +// vpn16.h +// 16-bit Driver Install Utility for Windows 9x + +#ifndef VPN16_H +#define VPN16_H + +void Test(); +void Print(char *fmt, ...); +RETERR InstallNDIDevice(const char* szClass, + const char* szDeviceID, + const char* szDriverPath, + const char* szRegPath); +void InstallMain(char *name); +void GetDirFromPath(char *dst, char *src); +void NukuEn(char *dst, char *src); +BOOL IsFile(char *name); +BOOL IsSafeStr(char *str); +BOOL IsSafeChar(char c); + +#endif // VPN16_H + + + +// Developed by SoftEther VPN Project at University of Tsukuba in Japan. +// Department of Computer Science has dozens of overly-enthusiastic geeks. +// Join us: http://www.tsukuba.ac.jp/english/admission/ diff --git a/src/vpnweb/vpnweb.h b/src/vpnweb/vpnweb.h index 568a52a6..f8867df1 100644 --- a/src/vpnweb/vpnweb.h +++ b/src/vpnweb/vpnweb.h @@ -4,7 +4,7 @@ /* File created by MIDL compiler version 7.00.0500 */ -/* at Sat Jan 04 19:11:13 2014 +/* at Tue Jan 07 04:51:49 2014 */ /* Compiler settings for .\vpnweb.idl: Oicf, W1, Zp8, env=Win32 (32b run) diff --git a/src/vpnweb/vpnweb_i.c b/src/vpnweb/vpnweb_i.c index a697e54f..2e4e5c42 100644 --- a/src/vpnweb/vpnweb_i.c +++ b/src/vpnweb/vpnweb_i.c @@ -6,7 +6,7 @@ /* File created by MIDL compiler version 7.00.0500 */ -/* at Sat Jan 04 19:11:13 2014 +/* at Tue Jan 07 04:51:49 2014 */ /* Compiler settings for .\vpnweb.idl: Oicf, W1, Zp8, env=Win32 (32b run) diff --git a/src/vpnweb/vpnweb_p.c b/src/vpnweb/vpnweb_p.c index df03dabe..884c6962 100644 --- a/src/vpnweb/vpnweb_p.c +++ b/src/vpnweb/vpnweb_p.c @@ -4,7 +4,7 @@ /* File created by MIDL compiler version 7.00.0500 */ -/* at Sat Jan 04 19:11:13 2014 +/* at Tue Jan 07 04:51:49 2014 */ /* Compiler settings for .\vpnweb.idl: Oicf, W1, Zp8, env=Win32 (32b run)

      X4WFV7EswqIZEow+fE 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°X=*gw=<(7}O{fX`O3KYh+lBxc@F478FzDiZ* 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